This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[Patch, BFD, AArch64] Fix PT_GNU_PROPERTY alignment issue
- From: Sudakshina Das <Sudi dot Das at arm dot com>
- To: "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: nd <nd at arm dot com>, "nickc at redhat dot com" <nickc at redhat dot com>, Richard Earnshaw <Richard dot Earnshaw at arm dot com>, Ramana Radhakrishnan <Ramana dot Radhakrishnan at arm dot com>
- Date: Wed, 5 Jun 2019 10:07:16 +0000
- Subject: [Patch, BFD, AArch64] Fix PT_GNU_PROPERTY alignment issue
Hi
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.
Built and regression tested on aarch64-none-linux-gnu and added new
tests to check the alignment.
Is this ok to commit?
Thanks
Sudi
bfd/ChangeLog:
2019-xx-xx 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-xx-xx 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.
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index d16f2ecc1ff53f6667993162bcd2d69889ec2585..350a2c7a24f8cded9a61072f46f31a4433a3ac70 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -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;
}
}
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index c1a94957aae77a82926dbfa4f9790fb3e387665d..d0a588c5f92158f4fa39ed0078c6abd1bd699a4d 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -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
index 0000000000000000000000000000000000000000..35dd28f9ef75681a1a357eb08426901a9664e4fc
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-bti-pac4-a.d
@@ -0,0 +1,11 @@
+#name: PT_GNU_PROPERTY alignment
+#source: property-bti-pac4.s
+#as: -mabi=lp64
+#ld: --force-bti -e main
+#readelf: -l --wide
+#target: *linux*
+#warning: .*property-bti-pac4.*: warning: BTI turned on by --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
index 0000000000000000000000000000000000000000..c5961073e566f9ce2d7740adbafb840a700e9bc5
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-bti-pac4-b.d
@@ -0,0 +1,11 @@
+#name: PT_GNU_PROPERTY alignment ILP32
+#source: property-bti-pac4.s
+#as: -mabi=ilp32
+#ld: -m [aarch64_choose_ilp32_emul] --force-bti -e main
+#readelf: -l --wide
+#target: *linux*
+#warning: .*property-bti-pac4.*: warning: BTI turned on by --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
index 0000000000000000000000000000000000000000..a1122ff8e653de2776bcc1902661482ad0e0ee66
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-bti-pac4.s
@@ -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