summaryrefslogtreecommitdiffstats
path: root/lldb/test/Shell/SymbolFile
diff options
context:
space:
mode:
authorJohannes Altmanninger <aclopte@gmail.com>2019-11-27 22:48:15 +0100
committerJohannes Altmanninger <aclopte@gmail.com>2019-12-20 09:04:45 +0100
commit92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e (patch)
tree4dc3bc7aca1f445f8c328e5bcbbb228091c3b5d3 /lldb/test/Shell/SymbolFile
parentbf507d4259c389cc21d44760b8ebf462edd8e5d0 (diff)
downloadbcm5719-llvm-92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e.tar.gz
bcm5719-llvm-92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e.zip
[LLDB] Fix address computation for inline function
Summary: Fixes PR41237 - SIGSEGV on call expression evaluation when debugging clang When linking multiple compilation units that define the same functions, the functions is merged but their debug info is not. This ignores debug info entries for functions in a non-executable sections; those are functions that were definitely dropped by the linker. Reviewers: spyffe, clayborg, jasonmolenda Reviewed By: clayborg Subscribers: labath, aprantl, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D71487
Diffstat (limited to 'lldb/test/Shell/SymbolFile')
-rw-r--r--lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test6
-rw-r--r--lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll28
2 files changed, 34 insertions, 0 deletions
diff --git a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
new file mode 100644
index 00000000000..56397c949ef
--- /dev/null
+++ b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
@@ -0,0 +1,6 @@
+# REQUIRES: lld
+; RUN: llc %S/inline-function-address.ll -filetype=obj -o %t.o
+; RUN: ld.lld %t.o %t.o -o %t -shared
+; RUN: lldb-test symbols --find=function --name=foo --function-flags=full %t | FileCheck %s
+; CHECK: Function: {{.*}} "foo"
+; CHECK-NOT: Function: {{.*}} "foo"
diff --git a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll
new file mode 100644
index 00000000000..233e9200710
--- /dev/null
+++ b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll
@@ -0,0 +1,28 @@
+; REQUIRES: lld
+; RUN: llc %s -filetype=obj -o %t.o
+; RUN: ld.lld %t.o %t.o -o %t
+; "foo" is defined in both compilation units, but there should be only one meaningful debuginfo entry
+; RUN: lldb-test symbols --find=function --name=foo --function-flags=full %t | FileCheck %s
+; CHECK: Function: {{.*}} "foo"
+; CHECK-NOT: Function: {{.*}} "foo"
+
+$foo = comdat any
+define void @foo() comdat !dbg !6 {
+entry:
+ ret void
+}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !{}, imports: !{}, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "inline-function-address.h", directory: "")
+!2 = !DIFile(filename: "inline-function-address.c", directory: "")
+!3 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!4 = !DISubroutineType(types: !{})
+!5 = !DISubprogram(name: "foo", file: !1, line: 12, type: !4, flags: DIFlagPrototyped, spFlags: 0)
+!6 = distinct !DISubprogram(name: "foo", file: !1, line: 12, type: !4, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, declaration: !5)
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!7, !8, !9}
+!llvm.ident = !{}
+!7 = !{i32 7, !"Dwarf Version", i32 4}
+!8 = !{i32 2, !"Debug Info Version", i32 3}
+!9 = !{i32 1, !"wchar_size", i32 4}
OpenPOWER on IntegriCloud