[lld] r292512 - Create _end symbol even if a .so defines it.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 19 14:01:02 PST 2017


Yes.

On Thu, Jan 19, 2017 at 1:30 PM, Rafael Avila de Espindola <
rafael.espindola at gmail.com> wrote:

>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170119/47da9a63/attachment.html>


More information about the llvm-commits mailing list