[debug-only/non-production] Fix libbacktrace integration on arm/64
Fixes stacktraces for debug builds on Android.
This does not have any effect on in-tree Android builds
or any form of official build.
Bug: 76169489
Change-Id: Id8883e0980ae10e9f1934a73f27f34547cbe1948
diff --git a/buildtools/BUILD.gn b/buildtools/BUILD.gn
index 836a8a3..1a4106d 100644
--- a/buildtools/BUILD.gn
+++ b/buildtools/BUILD.gn
@@ -555,15 +555,12 @@
source_set("libbacktrace") {
sources = [
- "libbacktrace/backtrace.c",
"libbacktrace/dwarf.c",
"libbacktrace/elf.c",
"libbacktrace/fileline.c",
"libbacktrace/mmap.c",
"libbacktrace/mmapio.c",
"libbacktrace/posix.c",
- "libbacktrace/print.c",
- "libbacktrace/simple.c",
"libbacktrace/sort.c",
"libbacktrace/state.c",
]
diff --git a/buildtools/libbacktrace_config/config.h b/buildtools/libbacktrace_config/config.h
index 0ced426..4ad1082 100644
--- a/buildtools/libbacktrace_config/config.h
+++ b/buildtools/libbacktrace_config/config.h
@@ -17,14 +17,18 @@
#ifndef BUILDTOOLS_LIBBACKTRACE_CONFIG_CONFIG_H_
#define BUILDTOOLS_LIBBACKTRACE_CONFIG_CONFIG_H_
+#if defined(__i386__) || defined(__ARMEL__)
+#define BACKTRACE_ELF_SIZE 32
+#else
#define BACKTRACE_ELF_SIZE 64
+#endif
+
#define BACKTRACE_XCOFF_SIZE unused
#define HAVE_ATOMIC_FUNCTIONS 1
#define HAVE_CLOCK_GETTIME 1
#define HAVE_DECL_STRNLEN 1
#define HAVE_DLFCN_H 1
#define HAVE_FCNTL 1
-#define HAVE_GETIPINFO 1
#define HAVE_INTTYPES_H 1
#define HAVE_LSTAT 1
#define HAVE_MEMORY_H 1
@@ -40,6 +44,7 @@
#define HAVE_UNISTD_H 1
#define HAVE_LINK_H 1
#define STDC_HEADERS 1
+#define HAVE_DL_ITERATE_PHDR 1
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
diff --git a/src/base/debug_crash_stack_trace.cc b/src/base/debug_crash_stack_trace.cc
index d32f941..116acb7 100644
--- a/src/base/debug_crash_stack_trace.cc
+++ b/src/base/debug_crash_stack_trace.cc
@@ -143,9 +143,6 @@
#endif
for (uint8_t i = 0; i < unwind_state.frame_count; i++) {
- Print("\n#");
- PrintHex(i);
- Print(" ");
struct SymbolInfo {
char sym_name[255];
char file_name[255];
@@ -173,6 +170,10 @@
strncpy(sym.sym_name, dl_info.dli_sname, sizeof(sym.sym_name));
#endif
+ Print("\n#");
+ PrintHex(i);
+ Print(" ");
+
if (sym.sym_name[0]) {
int ignored;
size_t len = kDemangledNameLen;