[lld] r248054 - [elf2] Relocate against common symbols.
Michael Spencer via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 18 16:49:36 PDT 2015
On Fri, Sep 18, 2015 at 3:30 PM, Rafael EspĂndola
<rafael.espindola at gmail.com> wrote:
> Common symbols always have the same output section. Why do you need the member?
OutputSection::writeTo doesn't have access to the writer. I suppose we
could pass that or the bsssec in instead.
- Michael Spencer
>
> On 18 September 2015 at 18:13, Michael J. Spencer via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>> Author: mspencer
>> Date: Fri Sep 18 17:13:25 2015
>> New Revision: 248054
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=248054&view=rev
>> Log:
>> [elf2] Relocate against common symbols.
>>
>> Added:
>> lld/trunk/test/elf2/relocation-common.s
>> Modified:
>> lld/trunk/ELF/Symbols.h
>> lld/trunk/ELF/Writer.cpp
>>
>> Modified: lld/trunk/ELF/Symbols.h
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.h?rev=248054&r1=248053&r2=248054&view=diff
>> ==============================================================================
>> --- lld/trunk/ELF/Symbols.h (original)
>> +++ lld/trunk/ELF/Symbols.h Fri Sep 18 17:13:25 2015
>> @@ -24,6 +24,7 @@ class Chunk;
>> class InputFile;
>> class SymbolBody;
>> template <class ELFT> class ObjectFile;
>> +template <class ELFT> class OutputSection;
>>
>> // A real symbol object, SymbolBody, is usually accessed indirectly
>> // through a Symbol. There's always one Symbol for each symbol name.
>> @@ -180,6 +181,8 @@ public:
>>
>> // The maximum alignment we have seen for this symbol.
>> uintX_t MaxAlignment;
>> +
>> + OutputSection<ELFT> *OutputSec = nullptr;
>> };
>>
>> // Regular defined symbols read from object file symbol tables.
>>
>> Modified: lld/trunk/ELF/Writer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=248054&r1=248053&r2=248054&view=diff
>> ==============================================================================
>> --- lld/trunk/ELF/Writer.cpp (original)
>> +++ lld/trunk/ELF/Writer.cpp Fri Sep 18 17:13:25 2015
>> @@ -738,8 +738,11 @@ void OutputSection<ELFT>::relocate(
>> case SymbolBody::DefinedAbsoluteKind:
>> SymVA = cast<DefinedAbsolute<ELFT>>(Body)->Sym.st_value;
>> break;
>> - case SymbolBody::DefinedCommonKind:
>> - continue;
>> + case SymbolBody::DefinedCommonKind: {
>> + auto *DC = cast<DefinedCommon<ELFT>>(Body);
>> + SymVA = DC->OutputSec->getVA() + DC->OffsetInBSS;
>> + break;
>> + }
>> case SymbolBody::SharedKind:
>> if (!relocNeedsGOT(Type))
>> continue;
>> @@ -1063,6 +1066,7 @@ template <class ELFT> void Writer<ELFT>:
>> uintX_t Align = C->MaxAlignment;
>> Off = RoundUpToAlignment(Off, Align);
>> C->OffsetInBSS = Off;
>> + C->OutputSec = BSSSec;
>> Off += Sym.st_size;
>> }
>>
>>
>> Added: lld/trunk/test/elf2/relocation-common.s
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/relocation-common.s?rev=248054&view=auto
>> ==============================================================================
>> --- lld/trunk/test/elf2/relocation-common.s (added)
>> +++ lld/trunk/test/elf2/relocation-common.s Fri Sep 18 17:13:25 2015
>> @@ -0,0 +1,14 @@
>> +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t
>> +// RUN: lld -flavor gnu2 %t -o %tout
>> +// RUN: llvm-objdump -t -d %tout | FileCheck %s
>> +// REQUIRES: x86
>> +
>> +.global _start
>> +_start:
>> + movl $1, sym1(%rip)
>> +
>> +.global sym1
>> +.comm sym1,4,4
>> +
>> +// CHECK: 11000: {{.*}} movl $1, 4086(%rip)
>> +// CHECK: 0000000000012000 g .bss 00000004 sym1
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list