From 60252d8febbe34c1d0470d86e74fa87700fbb610 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 9 Sep 2015 22:53:55 +0000 Subject: [PATCH] Change the load addr into something that works on linux x86_64. With this simple static programs run again. llvm-svn: 247205 --- lld/ELF/Writer.cpp | 8 +++++++- lld/test/elf2/basic.s | 10 +++++----- lld/test/elf2/basic32.s | 12 ++++++------ lld/test/elf2/basic32be.s | 12 ++++++------ lld/test/elf2/basic64be.s | 18 +++++++++--------- lld/test/elf2/bss.s | 2 +- lld/test/elf2/common.s | 10 +++++----- lld/test/elf2/relocation.s | 4 ++-- lld/test/elf2/shared.s | 2 +- lld/test/elf2/string-table.s | 2 +- lld/test/elf2/symbols.s | 20 ++++++++++---------- lld/test/elf2/visibility.s | 6 +++--- 12 files changed, 56 insertions(+), 50 deletions(-) diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index ff5d58a..93c80e8 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -587,7 +587,13 @@ static bool outputSectionHasPHDR(OutputSectionBase *Sec) { // Visits all sections to assign incremental, non-overlapping RVAs and // file offsets. template void Writer::assignAddresses() { - uintX_t VA = 0x1000; // The first page is kept unmapped. + // On linux x86_64 mmap of the first 15 pages fails, so the smallest value + // that can be used in here is 0x10000. + // If using 2MB pages, the smallest page aligned address that works is + // 0x200000, but it looks like every OS uses 4k pages for executables. + // FIXME: This is architecture and OS dependent. + uintX_t VA = 0x10000; + uintX_t FileOff = sizeof(Elf_Ehdr); // Reserve space for PHDRs. diff --git a/lld/test/elf2/basic.s b/lld/test/elf2/basic.s index 004cf7d..54e8d54 100644 --- a/lld/test/elf2/basic.s +++ b/lld/test/elf2/basic.s @@ -59,7 +59,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_EXECINSTR (0x4) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 +# CHECK-NEXT: Address: 0x10000 # CHECK-NEXT: Offset: 0x1000 # CHECK-NEXT: Size: 16 # CHECK-NEXT: Link: 0 @@ -75,7 +75,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1010 +# CHECK-NEXT: Address: 0x10010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -91,7 +91,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1010 +# CHECK-NEXT: Address: 0x10010 # CHECK-NEXT: Offset: 0x1010 # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -152,8 +152,8 @@ _start: # CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_LOAD (0x1) # CHECK-NEXT: Offset: 0x1000 -# CHECK-NEXT: VirtualAddress: 0x1000 -# CHECK-NEXT: PhysicalAddress: 0x1000 +# CHECK-NEXT: VirtualAddress: 0x10000 +# CHECK-NEXT: PhysicalAddress: 0x10000 # CHECK-NEXT: FileSize: 16 # CHECK-NEXT: MemSize: 16 # CHECK-NEXT: Flags [ (0x5) diff --git a/lld/test/elf2/basic32.s b/lld/test/elf2/basic32.s index 7c477ef..9557850 100644 --- a/lld/test/elf2/basic32.s +++ b/lld/test/elf2/basic32.s @@ -23,7 +23,7 @@ _start: # CHECK-NEXT: Type: Executable (0x2) # CHECK-NEXT: Machine: EM_386 (0x3) # CHECK-NEXT: Version: 1 -# CHECK-NEXT: Entry: 0x1000 +# CHECK-NEXT: Entry: 0x10000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x1058 # CHECK-NEXT: Flags [ (0x0) @@ -58,7 +58,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_EXECINSTR (0x4) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 +# CHECK-NEXT: Address: 0x10000 # CHECK-NEXT: Offset: 0x1000 # CHECK-NEXT: Size: 12 # CHECK-NEXT: Link: 0 @@ -74,7 +74,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -90,7 +90,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -131,8 +131,8 @@ _start: # CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_LOAD (0x1) # CHECK-NEXT: Offset: 0x1000 -# CHECK-NEXT: VirtualAddress: 0x1000 -# CHECK-NEXT: PhysicalAddress: 0x1000 +# CHECK-NEXT: VirtualAddress: 0x10000 +# CHECK-NEXT: PhysicalAddress: 0x10000 # CHECK-NEXT: FileSize: 12 # CHECK-NEXT: MemSize: 12 # CHECK-NEXT: Flags [ (0x5) diff --git a/lld/test/elf2/basic32be.s b/lld/test/elf2/basic32be.s index be6d55a..bfa4d5e 100644 --- a/lld/test/elf2/basic32be.s +++ b/lld/test/elf2/basic32be.s @@ -23,7 +23,7 @@ _start: # CHECK-NEXT: Type: Executable (0x2) # CHECK-NEXT: Machine: EM_PPC (0x14) # CHECK-NEXT: Version: 1 -# CHECK-NEXT: Entry: 0x1000 +# CHECK-NEXT: Entry: 0x10000 # CHECK-NEXT: ProgramHeaderOffset: 0x34 # CHECK-NEXT: SectionHeaderOffset: 0x1058 # CHECK-NEXT: Flags [ (0x0) @@ -58,7 +58,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_EXECINSTR (0x4) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 +# CHECK-NEXT: Address: 0x10000 # CHECK-NEXT: Offset: 0x1000 # CHECK-NEXT: Size: 12 # CHECK-NEXT: Link: 0 @@ -74,7 +74,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -90,7 +90,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -131,8 +131,8 @@ _start: # CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_LOAD (0x1) # CHECK-NEXT: Offset: 0x1000 -# CHECK-NEXT: VirtualAddress: 0x1000 -# CHECK-NEXT: PhysicalAddress: 0x1000 +# CHECK-NEXT: VirtualAddress: 0x10000 +# CHECK-NEXT: PhysicalAddress: 0x10000 # CHECK-NEXT: FileSize: 12 # CHECK-NEXT: MemSize: 12 # CHECK-NEXT: Flags [ (0x5) diff --git a/lld/test/elf2/basic64be.s b/lld/test/elf2/basic64be.s index 1fe6181..bad4ce0 100644 --- a/lld/test/elf2/basic64be.s +++ b/lld/test/elf2/basic64be.s @@ -28,7 +28,7 @@ _start: # CHECK-NEXT: Type: Executable (0x2) # CHECK-NEXT: Machine: EM_PPC64 (0x15) # CHECK-NEXT: Version: 1 -# CHECK-NEXT: Entry: 0x2000 +# CHECK-NEXT: Entry: 0x11000 # CHECK-NEXT: ProgramHeaderOffset: 0x40 # CHECK-NEXT: SectionHeaderOffset: 0x2078 # CHECK-NEXT: Flags [ (0x0) @@ -63,7 +63,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_EXECINSTR (0x4) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x1000 +# CHECK-NEXT: Address: 0x10000 # CHECK-NEXT: Offset: 0x1000 # CHECK-NEXT: Size: 12 # CHECK-NEXT: Link: 0 @@ -79,7 +79,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -95,7 +95,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x100C +# CHECK-NEXT: Address: 0x1000C # CHECK-NEXT: Offset: 0x100C # CHECK-NEXT: Size: 0 # CHECK-NEXT: Link: 0 @@ -111,7 +111,7 @@ _start: # CHECK-NEXT: SHF_ALLOC (0x2) # CHECK-NEXT: SHF_WRITE (0x1) # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x2000 +# CHECK-NEXT: Address: 0x11000 # CHECK-NEXT: Offset: 0x2000 # CHECK-NEXT: Size: 24 # CHECK-NEXT: Link: 0 @@ -152,8 +152,8 @@ _start: # CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_LOAD (0x1) # CHECK-NEXT: Offset: 0x1000 -# CHECK-NEXT: VirtualAddress: 0x1000 -# CHECK-NEXT: PhysicalAddress: 0x1000 +# CHECK-NEXT: VirtualAddress: 0x10000 +# CHECK-NEXT: PhysicalAddress: 0x10000 # CHECK-NEXT: FileSize: 12 # CHECK-NEXT: MemSize: 12 # CHECK-NEXT: Flags [ (0x5) @@ -165,8 +165,8 @@ _start: # CHECK-NEXT: ProgramHeader { # CHECK-NEXT: Type: PT_LOAD (0x1) # CHECK-NEXT: Offset: 0x2000 -# CHECK-NEXT: VirtualAddress: 0x2000 -# CHECK-NEXT: PhysicalAddress: 0x2000 +# CHECK-NEXT: VirtualAddress: 0x11000 +# CHECK-NEXT: PhysicalAddress: 0x11000 # CHECK-NEXT: FileSize: 24 # CHECK-NEXT: MemSize: 24 # CHECK-NEXT: Flags [ (0x6) diff --git a/lld/test/elf2/bss.s b/lld/test/elf2/bss.s index 8c76617..25e57e5 100644 --- a/lld/test/elf2/bss.s +++ b/lld/test/elf2/bss.s @@ -11,7 +11,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_WRITE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1000 +// CHECK-NEXT: Address: 0x10000 // CHECK-NEXT: Offset: 0x1000 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Link: 0 diff --git a/lld/test/elf2/common.s b/lld/test/elf2/common.s index 1e33933..b62fbe7 100644 --- a/lld/test/elf2/common.s +++ b/lld/test/elf2/common.s @@ -10,13 +10,13 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_WRITE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1000 +// CHECK-NEXT: Address: 0x10000 // CHECK-NEXT: Offset: // CHECK-NEXT: Size: 22 // CHECK: Name: sym4 -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object @@ -24,7 +24,7 @@ // CHECK-NEXT: Section: .bss // CHECK: Name: sym3 -// CHECK-NEXT: Value: 0x1014 +// CHECK-NEXT: Value: 0x10014 // CHECK-NEXT: Size: 2 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object @@ -32,7 +32,7 @@ // CHECK-NEXT: Section: .bss // CHECK: Name: sym2 -// CHECK-NEXT: Value: 0x100C +// CHECK-NEXT: Value: 0x1000C // CHECK-NEXT: Size: 8 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object @@ -40,7 +40,7 @@ // CHECK-NEXT: Section: .bss // CHECK: Name: sym1 -// CHECK-NEXT: Value: 0x1004 +// CHECK-NEXT: Value: 0x10004 // CHECK-NEXT: Size: 8 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: Object diff --git a/lld/test/elf2/relocation.s b/lld/test/elf2/relocation.s index 7c1e920..92215e2 100644 --- a/lld/test/elf2/relocation.s +++ b/lld/test/elf2/relocation.s @@ -21,9 +21,9 @@ bar: // R_X86_64_32 // CHECK: bar: -// CHECK: 1000: ba 00 10 00 00 movl $4096, %edx +// CHECK: 10000: ba 00 00 01 00 movl $65536, %edx // CHECK: e8 04 00 00 00 callq 4 // Also check that symbols match. -// CHECK: 000000000001000 .text 00000000 bar +// CHECK: 0000000000010000 .text 00000000 bar diff --git a/lld/test/elf2/shared.s b/lld/test/elf2/shared.s index 6609219..ceaf79d 100644 --- a/lld/test/elf2/shared.s +++ b/lld/test/elf2/shared.s @@ -46,7 +46,7 @@ // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: _start -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None diff --git a/lld/test/elf2/string-table.s b/lld/test/elf2/string-table.s index 958aebb..53651c0 100644 --- a/lld/test/elf2/string-table.s +++ b/lld/test/elf2/string-table.s @@ -23,7 +23,7 @@ hidden: // CHECK-NEXT: Flags [ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1000 +// CHECK-NEXT: Address: 0x10000 // CHECK: Name: foobar // CHECK-NEXT: Type: SHT_PROGBITS diff --git a/lld/test/elf2/symbols.s b/lld/test/elf2/symbols.s index 8fb9a0c..6fb56ad 100644 --- a/lld/test/elf2/symbols.s +++ b/lld/test/elf2/symbols.s @@ -51,7 +51,7 @@ internal: // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_EXECINSTR // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x1000 +// CHECK-NEXT: Address: 0x10000 // CHECK: Name: .bss (14) // CHECK-NEXT: Type: SHT_NOBITS (0x8) @@ -59,7 +59,7 @@ internal: // CHECK-NEXT: SHF_ALLOC (0x2) // CHECK-NEXT: SHF_WRITE (0x1) // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x2000 +// CHECK-NEXT: Address: 0x11000 // CHECK-NEXT: Offset: 0x2000 // CHECK-NEXT: Size: 4 @@ -68,7 +68,7 @@ internal: // CHECK-NEXT: Flags [ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x3000 +// CHECK-NEXT: Address: 0x12000 // CHECK: Symbols [ // CHECK-NEXT: Symbol { @@ -82,7 +82,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: _start -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global (0x1) // CHECK-NEXT: Type: Function @@ -109,7 +109,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: foo -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Weak (0x2) // CHECK-NEXT: Type: Object @@ -118,7 +118,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: common (34) -// CHECK-NEXT: Value: 0x2000 +// CHECK-NEXT: Value: 0x11000 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Binding: Global (0x1) // CHECK-NEXT: Type: Object (0x1) @@ -127,7 +127,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: zed -// CHECK-NEXT: Value: 0x3000 +// CHECK-NEXT: Value: 0x12000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global (0x1) // CHECK-NEXT: Type: None @@ -136,7 +136,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: protected -// CHECK-NEXT: Value: 0x3008 +// CHECK-NEXT: Value: 0x12008 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None @@ -145,7 +145,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: zed3 -// CHECK-NEXT: Value: 0x3008 +// CHECK-NEXT: Value: 0x12008 // CHECK-NEXT: Size: 4 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None @@ -154,7 +154,7 @@ internal: // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: zed2 -// CHECK-NEXT: Value: 0x3004 +// CHECK-NEXT: Value: 0x12004 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None diff --git a/lld/test/elf2/visibility.s b/lld/test/elf2/visibility.s index 38853eb..a14863e 100644 --- a/lld/test/elf2/visibility.s +++ b/lld/test/elf2/visibility.s @@ -16,7 +16,7 @@ // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: _start -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None @@ -25,7 +25,7 @@ // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: default -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None @@ -34,7 +34,7 @@ // CHECK-NEXT: } // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: protected -// CHECK-NEXT: Value: 0x1000 +// CHECK-NEXT: Value: 0x10000 // CHECK-NEXT: Size: 0 // CHECK-NEXT: Binding: Global // CHECK-NEXT: Type: None -- 2.7.4