summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2015-10-16 23:43:22 +0000
committerReid Kleckner <rnk@google.com>2015-10-16 23:43:22 +0000
commit02b74368ce181614741c7f5aa3a39a86df78f9af (patch)
tree27e34f0a50bc64fc5fb4439eefd1b54c3b03c05f /llvm/test
parent15560778df3e80d73d085d21196f531415c5b5fa (diff)
downloadbcm5719-llvm-02b74368ce181614741c7f5aa3a39a86df78f9af.tar.gz
bcm5719-llvm-02b74368ce181614741c7f5aa3a39a86df78f9af.zip
[llvm-symbolizer] Use the export table if no symbols are present
This lets us make guesses about symbols in third party DLLs without debug info, like MSVCR120.dll or kernel32.dll. dbghelp does the same thing. llvm-svn: 250582
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/tools/llvm-symbolizer/Inputs/coff-dwarf.cpp2
-rw-r--r--llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.cpp20
-rw-r--r--llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.exebin0 -> 8192 bytes
-rw-r--r--llvm/test/tools/llvm-symbolizer/coff-exports.test17
4 files changed, 38 insertions, 1 deletions
diff --git a/llvm/test/tools/llvm-symbolizer/Inputs/coff-dwarf.cpp b/llvm/test/tools/llvm-symbolizer/Inputs/coff-dwarf.cpp
index 9741439cdcf..3a832a9fcff 100644
--- a/llvm/test/tools/llvm-symbolizer/Inputs/coff-dwarf.cpp
+++ b/llvm/test/tools/llvm-symbolizer/Inputs/coff-dwarf.cpp
@@ -1,5 +1,5 @@
// To generate the corresponding EXE, run:
-// clang-cl -O2 -gdwarf -c coff-dwarf.cpp && lld-link -debug coff-dwarf.obj
+// clang-cl -MD -O2 -gdwarf -c coff-dwarf.cpp && lld-link -debug coff-dwarf.obj
extern "C" int puts(const char *str);
diff --git a/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.cpp b/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.cpp
new file mode 100644
index 00000000000..23b44b32902
--- /dev/null
+++ b/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.cpp
@@ -0,0 +1,20 @@
+// To generate the corresponding EXE, run:
+// clang-cl -MD -c coff-exports.cpp && lld-link /MANIFEST:NO coff-exports.obj
+
+#define EXPORT __declspec(dllexport)
+
+extern "C" int puts(const char *str);
+
+EXPORT void __declspec(noinline) foo() {
+ puts("foo1");
+ puts("foo2");
+}
+
+void bar() {
+ foo();
+}
+
+EXPORT int main() {
+ bar();
+ return 0;
+}
diff --git a/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.exe b/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.exe
new file mode 100644
index 00000000000..939205e3f82
--- /dev/null
+++ b/llvm/test/tools/llvm-symbolizer/Inputs/coff-exports.exe
Binary files differ
diff --git a/llvm/test/tools/llvm-symbolizer/coff-exports.test b/llvm/test/tools/llvm-symbolizer/coff-exports.test
new file mode 100644
index 00000000000..7283acda2fc
--- /dev/null
+++ b/llvm/test/tools/llvm-symbolizer/coff-exports.test
@@ -0,0 +1,17 @@
+RUN: grep '^ADDR:' %s | sed -s 's/ADDR: //' \
+RUN: | llvm-symbolizer --inlining --relative-address -obj="%p/Inputs/coff-exports.exe" \
+RUN: | FileCheck %s
+
+ADDR: 0x500A
+ADDR: 0x5038
+ADDR: 0x504B
+
+We get the expected stack trace, except 'foo' appears for the 'bar' frame
+because 'bar' isn't in the export table.
+
+CHECK: foo(void)
+CHECK: ??:0:0
+CHECK: foo(void)
+CHECK: ??:0:0
+CHECK: main
+CHECK: ??:0:0
OpenPOWER on IntegriCloud