[Lldb-commits] [PATCH] D32899: [RuntimeDyld] Fix debug section relocation (pr20457)
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Mon May 15 02:59:20 PDT 2017
labath updated this revision to Diff 98967.
labath added a comment.
Herald added a subscriber: krytarowski.
Add llvm-rtdyld test case
https://reviews.llvm.org/D32899
Files:
lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_debug_frame.s
Index: test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_debug_frame.s
===================================================================
--- /dev/null
+++ test/ExecutionEngine/RuntimeDyld/X86/ELF_x86-64_debug_frame.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc -triple=x86_64-pc-linux -filetype=obj -o %T/ELF_x86-64_debug_frame.o %s
+# RUN: llvm-rtdyld -triple=x86_64-pc-linux -verify -check=%s %T/ELF_x86-64_debug_frame.o
+
+ .text
+ .file "debug_frame_test.c"
+ .align 16, 0x90
+ .type foo, at function
+foo:
+ .cfi_startproc
+ retq
+.Ltmp0:
+ .size foo, .Ltmp0-foo
+ .cfi_endproc
+ .cfi_sections .debug_frame
+
+# Check that .debug_frame is mapped to 0.
+# rtdyld-check: section_addr(ELF_x86-64_debug_frame.o, .debug_frame) = 0
+
+# Check that The relocated FDE's CIE offset also points to zero.
+# rtdyld-check: *{4}(section_addr(ELF_x86-64_debug_frame.o, .debug_frame) + 0x1C) = 0
Index: lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
===================================================================
--- lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
+++ lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
@@ -705,7 +705,7 @@
unsigned Alignment = (unsigned)Alignment64 & 0xffffffffL;
unsigned PaddingSize = 0;
unsigned StubBufSize = 0;
- bool IsRequired = isRequiredForExecution(Section) || ProcessAllSections;
+ bool IsRequired = isRequiredForExecution(Section);
bool IsVirtual = Section.isVirtual();
bool IsZeroInit = isZeroInit(Section);
bool IsReadOnly = isReadOnlyData(Section);
@@ -745,8 +745,8 @@
Alignment = std::max(Alignment, getStubAlignment());
// Some sections, such as debug info, don't need to be loaded for execution.
- // Leave those where they are.
- if (IsRequired) {
+ // Process those only if explicitly requested.
+ if (IsRequired || ProcessAllSections) {
Allocate = DataSize + PaddingSize + StubBufSize;
if (!Allocate)
Allocate = 1;
@@ -790,6 +790,10 @@
Sections.push_back(
SectionEntry(Name, Addr, DataSize, Allocate, (uintptr_t)pData));
+ // Debug info sections are linked as if their load address was zero
+ if (!IsRequired)
+ Sections.back().setLoadAddress(0);
+
if (Checker)
Checker->registerSection(Obj.getFileName(), SectionID);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D32899.98967.patch
Type: text/x-patch
Size: 2300 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20170515/8a20bc5d/attachment.bin>
More information about the lldb-commits
mailing list