[Lldb-commits] [lldb] 92211bf - [LLDB] Fix address computation for inline function

2019-12-20 Thread Johannes Altmanninger via lldb-commits

Author: Johannes Altmanninger
Date: 2019-12-20T09:04:45+01:00
New Revision: 92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e

URL: 
https://github.com/llvm/llvm-project/commit/92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e
DIFF: 
https://github.com/llvm/llvm-project/commit/92211bf0f15ba46b5eeb88b7ea580ff539dcdd4e.diff

LOG: [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

Added: 
lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll

Modified: 
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Removed: 




diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 658158d94a2b..502d1af668c9 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2282,9 +2282,12 @@ bool SymbolFileDWARF::ResolveFunction(const DWARFDIE 
&orig_die,
   addr = sc.function->GetAddressRange().GetBaseAddress();
 }
 
-if (addr.IsValid()) {
-  sc_list.Append(sc);
-  return true;
+
+if (auto section_sp = addr.GetSection()) {
+  if (section_sp->GetPermissions() & ePermissionsExecutable) {
+sc_list.Append(sc);
+return true;
+  }
 }
   }
 

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 ..56397c949efb
--- /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 ..233e92007108
--- /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}



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [lldb] 04329db - [lldb] Fix test using lld on non-linux systems

2019-12-20 Thread Johannes Altmanninger via lldb-commits

Author: Johannes Altmanninger
Date: 2019-12-20T13:27:40+01:00
New Revision: 04329dbfa6c219997ab72567842d81778f9f7f47

URL: 
https://github.com/llvm/llvm-project/commit/04329dbfa6c219997ab72567842d81778f9f7f47
DIFF: 
https://github.com/llvm/llvm-project/commit/04329dbfa6c219997ab72567842d81778f9f7f47.diff

LOG: [lldb] Fix test using lld on non-linux systems

Added: 


Modified: 
lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll

Removed: 




diff  --git 
a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test 
b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
index 56397c949efb..5aa7759c5ed7 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
+++ b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address-shared.test
@@ -1,5 +1,5 @@
-# REQUIRES: lld
-; RUN: llc %S/inline-function-address.ll -filetype=obj -o %t.o
+# REQUIRES: lld, x86
+; RUN: llc -mtriple x86_64-pc-linux %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"

diff  --git a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll 
b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll
index 233e92007108..fde90d269a1d 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll
+++ b/lldb/test/Shell/SymbolFile/DWARF/inline-function-address.ll
@@ -1,5 +1,5 @@
-; REQUIRES: lld
-; RUN: llc %s -filetype=obj -o %t.o
+; REQUIRES: lld, x86
+; RUN: llc -mtriple x86_64-pc-linux %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



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits