[ELF] Make __ehdr_start point to ELF file headers

__ehdr_start should be pointing to ELF file headers, not program
headers.

Differential Revision: https://reviews.llvm.org/D30319

llvm-svn: 296079
This commit is contained in:
Petr Hosek 2017-02-24 03:00:52 +00:00
parent 8459ddf12a
commit 701ad3fbf9
2 changed files with 20 additions and 6 deletions

View File

@ -844,9 +844,9 @@ template <class ELFT> void Writer<ELFT>::addReservedSymbols() {
if (ScriptConfig->HasSections)
return;
// __ehdr_start is the location of program headers.
// __ehdr_start is the location of ELF file headers.
ElfSym<ELFT>::EhdrStart =
addOptionalSynthetic<ELFT>("__ehdr_start", Out<ELFT>::ProgramHeaders, 0);
addOptionalSynthetic<ELFT>("__ehdr_start", Out<ELFT>::ElfHeader, 0);
auto Define = [](StringRef S, DefinedSynthetic *&Sym1,
DefinedSynthetic *&Sym2) {

View File

@ -2,8 +2,16 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t
# RUN: llvm-objdump -t %t | FileCheck %s
# CHECK: 0000000000200040 .text 00000000 .hidden __ehdr_start
# RUN: llvm-readobj -symbols %t | FileCheck %s
# CHECK: Name: __ehdr_start (1)
# CHECK-NEXT: Value: 0x200000
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Local (0x0)
# CHECK-NEXT: Type: None (0x0)
# CHECK-NEXT: Other [ (0x2)
# CHECK-NEXT: STV_HIDDEN (0x2)
# CHECK-NEXT: ]
# CHECK-NEXT: Section: Undefined (0x0)
.text
.global _start, __ehdr_start
@ -11,6 +19,12 @@ _start:
.quad __ehdr_start
# RUN: ld.lld -r %t.o -o %t.r
# RUN: llvm-objdump -t %t.r | FileCheck %s --check-prefix=RELOCATABLE
# RUN: llvm-readobj -symbols %t.r | FileCheck %s --check-prefix=RELOCATABLE
# RELOCATABLE: 0000000000000000 *UND* 00000000 __ehdr_start
# RELOCATABLE: Name: __ehdr_start (1)
# RELOCATABLE-NEXT: Value: 0x0
# RELOCATABLE-NEXT: Size: 0
# RELOCATABLE-NEXT: Binding: Global (0x1)
# RELOCATABLE-NEXT: Type: None (0x0)
# RELOCATABLE-NEXT: Other: 0
# RELOCATABLE-NEXT: Section: Undefined (0x0)