[BFD, AArch64] Fix PT_GNU_PROPERTY alignment issue
authorSudakshina Das <sudi.das@arm.com>
Thu, 6 Jun 2019 11:27:41 +0000 (12:27 +0100)
committerSudakshina Das <sudi.das@arm.com>
Thu, 6 Jun 2019 11:27:41 +0000 (12:27 +0100)
If the new GNU property section was being created by the linker
(this will happen only if none of the inputs have any GNU property
section but the command line to the linker forces a bti with
--force-bti), the alignment of the section and hence the program
header of PT_GNU_PROPERTY type was not being set correctly. This
patch fixes this issue.

bfd/ChangeLog:

2019-06-06  Sudakshina Das  <sudi.das@arm.com>

* elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set
alignment of the new gnu property section.

ld/ChangeLog:

2019-06-06  Sudakshina Das  <sudi.das@arm.com>

* testsuite/ld-aarch64/aarch64-elf.exp: Add new tests.
* testsuite/ld-aarch64/property-bti-pac4-a.d: New test.
* testsuite/ld-aarch64/property-bti-pac4-b.d: New test.
* testsuite/ld-aarch64/property-bti-pac4.s: New test.

bfd/ChangeLog
bfd/elfxx-aarch64.c
ld/ChangeLog
ld/testsuite/ld-aarch64/aarch64-elf.exp
ld/testsuite/ld-aarch64/property-bti-pac4-a.d [new file with mode: 0644]
ld/testsuite/ld-aarch64/property-bti-pac4-b.d [new file with mode: 0644]
ld/testsuite/ld-aarch64/property-bti-pac4.s [new file with mode: 0644]

index 69624fee8ead1f3b7264597b12c63d24edc4ec28..058e971f78e73df5bfa628548bc4c7c609e81b86 100644 (file)
@@ -1,3 +1,8 @@
+2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+
+       * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Set
+       alignment of the new gnu property section.
+
 2019-06-06  Sudakshina Das  <sudi.das@arm.com>
 
        * bfd-in.h: Change comment.
index 12490080351966a4c0cbb5ea98a98ca6c6e0bf25..33af6c22e16b7534ed2fcc8e499fafd498d6835e 100644 (file)
@@ -695,6 +695,7 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
   bfd *pbfd;
   bfd *ebfd = NULL;
   elf_property *prop;
+  unsigned align;
 
   uint32_t gnu_prop = *gprop;
 
@@ -743,6 +744,13 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
            info->callbacks->einfo (
              _("%F%P: failed to create GNU property section\n"));
 
+          align = (bfd_get_mach (ebfd) & bfd_mach_aarch64_ilp32) ? 2 : 3;
+          if (!bfd_set_section_alignment (ebfd, sec, align))
+            {
+              info->callbacks->einfo (_("%F%pA: failed to align section\n"),
+                                      sec);
+            }
+
          elf_section_type (sec) = SHT_NOTE;
        }
     }
index 4d747af1a960f3f73a08227aac2b6046538162fc..acbbf946378246dbbc81100083c96ac46dae2352 100644 (file)
@@ -1,3 +1,10 @@
+2019-06-06  Sudakshina Das  <sudi.das@arm.com>
+
+       * testsuite/ld-aarch64/aarch64-elf.exp: Add new tests.
+       * testsuite/ld-aarch64/property-bti-pac4-a.d: New test.
+       * testsuite/ld-aarch64/property-bti-pac4-b.d: New test.
+       * testsuite/ld-aarch64/property-bti-pac4.s: New test.
+
 2019-06-06  Sudakshina Das  <sudi.das@arm.com>
 
        * NEWS: Update options names.
index c1a94957aae77a82926dbfa4f9790fb3e387665d..d0a588c5f92158f4fa39ed0078c6abd1bd699a4d 100644 (file)
@@ -381,6 +381,8 @@ run_dump_test_lp64 "pie-bind-locally"
 run_dump_test "property-bti-pac1"
 run_dump_test "property-bti-pac2"
 run_dump_test "property-bti-pac3"
+run_dump_test "property-bti-pac4-a"
+run_dump_test "property-bti-pac4-b"
 run_dump_test "bti-plt-1"
 run_dump_test "bti-plt-2"
 
diff --git a/ld/testsuite/ld-aarch64/property-bti-pac4-a.d b/ld/testsuite/ld-aarch64/property-bti-pac4-a.d
new file mode 100644 (file)
index 0000000..d9aa5cf
--- /dev/null
@@ -0,0 +1,11 @@
+#name: PT_GNU_PROPERTY alignment
+#source: property-bti-pac4.s
+#as: -mabi=lp64
+#ld: -z force-bti -e main
+#readelf: -l --wide
+#target: *linux*
+#warning: .*property-bti-pac4.*: warning: BTI turned on by -z force-bti.*
+
+#...
+  GNU_PROPERTY .* +0x8
+#...
diff --git a/ld/testsuite/ld-aarch64/property-bti-pac4-b.d b/ld/testsuite/ld-aarch64/property-bti-pac4-b.d
new file mode 100644 (file)
index 0000000..02f9fc5
--- /dev/null
@@ -0,0 +1,11 @@
+#name: PT_GNU_PROPERTY alignment ILP32
+#source: property-bti-pac4.s
+#as: -mabi=ilp32
+#ld: -m [aarch64_choose_ilp32_emul] -z force-bti -e main
+#readelf: -l --wide
+#target: *linux*
+#warning: .*property-bti-pac4.*: warning: BTI turned on by -z force-bti.*
+
+#...
+  GNU_PROPERTY .* +0x4
+#...
diff --git a/ld/testsuite/ld-aarch64/property-bti-pac4.s b/ld/testsuite/ld-aarch64/property-bti-pac4.s
new file mode 100644 (file)
index 0000000..a1122ff
--- /dev/null
@@ -0,0 +1,21 @@
+       .arch armv8-a
+       .file   "t.c"
+       .text
+       .align  2
+       .p2align 3,,7
+       .global f
+       .type   f, %function
+f:
+       add     w0, w0, 1
+       ret
+       .size   f, .-f
+       .section        .text.startup,"ax",@progbits
+       .align  2
+       .p2align 3,,7
+       .global main
+       .type   main, %function
+main:
+       mov     w0, 6
+       ret
+       .size   main, .-main
+       .section        .note.GNU-stack,"",@progbits