Skip to content

Commit 3c6fb20

Browse files
committed
Enhanced stack-traces via backwards library
Backwards library provides basic stack-traces of a crash and enhanced stack-traces by using libdw and/or libbfd. This patch will detect if either library exists on the system and set the appropriate compiler directives accordingly. The libraries will be packages as part of the Lambda zip file.
1 parent 02c35e4 commit 3c6fb20

File tree

3 files changed

+3769
-18
lines changed

3 files changed

+3769
-18
lines changed

CMakeLists.txt

+16-18
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,19 @@
11
cmake_minimum_required(VERSION 3.5)
22
set(CMAKE_CXX_STANDARD 11)
33
project(aws-lambda-runtime
4-
VERSION 0.1.0
4+
VERSION 0.2.0
55
LANGUAGES CXX)
66

77
option(ENABLE_TESTS "Enables building the test project, requires AWS C++ SDK." OFF)
88

9-
include(CheckCXXSourceCompiles)
109
include(CheckCXXCompilerFlag)
1110

12-
check_cxx_source_compiles("
13-
#include <execinfo.h>
14-
15-
int main() {
16-
void *buffer[5];
17-
int nptrs = backtrace(buffer, 5);
18-
char **strings = backtrace_symbols(buffer, nptrs);
19-
20-
return !!strings;
21-
}" HAVE_BACKTRACE)
22-
23-
2411
check_cxx_compiler_flag("-Wl,-flto" LTO_CAPABLE)
2512

2613
add_library(${PROJECT_NAME}
2714
"src/logging.cpp"
2815
"src/runtime.cpp"
16+
"src/backward.cpp"
2917
"${CMAKE_CURRENT_BINARY_DIR}/version.cpp"
3018
)
3119

@@ -39,10 +27,6 @@ find_package(CURL REQUIRED)
3927
target_link_libraries(${PROJECT_NAME} PRIVATE ${CURL_LIBRARIES})
4028
target_include_directories(${PROJECT_NAME} PRIVATE ${CURL_INCLUDE_DIRS})
4129

42-
if(HAVE_BACKTRACE)
43-
target_compile_definitions(${PROJECT_NAME} PRIVATE -DHAVE_BACKTRACE)
44-
endif()
45-
4630
target_compile_options(${PROJECT_NAME} PRIVATE
4731
"-fno-exceptions"
4832
"-fno-rtti"
@@ -53,6 +37,20 @@ target_compile_options(${PROJECT_NAME} PRIVATE
5337
"-Wconversion"
5438
"-Wno-sign-conversion")
5539

40+
find_library(DW_LIB NAMES dw)
41+
if (NOT DW_LIB STREQUAL DW_LIB-NOTFOUND)
42+
message("-- Enhanced stack-traces are enabled via libdw: ${DW_LIB}")
43+
target_compile_definitions(${PROJECT_NAME} PRIVATE "BACKWARD_HAS_DW=1")
44+
target_link_libraries(${PROJECT_NAME} PUBLIC "${DW_LIB}")
45+
else()
46+
find_library(BFD_LIB NAMES bfd)
47+
if (NOT BFD_LIB STREQUAL BFD_LIB-NOTFOUND)
48+
message("-- Enhanced stack-traces are enabled via libbfd: ${BFD_LIB}")
49+
target_compile_definitions(${PROJECT_NAME} PRIVATE "BACKWARD_HAS_BFD=1")
50+
target_link_libraries(${PROJECT_NAME} PRIVATE "${BFD_LIB}")
51+
endif()
52+
endif()
53+
5654
if (LOG_VERBOSITY)
5755
target_compile_definitions(${PROJECT_NAME} PRIVATE "AWS_LAMBDA_LOG=${LOG_VERBOSITY}")
5856
elseif(CMAKE_BUILD_TYPE STREQUAL Debug)

0 commit comments

Comments
 (0)