[binutils-gdb] AArch64 variant PCS tests: remove RWX permissions on segments

Matthieu Longo mlongo@sourceware.org
Wed Jun 11 11:17:18 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=49cc1a2ccaa91d394f1086498a153b9ddd7479c4

commit 49cc1a2ccaa91d394f1086498a153b9ddd7479c4
Author: Matthieu Longo <matthieu.longo@arm.com>
Date:   Wed May 21 11:20:40 2025 +0100

    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

Diff:
---
 ld/testsuite/ld-aarch64/variant_pcs-now.d    | 98 ++++++++++++++--------------
 ld/testsuite/ld-aarch64/variant_pcs-r.d      | 10 +--
 ld/testsuite/ld-aarch64/variant_pcs-shared.d | 98 ++++++++++++++--------------
 ld/testsuite/ld-aarch64/variant_pcs.ld       | 32 +++++----
 4 files changed, 124 insertions(+), 114 deletions(-)

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


More information about the Binutils-cvs mailing list