From: Rafael Espindola Date: Fri, 30 Sep 2016 00:16:11 +0000 (+0000) Subject: Start linker scripts at 0. X-Git-Tag: llvmorg-4.0.0-rc1~8534 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=be6073345e68981bcb6ea73c464b5065934cdb0a;p=platform%2Fupstream%2Fllvm.git Start linker scripts at 0. We were implicitly creating space for the headers. That is not the behaviour of bfd, which requires the script to use SIZEOF_HEADERS. The difference is important for scripts that don't use SIZEOF_HEADERS and expect the first section to be at 0. llvm-svn: 282818 --- diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index b979d06..5cdee70 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -595,7 +595,7 @@ void LinkerScript::assignAddresses(std::vector> &Phdrs) { } // Assign addresses as instructed by linker script SECTIONS sub-commands. - Dot = getHeaderSize(); + Dot = 0; for (const std::unique_ptr &Base : Opt.Commands) { if (auto *Cmd = dyn_cast(Base.get())) { diff --git a/lld/test/ELF/linkerscript/no-space.s b/lld/test/ELF/linkerscript/no-space.s index 9291109..a967972 100644 --- a/lld/test/ELF/linkerscript/no-space.s +++ b/lld/test/ELF/linkerscript/no-space.s @@ -5,6 +5,10 @@ # RUN: ld.lld -o %t --script %t.script %t.o -shared # RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s +# RUN: echo "SECTIONS {foo : {*(foo*)} }" > %t.script +# RUN: ld.lld -o %t --script %t.script %t.o -shared +# RUN: llvm-readobj -elf-output-style=GNU -l %t | FileCheck %s + # There is not enough address space available for the header, so just start the PT_LOAD # after it. diff --git a/lld/test/ELF/linkerscript/va.s b/lld/test/ELF/linkerscript/va.s index 8d25c83..854ebce 100644 --- a/lld/test/ELF/linkerscript/va.s +++ b/lld/test/ELF/linkerscript/va.s @@ -7,9 +7,9 @@ # CHECK: Sections: # CHECK-NEXT: Idx Name Size Address Type # CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK-NEXT: 1 .text 00000001 00000000000000e8 TEXT DATA -# CHECK-NEXT: 2 .foo 00000004 00000000000000e9 DATA -# CHECK-NEXT: 3 .boo 00000004 00000000000000ed DATA +# CHECK-NEXT: 1 .text 00000001 0000000000000000 TEXT DATA +# CHECK-NEXT: 2 .foo 00000004 0000000000000001 DATA +# CHECK-NEXT: 3 .boo 00000004 0000000000000005 DATA .global _start _start: