[lld] r292512 - Create _end symbol even if a .so defines it.
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 19 13:30:25 PST 2017
I would like to port this to 4.0. OK?
Cheers,
Rafael
Rafael Espindola via llvm-commits <llvm-commits at lists.llvm.org> writes:
> Author: rafael
> Date: Thu Jan 19 13:43:34 2017
> New Revision: 292512
>
> URL: http://llvm.org/viewvc/llvm-project?rev=292512&view=rev
> Log:
> Create _end symbol even if a .so defines it.
>
> The freebsd sbrk implementation uses _end to find the initial value of
> brk, so it has to be defined in the main binary.
>
> This should fix the emacs build.
>
> Added:
> lld/trunk/test/ELF/Inputs/resolution-end.s
> lld/trunk/test/ELF/resolution-end.s
> Modified:
> lld/trunk/ELF/SymbolTable.cpp
>
> Modified: lld/trunk/ELF/SymbolTable.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=292512&r1=292511&r2=292512&view=diff
> ==============================================================================
> --- lld/trunk/ELF/SymbolTable.cpp (original)
> +++ lld/trunk/ELF/SymbolTable.cpp Thu Jan 19 13:43:34 2017
> @@ -140,7 +140,7 @@ template <class ELFT>
> DefinedRegular<ELFT> *SymbolTable<ELFT>::addIgnored(StringRef Name,
> uint8_t Visibility) {
> SymbolBody *S = find(Name);
> - if (!S || !S->isUndefined())
> + if (!S || S->isInCurrentDSO())
> return nullptr;
> return addAbsolute(Name, Visibility);
> }
>
> Added: lld/trunk/test/ELF/Inputs/resolution-end.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/resolution-end.s?rev=292512&view=auto
> ==============================================================================
> --- lld/trunk/test/ELF/Inputs/resolution-end.s (added)
> +++ lld/trunk/test/ELF/Inputs/resolution-end.s Thu Jan 19 13:43:34 2017
> @@ -0,0 +1,2 @@
> +.data
> + .quad _end
>
> Added: lld/trunk/test/ELF/resolution-end.s
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/resolution-end.s?rev=292512&view=auto
> ==============================================================================
> --- lld/trunk/test/ELF/resolution-end.s (added)
> +++ lld/trunk/test/ELF/resolution-end.s Thu Jan 19 13:43:34 2017
> @@ -0,0 +1,39 @@
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o
> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/resolution-end.s -o %t2.o
> +# RUN: ld.lld -shared -o %t2.so %t2.o
> +# RUN: ld.lld %t1.o %t2.so -o %t
> +# RUN: llvm-readobj -t -s -section-data %t | FileCheck %s
> +# REQUIRES: x86
> +
> +# Test that we resolve _end to the this executable.
> +
> +# CHECK: Name: .text
> +# CHECK-NEXT: Type: SHT_PROGBITS
> +# CHECK-NEXT: Flags [
> +# CHECK-NEXT: SHF_ALLOC
> +# CHECK-NEXT: SHF_EXECINSTR
> +# CHECK-NEXT: ]
> +# CHECK-NEXT: Address:
> +# CHECK-NEXT: Offset:
> +# CHECK-NEXT: Size:
> +# CHECK-NEXT: Link:
> +# CHECK-NEXT: Info:
> +# CHECK-NEXT: AddressAlignment:
> +# CHECK-NEXT: EntrySize:
> +# CHECK-NEXT: SectionData (
> +# CHECK-NEXT: 0000: 80202000 00000000
> +# CHECK-NEXT: )
> +
> +# CHECK: Symbol {
> +# CHECK: Name: _end
> +# CHECK-NEXT: Value: 0x202080
> +# CHECK-NEXT: Size:
> +# CHECK-NEXT: Binding: Global
> +# CHECK-NEXT: Type:
> +# CHECK-NEXT: Other:
> +# CHECK-NEXT: Section:
> +# CHECK-NEXT: }
> +
> +.global _start
> +_start:
> +.quad _end
>
>
> _______________________________________________
> 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