diff options
-rw-r--r-- | lld/ELF/LinkerScript.cpp | 3 | ||||
-rw-r--r-- | lld/test/ELF/linkerscript/header-phdr.s | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index e72a20d9fa3..6fc38756c42 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -752,8 +752,7 @@ void LinkerScript::allocateHeaders(std::vector<PhdrEntry *> &Phdrs) { // unless there's a space for them. uint64_t Base = Opt.HasSections ? alignDown(Min, Config->MaxPageSize) : 0; if (HeaderSize <= Min - Base || Script->hasPhdrsCommands()) { - Min = Opt.HasSections ? Base - : alignDown(Min - HeaderSize, Config->MaxPageSize); + Min = alignDown(Min - HeaderSize, Config->MaxPageSize); Out::ElfHeader->Addr = Min; Out::ProgramHeaders->Addr = Min + Out::ElfHeader->Size; return; diff --git a/lld/test/ELF/linkerscript/header-phdr.s b/lld/test/ELF/linkerscript/header-phdr.s new file mode 100644 index 00000000000..8c9097d8dfa --- /dev/null +++ b/lld/test/ELF/linkerscript/header-phdr.s @@ -0,0 +1,13 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: echo "PHDRS { foobar PT_LOAD FILEHDR PHDRS; } \ +# RUN: SECTIONS { . = 0x1000; .abc : { *(.zed) } : foobar }" > %t.script +# RUN: ld.lld --script %t.script %t.o -o %t +# RUN: llvm-readelf -l -S -W %t | FileCheck %s + +.section .zed, "a" +.zero 4 + + +# CHECK: [ 1] .abc PROGBITS 0000000000001000 001000 000004 00 A 0 0 1 +# CHECK: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x001004 0x001004 R E 0x1000 |