This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] [BFD, AArch64] Fix PT_GNU_PROPERTY alignment issue


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

commit 237df8fe1863bb47fcf71ce125cd962666173aaa
Author: Sudakshina Das <sudi.das@arm.com>
Date:   Thu Jun 6 12:27:41 2019 +0100

    [BFD, AArch64] Fix PT_GNU_PROPERTY alignment issue
    
    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.

Diff:
---
 bfd/ChangeLog                                 |  5 +++++
 bfd/elfxx-aarch64.c                           |  8 ++++++++
 ld/ChangeLog                                  |  7 +++++++
 ld/testsuite/ld-aarch64/aarch64-elf.exp       |  2 ++
 ld/testsuite/ld-aarch64/property-bti-pac4-a.d | 11 +++++++++++
 ld/testsuite/ld-aarch64/property-bti-pac4-b.d | 11 +++++++++++
 ld/testsuite/ld-aarch64/property-bti-pac4.s   | 21 +++++++++++++++++++++
 7 files changed, 65 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 69624fe..058e971 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
 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.
 	* bfd-in2.h: Regenerate.
 	* elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update warning.
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index 1249008..33af6c2 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/ChangeLog b/ld/ChangeLog
index 4d747af..acbbf94 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,12 @@
 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.
 	* emultempl/aarch64elf.em (OPTION_FORCE_BTI, OPTION_PAC_PLT): Remove.
 	(PARSE_AND_LIST_LONGOPTS): Remove force-bti and pac-plt.
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index c1a9495..d0a588c 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 0000000..d9aa5cf
--- /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: -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
index 0000000..02f9fc5
--- /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] -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
index 0000000..a1122ff
--- /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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]