diff --git a/gxp/Android.bp b/gxp/Android.bp new file mode 100644 index 0000000..f3683fc --- /dev/null +++ b/gxp/Android.bp @@ -0,0 +1,19 @@ +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +cc_binary { + name: "dump_gxp", + srcs: ["dump_gxp.cpp"], + cflags: [ + "-Wall", + "-Wextra", + "-Werror", + ], + shared_libs: [ + "libbase", + "libdump", + ], + vendor: true, + relative_install_path: "dump", +} diff --git a/gxp/dump.mk b/gxp/dump.mk new file mode 100644 index 0000000..c1f6300 --- /dev/null +++ b/gxp/dump.mk @@ -0,0 +1,4 @@ +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/gxp/sepolicy/ + +PRODUCT_PACKAGES_DEBUG += dump_gxp + diff --git a/gxp/dump_gxp.cpp b/gxp/dump_gxp.cpp new file mode 100644 index 0000000..80730fa --- /dev/null +++ b/gxp/dump_gxp.cpp @@ -0,0 +1,36 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include +#include + +#define maxGxpDebugDumps 8 + +int main() { + if(::android::base::GetBoolProperty("vendor.gxp.attach_to_bugreport", false)) { + std::string outputDir = concatenatePath(BUGREPORT_PACKING_DIR, "gxp_ssrdump"); + printf("Creating %s", outputDir.c_str()); + if (mkdir(outputDir.c_str(), 0777) == -1) { + printf("Unable to create folder: %s\n", outputDir.c_str()); + return 0; + } + + dumpLogs("/data/vendor/ssrdump/coredump", outputDir.c_str(), maxGxpDebugDumps, "coredump_gxp_"); + dumpLogs("/data/vendor/ssrdump", outputDir.c_str(), maxGxpDebugDumps, "crashinfo_gxp_"); + } + return 0; +} + diff --git a/gxp/sepolicy/dump_gxp.te b/gxp/sepolicy/dump_gxp.te new file mode 100644 index 0000000..61a0482 --- /dev/null +++ b/gxp/sepolicy/dump_gxp.te @@ -0,0 +1,11 @@ +pixel_bugreport(dump_gxp) + +userdebug_or_eng(` + allow dump_gxp radio_vendor_data_file:dir create_dir_perms; + allow dump_gxp radio_vendor_data_file:file create_file_perms; + allow dump_gxp sscoredump_vendor_data_coredump_file:dir r_dir_perms; + allow dump_gxp sscoredump_vendor_data_coredump_file:file r_file_perms; + allow dump_gxp sscoredump_vendor_data_crashinfo_file:dir r_dir_perms; + allow dump_gxp sscoredump_vendor_data_crashinfo_file:file r_file_perms; +') + diff --git a/gxp/sepolicy/file_contexts b/gxp/sepolicy/file_contexts new file mode 100644 index 0000000..80420f4 --- /dev/null +++ b/gxp/sepolicy/file_contexts @@ -0,0 +1,2 @@ +/vendor/bin/dump/dump_gxp u:object_r:dump_gxp_exec:s0 +