summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKunhoon Baik <knhoon.baik@samsung.com>2016-12-27 22:00:35 +0900
committerSunmin Lee <sunm.lee@samsung.com>2016-12-27 16:06:47 -0800
commit8e3dae0b649c19e51d76e2af6cea8ebcb6eb4a78 (patch)
tree83178a97b8700969f729bf897de8230ac1ddfbef
parent7435d1df3bd919fe6b0f9c3cb0399dbe545d2686 (diff)
downloadcrash-worker-8e3dae0b649c19e51d76e2af6cea8ebcb6eb4a78.tar.gz
crash-worker-8e3dae0b649c19e51d76e2af6cea8ebcb6eb4a78.tar.bz2
crash-worker-8e3dae0b649c19e51d76e2af6cea8ebcb6eb4a78.zip
crash-stack: libunwind used on aarch64
Make use of "ptrace: Add support for GETREGSET" patch to libunwind https://lists.nongnu.org/archive/html/libunwind-devel/2016-07/msg00001.html Depends-On: I2e720e6697fbc1facf1d7547b398f5665b17731e Change-Id: I0ce3886d271c9b78d2a44b99a628ccc502e6e400
-rw-r--r--packaging/crash-worker.spec9
-rw-r--r--src/crash-stack/CMakeLists.txt30
-rw-r--r--src/crash-stack/crash-stack-aarch64.c24
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), &regs->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)