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

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

Merge "Add BacktraceOffline for offline backtracing."

parents a951a82d c9c6b6ee
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,12 @@ struct ucontext;
typedef ucontext ucontext_t;
typedef ucontext ucontext_t;
#endif
#endif


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

class Backtrace {
class Backtrace {
public:
public:
  // Create the correct Backtrace object based on what is to be unwound.
  // 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.
  // 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);
  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();
  virtual ~Backtrace();


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


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


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


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

  virtual ~BacktraceMap();
  virtual ~BacktraceMap();


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


LOCAL_STRIP_MODULE := $($(module)_strip_module)

ifeq ($(build_type),target)
ifeq ($(build_type),target)
  ifneq (,$(filter $(LOCAL_SHARED_LIBRARIES),libLLVM))
    LLVM_ROOT_PATH := external/llvm
    include $(LLVM_ROOT_PATH)/llvm.mk
    include $(LLVM_DEVICE_BUILD_MK)
  endif
  include $(BUILD_$(build_target))
  include $(BUILD_$(build_target))
endif
endif


@@ -77,6 +84,11 @@ ifeq ($(build_type),host)
  # Only build if host builds are supported.
  # Only build if host builds are supported.
  ifeq ($(build_host),true)
  ifeq ($(build_host),true)
    LOCAL_CFLAGS += -Wno-extern-c-compat -fno-omit-frame-pointer
    LOCAL_CFLAGS += -Wno-extern-c-compat -fno-omit-frame-pointer
    ifneq (,$(filter $(LOCAL_SHARED_LIBRARIES),libLLVM))
      LLVM_ROOT_PATH := external/llvm
      include $(LLVM_ROOT_PATH)/llvm.mk
      include $(LLVM_HOST_BUILD_MK)
    endif
    include $(BUILD_HOST_$(build_target))
    include $(BUILD_HOST_$(build_target))
  endif
  endif
endif
endif
+10 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ libbacktrace_common_conlyflags := \


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


# The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists.
# The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists.
libbacktrace_common_clang_cflags += \
libbacktrace_common_clang_cflags += \
@@ -44,6 +45,7 @@ libbacktrace_src_files := \
	Backtrace.cpp \
	Backtrace.cpp \
	BacktraceCurrent.cpp \
	BacktraceCurrent.cpp \
	BacktraceMap.cpp \
	BacktraceMap.cpp \
	BacktraceOffline.cpp \
	BacktracePtrace.cpp \
	BacktracePtrace.cpp \
	thread_utils.c \
	thread_utils.c \
	ThreadEntry.cpp \
	ThreadEntry.cpp \
@@ -53,6 +55,7 @@ libbacktrace_src_files := \


libbacktrace_shared_libraries := \
libbacktrace_shared_libraries := \
	libbase \
	libbase \
	libLLVM \
	liblog \
	liblog \
	libunwind \
	libunwind \


@@ -86,6 +89,8 @@ libbacktrace_test_cflags := \
libbacktrace_test_src_files := \
libbacktrace_test_src_files := \
	backtrace_testlib.c \
	backtrace_testlib.c \


libbacktrace_test_strip_module := false

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


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


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


backtrace_test_strip_module := false

module := backtrace_test
module := backtrace_test
module_tag := debug
module_tag := debug
build_type := target
build_type := target
+6 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@
#include <cutils/threads.h>
#include <cutils/threads.h>


#include "BacktraceLog.h"
#include "BacktraceLog.h"
#include "BacktraceOffline.h"
#include "thread_utils.h"
#include "thread_utils.h"
#include "UnwindCurrent.h"
#include "UnwindCurrent.h"
#include "UnwindPtrace.h"
#include "UnwindPtrace.h"
@@ -140,3 +141,8 @@ Backtrace* Backtrace::Create(pid_t pid, pid_t tid, BacktraceMap* map) {
    return new UnwindPtrace(pid, tid, map);
    return new UnwindPtrace(pid, tid, map);
  }
  }
}
}

Backtrace* Backtrace::CreateOffline(pid_t pid, pid_t tid, BacktraceMap* map,
                                    const backtrace_stackinfo_t& stack, bool cache_file) {
  return new BacktraceOffline(pid, tid, map, stack, cache_file);
}
Loading