summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-08-31 11:12:10 +0000
committerAlexey Samsonov <samsonov@google.com>2012-08-31 11:12:10 +0000
commit8790f0a7f39d61a806c7339abd45bb83c15ee042 (patch)
tree6db39401494c4349c6f847ff9bf6d6a1334d0fd9
parent2acf5562bfd787c1667297c593ddfc0e35b91489 (diff)
[compiler-rt] Move draft code for llvm-symbolizer to compiler-rt/utils/llvm-symbolizer after chandlerc's suggestion
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@162988 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--utils/llvm-symbolizer/CMakeLists.txt67
-rw-r--r--utils/llvm-symbolizer/llvm-symbolizer.cc (renamed from lib/sanitizer_common/llvm-symbolizer/llvm-symbolizer.cc)10
2 files changed, 68 insertions, 9 deletions
diff --git a/utils/llvm-symbolizer/CMakeLists.txt b/utils/llvm-symbolizer/CMakeLists.txt
new file mode 100644
index 000000000..d1f0acd88
--- /dev/null
+++ b/utils/llvm-symbolizer/CMakeLists.txt
@@ -0,0 +1,67 @@
+# Build llvm-symbolizer binary, which will be used as an external symbolizer
+# by sanitizer tools. Later it can probably become another LLVM tool.
+
+set(SYMBOLIZER_SOURCES
+ llvm-symbolizer.cc
+ )
+
+# Append sources of LLVM libs we use.
+append_llvm_sources(SYMBOLIZER_SOURCES
+ LLVMDebugInfo
+ LLVMSupport
+ LLVMObject
+ )
+
+set(SYMBOLIZER_CFLAGS
+ -I${LLVM_MAIN_SRC_DIR}/include
+ -I${LLVM_BINARY_DIR}/include
+ -fPIC
+ -fomit-frame-pointer
+ -O3
+ )
+
+set(SYMBOLIZER_DEFINITIONS
+# __STDC_CONSTANT_MACROS=1
+# __STDC_LIMIT_MACROS=1
+ )
+
+# FIXME: Generalize the following ugly piece in sanitizer_common, symbolizer
+# and asan folders.
+set(SYMBOLIZER_BINARIES)
+if (APPLE)
+ # Build universal binary on Apple.
+ add_executable(llvm-symbolizer.osx ${SYMBOLIZER_SOURCES})
+ set_target_compile_flags(llvm-symbolizer.osx ${SYMBOLIZER_CFLAGS})
+ filter_available_targets(SYMBOLIZER_TARGETS x86_64 i386)
+ set_target_properties(llvm-symbolizer.osx PROPERTIES
+ OSX_ARCHITECTURES "${SYMBOLIZER_TARGETS}")
+ list(APPEND SYMBOLIZER_BINARIES llvm-symbolizer.osx)
+elseif(UNIX)
+ # Assume Linux
+ if(CAN_TARGET_X86_64)
+ add_executable(llvm-symbolizer-x86_64 ${SYMBOLIZER_SOURCES})
+ set_target_compile_flags(llvm-symbolizer-x86_64
+ ${SYMBOLIZER_CFLAGS} ${TARGET_X86_64_CFLAGS})
+ set_property(TARGET llvm-symbolizer-x86_64 APPEND_STRING PROPERTY
+ LINK_FLAGS " ${TARGET_X86_64_CFLAGS}")
+ list(APPEND SYMBOLIZER_BINARIES llvm-symbolizer-x86_64)
+ endif()
+ if(CAN_TARGET_I386)
+ add_executable(llvm-symbolizer-i386 ${SYMBOLIZER_SOURCES})
+ set_target_compile_flags(llvm-symbolizer-i386
+ ${SYMBOLIZER_CFLAGS} ${TARGET_I386_CFLAGS})
+ set_property(TARGET llvm-symbolizer-i386 APPEND_STRING PROPERTY
+ LINK_FLAGS " ${TARGET_I386_CFLAGS}")
+ list(APPEND SYMBOLIZER_BINARIES llvm-symbolizer-i386)
+ endif()
+ # Linux-specific linker flags.
+ set_property(TARGET ${SYMBOLIZER_BINARIES} APPEND_STRING PROPERTY
+ LINK_FLAGS " -lpthread -ldl")
+endif()
+
+set_property(TARGET ${SYMBOLIZER_BINARIES} APPEND PROPERTY
+ COMPILE_DEFINITIONS ${SYMBOLIZER_DEFINITIONS}
+ )
+# FIXME: Setup sane output directories for ${SYMBOLIZER_BINARIES}
+set_target_properties(${SYMBOLIZER_BINARIES} PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/lib/sanitizer_common/llvm-symbolizer/llvm-symbolizer.cc b/utils/llvm-symbolizer/llvm-symbolizer.cc
index f1fe38827..d9bcf2a68 100644
--- a/lib/sanitizer_common/llvm-symbolizer/llvm-symbolizer.cc
+++ b/utils/llvm-symbolizer/llvm-symbolizer.cc
@@ -47,11 +47,6 @@ PrintFunctions("functions", cl::init(true),
cl::desc("Print function names as well as line "
"information for a given address"));
-static cl::opt<bool>
-SubprocessMode("subprocess-mode", cl::init(false),
- cl::desc("Is run as a subprocess (format of the output "
- "differs a bit)"));
-
static StringRef ToolInvocationPath;
static bool error(error_code ec) {
@@ -220,10 +215,7 @@ static void symbolize(const string &module_name,
outs() << filename <<
":" << line_info.getLine() <<
":" << line_info.getColumn() <<
- "\n";
- if (SubprocessMode) {
- outs() << "\n"; // Print extra empty line to mark the end of output.
- }
+ "\n\n"; // Print extra empty line to mark the end of output.
outs().flush();
}