[BFD,AArch64] Fix PT_GNU_PROPERTY alignment issue

Message ID d0802d91-56a0-243a-c98e-419d901fc72d@arm.com
State New
Headers show
Series
  • [BFD,AArch64] Fix PT_GNU_PROPERTY alignment issue
Related show

Commit Message

Sudakshina Das June 5, 2019, 10:07 a.m.
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.

Comments

Nick Clifton June 6, 2019, 11:12 a.m. | #1
Hi 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.


Approved - please apply.

Cheers
  Nick
Sudakshina Das June 6, 2019, 11:34 a.m. | #2
Hi Nick

On 06/06/2019 12:12, Nick Clifton wrote:
> Hi 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.

> 

> Approved - please apply.


Thanks, both patches now committed!

Sudi
> 

> Cheers

>    Nick

> 

>

Patch

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