[PATCH] D29653: [ELF] - Assign proper values for DefinedSynthetic symbols attached to non-allocatable sections.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 7 08:26:56 PST 2017
grimar created this revision.
We currently have next issue. In the script from testcase,
orphans are placed before symbol asignment because of align expression.
Therefore .Sym is attached to non allocatable section. And we calculate it
value wrong. We subtract Body->Section->Addr, but non-allocatable sections
should have zero VA in output and therefore result value is wrong,
We have Body->Section->Addr != 0 for them internally because use it for calculation of size.
Patch fixes calculation of such symbols values.
https://reviews.llvm.org/D29653
Files:
ELF/LinkerScript.cpp
test/ELF/linkerscript/symbols-and-orphans.s
Index: test/ELF/linkerscript/symbols-and-orphans.s
===================================================================
--- test/ELF/linkerscript/symbols-and-orphans.s
+++ test/ELF/linkerscript/symbols-and-orphans.s
@@ -0,0 +1,16 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+
+# RUN: echo "SECTIONS { . = SIZEOF_HEADERS; \
+# RUN: .text : { *(.text) } \
+# RUN: . = ALIGN(8); \
+# RUN: Sym = .; }" > %t.script
+# RUN: ld.lld -o %t2 --script %t.script %t
+# RUN: llvm-objdump -section-headers -t %t2 | FileCheck %s
+
+# CHECK: SYMBOL TABLE:
+# CHECK-NEXT: 0000000000000000 *UND* 00000000
+# CHECK-NEXT: 0000000000000160 .strtab 00000000 Sym
+
+.section .orphan,""
+ .quad 0
Index: ELF/LinkerScript.cpp
===================================================================
--- ELF/LinkerScript.cpp
+++ ELF/LinkerScript.cpp
@@ -101,8 +101,12 @@
if (auto *Body = dyn_cast<DefinedSynthetic>(Cmd->Sym)) {
Body->Section = Cmd->Expression.Section();
- if (Body->Section)
- Body->Value = Cmd->Expression(Dot) - Body->Section->Addr;
+ if (Body->Section) {
+ uint64_t VA = 0;
+ if (Body->Section->Flags & SHF_ALLOC)
+ VA = Body->Section->Addr;
+ Body->Value = Cmd->Expression(Dot) - VA;
+ }
return;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29653.87449.patch
Type: text/x-patch
Size: 1332 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170207/dfa65b41/attachment.bin>
More information about the llvm-commits
mailing list