mirror of
https://github.com/mhx/dwarfs.git
synced 2025-08-04 02:06:22 -04:00
refactor: clean up symbolizer support and add ENABLE_STACKTRACE option
This commit is contained in:
parent
0bac595e7a
commit
bfd0256011
@ -36,6 +36,9 @@ option(ENABLE_FLAC "build with FLAC support" ON)
|
||||
option(ENABLE_RICEPP "build with RICEPP compression support" ON)
|
||||
option(WITH_UNIVERSAL_BINARY "build with universal binary" ON)
|
||||
option(WITH_PXATTR "build with pxattr binary" OFF)
|
||||
if(NOT (APPLE OR WIN32))
|
||||
option(ENABLE_STACKTRACE "build with symbolizer support" ON)
|
||||
endif()
|
||||
if(APPLE)
|
||||
option(USE_HOMEBREW_LIBARCHIVE "use libarchive from homebrew" ON)
|
||||
endif()
|
||||
@ -417,19 +420,6 @@ add_library(dwarfs_folly_lite OBJECT
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/String.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/concurrency/CacheLocality.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/container/detail/F14Table.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Dwarf.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfImpl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfLineNumberVM.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfSection.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfUtil.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Elf.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/ElfCache.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/LineReader.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SignalHandler.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/StackTrace.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SymbolizePrinter.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SymbolizedFrame.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Symbolizer.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/detail/FileUtilDetail.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/detail/Futex.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/detail/RangeCommon.cpp
|
||||
@ -475,6 +465,24 @@ add_library(dwarfs_folly_lite OBJECT
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/tracing/AsyncStack.cpp
|
||||
)
|
||||
|
||||
if(ENABLE_STACKTRACE)
|
||||
target_sources(dwarfs_folly_lite PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Dwarf.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfImpl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfLineNumberVM.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfSection.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/DwarfUtil.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Elf.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/ElfCache.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/LineReader.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SignalHandler.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/StackTrace.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SymbolizePrinter.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/SymbolizedFrame.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/debugging/symbolizer/Symbolizer.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND FOLLY_BENCHMARK_LITE_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/Benchmark.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/folly/folly/Format.cpp
|
||||
@ -1066,6 +1074,7 @@ set(DWARFS_HAVE_LIBBROTLI ${LIBBROTLIDEC_FOUND} AND ${LIBBROTLIENC_FOUND})
|
||||
set(DWARFS_HAVE_FLAC ${FLAC_FOUND})
|
||||
set(DWARFS_BUILTIN_MANPAGE ${WITH_MAN_OPTION})
|
||||
set(DWARFS_PERFMON_ENABLED ${ENABLE_PERFMON})
|
||||
set(DWARFS_STACKTRACE_ENABLED ${ENABLE_STACKTRACE})
|
||||
configure_file(cmake/config.h.in include/dwarfs/config.h @ONLY)
|
||||
|
||||
foreach(tgt dwarfs_common dwarfs_reader dwarfs_writer
|
||||
@ -1401,7 +1410,7 @@ if(STATIC_BUILD_DO_NOT_USE OR APPLE)
|
||||
if(APPLE)
|
||||
add_custom_target(strip COMMAND strip ${FILES_TO_STRIP})
|
||||
else()
|
||||
add_custom_target(strip COMMAND strip --strip-debug ${FILES_TO_STRIP})
|
||||
add_custom_target(strip COMMAND strip $<IF:$<BOOL:ENABLE_STACKTRACE>,--strip-debug,--strip-all> ${FILES_TO_STRIP})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
@ -10,3 +10,4 @@
|
||||
#cmakedefine DWARFS_USE_JEMALLOC 1
|
||||
#cmakedefine DWARFS_BUILTIN_MANPAGE 1
|
||||
#cmakedefine DWARFS_PERFMON_ENABLED 1
|
||||
#cmakedefine DWARFS_STACKTRACE_ENABLED 1
|
||||
|
@ -28,11 +28,14 @@
|
||||
#include <folly/String.h>
|
||||
#include <folly/small_vector.h>
|
||||
|
||||
#ifndef NDEBUG
|
||||
#include <folly/experimental/symbolizer/Symbolizer.h>
|
||||
#define DWARFS_SYMBOLIZE (FOLLY_HAVE_ELF && FOLLY_HAVE_DWARF)
|
||||
#else
|
||||
#define DWARFS_SYMBOLIZE 0
|
||||
#include <dwarfs/config.h>
|
||||
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
#include <folly/debugging/symbolizer/Symbolizer.h>
|
||||
|
||||
#if !(FOLLY_USE_SYMBOLIZER && FOLLY_HAVE_DWARF && FOLLY_HAVE_ELF)
|
||||
#error "folly symbolizer is unavailable"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <fmt/chrono.h>
|
||||
@ -164,7 +167,7 @@ void stream_logger::write(level_type level, const std::string& output,
|
||||
}
|
||||
}
|
||||
|
||||
#if DWARFS_SYMBOLIZE
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
std::string stacktrace;
|
||||
std::vector<std::string_view> st_lines;
|
||||
|
||||
@ -229,7 +232,7 @@ void stream_logger::write(level_type level, const std::string& output,
|
||||
}
|
||||
}
|
||||
|
||||
#if DWARFS_SYMBOLIZE
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
for (auto l : st_lines) {
|
||||
oss << l << newline;
|
||||
}
|
||||
|
@ -23,7 +23,11 @@
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
#include <folly/experimental/symbolizer/SignalHandler.h>
|
||||
#include <dwarfs/config.h>
|
||||
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
#include <folly/debugging/symbolizer/SignalHandler.h>
|
||||
#endif
|
||||
|
||||
#include <dwarfs/error.h>
|
||||
#include <dwarfs/terminal.h>
|
||||
@ -34,7 +38,7 @@ namespace dwarfs::tool {
|
||||
|
||||
int safe_main(std::function<int(void)> fn) {
|
||||
try {
|
||||
#ifndef _WIN32
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
folly::symbolizer::installFatalSignalHandler();
|
||||
#endif
|
||||
setup_default_locale();
|
||||
|
@ -47,7 +47,11 @@
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <folly/experimental/symbolizer/SignalHandler.h>
|
||||
#include <dwarfs/config.h>
|
||||
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
#include <folly/debugging/symbolizer/SignalHandler.h>
|
||||
#endif
|
||||
|
||||
#ifndef DWARFS_FUSE_LOWLEVEL
|
||||
#define DWARFS_FUSE_LOWLEVEL 1
|
||||
@ -82,7 +86,6 @@
|
||||
#define DWARFS_FSP_COMPAT
|
||||
#endif
|
||||
|
||||
#include <dwarfs/config.h>
|
||||
#include <dwarfs/conv.h>
|
||||
#include <dwarfs/error.h>
|
||||
#include <dwarfs/file_stat.h>
|
||||
@ -1513,9 +1516,11 @@ int dwarfs_main(int argc, sys_char** argv, iolayer const& iol) {
|
||||
return userdata.opts.is_help ? 0 : 1;
|
||||
}
|
||||
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
if (fuse_opts.foreground) {
|
||||
folly::symbolizer::installFatalSignalHandler();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool foreground = fuse_opts.foreground;
|
||||
#else
|
||||
@ -1533,9 +1538,11 @@ int dwarfs_main(int argc, sys_char** argv, iolayer const& iol) {
|
||||
return userdata.opts.is_help ? 0 : 1;
|
||||
}
|
||||
|
||||
#ifdef DWARFS_STACKTRACE_ENABLED
|
||||
if (fg) {
|
||||
folly::symbolizer::installFatalSignalHandler();
|
||||
}
|
||||
#endif
|
||||
|
||||
bool foreground = fg;
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user