From: Matthieu Longo Date: Wed, 21 May 2025 10:19:48 +0000 (+0100) Subject: AArch64 BTI/PAC PLT tests: remove RWX permissions on segments X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1905f68578faeeb0f2bc89c51d254200471700e3;p=thirdparty%2Fbinutils-gdb.git AArch64 BTI/PAC PLT tests: remove RWX permissions on segments The bti-far.ld and bti-plt.ld scripts don't provide information enough to the linker to assess the right set of permisssions on segments (i.e. Read/Write/Execute). This insufficiency caused the linker to bundle all the sections in a same segment with the union of all the required permissions, i.e. RWX. A segment with such lax permissions constitutes a security hole, so the linker emits the following warning message: has a LOAD segment with RWX permissions. This warning message is noisy in the tests, and has no reason to exist. This issue can be addressed in two ways: - either by providing the right set of permissions on a section so that the linker assigns them to a segment with compatible permissions. - or by providing alignment constraints so that the linker can move the sections automatically to a new segment and set the right permission for non-executable data. The second option seems to be the preferred approach, even if not explicitly recommended. Examples of linker scripts for AArch64 are available at [1]. The fixes in bti-far.ld and bti-plt.ld are the same, except that bti-far.ld also contains a ".far" section, to make sure that it generates the trampolines correctly. [1]: https://developer.arm.com/documentation/dui0474/m/gnu-ld-script-support-in -armlink/default-gnu-ld-scripts-used-by-armlink/default-ld-script-when -building-an-executable?lang=en --- diff --git a/ld/testsuite/ld-aarch64/protections/bti-and-memory-seal-plt-1-a.d b/ld/testsuite/ld-aarch64/protections/bti-and-memory-seal-plt-1-a.d index f8b1c214b2b..7409525084c 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-and-memory-seal-plt-1-a.d +++ b/ld/testsuite/ld-aarch64/protections/bti-and-memory-seal-plt-1-a.d @@ -13,7 +13,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -21,25 +21,25 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401a11 ldr x17, \[x16, #48\] .*: 9100c210 add x16, x16, #0x30 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401e11 ldr x17, \[x16, #56\] .*: 9100e210 add x16, x16, #0x38 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-far-1.d b/ld/testsuite/ld-aarch64/protections/bti-far-1.d index 63fbb43c136..eb295cffbe8 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-far-1.d +++ b/ld/testsuite/ld-aarch64/protections/bti-far-1.d @@ -13,7 +13,7 @@ Disassembly of section \.plt: 0000000000018000 <\.plt>: 18000: d503245f bti c 18004: a9bf7bf0 stp x16, x30, \[sp, #-16\]! - 18008: 900000d0 adrp x16, 30000 <_GLOBAL_OFFSET_TABLE_> + 18008: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> 1800c: f9400e11 ldr x17, \[x16, #24\] 18010: 91006210 add x16, x16, #0x18 18014: d61f0220 br x17 @@ -21,7 +21,7 @@ Disassembly of section \.plt: 1801c: d503201f nop 0000000000018020 : - 18020: 900000d0 adrp x16, 30000 <_GLOBAL_OFFSET_TABLE_> + 18020: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> 18024: f9401211 ldr x17, \[x16, #32\] 18028: 91008210 add x16, x16, #0x20 1802c: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-far-opt.d b/ld/testsuite/ld-aarch64/protections/bti-far-opt.d index cb293b6e90e..f5038c0cb72 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-far-opt.d +++ b/ld/testsuite/ld-aarch64/protections/bti-far-opt.d @@ -13,7 +13,7 @@ Disassembly of section \.plt: 0000000000018000 <\.plt>: 18000: d503245f bti c 18004: a9bf7bf0 stp x16, x30, \[sp, #-16\]! - 18008: 900000d0 adrp x16, 30000 <_GLOBAL_OFFSET_TABLE_> + 18008: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> 1800c: f9400e11 ldr x17, \[x16, #24\] 18010: 91006210 add x16, x16, #0x18 18014: d61f0220 br x17 @@ -21,7 +21,7 @@ Disassembly of section \.plt: 1801c: d503201f nop 0000000000018020 : - 18020: 900000d0 adrp x16, 30000 <_GLOBAL_OFFSET_TABLE_> + 18020: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> 18024: f9401211 ldr x17, \[x16, #32\] 18028: 91008210 add x16, x16, #0x20 1802c: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-far.ld b/ld/testsuite/ld-aarch64/protections/bti-far.ld index 214b8cb919e..1568f184a30 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-far.ld +++ b/ld/testsuite/ld-aarch64/protections/bti-far.ld @@ -2,14 +2,28 @@ OUTPUT_ARCH(aarch64) ENTRY(_start) SECTIONS { + PROVIDE(__executable_start = 0x8000); + . = SEGMENT_START("text-segment", 0x8000) + SIZEOF_HEADERS; + /* Start of the executable code region. */ + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } . = 0x10000; - .rela.plt : { *(.rela.plt) *(.rela.iplt) } + .rela.dyn : { *(.rela.ifunc) } + .rela.plt : { *(.rela.plt) *(.rela.iplt) } . = 0x18000; - .plt : { *(.plt) *(.iplt) } + .plt : { *(.plt) *(.iplt) } . = 0x20000; - .text : { *(.text) } - . = 0x30000; - .got : { *(.got) *(.got.plt) } + .text : { *(.text) } . = 0x12340000; - .far : { *(.far) } + .far : { *(.far) } + /* Start of the Read Only Data region. */ + .note.gnu-property : { *(.note.gnu-property) } + + /* Start of the Read Write Data region. */ + . = ALIGN (CONSTANT (MAXPAGESIZE)); + .got : { *(.got) *(.got.plt) } + /* Start of the metadata region. */ + .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } } diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-a.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-a.d index 96268d3e7d4..4ab1ca82e2e 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-a.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-a.d @@ -11,7 +11,7 @@ Disassembly of section \.plt: [0-9a-f]+ <\.plt>: .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,13 +20,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-b.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-b.d index 041bf22415d..ef744e16f95 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-b.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-1-b.d @@ -16,7 +16,7 @@ Disassembly of section \.plt: [0-9a-f]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -24,13 +24,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-a.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-a.d index f1ae3cd9b09..0e87bccbd3b 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-a.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-a.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9a-f]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,7 +20,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d503219f autia1716 @@ -28,7 +28,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d503219f autia1716 diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-b.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-b.d index 69ccaab4993..199585c204d 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-b.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-2-b.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -21,7 +21,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d503219f autia1716 @@ -29,7 +29,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d503219f autia1716 diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-a.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-a.d index c0c0bdb2af0..1789a98f37d 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-a.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-a.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9a-f]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,7 +20,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d503219f autia1716 @@ -28,7 +28,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d503219f autia1716 diff --git a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-b.d b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-b.d index 89a08ae6b7c..a0643ab62d4 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-b.d +++ b/ld/testsuite/ld-aarch64/protections/bti-pac-plt-3-b.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -21,7 +21,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d503219f autia1716 @@ -29,7 +29,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d503219f autia1716 diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d index 2dc38647417..89c0abc8ca0 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d +++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-a.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,13 +20,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d index 4b0e424f77e..c889c1c9c46 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d +++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-b.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,13 +20,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d b/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d index 2fd0dea08cd..c200b0c2dbf 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d +++ b/ld/testsuite/ld-aarch64/protections/bti-plt-1-c.d @@ -13,7 +13,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -21,13 +21,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt-3.d b/ld/testsuite/ld-aarch64/protections/bti-plt-3.d index e457babb4ce..48db4341b71 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-plt-3.d +++ b/ld/testsuite/ld-aarch64/protections/bti-plt-3.d @@ -12,7 +12,7 @@ Disassembly of section \.plt: [0-9]+ <\.plt>: .*: d503245f bti c .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -21,7 +21,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 @@ -29,7 +29,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: d503245f bti c -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/bti-plt.ld b/ld/testsuite/ld-aarch64/protections/bti-plt.ld index cab42091869..c930fc8c372 100644 --- a/ld/testsuite/ld-aarch64/protections/bti-plt.ld +++ b/ld/testsuite/ld-aarch64/protections/bti-plt.ld @@ -2,13 +2,26 @@ OUTPUT_ARCH(aarch64) ENTRY(_start) SECTIONS { + PROVIDE(__executable_start = 0x8000); + . = SEGMENT_START("text-segment", 0x8000) + SIZEOF_HEADERS; + /* Start of the executable code region. */ + .hash : { *(.hash) } + .gnu.hash : { *(.gnu.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } . = 0x10000; - .rela.plt : { *(.rela.plt) *(.rela.iplt) } + .rela.dyn : { *(.rela.ifunc) } + .rela.plt : { *(.rela.plt) *(.rela.iplt) } . = 0x18000; - .plt : { *(.plt) *(.iplt) } + .plt : { *(.plt) *(.iplt) } . = 0x20000; - .text : { *(.text) } - . = 0x28000; - .got : { *(.got) *(.got.plt) } - .ARM.attributes 0 : { *(.ARM.attributes) } + .text : { *(.text) } + /* Start of the Read Only Data region. */ + .note.gnu-property : { *(.note.gnu-property) } + + /* Start of the Read Write Data region. */ + . = ALIGN (CONSTANT (MAXPAGESIZE)); + .got : { *(.got) *(.got.plt) } + /* Start of the metadata region. */ + .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } } diff --git a/ld/testsuite/ld-aarch64/protections/pac-plt-1-a.d b/ld/testsuite/ld-aarch64/protections/pac-plt-1-a.d index fc10ec7070b..203cb12d11b 100644 --- a/ld/testsuite/ld-aarch64/protections/pac-plt-1-a.d +++ b/ld/testsuite/ld-aarch64/protections/pac-plt-1-a.d @@ -11,7 +11,7 @@ Disassembly of section \.plt: [0-9]+ <.*>: .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -20,7 +20,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d503219f autia1716 @@ -28,7 +28,7 @@ Disassembly of section \.plt: .*: d503201f nop [0-9]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d503219f autia1716 diff --git a/ld/testsuite/ld-aarch64/protections/pac-plt-1-b.d b/ld/testsuite/ld-aarch64/protections/pac-plt-1-b.d index 7a0fd59718d..6592689ff5f 100644 --- a/ld/testsuite/ld-aarch64/protections/pac-plt-1-b.d +++ b/ld/testsuite/ld-aarch64/protections/pac-plt-1-b.d @@ -15,7 +15,7 @@ Disassembly of section \.plt: [0-9a-f]+ <\.plt>: .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9400e11 ldr x17, \[x16, #24\] .*: 91006210 add x16, x16, #0x18 .*: d61f0220 br x17 @@ -24,13 +24,13 @@ Disassembly of section \.plt: .*: d503201f nop [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401211 ldr x17, \[x16, #32\] .*: 91008210 add x16, x16, #0x20 .*: d61f0220 br x17 [0-9a-f]+ <.*>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401611 ldr x17, \[x16, #40\] .*: 9100a210 add x16, x16, #0x28 .*: d61f0220 br x17 diff --git a/ld/testsuite/ld-aarch64/protections/pac-plt-2.d b/ld/testsuite/ld-aarch64/protections/pac-plt-2.d index 1c3d7f4b131..67956451b8e 100644 --- a/ld/testsuite/ld-aarch64/protections/pac-plt-2.d +++ b/ld/testsuite/ld-aarch64/protections/pac-plt-2.d @@ -9,7 +9,7 @@ Disassembly of section \.plt: .* \<.plt\>: .*: a9bf7bf0 stp x16, x30, \[sp, #-16\]! -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401a11 ldr x17, \[x16, #48\] .*: 9100c210 add x16, x16, #0x30 .*: d61f0220 br x17 @@ -19,7 +19,7 @@ Disassembly of section \.plt: .* \<__tls_get_addr@plt\>: -.*: 90000090 adrp x16, 28000 <_GLOBAL_OFFSET_TABLE_> +.*: [[:xdigit:]]{8} adrp x16, [[:xdigit:]]+ <_GLOBAL_OFFSET_TABLE_> .*: f9401e11 ldr x17, \[x16, #56\] .*: 9100e210 add x16, x16, #0x38 .*: d503219f autia1716