diff options
author | Johannes Altmanninger <aclopte@gmail.com> | 2019-11-27 22:48:15 +0100 |
---|---|---|
committer | Johannes Altmanninger <aclopte@gmail.com> | 2019-12-20 09:04:45 +0100 |
commit | 92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e (patch) | |
tree | 4dc3bc7aca1f445f8c328e5bcbbb228091c3b5d3 /lldb/test/Shell/SymbolFile | |
parent | bf507d4259c389cc21d44760b8ebf462edd8e5d0 (diff) | |
download | bcm5719-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.test | 6 | ||||
-rw-r--r-- | lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll | 28 |
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} |