From: Matthieu Longo Date: Wed, 21 May 2025 10:20:40 +0000 (+0100) Subject: AArch64 variant PCS tests: remove RWX permissions on segments X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=49cc1a2ccaa91d394f1086498a153b9ddd7479c4;p=thirdparty%2Fbinutils-gdb.git AArch64 variant PCS tests: remove RWX permissions on segments The symbols of variant PCS functions require special handling. The variant PCS tests check both the relocation information and the markings in the symbol table. Those tests dump a lot of addresses, so a custom linker script, variant_pcs.ld was used to control reliably the addresses of the sections. However, the linker script does not 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]. This patch reorganizes the linker script to eliminate RWX segments by changing the order of the sections and their offset. The tests needed to be amended to match the new addresses. [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/variant_pcs-now.d b/ld/testsuite/ld-aarch64/variant_pcs-now.d index 50076322f7a..1add2bb6058 100644 --- a/ld/testsuite/ld-aarch64/variant_pcs-now.d +++ b/ld/testsuite/ld-aarch64/variant_pcs-now.d @@ -4,65 +4,65 @@ #ld: -shared --hash-style=sysv -T variant_pcs.ld -z now #readelf: -rsW -Relocation section '\.rela\.plt' at offset 0x11000 contains 12 entries: +Relocation section '\.rela\.plt' at offset 0x[[:xdigit:]]+ contains 12 entries: Offset Info Type Symbol's Value Symbol's Name \+ Addend -0000000000009020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 -0000000000009028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 -0000000000009030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_base_global_default_def \+ 0 -0000000000009038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_spec_global_default_def \+ 0 -0000000000009040 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 -0000000000009050 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 -0000000000009060 0000000000000408 R_AARCH64_IRELATIVE 8038 -0000000000009068 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009070 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009078 0000000000000408 R_AARCH64_IRELATIVE 8038 +00000000000[[:xdigit:]]{2}020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 +00000000000[[:xdigit:]]{2}028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 +00000000000[[:xdigit:]]{2}030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000011000 f_base_global_default_def \+ 0 +00000000000[[:xdigit:]]{2}038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000011000 f_spec_global_default_def \+ 0 +00000000000[[:xdigit:]]{2}040 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +00000000000[[:xdigit:]]{2}050 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +00000000000[[:xdigit:]]{2}060 0000000000000408 R_AARCH64_IRELATIVE 11038 +00000000000[[:xdigit:]]{2}068 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}070 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}078 0000000000000408 R_AARCH64_IRELATIVE 11038 Symbol table '\.dynsym' contains 7 entries: Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND\s 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc - 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def - 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + 3: 0000000000011000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_ifunc + 4: 0000000000011000 0 NOTYPE GLOBAL DEFAULT 6 f_base_global_default_def + 5: 0000000000011000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_def + 6: 0000000000011000 0 IFUNC GLOBAL DEFAULT 6 f_base_global_default_ifunc Symbol table '\.symtab' contains 35 entries: Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND - 1: 0000000000008000 0 SECTION LOCAL DEFAULT 1.* - 2: 0000000000008070 0 SECTION LOCAL DEFAULT 2.* - 3: 0000000000009000 0 SECTION LOCAL DEFAULT 3.* - 4: 0000000000009080 0 SECTION LOCAL DEFAULT 4.* - 5: 0000000000011000 0 SECTION LOCAL DEFAULT 5.* - 6: 0000000000011120 0 SECTION LOCAL DEFAULT 6.* - 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7.* - 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8.* + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND\s + 1: 00000000000080e8 0 SECTION LOCAL DEFAULT 1 \.hash + 2: 0000000000008118 0 SECTION LOCAL DEFAULT 2 \.dynsym + 3: 00000000000081c0 0 SECTION LOCAL DEFAULT 3 \.dynstr + 4: 0000000000009000 0 SECTION LOCAL DEFAULT 4 \.rela\.plt + 5: 0000000000010000 0 SECTION LOCAL DEFAULT 5 \.plt + 6: 0000000000011000 0 SECTION LOCAL DEFAULT 6 \.text + 7: 0000000000020000 0 SECTION LOCAL DEFAULT 7 \.dynamic + 8: 0000000000021000 0 SECTION LOCAL DEFAULT 8 \.got 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o - 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local - 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc - 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc - 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local - 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x + 10: 0000000000011000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local + 11: 0000000000011000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local_ifunc + 12: 0000000000011000 0 IFUNC LOCAL DEFAULT 6 f_base_local_ifunc + 13: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 f_base_local + 14: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 \$x 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o - 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 - 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc - 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc - 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 - 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x - 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS - 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC - 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def - 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc - 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def - 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ - 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc - 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x + 16: 0000000000011038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local2 + 17: 0000000000011038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local2_ifunc + 18: 0000000000011038 0 IFUNC LOCAL DEFAULT 6 f_base_local2_ifunc + 19: 0000000000011038 0 NOTYPE LOCAL DEFAULT 6 f_base_local2 + 20: 0000000000011038 0 NOTYPE LOCAL DEFAULT 6 \$x + 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS\s + 22: 0000000000020000 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC + 23: 0000000000011000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_hidden_def + 24: 0000000000011000 0 IFUNC LOCAL DEFAULT 6 f_base_global_hidden_ifunc + 25: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 f_base_global_hidden_def + 26: 0000000000021000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ + 27: 0000000000011000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_hidden_ifunc + 28: 0000000000010000 0 NOTYPE LOCAL DEFAULT 5 \$x 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc - 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def - 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + 31: 0000000000011000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_ifunc + 32: 0000000000011000 0 NOTYPE GLOBAL DEFAULT 6 f_base_global_default_def + 33: 0000000000011000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_def + 34: 0000000000011000 0 IFUNC GLOBAL DEFAULT 6 f_base_global_default_ifunc diff --git a/ld/testsuite/ld-aarch64/variant_pcs-r.d b/ld/testsuite/ld-aarch64/variant_pcs-r.d index 2651a68c935..65849e125c9 100644 --- a/ld/testsuite/ld-aarch64/variant_pcs-r.d +++ b/ld/testsuite/ld-aarch64/variant_pcs-r.d @@ -3,7 +3,7 @@ #ld: -r #readelf: -rsW -Relocation section '\.rela\.text' at offset .* contains 24 entries: +Relocation section '\.rela\.text' at offset 0x[[:xdigit:]]+ contains 24 entries: Offset Info Type Symbol's Value Symbol's Name \+ Addend 0000000000000000 000000180000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_def \+ 0 0000000000000004 000000110000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_undef \+ 0 @@ -32,10 +32,10 @@ Relocation section '\.rela\.text' at offset .* contains 24 entries: Symbol table '\.symtab' contains 26 entries: Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND - 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1.* - 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3.* - 3: 0000000000000000 0 SECTION LOCAL DEFAULT 4.* + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND\s + 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1 \.text + 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 \.data + 3: 0000000000000000 0 SECTION LOCAL DEFAULT 4 \.bss 4: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local 6: 0000000000000000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc diff --git a/ld/testsuite/ld-aarch64/variant_pcs-shared.d b/ld/testsuite/ld-aarch64/variant_pcs-shared.d index e0217999fd1..3a39d8cc6a1 100644 --- a/ld/testsuite/ld-aarch64/variant_pcs-shared.d +++ b/ld/testsuite/ld-aarch64/variant_pcs-shared.d @@ -4,65 +4,65 @@ #ld: -shared --hash-style=sysv -T variant_pcs.ld #readelf: -rsW -Relocation section '\.rela\.plt' at offset 0x11000 contains 12 entries: +Relocation section '\.rela\.plt' at offset 0x[[:xdigit:]]+ contains 12 entries: Offset Info Type Symbol's Value Symbol's Name \+ Addend -0000000000009020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 -0000000000009028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 -0000000000009030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_base_global_default_def \+ 0 -0000000000009038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_spec_global_default_def \+ 0 -0000000000009040 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 -0000000000009050 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 -0000000000009060 0000000000000408 R_AARCH64_IRELATIVE 8038 -0000000000009068 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009070 0000000000000408 R_AARCH64_IRELATIVE 8000 -0000000000009078 0000000000000408 R_AARCH64_IRELATIVE 8038 +00000000000[[:xdigit:]]{2}020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 +00000000000[[:xdigit:]]{2}028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 +00000000000[[:xdigit:]]{2}030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000011000 f_base_global_default_def \+ 0 +00000000000[[:xdigit:]]{2}038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000011000 f_spec_global_default_def \+ 0 +00000000000[[:xdigit:]]{2}040 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +00000000000[[:xdigit:]]{2}050 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +00000000000[[:xdigit:]]{2}060 0000000000000408 R_AARCH64_IRELATIVE 11038 +00000000000[[:xdigit:]]{2}068 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}070 0000000000000408 R_AARCH64_IRELATIVE 11000 +00000000000[[:xdigit:]]{2}078 0000000000000408 R_AARCH64_IRELATIVE 11038 Symbol table '\.dynsym' contains 7 entries: Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND\s 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc - 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def - 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + 3: 0000000000011000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_ifunc + 4: 0000000000011000 0 NOTYPE GLOBAL DEFAULT 6 f_base_global_default_def + 5: 0000000000011000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_def + 6: 0000000000011000 0 IFUNC GLOBAL DEFAULT 6 f_base_global_default_ifunc Symbol table '\.symtab' contains 35 entries: Num: Value Size Type Bind Vis Ndx Name - 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND - 1: 0000000000008000 0 SECTION LOCAL DEFAULT 1.* - 2: 0000000000008070 0 SECTION LOCAL DEFAULT 2.* - 3: 0000000000009000 0 SECTION LOCAL DEFAULT 3.* - 4: 0000000000009080 0 SECTION LOCAL DEFAULT 4.* - 5: 0000000000011000 0 SECTION LOCAL DEFAULT 5.* - 6: 0000000000011120 0 SECTION LOCAL DEFAULT 6.* - 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7.* - 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8.* + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND\s + 1: 00000000000080e8 0 SECTION LOCAL DEFAULT 1 \.hash + 2: 0000000000008118 0 SECTION LOCAL DEFAULT 2 \.dynsym + 3: 00000000000081c0 0 SECTION LOCAL DEFAULT 3 \.dynstr + 4: 0000000000009000 0 SECTION LOCAL DEFAULT 4 \.rela\.plt + 5: 0000000000010000 0 SECTION LOCAL DEFAULT 5 \.plt + 6: 0000000000011000 0 SECTION LOCAL DEFAULT 6 \.text + 7: 0000000000020000 0 SECTION LOCAL DEFAULT 7 \.dynamic + 8: 0000000000021000 0 SECTION LOCAL DEFAULT 8 \.got 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o - 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local - 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc - 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc - 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local - 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x + 10: 0000000000011000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local + 11: 0000000000011000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local_ifunc + 12: 0000000000011000 0 IFUNC LOCAL DEFAULT 6 f_base_local_ifunc + 13: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 f_base_local + 14: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 \$x 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o - 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 - 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc - 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc - 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 - 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x - 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS - 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC - 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def - 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc - 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def - 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ - 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc - 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x + 16: 0000000000011038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local2 + 17: 0000000000011038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_local2_ifunc + 18: 0000000000011038 0 IFUNC LOCAL DEFAULT 6 f_base_local2_ifunc + 19: 0000000000011038 0 NOTYPE LOCAL DEFAULT 6 f_base_local2 + 20: 0000000000011038 0 NOTYPE LOCAL DEFAULT 6 \$x + 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS\s + 22: 0000000000020000 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC + 23: 0000000000011000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_hidden_def + 24: 0000000000011000 0 IFUNC LOCAL DEFAULT 6 f_base_global_hidden_ifunc + 25: 0000000000011000 0 NOTYPE LOCAL DEFAULT 6 f_base_global_hidden_def + 26: 0000000000021000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ + 27: 0000000000011000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_hidden_ifunc + 28: 0000000000010000 0 NOTYPE LOCAL DEFAULT 5 \$x 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc - 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def - 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + 31: 0000000000011000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_ifunc + 32: 0000000000011000 0 NOTYPE GLOBAL DEFAULT 6 f_base_global_default_def + 33: 0000000000011000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 6 f_spec_global_default_def + 34: 0000000000011000 0 IFUNC GLOBAL DEFAULT 6 f_base_global_default_ifunc diff --git a/ld/testsuite/ld-aarch64/variant_pcs.ld b/ld/testsuite/ld-aarch64/variant_pcs.ld index 0f515324814..cadecd8de90 100644 --- a/ld/testsuite/ld-aarch64/variant_pcs.ld +++ b/ld/testsuite/ld-aarch64/variant_pcs.ld @@ -3,21 +3,31 @@ OUTPUT_ARCH(aarch64) ENTRY(_start) SECTIONS { - /* Read-only sections, merged into text segment: */ - PROVIDE (__executable_start = 0x8000); . = 0x8000; + 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) } + . = 0x9000; + .rela.plt : { *(.rela.plt) *(.rela.iplt) } + . = 0x10000; + .plt : { *(.plt) } + . = 0x11000; .text : { *(.before) *(.text) *(.after) - } =0 - . = 0x9000; + } + + /* Start of the Read Write Data region. */ + . = ALIGN (CONSTANT (MAXPAGESIZE)); + .dynamic : { *(.dynamic) } + . = ALIGN(4K); .got : { *(.got) *(.got.plt)} - . = 0x10000; - .rela.dyn : { *(.rela.ifunc) } - . = 0x11000; - .rela.plt : { *(.rela.plt) *(.rela.iplt) } - . = 0x12340000; - .far : { *(.far) } - .ARM.attributes 0 : { *(.ARM.attributes) } + + /* Start of the metadata region. */ + .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) } }