+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
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);
}
unsigned int align_size)
{
unsigned int descsz;
+ unsigned int datasz;
Elf_External_Note *e_note;
e_note = (Elf_External_Note *) 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. */
/* Never should happen. */
abort ();
}
- size += list->property.pr_datasz;
+ size += datasz;
/* Align each property. */
size = (size + (align_size - 1)) & ~ (align_size - 1);
+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
--- /dev/null
+ .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:
--- /dev/null
+#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
--- /dev/null
+#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