summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2015-10-14 14:52:15 +0000
committerTodd Fiala <todd.fiala@gmail.com>2015-10-14 14:52:15 +0000
commitd6f840609b50baa048d0bcef6d82eb9e75c9483e (patch)
treef60a2894e21efd5926dfab2efa0392da666f8bdf
parent2432ff59d34abc680e6e3916dd938ab58f71de23 (diff)
downloadbcm5719-llvm-d6f840609b50baa048d0bcef6d82eb9e75c9483e.tar.gz
bcm5719-llvm-d6f840609b50baa048d0bcef6d82eb9e75c9483e.zip
cmake: provide flag that enables 'log enable --stack' to provide useful file/function info on POSIX systems
Adding the following flag to a cmake line: -DLLDB_EXPORT_ALL_SYMBOLS=TRUE will cause all symbols to be exported from liblldb. This enables the llvm backtrace mechanism to see and report backtrace symbols properly when using (lldb) log enable --stack ... Prior to this change, only the SB API symbols would show up on Linux and other systems that use a public-symbols-based backtrace lookup mechanism. log enable --stack ... is a very handy, quick way to understand the flow of how some log lines are getting hit within lldb without having to hook up a top-level debugger over your current debug session. llvm-svn: 250299
-rw-r--r--lldb/cmake/modules/AddLLDB.cmake16
-rw-r--r--lldb/cmake/modules/LLDBConfig.cmake9
-rw-r--r--lldb/source/API/CMakeLists.txt16
3 files changed, 40 insertions, 1 deletions
diff --git a/lldb/cmake/modules/AddLLDB.cmake b/lldb/cmake/modules/AddLLDB.cmake
index dbd88e8dbd0..672b0a53fea 100644
--- a/lldb/cmake/modules/AddLLDB.cmake
+++ b/lldb/cmake/modules/AddLLDB.cmake
@@ -96,3 +96,19 @@ macro(add_lldb_executable name)
add_llvm_executable(${name} ${ARGN})
set_target_properties(${name} PROPERTIES FOLDER "lldb executables")
endmacro(add_lldb_executable)
+
+# Support appending linker flags to an existing target.
+# This will preserve the existing linker flags on the
+# target, if there are any.
+function(lldb_append_link_flags target_name new_link_flags)
+ # Retrieve existing linker flags.
+ get_target_property(current_link_flags ${target_name} LINK_FLAGS)
+
+ # If we had any linker flags, include them first in the new linker flags.
+ if(current_link_flags)
+ set(new_link_flags "${current_link_flags} ${new_link_flags}")
+ endif()
+
+ # Now set them onto the target.
+ set_target_properties(${target_name} PROPERTIES LINK_FLAGS ${new_link_flags})
+endfunction()
diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
index 25776c3d03b..889cb7f38aa 100644
--- a/lldb/cmake/modules/LLDBConfig.cmake
+++ b/lldb/cmake/modules/LLDBConfig.cmake
@@ -29,6 +29,15 @@ set(LLDB_DISABLE_CURSES ${LLDB_DEFAULT_DISABLE_CURSES} CACHE BOOL
set(LLDB_RELOCATABLE_PYTHON 0 CACHE BOOL
"Causes LLDB to use the PYTHONHOME environment variable to locate Python.")
+if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
+ set(LLDB_EXPORT_ALL_SYMBOLS 0 CACHE BOOL
+ "Causes lldb to export all symbols when building liblldb.")
+else()
+ # Windows doesn't support toggling this, so don't bother making it a
+ # cache variable.
+ set(LLDB_EXPORT_ALL_SYMBOLS 0)
+endif()
+
if ((NOT MSVC) OR MSVC12)
add_definitions( -DHAVE_ROUND )
endif()
diff --git a/lldb/source/API/CMakeLists.txt b/lldb/source/API/CMakeLists.txt
index 271afa9c9a8..06a26e17c92 100644
--- a/lldb/source/API/CMakeLists.txt
+++ b/lldb/source/API/CMakeLists.txt
@@ -82,7 +82,21 @@ set_target_properties(liblldb
)
if (NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
- add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
+ if (NOT LLDB_EXPORT_ALL_SYMBOLS)
+ # If we're not exporting all symbols, we'll want to explicitly set
+ # the exported symbols here. This prevents 'log enable --stack ...'
+ # from working on some systems but limits the liblldb size.
+ MESSAGE("-- Symbols (liblldb): only exporting liblldb.exports symbols")
+ add_llvm_symbol_exports(liblldb ${CMAKE_CURRENT_SOURCE_DIR}/liblldb.exports)
+ else()
+ # Don't use an explicit export. Instead, tell the linker to
+ # export all symbols.
+ MESSAGE("-- Symbols (liblldb): exporting all symbols")
+ # Darwin linker doesn't need this extra step.
+ if (NOT CMAKE_SYSTEM_NAME MATCHES "Darwin")
+ lldb_append_link_flags(liblldb "-Wl,--export-dynamic")
+ endif()
+ endif()
endif()
if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
OpenPOWER on IntegriCloud