]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
AArch64 variant PCS tests: remove RWX permissions on segments
authorMatthieu Longo <matthieu.longo@arm.com>
Wed, 21 May 2025 10:20:40 +0000 (11:20 +0100)
committerMatthieu Longo <matthieu.longo@arm.com>
Wed, 11 Jun 2025 11:16:58 +0000 (12:16 +0100)
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

ld/testsuite/ld-aarch64/variant_pcs-now.d
ld/testsuite/ld-aarch64/variant_pcs-r.d
ld/testsuite/ld-aarch64/variant_pcs-shared.d
ld/testsuite/ld-aarch64/variant_pcs.ld

index 50076322f7ac6c931ab0744ac166367f2b4dfe93..1add2bb605818e7d2a1595155989ec1af9e8b0ab 100644 (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
index 2651a68c935fb6ebf72725bae70e1d3953c90c20..65849e125c9672d1424b074f9996ca404c804995 100644 (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
index e0217999fd198831b23b345a300260730e3ab204..3a39d8cc6a148fd2338b4f87b474d3a5257f25ea 100644 (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
index 0f515324814a6ffd2bbf47814702ced564a7c712..cadecd8de901e8197a0449c6276bca771e903b22 100644 (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)) }
 }