From 701ad3fbf9c95b214fb958f99670e5ff1912c514 Mon Sep 17 00:00:00 2001 From: Petr Hosek Date: Fri, 24 Feb 2017 03:00:52 +0000 Subject: [PATCH] [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 --- lld/ELF/Writer.cpp | 4 ++-- lld/test/ELF/ehdr_start.s | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 835f4d0bcde0..b0c23df4dc61 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -844,9 +844,9 @@ template void Writer::addReservedSymbols() { if (ScriptConfig->HasSections) return; - // __ehdr_start is the location of program headers. + // __ehdr_start is the location of ELF file headers. ElfSym::EhdrStart = - addOptionalSynthetic("__ehdr_start", Out::ProgramHeaders, 0); + addOptionalSynthetic("__ehdr_start", Out::ElfHeader, 0); auto Define = [](StringRef S, DefinedSynthetic *&Sym1, DefinedSynthetic *&Sym2) { diff --git a/lld/test/ELF/ehdr_start.s b/lld/test/ELF/ehdr_start.s index 67d23cf7164e..faca641755a3 100644 --- a/lld/test/ELF/ehdr_start.s +++ b/lld/test/ELF/ehdr_start.s @@ -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)