diff --git a/display/Android.bp b/display/Android.bp
new file mode 100644
index 0000000..4ca3636
--- /dev/null
+++ b/display/Android.bp
@@ -0,0 +1,10 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+sh_binary {
+    name: "dump_display_userdebug.sh",
+    src: "dump_display_userdebug.sh",
+    vendor: true,
+    sub_dir: "dump",
+}
diff --git a/display/dump.mk b/display/dump.mk
new file mode 100644
index 0000000..a1519c3
--- /dev/null
+++ b/display/dump.mk
@@ -0,0 +1,3 @@
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/display/sepolicy
+
+PRODUCT_PACKAGES_DEBUG += dump_display_userdebug.sh
diff --git a/display/dump_display_userdebug.sh b/display/dump_display_userdebug.sh
new file mode 100644
index 0000000..b66a4fe
--- /dev/null
+++ b/display/dump_display_userdebug.sh
@@ -0,0 +1,22 @@
+#!/vendor/bin/sh
+echo "------ HWC Fence States ------"
+for f in $(ls /data/vendor/log/hwc/*_hwc_fence_state*.txt)
+do
+  echo $f
+  cat $f
+done
+
+echo "------ HWC Error Logs ------"
+for f in $(ls /data/vendor/log/hwc/*_hwc_error_log*.txt)
+do
+  echo $f
+  cat $f
+done
+
+echo "------ HWC Debug Dumps ------"
+for f in $(ls /data/vendor/log/hwc/*_hwc_debug*.dump)
+do
+  echo $f
+  cat $f
+done
+
diff --git a/display/sepolicy/dump_display_userdebug.te b/display/sepolicy/dump_display_userdebug.te
new file mode 100644
index 0000000..a3f83bb
--- /dev/null
+++ b/display/sepolicy/dump_display_userdebug.te
@@ -0,0 +1,8 @@
+pixel_bugreport(dump_display_userdebug)
+
+userdebug_or_eng(`
+  allow dump_display_userdebug vendor_toolbox_exec:file execute_no_trans;
+  allow dump_display_userdebug vendor_log_file:dir search;
+  allow dump_display_userdebug vendor_hwc_log_file:dir r_dir_perms;
+  allow dump_display_userdebug vendor_hwc_log_file:file r_file_perms;
+')
diff --git a/display/sepolicy/file.te b/display/sepolicy/file.te
new file mode 100644
index 0000000..bc43f3a
--- /dev/null
+++ b/display/sepolicy/file.te
@@ -0,0 +1 @@
+type vendor_hwc_log_file, file_type, data_file_type;
diff --git a/display/sepolicy/file_contexts b/display/sepolicy/file_contexts
new file mode 100644
index 0000000..bd9bb34
--- /dev/null
+++ b/display/sepolicy/file_contexts
@@ -0,0 +1,4 @@
+/vendor/bin/dump/dump_display_userdebug\.sh      u:object_r:dump_display_userdebug_exec:s0
+
+/data/vendor/log/hwc(/.*)?                       u:object_r:vendor_hwc_log_file:s0
+
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 <dump/pixel_dump.h>
+#include <android-base/properties.h>
+#include <android-base/file.h>
+
+#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
+
diff --git a/insmod/include/dump/pixel_dump.h b/insmod/include/dump/pixel_dump.h
index bf74efa..4d67d15 100644
--- a/insmod/include/dump/pixel_dump.h
+++ b/insmod/include/dump/pixel_dump.h
@@ -10,5 +10,6 @@
 void runCommand(const char* title, const char* cmd);
 std::string concatenatePath(const char* folder, const char* file);
 void dumpLogs(const char* SrcDir, const char* DestDir, int limit, const char* prefix);
+void copyFile(const char* SrcDir, const char* DestDir);
 
 #endif  // DEVICE_GOOGLE_GS_COMMON_INSMOD_INCLUDE_DUMP_PIXEL_DUMP_H_
diff --git a/insmod/pixel_dump.cpp b/insmod/pixel_dump.cpp
index db7fe3b..3bf3d6e 100644
--- a/insmod/pixel_dump.cpp
+++ b/insmod/pixel_dump.cpp
@@ -83,10 +83,7 @@
         }
 
         copiedFiles++;
-
-        std::ifstream src(concatenatePath(SrcDir, dirent_list[i]->d_name).c_str(), std::ios::binary);
-        std::ofstream dst(concatenatePath(DestDir, dirent_list[i]->d_name).c_str(), std::ios::binary);
-        dst << src.rdbuf();
+        copyFile(concatenatePath(SrcDir, dirent_list[i]->d_name).c_str(), concatenatePath(DestDir, dirent_list[i]->d_name).c_str());
     }
 
     while (num_entries--) {
@@ -96,3 +93,11 @@
     free(dirent_list);
     return;
 }
+
+void copyFile(const char* SrcDir, const char* DestDir) {
+    std::ifstream src(SrcDir, std::ios::binary);
+    std::ofstream dst(DestDir, std::ios::binary);
+    dst << src.rdbuf();
+    return;
+}
+
