Skip to content

Commit

Permalink
[ELF] Set max page size to 64K for AArch64
Browse files Browse the repository at this point in the history
Differential revision: https://reviews.llvm.org/D25079

llvm-svn: 283200
  • Loading branch information
eleviant777 committed Oct 4, 2016
1 parent 4541bb7 commit ee8dcfb
Show file tree
Hide file tree
Showing 22 changed files with 314 additions and 315 deletions.
1 change: 1 addition & 0 deletions lld/ELF/Target.cpp
Expand Up @@ -1151,6 +1151,7 @@ AArch64TargetInfo::AArch64TargetInfo() {
GotPltEntrySize = 8;
PltEntrySize = 16;
PltHeaderSize = 32;
MaxPageSize = 65536;

// It doesn't seem to be documented anywhere, but tls on aarch64 uses variant
// 1 of the tls structures and the tcb size is 16.
Expand Down
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-abs16.s
Expand Up @@ -18,7 +18,7 @@ _start:
// S + A = 0xffff
// 11002: S = 0x100, A = -0x8100
// S + A = 0x8000
// CHECK-NEXT: 11000 ffff0080
// CHECK-NEXT: 20000 ffff0080

// RUN: not ld.lld %t.o %t255.o -o %t2
// | FileCheck %s --check-prefix=OVERFLOW
Expand Down
6 changes: 3 additions & 3 deletions lld/test/ELF/aarch64-abs32.s
Expand Up @@ -14,11 +14,11 @@ _start:
// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s

// CHECK: Contents of section .data:
// 11000: S = 0x100, A = 0xfffffeff
// 20000: S = 0x100, A = 0xfffffeff
// S + A = 0xffffffff
// 11004: S = 0x100, A = -0x80000100
// 20004: S = 0x100, A = -0x80000100
// S + A = 0x80000000
// CHECK-NEXT: 11000 ffffffff 00000080
// CHECK-NEXT: 20000 ffffffff 00000080

// RUN: not ld.lld %t.o %t255.o -o %t2
// | FileCheck %s --check-prefix=OVERFLOW
Expand Down
98 changes: 49 additions & 49 deletions lld/test/ELF/aarch64-condb-reloc.s
Expand Up @@ -12,21 +12,21 @@
# 0x1102c - 16 = 0x1101c
# CHECK: Disassembly of section .text:
# CHECK-NEXT: _foo:
# CHECK-NEXT: 11000: {{.*}} nop
# CHECK-NEXT: 11004: {{.*}} nop
# CHECK-NEXT: 11008: {{.*}} nop
# CHECK-NEXT: 1100c: {{.*}} nop
# CHECK-NEXT: 20000: {{.*}} nop
# CHECK-NEXT: 20004: {{.*}} nop
# CHECK-NEXT: 20008: {{.*}} nop
# CHECK-NEXT: 2000c: {{.*}} nop
# CHECK: _bar:
# CHECK-NEXT: 11010: {{.*}} nop
# CHECK-NEXT: 11014: {{.*}} nop
# CHECK-NEXT: 11018: {{.*}} nop
# CHECK-NEXT: 20010: {{.*}} nop
# CHECK-NEXT: 20014: {{.*}} nop
# CHECK-NEXT: 20018: {{.*}} nop
# CHECK: _dah:
# CHECK-NEXT: 1101c: {{.*}} nop
# CHECK-NEXT: 11020: {{.*}} nop
# CHECK-NEXT: 2001c: {{.*}} nop
# CHECK-NEXT: 20020: {{.*}} nop
# CHECK: _start:
# CHECK-NEXT: 11024: {{.*}} b.eq #-36
# CHECK-NEXT: 11028: {{.*}} b.eq #-24
# CHECK-NEXT: 1102c: {{.*}} b.eq #-16
# CHECK-NEXT: 20024: {{.*}} b.eq #-36
# CHECK-NEXT: 20028: {{.*}} b.eq #-24
# CHECK-NEXT: 2002c: {{.*}} b.eq #-16

#DSOREL: Section {
#DSOREL: Index:
Expand All @@ -36,8 +36,8 @@
#DSOREL-NEXT: SHF_ALLOC
#DSOREL-NEXT: SHF_WRITE
#DSOREL-NEXT: ]
#DSOREL-NEXT: Address: 0x3000
#DSOREL-NEXT: Offset: 0x3000
#DSOREL-NEXT: Address: 0x30000
#DSOREL-NEXT: Offset: 0x30000
#DSOREL-NEXT: Size: 48
#DSOREL-NEXT: Link: 0
#DSOREL-NEXT: Info: 0
Expand All @@ -46,51 +46,51 @@
#DSOREL-NEXT: }
#DSOREL: Relocations [
#DSOREL-NEXT: Section ({{.*}}) .rela.plt {
#DSOREL-NEXT: 0x3018 R_AARCH64_JUMP_SLOT _foo
#DSOREL-NEXT: 0x3020 R_AARCH64_JUMP_SLOT _bar
#DSOREL-NEXT: 0x3028 R_AARCH64_JUMP_SLOT _dah
#DSOREL-NEXT: 0x30018 R_AARCH64_JUMP_SLOT _foo
#DSOREL-NEXT: 0x30020 R_AARCH64_JUMP_SLOT _bar
#DSOREL-NEXT: 0x30028 R_AARCH64_JUMP_SLOT _dah
#DSOREL-NEXT: }
#DSOREL-NEXT:]

#DSO: Disassembly of section .text:
#DSO-NEXT: _foo:
#DSO-NEXT: 1000: {{.*}} nop
#DSO-NEXT: 1004: {{.*}} nop
#DSO-NEXT: 1008: {{.*}} nop
#DSO-NEXT: 100c: {{.*}} nop
#DSO-NEXT: 10000: {{.*}} nop
#DSO-NEXT: 10004: {{.*}} nop
#DSO-NEXT: 10008: {{.*}} nop
#DSO-NEXT: 1000c: {{.*}} nop
#DSO: _bar:
#DSO-NEXT: 1010: {{.*}} nop
#DSO-NEXT: 1014: {{.*}} nop
#DSO-NEXT: 1018: {{.*}} nop
#DSO-NEXT: 10010: {{.*}} nop
#DSO-NEXT: 10014: {{.*}} nop
#DSO-NEXT: 10018: {{.*}} nop
#DSO: _dah:
#DSO-NEXT: 101c: {{.*}} nop
#DSO-NEXT: 1020: {{.*}} nop
#DSO-NEXT: 1001c: {{.*}} nop
#DSO-NEXT: 10020: {{.*}} nop
#DSO: _start:
#DSO-NEXT: 1024: {{.*}} b.eq #44
#DSO-NEXT: 1028: {{.*}} b.eq #56
#DSO-NEXT: 102c: {{.*}} b.eq #68
#DSO-NEXT: 10024: {{.*}} b.eq #44
#DSO-NEXT: 10028: {{.*}} b.eq #56
#DSO-NEXT: 1002c: {{.*}} b.eq #68
#DSO-NEXT: Disassembly of section .plt:
#DSO-NEXT: .plt:
#DSO-NEXT: 1030: {{.*}} stp x16, x30, [sp, #-16]!
#DSO-NEXT: 1034: {{.*}} adrp x16, #8192
#DSO-NEXT: 1038: {{.*}} ldr x17, [x16, #16]
#DSO-NEXT: 103c: {{.*}} add x16, x16, #16
#DSO-NEXT: 1040: {{.*}} br x17
#DSO-NEXT: 1044: {{.*}} nop
#DSO-NEXT: 1048: {{.*}} nop
#DSO-NEXT: 104c: {{.*}} nop
#DSO-NEXT: 1050: {{.*}} adrp x16, #8192
#DSO-NEXT: 1054: {{.*}} ldr x17, [x16, #24]
#DSO-NEXT: 1058: {{.*}} add x16, x16, #24
#DSO-NEXT: 105c: {{.*}} br x17
#DSO-NEXT: 1060: {{.*}} adrp x16, #8192
#DSO-NEXT: 1064: {{.*}} ldr x17, [x16, #32]
#DSO-NEXT: 1068: {{.*}} add x16, x16, #32
#DSO-NEXT: 106c: {{.*}} br x17
#DSO-NEXT: 1070: {{.*}} adrp x16, #8192
#DSO-NEXT: 1074: {{.*}} ldr x17, [x16, #40]
#DSO-NEXT: 1078: {{.*}} add x16, x16, #40
#DSO-NEXT: 107c: {{.*}} br x17
#DSO-NEXT: 10030: {{.*}} stp x16, x30, [sp, #-16]!
#DSO-NEXT: 10034: {{.*}} adrp x16, #131072
#DSO-NEXT: 10038: {{.*}} ldr x17, [x16, #16]
#DSO-NEXT: 1003c: {{.*}} add x16, x16, #16
#DSO-NEXT: 10040: {{.*}} br x17
#DSO-NEXT: 10044: {{.*}} nop
#DSO-NEXT: 10048: {{.*}} nop
#DSO-NEXT: 1004c: {{.*}} nop
#DSO-NEXT: 10050: {{.*}} adrp x16, #131072
#DSO-NEXT: 10054: {{.*}} ldr x17, [x16, #24]
#DSO-NEXT: 10058: {{.*}} add x16, x16, #24
#DSO-NEXT: 1005c: {{.*}} br x17
#DSO-NEXT: 10060: {{.*}} adrp x16, #131072
#DSO-NEXT: 10064: {{.*}} ldr x17, [x16, #32]
#DSO-NEXT: 10068: {{.*}} add x16, x16, #32
#DSO-NEXT: 1006c: {{.*}} br x17
#DSO-NEXT: 10070: {{.*}} adrp x16, #131072
#DSO-NEXT: 10074: {{.*}} ldr x17, [x16, #40]
#DSO-NEXT: 10078: {{.*}} add x16, x16, #40
#DSO-NEXT: 1007c: {{.*}} br x17

.globl _start
_start:
Expand Down
34 changes: 17 additions & 17 deletions lld/test/ELF/aarch64-copy.s
Expand Up @@ -22,7 +22,7 @@ _start:
// CHECK-NEXT: SHF_ALLOC
// CHECK-NEXT: SHF_WRITE
// CHECK-NEXT: ]
// CHECK-NEXT: Address: 0x13000
// CHECK-NEXT: Address: 0x40000
// CHECK-NEXT: Offset:
// CHECK-NEXT: Size: 24
// CHECK-NEXT: Link:
Expand All @@ -32,19 +32,19 @@ _start:
// CHECK: Relocations [
// CHECK-NEXT: Section ({{.*}}) .rela.dyn {
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x13000
// CHECK-NEXT: Offset: 0x40000
// CHECK-NEXT: Type: R_AARCH64_COPY
// CHECK-NEXT: Symbol: x
// CHECK-NEXT: Addend: 0x0
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x13010
// CHECK-NEXT: Offset: 0x40010
// CHECK-NEXT: Type: R_AARCH64_COPY
// CHECK-NEXT: Symbol: y
// CHECK-NEXT: Addend: 0x0
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x13014
// CHECK-NEXT: Offset: 0x40014
// CHECK-NEXT: Type: R_AARCH64_COPY
// CHECK-NEXT: Symbol: z
// CHECK-NEXT: Addend: 0x0
Expand All @@ -54,21 +54,21 @@ _start:

// CHECK: Symbols [
// CHECK: Name: x
// CHECK-NEXT: Value: 0x13000
// CHECK-NEXT: Value: 0x40000
// CHECK-NEXT: Size: 4
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Object
// CHECK-NEXT: Other:
// CHECK-NEXT: Section: .bss
// CHECK: Name: y
// CHECK-NEXT: Value: 0x13010
// CHECK-NEXT: Value: 0x40010
// CHECK-NEXT: Size: 4
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Object
// CHECK-NEXT: Other:
// CHECK-NEXT: Section: .bss
// CHECK: Name: z
// CHECK-NEXT: Value: 0x13014
// CHECK-NEXT: Value: 0x40014
// CHECK-NEXT: Size: 4
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Object
Expand All @@ -78,16 +78,16 @@ _start:

// CODE: Disassembly of section .text:
// CODE-NEXT: _start:
// S(x) = 0x13000, A = 0, P = 0x11000
// S + A - P = 0x2000 = 8208
// CODE-NEXT: 11000: {{.*}} adr x1, #8192
// S(y) = 0x13010, A = 0, P = 0x11004
// Page(S + A) - Page(P) = 0x13000 - 0x11000 = 0x2000 = 8192
// CODE-NEXT: 11004: {{.*}} adrp x2, #8192
// S(y) = 0x13010, A = 0
// S(x) = 0x40000, A = 0, P = 0x20000
// S + A - P = 0x20000 = 131072
// CODE-NEXT: 20000: {{.*}} adr x1, #131072
// S(y) = 0x40010, A = 0, P = 0x20004
// Page(S + A) - Page(P) = 0x40000 - 0x20000 = 0x20000 = 131072
// CODE-NEXT: 20004: {{.*}} adrp x2, #131072
// S(y) = 0x40010, A = 0
// (S + A) & 0xFFF = 0x10 = 16
// CODE-NEXT: 11008: {{.*}} add x2, x2, #16
// CODE-NEXT: 20008: {{.*}} add x2, x2, #16

// RODATA: Contents of section .rodata:
// S(z) = 0x13014
// RODATA-NEXT: 101c8 14300100
// S(z) = 0x40014
// RODATA-NEXT: 101c8 14000400
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-copy2.s
Expand Up @@ -19,7 +19,7 @@ _start:
// CHECK-NEXT: Section: Undefined

// CHECK: Name: foo
// CHECK-NEXT: Value: 0x11030
// CHECK-NEXT: Value: 0x20030
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: Function
Expand Down
8 changes: 4 additions & 4 deletions lld/test/ELF/aarch64-data-relocs.s
Expand Up @@ -12,12 +12,12 @@ _start:
// S = 0x100, A = 0x24
// S + A = 0x124
// CHECK: Contents of section .R_AARCH64_ABS64:
// CHECK-NEXT: 11000 24010000 00000000
// CHECK-NEXT: 20000 24010000 00000000

.section .R_AARCH64_PREL64, "ax",@progbits
.xword foo - . + 0x24

// S = 0x100, A = 0x24, P = 0x11008
// S + A - P = 0xfffffffffffef11c
// S = 0x100, A = 0x24, P = 0x20008
// S + A - P = 0xfffffffffffe011c
// CHECK: Contents of section .R_AARCH64_PREL64:
// CHECK-NEXT: 11008 1cf1feff ffffffff
// CHECK-NEXT: 20008 1c01feff ffffffff
56 changes: 28 additions & 28 deletions lld/test/ELF/aarch64-gnu-ifunc.s
Expand Up @@ -22,8 +22,8 @@
// CHECK-NEXT: }
// CHECK: Relocations [
// CHECK-NEXT: Section ({{.*}}) .rela.plt {
// CHECK-NEXT: 0x12018 R_AARCH64_IRELATIVE
// CHECK-NEXT: 0x12020 R_AARCH64_IRELATIVE
// CHECK-NEXT: 0x30018 R_AARCH64_IRELATIVE
// CHECK-NEXT: 0x30020 R_AARCH64_IRELATIVE
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK: Symbols [
Expand All @@ -38,7 +38,7 @@
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: $x.0
// CHECK-NEXT: Value: 0x11000
// CHECK-NEXT: Value: 0x20000
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
// CHECK-NEXT: Type: None
Expand Down Expand Up @@ -69,7 +69,7 @@
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: _start
// CHECK-NEXT: Value: 0x11008
// CHECK-NEXT: Value: 0x20008
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
Expand All @@ -78,7 +78,7 @@
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: bar
// CHECK-NEXT: Value: 0x11004
// CHECK-NEXT: Value: 0x20004
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: GNU_IFunc
Expand All @@ -87,7 +87,7 @@
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: foo
// CHECK-NEXT: Value: 0x11000
// CHECK-NEXT: Value: 0x20000
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: GNU_IFunc
Expand All @@ -100,32 +100,32 @@
// 392 = 0x188
// DISASM: Disassembly of section .text:
// DISASM-NEXT: foo:
// DISASM-NEXT: 11000: c0 03 5f d6 ret
// DISASM-NEXT: 20000: c0 03 5f d6 ret
// DISASM: bar:
// DISASM-NEXT: 11004: c0 03 5f d6 ret
// DISASM-NEXT: 20004: c0 03 5f d6 ret
// DISASM: _start:
// DISASM-NEXT: 11008: 0e 00 00 94 bl #56
// DISASM-NEXT: 1100c: 11 00 00 94 bl #68
// DISASM-NEXT: 11010: 42 60 05 91 add x2, x2, #344
// DISASM-NEXT: 11014: 42 20 06 91 add x2, x2, #392
// DISASM-NEXT: 20008: 0e 00 00 94 bl #56
// DISASM-NEXT: 2000c: 11 00 00 94 bl #68
// DISASM-NEXT: 20010: 42 60 05 91 add x2, x2, #344
// DISASM-NEXT: 20014: 42 20 06 91 add x2, x2, #392
// DISASM-NEXT: Disassembly of section .plt:
// DISASM-NEXT: .plt:
// DISASM-NEXT: 11020: f0 7b bf a9 stp x16, x30, [sp, #-16]!
// DISASM-NEXT: 11024: 10 00 00 b0 adrp x16, #4096
// DISASM-NEXT: 11028: 11 0a 40 f9 ldr x17, [x16, #16]
// DISASM-NEXT: 1102c: 10 42 00 91 add x16, x16, #16
// DISASM-NEXT: 11030: 20 02 1f d6 br x17
// DISASM-NEXT: 11034: 1f 20 03 d5 nop
// DISASM-NEXT: 11038: 1f 20 03 d5 nop
// DISASM-NEXT: 1103c: 1f 20 03 d5 nop
// DISASM-NEXT: 11040: 10 00 00 b0 adrp x16, #4096
// DISASM-NEXT: 11044: 11 0e 40 f9 ldr x17, [x16, #24]
// DISASM-NEXT: 11048: 10 62 00 91 add x16, x16, #24
// DISASM-NEXT: 1104c: 20 02 1f d6 br x17
// DISASM-NEXT: 11050: 10 00 00 b0 adrp x16, #4096
// DISASM-NEXT: 11054: 11 12 40 f9 ldr x17, [x16, #32]
// DISASM-NEXT: 11058: 10 82 00 91 add x16, x16, #32
// DISASM-NEXT: 1105c: 20 02 1f d6 br x17
// DISASM-NEXT: 20020: f0 7b bf a9 stp x16, x30, [sp, #-16]!
// DISASM-NEXT: 20024: 90 00 00 90 adrp x16, #65536
// DISASM-NEXT: 20028: 11 0a 40 f9 ldr x17, [x16, #16]
// DISASM-NEXT: 2002c: 10 42 00 91 add x16, x16, #16
// DISASM-NEXT: 20030: 20 02 1f d6 br x17
// DISASM-NEXT: 20034: 1f 20 03 d5 nop
// DISASM-NEXT: 20038: 1f 20 03 d5 nop
// DISASM-NEXT: 2003c: 1f 20 03 d5 nop
// DISASM-NEXT: 20040: 90 00 00 90 adrp x16, #65536
// DISASM-NEXT: 20044: 11 0e 40 f9 ldr x17, [x16, #24]
// DISASM-NEXT: 20048: 10 62 00 91 add x16, x16, #24
// DISASM-NEXT: 2004c: 20 02 1f d6 br x17
// DISASM-NEXT: 20050: 90 00 00 90 adrp x16, #65536
// DISASM-NEXT: 20054: 11 12 40 f9 ldr x17, [x16, #32]
// DISASM-NEXT: 20058: 10 82 00 91 add x16, x16, #32
// DISASM-NEXT: 2005c: 20 02 1f d6 br x17

.text
.type foo STT_GNU_IFUNC
Expand Down
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-prel16.s
Expand Up @@ -14,7 +14,7 @@ _start:
// the change of the address of the .data section.
// You may found the correct address in the aarch64_abs16.s test,
// if it is already fixed. Then, update addends accordingly.
// RUN: ld.lld %t.o %t256.o -o %t2
// RUN: ld.lld -z max-page-size=4096 %t.o %t256.o -o %t2
// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s

// CHECK: Contents of section .data:
Expand Down
2 changes: 1 addition & 1 deletion lld/test/ELF/aarch64-prel32.s
Expand Up @@ -14,7 +14,7 @@ _start:
// the change of the address of the .data section.
// You may found the correct address in the aarch64_abs32.s test,
// if it is already fixed. Then, update addends accordingly.
// RUN: ld.lld %t.o %t256.o -o %t2
// RUN: ld.lld -z max-page-size=4096 %t.o %t256.o -o %t2
// RUN: llvm-objdump -s -section=.data %t2 | FileCheck %s

// CHECK: Contents of section .data:
Expand Down

0 comments on commit ee8dcfb

Please sign in to comment.