diff --git a/CMakeLists.txt b/CMakeLists.txt index cc3c253..71e236c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,7 +44,7 @@ message(STATUS "Version: ${VERSION_TAG}") add_definitions("-DVERSION=${VERSION_TAG}") set(CMAKE_CXX_STANDARD 17) -add_definitions("-std=c++17") # the above does not work for clang. +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") # the above does not work for clang. add_definitions("-Wall -Wextra -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE") # Adding frame pointers makes things easy to run performance measurements with, diff --git a/heap.c b/heap.c index ea9272d..b88b299 100644 --- a/heap.c +++ b/heap.c @@ -344,13 +344,7 @@ getframe(void ***bp, void ***ip) { "ret;" ); } -#elif defined(__aarch64__) || defined(__arm__) -void -getframe(void ***bp, void ***ip) { - //XXX: TODO: support aarch64 -} -#else - +#elif defined(__i386__) static void __attribute__((naked,noinline,optimize("O0"))) getframe(void ***bp, void ***ip) { asm("mov (%esp), %ecx;" @@ -360,6 +354,19 @@ getframe(void ***bp, void ***ip) { "mov %ebp, (%edx);" "ret;"); } +#elif defined(__aarch64__) +static void __attribute__((naked,noinline,optimize("O0"))) +getframe(void ***bp, void ***ip) { + asm( + "mov x0, x29;" + "mov x1, x30;" + "ret;"); +} +#else +void +getframe(void ***bp, void ***ip) { + //XXX: TODO: support other relevant archs +} #endif static void getstacktrace(void **ents, int max_ents) { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7c7b040..a525fed 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -6,8 +6,9 @@ project(pstack-tests C CXX) set(CMAKE_BUILD_TYPE Debug) set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") -add_definitions("-std=c++17 -O0 -D_FORTIFY_SOURCE=0 -I${CMAKE_SOURCE_DIR}") +add_definitions("-O0 -D_FORTIFY_SOURCE=0 -I${CMAKE_SOURCE_DIR}") add_library(testhelper STATIC abort.c)