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:
    <ELF file> 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
This commit is contained in:
Matthieu Longo
2025-05-21 11:20:40 +01:00
parent 1905f68578
commit 49cc1a2cca
4 changed files with 124 additions and 114 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)) }
}