[lld] r294322 - [ELF] - Assign proper values for DefinedSynthetic symbols attached to non-allocatable sections.
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 7 09:51:35 PST 2017
Author: grimar
Date: Tue Feb 7 11:51:35 2017
New Revision: 294322
URL: http://llvm.org/viewvc/llvm-project?rev=294322&view=rev
Log:
[ELF] - Assign proper values for DefinedSynthetic symbols attached to non-allocatable sections.
DefinedSynthetic symbols are attached to sections,
for the case when such symbol was attached to non-allocated section,
we calculated its value incorrectly.
We subtracted Body->Section->Addr, but non-allocatable sections
should have zero VA in output and therefore result value was wrong.
And at the same time we have Body->Section->Addr != 0 for them
internally because use it for calculation of section size.
Patch fixes calculation of such symbols values.
Differential revision: https://reviews.llvm.org/D29653
Added:
lld/trunk/test/ELF/linkerscript/symbols-and-orphans.s
Modified:
lld/trunk/ELF/LinkerScript.cpp
Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=294322&r1=294321&r2=294322&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Tue Feb 7 11:51:35 2017
@@ -101,8 +101,12 @@ static void assignSymbol(SymbolAssignmen
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;
}
Added: lld/trunk/test/ELF/linkerscript/symbols-and-orphans.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/symbols-and-orphans.s?rev=294322&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/symbols-and-orphans.s (added)
+++ lld/trunk/test/ELF/linkerscript/symbols-and-orphans.s Tue Feb 7 11:51:35 2017
@@ -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: .nonalloc : { *(.nonalloc) } \
+# RUN: Sym = .; \
+# RUN: }" > %t.script
+# RUN: ld.lld -o %t2 --script %t.script %t
+# RUN: llvm-objdump -section-headers -t %t2 | FileCheck %s
+
+# CHECK: SYMBOL TABLE:
+# CHECK: 00000000000000f0 .nonalloc 00000000 Sym
+
+.section .nonalloc,""
+ .quad 0
More information about the llvm-commits
mailing list