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] Always use align_size as pr_datasz for GNU_PROPERTY_STACK_SIZE


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

commit 9c973a29df61c411e24ce51b13401333c6f6e0e7
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Aug 9 04:29:43 2018 -0700

    Always use align_size as pr_datasz for GNU_PROPERTY_STACK_SIZE
    
    For GNU_PROPERTY_STACK_SIZE, pr_datasz is the same as align_size, which
    is 8 bytes for 64-bit ELF binaries and 4 bytes for 32-bit ELF binaries,
    Use align_size as pr_datasz for GNU_PROPERTY_STACK_SIZE to convert
    .note.gnu.property section.
    
    bfd/
    
    	PR binutils/23494
    	* elf-properties.c (elf_get_gnu_property_section_size): Always
    	use align_size as pr_datasz for GNU_PROPERTY_STACK_SIZE.
    	(elf_write_gnu_properties): Likewise.
    
    binutils/
    
    	PR binutils/23494
    	* testsuite/binutils-all/x86-64/pr23494c.s: New file.
    	* testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise.
    	* testsuite/binutils-all/x86-64/pr23494e.d: Likewise.

Diff:
---
 bfd/ChangeLog                                      |   7 ++
 bfd/elf-properties.c                               |  22 ++--
 binutils/ChangeLog                                 |   7 ++
 binutils/testsuite/binutils-all/x86-64/pr23494c.s  | 123 +++++++++++++++++++++
 .../testsuite/binutils-all/x86-64/pr23494e-x32.d   |  13 +++
 binutils/testsuite/binutils-all/x86-64/pr23494e.d  |  13 +++
 6 files changed, 178 insertions(+), 7 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d4bed23..20aa4f3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR binutils/23494
+	* elf-properties.c (elf_get_gnu_property_section_size): Always
+	use align_size as pr_datasz for GNU_PROPERTY_STACK_SIZE.
+	(elf_write_gnu_properties): Likewise.
+
 2018-08-08  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR binutils/23494
