Convert .note.gnu.property section between ELF32 and ELF64
.note.gnu.property section has different alignments and section sizes for 32-bit and 64-bit ELF binaries. This patch updated bfd_convert_section_size and bfd_convert_section_contents to properly convert .note.gnu.property section between 32-bit and 64-bit ELF binaries. bfd/ PR binutils/23494 * bfd.c (bfd_convert_section_size): Check BFD_DECOMPRESS after calling _bfd_elf_convert_gnu_property_size to convert .note.gnu.property section size. (bfd_convert_section_contents): Check BFD_DECOMPRESS after calling _bfd_elf_convert_gnu_properties to convert .note.gnu.property section. * elf-bfd.h (_bfd_elf_convert_gnu_property_size): New prototype. (_bfd_elf_convert_gnu_properties): Likewise. * elf-properties.c (elf_get_gnu_property_section_size): New function. (elf_write_gnu_properties): Likewise. (_bfd_elf_convert_gnu_property_size): Likewise. (_bfd_elf_convert_gnu_properties): Likewise. (_bfd_elf_link_setup_gnu_properties): Use elf_get_gnu_property_section_size and elf_write_gnu_properties. binutils/ PR binutils/23494 * testsuite/binutils-all/x86-64/pr23494a-x32.d: New file. * testsuite/binutils-all/x86-64/pr23494a.d: Likewise. * testsuite/binutils-all/x86-64/pr23494a.s: Likewise. * testsuite/binutils-all/x86-64/pr23494b-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494b.d: Likewise. * testsuite/binutils-all/x86-64/pr23494b.s: Likewise. * testsuite/binutils-all/x86-64/pr23494c-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494c.d: Likewise. * testsuite/binutils-all/x86-64/pr23494d-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494d.d: Likewise.
This commit is contained in:
parent
f40f4a11d1
commit
6404ab9937
@ -1,3 +1,22 @@
|
||||
2018-08-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/23494
|
||||
* bfd.c (bfd_convert_section_size): Check BFD_DECOMPRESS after
|
||||
calling _bfd_elf_convert_gnu_property_size to convert
|
||||
.note.gnu.property section size.
|
||||
(bfd_convert_section_contents): Check BFD_DECOMPRESS after
|
||||
calling _bfd_elf_convert_gnu_properties to convert
|
||||
.note.gnu.property section.
|
||||
* elf-bfd.h (_bfd_elf_convert_gnu_property_size): New prototype.
|
||||
(_bfd_elf_convert_gnu_properties): Likewise.
|
||||
* elf-properties.c (elf_get_gnu_property_section_size): New
|
||||
function.
|
||||
(elf_write_gnu_properties): Likewise.
|
||||
(_bfd_elf_convert_gnu_property_size): Likewise.
|
||||
(_bfd_elf_convert_gnu_properties): Likewise.
|
||||
(_bfd_elf_link_setup_gnu_properties): Use
|
||||
elf_get_gnu_property_section_size and elf_write_gnu_properties.
|
||||
|
||||
2018-08-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/23486
|
||||
|
25
bfd/bfd.c
25
bfd/bfd.c
@ -2469,10 +2469,6 @@ bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
|
||||
{
|
||||
bfd_size_type hdr_size;
|
||||
|
||||
/* Do nothing if input file will be decompressed. */
|
||||
if ((ibfd->flags & BFD_DECOMPRESS))
|
||||
return size;
|
||||
|
||||
/* Do nothing if either input or output aren't ELF. */
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
@ -2483,6 +2479,14 @@ bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
|
||||
== get_elf_backend_data (obfd)->s->elfclass)
|
||||
return size;
|
||||
|
||||
/* Convert GNU property size. */
|
||||
if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
|
||||
return _bfd_elf_convert_gnu_property_size (ibfd, obfd);
|
||||
|
||||
/* Do nothing if input file will be decompressed. */
|
||||
if ((ibfd->flags & BFD_DECOMPRESS))
|
||||
return size;
|
||||
|
||||
/* Do nothing if the input section isn't a SHF_COMPRESSED section. */
|
||||
hdr_size = bfd_get_compression_header_size (ibfd, isec);
|
||||
if (hdr_size == 0)
|
||||
@ -2523,10 +2527,6 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
|
||||
Elf_Internal_Chdr chdr;
|
||||
bfd_boolean use_memmove;
|
||||
|
||||
/* Do nothing if input file will be decompressed. */
|
||||
if ((ibfd->flags & BFD_DECOMPRESS))
|
||||
return TRUE;
|
||||
|
||||
/* Do nothing if either input or output aren't ELF. */
|
||||
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|
||||
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
|
||||
@ -2537,6 +2537,15 @@ bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
|
||||
== get_elf_backend_data (obfd)->s->elfclass)
|
||||
return TRUE;
|
||||
|
||||
/* Convert GNU properties. */
|
||||
if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
|
||||
return _bfd_elf_convert_gnu_properties (ibfd, isec, obfd, ptr,
|
||||
ptr_size);
|
||||
|
||||
/* Do nothing if input file will be decompressed. */
|
||||
if ((ibfd->flags & BFD_DECOMPRESS))
|
||||
return TRUE;
|
||||
|
||||
/* Do nothing if the input section isn't a SHF_COMPRESSED section. */
|
||||
ihdr_size = bfd_get_compression_header_size (ibfd, isec);
|
||||
if (ihdr_size == 0)
|
||||
|
@ -2705,6 +2705,10 @@ extern elf_property * _bfd_elf_get_property
|
||||
(bfd *, unsigned int, unsigned int);
|
||||
extern bfd *_bfd_elf_link_setup_gnu_properties
|
||||
(struct bfd_link_info *);
|
||||
extern bfd_size_type _bfd_elf_convert_gnu_property_size
|
||||
(bfd *, bfd *);
|
||||
extern bfd_boolean _bfd_elf_convert_gnu_properties
|
||||
(bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *);
|
||||
|
||||
/* The linker may need to keep track of the number of relocs that it
|
||||
decides to copy as dynamic relocs in check_relocs for each symbol.
|
||||
|
@ -304,6 +304,94 @@ elf_merge_gnu_property_list (struct bfd_link_info *info, bfd *abfd,
|
||||
}
|
||||
}
|
||||
|
||||
/* Get GNU property section size. */
|
||||
|
||||
static bfd_size_type
|
||||
elf_get_gnu_property_section_size (elf_property_list *list,
|
||||
unsigned int align_size)
|
||||
{
|
||||
bfd_size_type size;
|
||||
unsigned int descsz;
|
||||
|
||||
/* Compute the output section size. */
|
||||
descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]);
|
||||
descsz = (descsz + 3) & -(unsigned int) 4;
|
||||
size = descsz;
|
||||
for (; list != NULL; list = list->next)
|
||||
{
|
||||
/* There are 4 byte type + 4 byte datasz for each property. */
|
||||
size += 4 + 4 + list->property.pr_datasz;
|
||||
/* Align each property. */
|
||||
size = (size + (align_size - 1)) & ~(align_size - 1);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
/* Write GNU properties. */
|
||||
|
||||
static void
|
||||
elf_write_gnu_properties (bfd *abfd, bfd_byte *contents,
|
||||
elf_property_list *list, unsigned int size,
|
||||
unsigned int align_size)
|
||||
{
|
||||
unsigned int descsz;
|
||||
Elf_External_Note *e_note;
|
||||
|
||||
e_note = (Elf_External_Note *) contents;
|
||||
descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]);
|
||||
descsz = (descsz + 3) & -(unsigned int) 4;
|
||||
bfd_h_put_32 (abfd, sizeof "GNU", &e_note->namesz);
|
||||
bfd_h_put_32 (abfd, size - descsz, &e_note->descsz);
|
||||
bfd_h_put_32 (abfd, NT_GNU_PROPERTY_TYPE_0, &e_note->type);
|
||||
memcpy (e_note->name, "GNU", sizeof "GNU");
|
||||
|
||||
size = descsz;
|
||||
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);
|
||||
size += 4 + 4;
|
||||
|
||||
/* Write out property value. */
|
||||
switch (list->property.pr_kind)
|
||||
{
|
||||
case property_number:
|
||||
switch (list->property.pr_datasz)
|
||||
{
|
||||
default:
|
||||
/* Never should happen. */
|
||||
abort ();
|
||||
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 4:
|
||||
bfd_h_put_32 (abfd, list->property.u.number,
|
||||
contents + size);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
bfd_h_put_64 (abfd, list->property.u.number,
|
||||
contents + size);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Never should happen. */
|
||||
abort ();
|
||||
}
|
||||
size += list->property.pr_datasz;
|
||||
|
||||
/* Align each property. */
|
||||
size = (size + (align_size - 1)) & ~ (align_size - 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up GNU properties. Return the first relocatable ELF input with
|
||||
GNU properties if found. Otherwise, return NULL. */
|
||||
|
||||
@ -390,10 +478,8 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
|
||||
always sorted by type even if input GNU properties aren't sorted. */
|
||||
if (first_pbfd != NULL)
|
||||
{
|
||||
unsigned int size;
|
||||
unsigned int descsz;
|
||||
bfd_size_type size;
|
||||
bfd_byte *contents;
|
||||
Elf_External_Note *e_note;
|
||||
unsigned int align_size = bed->s->elfclass == ELFCLASS64 ? 8 : 4;
|
||||
|
||||
sec = bfd_get_section_by_name (first_pbfd,
|
||||
@ -427,75 +513,15 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
|
||||
}
|
||||
|
||||
/* Compute the section size. */
|
||||
descsz = offsetof (Elf_External_Note, name[sizeof "GNU"]);
|
||||
descsz = (descsz + 3) & -(unsigned int) 4;
|
||||
size = descsz;
|
||||
for (list = elf_properties (first_pbfd);
|
||||
list != NULL;
|
||||
list = list->next)
|
||||
{
|
||||
/* There are 4 byte type + 4 byte datasz for each property. */
|
||||
size += 4 + 4 + list->property.pr_datasz;
|
||||
/* Align each property. */
|
||||
size = (size + (align_size - 1)) & ~(align_size - 1);
|
||||
}
|
||||
list = elf_properties (first_pbfd);
|
||||
size = elf_get_gnu_property_section_size (list, align_size);
|
||||
|
||||
/* Update .note.gnu.property section now. */
|
||||
sec->size = size;
|
||||
contents = (bfd_byte *) bfd_zalloc (first_pbfd, size);
|
||||
|
||||
e_note = (Elf_External_Note *) contents;
|
||||
bfd_h_put_32 (first_pbfd, sizeof "GNU", &e_note->namesz);
|
||||
bfd_h_put_32 (first_pbfd, size - descsz, &e_note->descsz);
|
||||
bfd_h_put_32 (first_pbfd, NT_GNU_PROPERTY_TYPE_0, &e_note->type);
|
||||
memcpy (e_note->name, "GNU", sizeof "GNU");
|
||||
|
||||
size = descsz;
|
||||
for (list = elf_properties (first_pbfd);
|
||||
list != NULL;
|
||||
list = list->next)
|
||||
{
|
||||
/* There are 4 byte type + 4 byte datasz for each property. */
|
||||
bfd_h_put_32 (first_pbfd, list->property.pr_type,
|
||||
contents + size);
|
||||
bfd_h_put_32 (first_pbfd, list->property.pr_datasz,
|
||||
contents + size + 4);
|
||||
size += 4 + 4;
|
||||
|
||||
/* Write out property value. */
|
||||
switch (list->property.pr_kind)
|
||||
{
|
||||
case property_number:
|
||||
switch (list->property.pr_datasz)
|
||||
{
|
||||
default:
|
||||
/* Never should happen. */
|
||||
abort ();
|
||||
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 4:
|
||||
bfd_h_put_32 (first_pbfd, list->property.u.number,
|
||||
contents + size);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
bfd_h_put_64 (first_pbfd, list->property.u.number,
|
||||
contents + size);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Never should happen. */
|
||||
abort ();
|
||||
}
|
||||
size += list->property.pr_datasz;
|
||||
|
||||
/* Align each property. */
|
||||
size = (size + (align_size - 1)) & ~ (align_size - 1);
|
||||
}
|
||||
elf_write_gnu_properties (first_pbfd, contents, list, size,
|
||||
align_size);
|
||||
|
||||
/* Cache the section contents for elf_link_input_bfd. */
|
||||
elf_section_data (sec)->this_hdr.contents = contents;
|
||||
@ -508,3 +534,58 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
|
||||
|
||||
return first_pbfd;
|
||||
}
|
||||
|
||||
/* Convert GNU property size. */
|
||||
|
||||
bfd_size_type
|
||||
_bfd_elf_convert_gnu_property_size (bfd *ibfd, bfd *obfd)
|
||||
{
|
||||
unsigned int align_size;
|
||||
const struct elf_backend_data *bed;
|
||||
elf_property_list *list = elf_properties (ibfd);
|
||||
|
||||
bed = get_elf_backend_data (obfd);
|
||||
align_size = bed->s->elfclass == ELFCLASS64 ? 8 : 4;
|
||||
|
||||
/* Get the output .note.gnu.property section size. */
|
||||
return elf_get_gnu_property_section_size (list, align_size);
|
||||
}
|
||||
|
||||
/* Convert GNU properties. */
|
||||
|
||||
bfd_boolean
|
||||
_bfd_elf_convert_gnu_properties (bfd *ibfd, asection *isec,
|
||||
bfd *obfd, bfd_byte **ptr,
|
||||
bfd_size_type *ptr_size)
|
||||
{
|
||||
unsigned int size;
|
||||
bfd_byte *contents;
|
||||
unsigned int align_shift;
|
||||
const struct elf_backend_data *bed;
|
||||
elf_property_list *list = elf_properties (ibfd);
|
||||
|
||||
bed = get_elf_backend_data (obfd);
|
||||
align_shift = bed->s->elfclass == ELFCLASS64 ? 3 : 2;
|
||||
|
||||
/* Get the output .note.gnu.property section size. */
|
||||
size = bfd_get_section_size (isec->output_section);
|
||||
|
||||
/* Update the output .note.gnu.property section alignment. */
|
||||
bfd_set_section_alignment (obfd, isec->output_section, align_shift);
|
||||
|
||||
if (size > bfd_get_section_size (isec))
|
||||
{
|
||||
contents = (bfd_byte *) bfd_malloc (size);
|
||||
free (*ptr);
|
||||
*ptr = contents;
|
||||
}
|
||||
else
|
||||
contents = *ptr;
|
||||
|
||||
*ptr_size = size;
|
||||
|
||||
/* Generate the output .note.gnu.property section. */
|
||||
elf_write_gnu_properties (ibfd, contents, list, size, 1 << align_shift);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1,3 +1,17 @@
|
||||
2018-08-08 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/23494
|
||||
* testsuite/binutils-all/x86-64/pr23494a-x32.d: New file.
|
||||
* testsuite/binutils-all/x86-64/pr23494a.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494a.s: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494b-x32.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494b.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494b.s: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494c-x32.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494c.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494d-x32.d: Likewise.
|
||||
* testsuite/binutils-all/x86-64/pr23494d.d: Likewise.
|
||||
|
||||
2018-08-08 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* dwarf.c (decode_location_expresion): Add case for
|
||||
|
11
binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d
Normal file
11
binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d
Normal file
@ -0,0 +1,11 @@
|
||||
#source: pr23494a.s
|
||||
#PROG: objcopy
|
||||
#as: --x32
|
||||
#objcopy: -O elf64-x86-64
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
x86 ISA needed: SSE3, SSE4_1
|
11
binutils/testsuite/binutils-all/x86-64/pr23494a.d
Normal file
11
binutils/testsuite/binutils-all/x86-64/pr23494a.d
Normal file
@ -0,0 +1,11 @@
|
||||
#source: pr23494a.s
|
||||
#PROG: objcopy
|
||||
#as: --64 -defsym __64_bit__=1
|
||||
#objcopy: -O elf32-x86-64
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
x86 ISA needed: SSE3, SSE4_1
|
92
binutils/testsuite/binutils-all/x86-64/pr23494a.s
Normal file
92
binutils/testsuite/binutils-all/x86-64/pr23494a.s
Normal file
@ -0,0 +1,92 @@
|
||||
.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:
|
5
binutils/testsuite/binutils-all/x86-64/pr23494b-x32.d
Normal file
5
binutils/testsuite/binutils-all/x86-64/pr23494b-x32.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: pr23494a.s
|
||||
#PROG: objcopy
|
||||
#as: --x32
|
||||
#objcopy: -O elf64-x86-64 -R .note.gnu.property
|
||||
#readelf: -n
|
5
binutils/testsuite/binutils-all/x86-64/pr23494b.d
Normal file
5
binutils/testsuite/binutils-all/x86-64/pr23494b.d
Normal file
@ -0,0 +1,5 @@
|
||||
#source: pr23494a.s
|
||||
#PROG: objcopy
|
||||
#as: --64 -defsym __64_bit__=1
|
||||
#objcopy: -O elf32-x86-64 -R .note.gnu.property
|
||||
#readelf: -n
|
30
binutils/testsuite/binutils-all/x86-64/pr23494b.s
Normal file
30
binutils/testsuite/binutils-all/x86-64/pr23494b.s
Normal file
@ -0,0 +1,30 @@
|
||||
.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:
|
10
binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d
Normal file
10
binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d
Normal file
@ -0,0 +1,10 @@
|
||||
#source: pr23494b.s
|
||||
#PROG: objcopy
|
||||
#as: --x32
|
||||
#objcopy: -O elf64-x86-64
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE
|
10
binutils/testsuite/binutils-all/x86-64/pr23494c.d
Normal file
10
binutils/testsuite/binutils-all/x86-64/pr23494c.d
Normal file
@ -0,0 +1,10 @@
|
||||
#source: pr23494b.s
|
||||
#PROG: objcopy
|
||||
#as: --64 -defsym __64_bit__=1
|
||||
#objcopy: -O elf32-x86-64
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE
|
11
binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d
Normal file
11
binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d
Normal file
@ -0,0 +1,11 @@
|
||||
#PROG: objcopy
|
||||
#source: pr23494a.s
|
||||
#as: --x32
|
||||
#objcopy: -O elf64-x86-64 --decompress-debug-sections
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
x86 ISA needed: SSE3, SSE4_1
|
11
binutils/testsuite/binutils-all/x86-64/pr23494d.d
Normal file
11
binutils/testsuite/binutils-all/x86-64/pr23494d.d
Normal file
@ -0,0 +1,11 @@
|
||||
#PROG: objcopy
|
||||
#source: pr23494a.s
|
||||
#as: --64 -defsym __64_bit__=1
|
||||
#objcopy: -O elf32-x86-64 --decompress-debug-sections
|
||||
#readelf: -n
|
||||
|
||||
Displaying notes found in: .note.gnu.property
|
||||
Owner Data size Description
|
||||
GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0
|
||||
Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
|
||||
x86 ISA needed: SSE3, SSE4_1
|
Loading…
Reference in New Issue
Block a user