[lld] r248054 - [elf2] Relocate against common symbols.
Rafael EspĂndola via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 18 15:30:34 PDT 2015
Common symbols always have the same output section. Why do you need the member?
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