diff --git a/bfd/elf-properties.c b/bfd/elf-properties.c
index 0ac0555..f58bdc0 100644
--- a/bfd/elf-properties.c
+++ b/bfd/elf-properties.c
@@ -320,7 +320,12 @@ elf_get_gnu_property_section_size (elf_property_list *list,
   for (; list != NULL; list = list->next)
     {
       /* There are 4 byte type + 4 byte datasz for each property.  */
-      size += 4 + 4 + list->property.pr_datasz;
+      unsigned int datasz;
+      if (list->property.pr_type == GNU_PROPERTY_STACK_SIZE)
+	datasz = align_size;
+      else
+	datasz = list->property.pr_datasz;
+      size += 4 + 4 + datasz;
       /* Align each property.  */
       size = (size + (align_size - 1)) & ~(align_size - 1);
     }
@@ -336,6 +341,7 @@ elf_write_gnu_properties (bfd *abfd, bfd_byte *contents,
 			  unsigned int align_size)
 {
   unsigned int descsz;
+  unsigned int datasz;
   Elf_External_Note *e_note;
 
   e_note = (Elf_External_Note *) contents;
@@ -350,17 +356,19 @@ elf_write_gnu_properties (bfd *abfd, bfd_byte *contents,
   for (; list != NULL; list = list->next)
     {
       /* There are 4 byte type + 4 byte datasz for each property.  */
-      bfd_h_put_32 (abfd, list->property.pr_type,
-		    contents + size);
-      bfd_h_put_32 (abfd, list->property.pr_datasz,
-		    contents + size + 4);
+      if (list->property.pr_type == GNU_PROPERTY_STACK_SIZE)
+	datasz = align_size;
+      else
+	datasz = list->property.pr_datasz;
+      bfd_h_put_32 (abfd, list->property.pr_type, contents + size);
+      bfd_h_put_32 (abfd, datasz, contents + size + 4);
       size += 4 + 4;
 
       /* Write out property value.  */
       switch (list->property.pr_kind)
 	{
 	case property_number:
-	  switch (list->property.pr_datasz)
+	  switch (datasz)
 	    {
 	    default:
 	      /* Never should happen.  */
@@ -385,7 +393,7 @@ elf_write_gnu_properties (bfd *abfd, bfd_byte *contents,
 	  /* Never should happen.  */
 	  abort ();
 	}
-      size += list->property.pr_datasz;
+      size += datasz;
 
       /* Align each property.  */
       size = (size + (align_size - 1)) & ~ (align_size - 1);
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index b618044..071a005 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,12 @@
 2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
 
+	PR binutils/23494
+	* testsuite/binutils-all/x86-64/pr23494c.s: New file.
+	* testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise.
+	* testsuite/binutils-all/x86-64/pr23494e.d: Likewise.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* testsuite/binutils-all/x86-64/pr23494a-x32.d: Skip nacl
 	targets.
 	* testsuite/binutils-all/x86-64/pr23494a.d: Likewise.
diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494c.s b/binutils/testsuite/binutils-all/x86-64/pr23494c.s
new file mode 100644
index 0000000..a478e7a
--- /dev/null
+++ b/binutils/testsuite/binutils-all/x86-64/pr23494c.s
@@ -0,0 +1,123 @@
+	.section ".note.gnu.property", "a"
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	.long 1f - 0f		/* name length.  */
+	.long 3f - 1f		/* data length.  */
+	/* NT_GNU_PROPERTY_TYPE_0 */
+	.long 5			/* note type.  */
+0:
+	.asciz "GNU"		/* vendor name.  */
+1:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	/* GNU_PROPERTY_STACK_SIZE */
+	.long 1			/* pr_type.  */
+	.long 5f - 4f		/* pr_datasz.  */
+4:
+	.dc.a -1
+5:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+3:
+
+	.section ".note.gnu.property", "a"
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	.long 1f - 0f		/* name length.  */
+	.long 3f - 1f		/* data length.  */
+	/* NT_GNU_PROPERTY_TYPE_0 */
+	.long 5			/* note type.  */
+0:
+	.asciz "GNU"		/* vendor name.  */
+1:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	/* GNU_PROPERTY_X86_ISA_1_USED */
+	.long 0xc0000000	/* pr_type.  */
+	.long 5f - 4f		/* pr_datasz.  */
+4:
+	.long 0xa
+5:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+3:
+
+	.section ".note.gnu.property", "a"
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	.long 1f - 0f		/* name length.  */
+	.long 3f - 1f		/* data length.  */
+	/* NT_GNU_PROPERTY_TYPE_0 */
+	.long 5			/* note type.  */
+0:
+	.asciz "GNU"		/* vendor name.  */
+1:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	/* GNU_PROPERTY_X86_ISA_1_NEEDED */
+	.long 0xc0000001	/* pr_type.  */
+	.long 5f - 4f		/* pr_datasz.  */
+4:
+	.long 0xa0
+5:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+3:
+
+	.section ".note.gnu.property", "a"
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	.long 1f - 0f		/* name length.  */
+	.long 3f - 1f		/* data length.  */
+	/* NT_GNU_PROPERTY_TYPE_0 */
+	.long 5			/* note type.  */
+0:
+	.asciz "GNU"		/* vendor name.  */
+1:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+	/* GNU_PROPERTY_X86_ISA_1_USED */
+	.long 0xc0000000	/* pr_type.  */
+	.long 5f - 4f		/* pr_datasz.  */
+4:
+	.long 0xa0
+5:
+.ifdef __64_bit__
+	.p2align 3
+.else
+	.p2align 2
+.endif
+3:
diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d b/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d
new file mode 100644
index 0000000..825f45d
--- /dev/null
+++ b/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d
@@ -0,0 +1,13 @@
+#PROG: objcopy
+#source: pr23494c.s
+#as: --x32
+#objcopy: -O elf64-x86-64 --decompress-debug-sections
+#readelf: -n
+#not-target: x86_64-*-nacl*
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size	Description
+  GNU                  0x00000030	NT_GNU_PROPERTY_TYPE_0
+      Properties: stack size: 0xffffffff
+	x86 ISA used: 586, SSE, SSE3, SSE4_1
+	x86 ISA needed: SSE3, SSE4_1
diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494e.d b/binutils/testsuite/binutils-all/x86-64/pr23494e.d
new file mode 100644
index 0000000..ffb8988
--- /dev/null
+++ b/binutils/testsuite/binutils-all/x86-64/pr23494e.d
@@ -0,0 +1,13 @@
+#PROG: objcopy
+#source: pr23494c.s
+#as: --64 -defsym __64_bit__=1
+#objcopy: -O elf32-x86-64 --decompress-debug-sections
+#readelf: -n
+#not-target: x86_64-*-nacl*
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size	Description
+  GNU                  0x00000024	NT_GNU_PROPERTY_TYPE_0
+      Properties: stack size: 0xffffffff
+	x86 ISA used: 586, SSE, SSE3, SSE4_1
+	x86 ISA needed: SSE3, SSE4_1


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