diff options
-rw-r--r-- | packaging/crash-worker.spec | 9 | ||||
-rw-r--r-- | src/crash-stack/CMakeLists.txt | 30 | ||||
-rw-r--r-- | src/crash-stack/crash-stack-aarch64.c | 24 |
3 files changed, 14 insertions, 49 deletions
diff --git a/packaging/crash-worker.spec b/packaging/crash-worker.spec index 20f6898..b385024 100644 --- a/packaging/crash-worker.spec +++ b/packaging/crash-worker.spec @@ -21,17 +21,14 @@ BuildRequires: pkgconfig(iniparser) BuildRequires: pkgconfig(capi-system-info) BuildRequires: pkgconfig(glib-2.0) BuildRequires: cmake -%if %{with sys_assert} -BuildRequires: pkgconfig(libunwind) -%endif + +BuildRequires: pkgconfig(libunwind-ptrace) %if "%{TIZEN_FEATURE_PTRACE_CALLSTACK}" == "on" BuildRequires: libelf-devel libelf BuildRequires: libebl-devel libebl BuildRequires: libdw-devel libdw %endif -%ifarch %{arm} -BuildRequires: pkgconfig(libunwind-ptrace) -%endif + %if %{with doc} BuildRequires: doxygen %endif diff --git a/src/crash-stack/CMakeLists.txt b/src/crash-stack/CMakeLists.txt index 499c9dc..807d898 100644 --- a/src/crash-stack/CMakeLists.txt +++ b/src/crash-stack/CMakeLists.txt @@ -4,37 +4,29 @@ option(WITH_CORE_DUMP "builds with support for core dump files (with GPL2 licens set(CRASH_STACK_BIN "crash-stack") # Common source code files -set(CRASH_STACK_SRCS crash-stack.c) +set(CRASH_STACK_SRCS crash-stack.c crash-stack-libunw.c) # Add architecture dependent source files if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-aarch64.c) - set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-libelf-helpers.c) -else() - set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-libunw.c) - - if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l") - set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-arm.c) +elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l") + set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-arm.c) - elseif ((${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") - OR (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")) - set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-x86.c) +elseif ((${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") + OR (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")) + set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-x86.c) - else() - set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-stub.c) - endif() +else() + set(CRASH_STACK_SRCS ${CRASH_STACK_SRCS} crash-stack-stub.c) endif() # Binary add_executable(${CRASH_STACK_BIN} ${CRASH_STACK_SRCS}) -# Set architecture dependent options for the binary - it must be already added -if (NOT (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")) - include(FindPkgConfig) - pkg_check_modules(LIBUNWIND_PTRACE REQUIRED libunwind-ptrace) - set_property(TARGET ${CRASH_STACK_BIN} APPEND_STRING PROPERTY COMPILE_FLAGS ${LIBUNWIND_PTRACE_CFLAGS_OTHER}) -endif() +include(FindPkgConfig) +pkg_check_modules(LIBUNWIND_PTRACE REQUIRED libunwind-ptrace) +set_property(TARGET ${CRASH_STACK_BIN} APPEND_STRING PROPERTY COMPILE_FLAGS ${LIBUNWIND_PTRACE_CFLAGS_OTHER}) # Set compilation options for core dump support if (${WITH_CORE_DUMP} STREQUAL "ON") diff --git a/src/crash-stack/crash-stack-aarch64.c b/src/crash-stack/crash-stack-aarch64.c index 420cb9b..3209356 100644 --- a/src/crash-stack/crash-stack-aarch64.c +++ b/src/crash-stack/crash-stack-aarch64.c @@ -61,30 +61,6 @@ void _crash_stack_set_ptrace_registers(void *regbuf) memcpy(_get_place_for_register_value("x30", 0), ®s->regs[30], sizeof(regs->regs[30])); } -void _create_crash_stack(Dwfl *dwfl, Elf *core, pid_t pid, Mappings *mappings, Callstack *callstack) -{ - callstack->elems = 0; - callstack->proc[callstack->elems++].addr = g_regs.pc; - callstack->proc[callstack->elems++].addr = g_regs.x30; - - bool end = false; - - do { - uint64_t newx29, newx30; - bool read29 = _crash_stack_libelf_read_value(dwfl, core, pid, - g_regs.x29, - &newx29, sizeof(newx29), mappings); - bool read30 = _crash_stack_libelf_read_value(dwfl, core, pid, - g_regs.x29 + sizeof(newx29), - &newx30, sizeof(newx30), mappings); - if (read29 && read30) { - callstack->proc[callstack->elems++].addr = newx30; - g_regs.x29 = newx29; - } - else end = true; - } while (!end); -} - void *_get_place_for_register_value(const char *regname, int regnum) { if (strcmp(regname, "pc") == 0 || REG_PC == regnum) |