[PATCH] D25627: [ELF] Allow linker script to use .got and .got.plt sections as inputs

Eugene Leviant via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 18 02:17:26 PDT 2016


evgeny777 added a comment.

The reason I'm doing this is that I have same linker script for armv7 and aarch64 and all linkers (gold/ld/lld). This script should enforce two constraints:

1. PLT GOT entries should go before all other GOT entries
2. I need to have start and end symbols for GOT

Both constraints need to be enforced for dynamic loader to work properly. Currently I have something like this in my linker script:

  .got  : { 
     PROVIDE_HIDDEN(__got_start = .);
     *(.got.plt) *(.got) 
     PROVIDE_HIDDEN(__got_end = .);
  }

The problems I face with current version are:

1. On armv7 neither gold nor ld create .got.plt section, but lld does.
2. On aarch64 all linkers create .got.plt, but on some occasions  lld doesn't create .got section, while ld/gold do. Also, even if I specify correct order in linker script sometimes orphan section may be placed in between .got.plt and .got and prevent DSO from being correctly loaded.

BTW it looks like both gold and ld allow placing all linker generated sections wherever you want. May be it makes sense to make this patch more generic?


Repository:
  rL LLVM

https://reviews.llvm.org/D25627





More information about the llvm-commits mailing list