[PATCH] [LinkerScript] Handle symbols defined in linker scripts in case of shared lib

Rafael Auler rafaelauler at gmail.com
Mon Apr 6 08:05:54 PDT 2015


Hi Simon,

LGTM, thanks!

On Mon, Apr 6, 2015 at 10:48 AM, Simon Atanasyan <simon at atanasyan.com>
wrote:

> Hi rafaelauler,
>
> This patch is a follow-up to the rL232409 and allows define symbols in a
> linker script in case of linking shared library.
>
> REPOSITORY
>   rL LLVM
>
> http://reviews.llvm.org/D8840
>
> Files:
>   lib/ReaderWriter/ELF/DynamicLibraryWriter.h
>   test/elf/linkerscript/Inputs/simple-pic.o.yaml
>   test/elf/linkerscript/symbol-definition-so.test
>
> Index: lib/ReaderWriter/ELF/DynamicLibraryWriter.h
> ===================================================================
> --- lib/ReaderWriter/ELF/DynamicLibraryWriter.h
> +++ lib/ReaderWriter/ELF/DynamicLibraryWriter.h
> @@ -60,6 +60,7 @@
>  }
>
>  template <class ELFT> void DynamicLibraryWriter<ELFT>::addDefaultAtoms() {
> +  OutputELFWriter<ELFT>::addDefaultAtoms();
>    _runtimeFile->addAbsoluteAtom("_end");
>  }
>
> @@ -76,6 +77,7 @@
>
>  template <class ELFT>
>  void DynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues() {
> +  OutputELFWriter<ELFT>::finalizeDefaultAtomValues();
>    lld::AtomLayout *underScoreEndAtom =
> this->_layout.findAbsoluteAtom("_end");
>    assert(underScoreEndAtom);
>
> Index: test/elf/linkerscript/Inputs/simple-pic.o.yaml
> ===================================================================
> --- /dev/null
> +++ test/elf/linkerscript/Inputs/simple-pic.o.yaml
> @@ -0,0 +1,32 @@
> +FileHeader:
> +  Class:           ELFCLASS64
> +  Data:            ELFDATA2LSB
> +  Type:            ET_REL
> +  Machine:         EM_X86_64
> +
> +Sections:
> +  - Name:          .text
> +    Type:          SHT_PROGBITS
> +    Flags:         [ SHF_ALLOC, SHF_EXECINSTR ]
> +    AddressAlign:  4
> +    Size:          16
> +
> +  - Name:          .data
> +    Type:          SHT_PROGBITS
> +    Flags:         [ SHF_WRITE, SHF_ALLOC ]
> +    AddressAlign:  4
> +    Size:          16
> +
> +Symbols:
> +  Local:
> +    - Name:        .data
> +      Type:        STT_SECTION
> +      Section:     .data
> +    - Name:        .text
> +      Type:        STT_SECTION
> +      Section:     .text
> +  Global:
> +    - Name:        foo
> +      Type:        STT_FUNC
> +      Section:     .text
> +      Size:        16
> Index: test/elf/linkerscript/symbol-definition-so.test
> ===================================================================
> --- /dev/null
> +++ test/elf/linkerscript/symbol-definition-so.test
> @@ -0,0 +1,32 @@
> +/*
> +We test whether we can define symbols in a linker script and have them
> exported
> +to the output file symbol table. This test is the same as
> symbol-definition.test
> +but make checking in case of shared library linking.
> +
> +We use the following linker script for this test:
> +*/
> +
> +SECTIONS
> +{
> +  .text : { *(.text) }
> +  MYSTRING = .;
> +  .data : { *(.data) }
> +}
> +
> +/*
> +RUN: yaml2obj -format=elf %p/Inputs/simple-pic.o.yaml -o=%t.o
> +
> +RUN: lld -flavor gnu -target x86_64 -shared -T %s %t.o -o %t.so
> +RUN: llvm-readobj -s -symbols %t.so | FileCheck -check-prefix CHECKSYMS %s
> +
> +CHECKSYMS:      Name: .data
> +CHECKSYMS-NEXT: Type: SHT_PROGBITS
> +CHECKSYMS-NEXT: Flags [
> +CHECKSYMS-NEXT:   SHF_ALLOC
> +CHECKSYMS-NEXT:   SHF_WRITE
> +CHECKSYMS-NEXT: ]
> +CHECKSYMS-NEXT: Address: 0x401060
> +
> +CHECKSYMS:      Name: MYSTRING
> +CHECKSYMS-NEXT: Value: 0x401060
> +*/
>
> EMAIL PREFERENCES
>   http://reviews.llvm.org/settings/panel/emailpreferences/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150406/1ce0dfcd/attachment.html>


More information about the llvm-commits mailing list