Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65744003 authored by Yabin Cui's avatar Yabin Cui Committed by Gerrit Code Review
Browse files

Merge "Revert "Revert "Revert "Revert "Add BacktraceOffline for offline backtracing."""""

parents 216442e6 9e402bb2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ debuggerd_c_includes := \
debuggerd_cpp_flags := \
    $(common_cppflags) \
    -Wno-missing-field-initializers \
    -fno-rtti \

# Only build the host tests on linux.
ifeq ($(HOST_OS),linux)
+14 −0
Original line number Diff line number Diff line
@@ -52,6 +52,12 @@ struct ucontext;
typedef ucontext ucontext_t;
#endif

struct backtrace_stackinfo_t {
  uint64_t start;
  uint64_t end;
  const uint8_t* data;
};

class Backtrace {
public:
  // Create the correct Backtrace object based on what is to be unwound.
@@ -66,6 +72,14 @@ public:
  // If map is not NULL, the map is still owned by the caller.
  static Backtrace* Create(pid_t pid, pid_t tid, BacktraceMap* map = NULL);

  // Create an offline Backtrace object that can be used to do an unwind without a process
  // that is still running. If cache_file is set to true, then elf information will be cached
  // for this call. The cached information survives until the calling process ends. This means
  // that subsequent calls to create offline Backtrace objects will continue to use the same
  // cache. It also assumes that the elf files used for each offline unwind are the same.
  static Backtrace* CreateOffline(pid_t pid, pid_t tid, BacktraceMap* map,
                                  const backtrace_stackinfo_t& stack, bool cache_file = false);

  virtual ~Backtrace();

  // Get the current stack trace and store in the backtrace_ structure.
+3 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@

#include <deque>
#include <string>
#include <vector>

struct backtrace_map_t {
  uintptr_t start = 0;
@@ -48,6 +49,8 @@ public:
  // is unsupported.
  static BacktraceMap* Create(pid_t pid, bool uncached = false);

  static BacktraceMap* Create(pid_t pid, const std::vector<backtrace_map_t>& maps);

  virtual ~BacktraceMap();

  // Fill in the map data structure for the given address.
+4 −0
Original line number Diff line number Diff line
@@ -69,7 +69,10 @@ LOCAL_LDLIBS := \
    $($(module)_ldlibs) \
    $($(module)_ldlibs_$(build_type)) \

LOCAL_STRIP_MODULE := $($(module)_strip_module)

ifeq ($(build_type),target)
  include $(LLVM_DEVICE_BUILD_MK)
  include $(BUILD_$(build_target))
endif

@@ -77,6 +80,7 @@ ifeq ($(build_type),host)
  # Only build if host builds are supported.
  ifeq ($(build_host),true)
    LOCAL_CFLAGS += -Wno-extern-c-compat -fno-omit-frame-pointer
    include $(LLVM_HOST_BUILD_MK)
    include $(BUILD_HOST_$(build_target))
  endif
endif
+25 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ libbacktrace_common_conlyflags := \

libbacktrace_common_cppflags := \
	-std=gnu++11 \
	-I external/libunwind/include/tdep \

# The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists.
libbacktrace_common_clang_cflags += \
@@ -37,6 +38,9 @@ build_host := true
endif
endif

LLVM_ROOT_PATH := external/llvm
include $(LLVM_ROOT_PATH)/llvm.mk

#-------------------------------------------------------------------------
# The libbacktrace library.
#-------------------------------------------------------------------------
@@ -44,6 +48,7 @@ libbacktrace_src_files := \
	Backtrace.cpp \
	BacktraceCurrent.cpp \
	BacktraceMap.cpp \
	BacktraceOffline.cpp \
	BacktracePtrace.cpp \
	thread_utils.c \
	ThreadEntry.cpp \
@@ -56,6 +61,20 @@ libbacktrace_shared_libraries := \
	liblog \
	libunwind \

# Use shared llvm library on device to save space.
libbacktrace_shared_libraries_target := \
	libLLVM \

# Use static llvm libraries on host to remove dependency on 32-bit llvm shared library
# which is not included in the prebuilt.
libbacktrace_static_libraries_host := \
	libLLVMObject \
	libLLVMBitReader \
	libLLVMMC \
	libLLVMMCParser \
	libLLVMCore \
	libLLVMSupport \

libbacktrace_ldlibs_host := \
	-lpthread \
	-lrt \
@@ -86,6 +105,8 @@ libbacktrace_test_cflags := \
libbacktrace_test_src_files := \
	backtrace_testlib.c \

libbacktrace_test_strip_module := false

module := libbacktrace_test
module_tag := debug
build_type := target
@@ -107,6 +128,7 @@ backtrace_test_cflags_target := \
	-DENABLE_PSS_TESTS \

backtrace_test_src_files := \
	backtrace_offline_test.cpp \
	backtrace_test.cpp \
	GetPss.cpp \
	thread_utils.c \
@@ -120,6 +142,7 @@ backtrace_test_shared_libraries := \
	libbacktrace \
	libbase \
	libcutils \
	libunwind \

backtrace_test_shared_libraries_target += \
	libdl \
@@ -127,6 +150,8 @@ backtrace_test_shared_libraries_target += \
backtrace_test_ldlibs_host += \
	-ldl \

backtrace_test_strip_module := false

module := backtrace_test
module_tag := debug
build_type := target
Loading