From a9eafb08b3f3dd4cd59757f0b99b44e896d620f1 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 24 Aug 2018 04:41:50 -0700 Subject: [PATCH] x86: Update GNU_PROPERTY_X86_XXX macros This patch updates GNU_PROPERTY_X86_XXX macros: 1. GNU_PROPERTY_X86_UINT32_AND_XXX: A 4-byte unsigned integer property. A bit is set if it is set in all relocatable inputs: #define GNU_PROPERTY_X86_UINT32_AND_LO 0xc0000002 #define GNU_PROPERTY_X86_UINT32_AND_HI 0xc0007fff 2. GNU_PROPERTY_X86_UINT32_OR_XXX: A 4-byte unsigned integer property. A bit is set if it is set in any relocatable inputs: #define GNU_PROPERTY_X86_UINT32_OR_LO 0xc0008000 #define GNU_PROPERTY_X86_UINT32_OR_HI 0xc000ffff 3. GNU_PROPERTY_X86_UINT32_OR_AND_XXX: A 4-byte unsigned integer property. A bit is set if it is set in any relocatable inputs and the property is present in all relocatable inputs: #define GNU_PROPERTY_X86_UINT32_OR_AND_LO 0xc0010000 #define GNU_PROPERTY_X86_UINT32_OR_AND_HI 0xc0017fff 4. GNU_PROPERTY_X86_FEATURE_2_NEEDED, GNU_PROPERTY_X86_FEATURE_2_USED and GNU_PROPERTY_X86_FEATURE_2_XXX bits. GNU_PROPERTY_X86_FEATURE_1_AND is unchanged. GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED are updated to better support targeted processors since GNU_PROPERTY_X86_ISA_1_?86 aren't isn't very useful. A new set of GNU_PROPERTY_X86_ISA_1_XXX bits are defined. The previous GNU_PROPERTY_X86_ISA_1_XXX macros are deprecated and renamed to GNU_PROPERTY_X86_COMPAT_ISA_1_XXX. bfd/ * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. (_bfd_x86_elf_merge_gnu_properties): Likewise. (_bfd_x86_elf_link_setup_gnu_properties): Add X86_FEATURE_2_NEEDED instead of X86_ISA_1_NEEDED. (_bfd_x86_elf_link_fixup_gnu_properties): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. binutils/ * readelf.c (decode_x86_compat_isa): New function. (decode_x86_feature_2): Likewise. (decode_x86_isa): Updated for new X86_ISA_1_XXX bits. (decode_x86_feature): Renamed to ... (decode_x86_feature_1): This. Remove the type argument. (print_gnu_property_note): Handle X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. * testsuite/binutils-all/i386/pr21231b.s: Updated to the current GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED values. * testsuite/binutils-all/x86-64/pr21231b.s: Likewise. * testsuite/binutils-all/x86-64/pr23494a.s: Likewise. * testsuite/binutils-all/x86-64/pr23494b.s: Likewise. * testsuite/binutils-all/x86-64/pr23494c.s: Likewise. * testsuite/binutils-all/i386/pr21231b.d: Updated. * testsuite/binutils-all/x86-64/pr21231b.d: Likewise. * testsuite/binutils-all/x86-64/pr23494a-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494a.d: 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. * testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise. * testsuite/binutils-all/x86-64/pr23494e.d: Likewise. include/ * elf/common.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This. (GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This. (GNU_PROPERTY_X86_ISA_1_XXX): Renamed to ... (GNU_PROPERTY_X86_COMPAT_ISA_1_XXX): This. (GNU_PROPERTY_X86_UINT32_AND_LO): New. (GNU_PROPERTY_X86_UINT32_AND_HI): Likewise. (GNU_PROPERTY_X86_UINT32_OR_LO): Likewise. (GNU_PROPERTY_X86_UINT32_OR_HI): Likewise. (GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise. (GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise. (GNU_PROPERTY_X86_ISA_1_CMOV): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE2): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE3): Likewise. (GNU_PROPERTY_X86_ISA_1_SSSE3): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE4_1): Likewise. (GNU_PROPERTY_X86_ISA_1_SSE4_2): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX2): Likewise. (GNU_PROPERTY_X86_ISA_1_FMA): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512F): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512CD): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512ER): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512PF): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512VL): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512DQ): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512BW): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_BITALG): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_IFMA): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2): Likewise. (GNU_PROPERTY_X86_ISA_1_AVX512_VNNI): Likewise. (GNU_PROPERTY_X86_FEATURE_2_X86): Likewise. (GNU_PROPERTY_X86_FEATURE_2_X87): Likewise. (GNU_PROPERTY_X86_FEATURE_2_MMX): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_YMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_ZMM): Likewise. (GNU_PROPERTY_X86_FEATURE_2_FXSR): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVE): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT): Likewise. (GNU_PROPERTY_X86_FEATURE_2_XSAVEC): Likewise. (GNU_PROPERTY_X86_FEATURE_1_AND): Updated to (GNU_PROPERTY_X86_UINT32_AND_LO + 0). (GNU_PROPERTY_X86_ISA_1_NEEDED): Defined to (GNU_PROPERTY_X86_UINT32_OR_LO + 0). (GNU_PROPERTY_X86_FEATURE_2_NEEDED): New. Defined to (GNU_PROPERTY_X86_UINT32_OR_LO + 1). (GNU_PROPERTY_X86_ISA_1_USED): Defined to (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0). (GNU_PROPERTY_X86_FEATURE_2_USED): New. Defined to (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1). ld/ * testsuite/ld-i386/i386.exp: Run pr23372c, pr23372d, pr23486c and pr23486d. * testsuite/ld-i386/pr23372a.s: Update comments. * testsuite/ld-i386/pr23372b.s: Likewise. * testsuite/ld-i386/pr23372c.s: Likewise. * testsuite/ld-x86-64/pr23372a.s: Likewise. * testsuite/ld-x86-64/pr23372b.s: Likewise. * testsuite/ld-x86-64/pr23372c.s: Likewise. * testsuite/ld-x86-64/pr23486a.s: Likewise. * testsuite/ld-x86-64/pr23486b.s: Likewise. * testsuite/ld-i386/pr23372c.d: New file. * testsuite/ld-i386/pr23372d.d: Likewise. * testsuite/ld-i386/pr23486c.d: Likewise. * testsuite/ld-i386/pr23486d.d: Likewise. * testsuite/ld-x86-64/pr23372c-x32.d: Likewise. * testsuite/ld-x86-64/pr23372c.d: Likewise. * testsuite/ld-x86-64/pr23372d-x32.d: Likewise. * testsuite/ld-x86-64/pr23372d.d: Likewise. * testsuite/ld-x86-64/pr23372d.s: Likewise. * testsuite/ld-x86-64/pr23372e.s: Likewise. * testsuite/ld-x86-64/pr23372f.s: Likewise. * testsuite/ld-x86-64/pr23486c-x32.d: Likewise. * testsuite/ld-x86-64/pr23486c.d: Likewise. * testsuite/ld-x86-64/pr23486c.s: Likewise. * testsuite/ld-x86-64/pr23486d-x32.d: Likewise. * testsuite/ld-x86-64/pr23486d.d: Likewise. * testsuite/ld-x86-64/pr23486d.s: Likewise. * testsuite/ld-i386/property-3.r: Updated. * testsuite/ld-i386/property-4.r: Likewise. * testsuite/ld-i386/property-5.r: Likewise. * testsuite/ld-i386/property-x86-3.d: Likewise. * testsuite/ld-i386/property-x86-ibt3a.d: Likewise. * testsuite/ld-i386/property-x86-shstk3a.d: Likewise. * testsuite/ld-i386/property-x86-shstk3b.d: Likewise. * testsuite/ld-x86-64/property-3.r: Likewise. * testsuite/ld-x86-64/property-4.r: Likewise. * testsuite/ld-x86-64/property-5.r: Likewise. * testsuite/ld-x86-64/property-x86-3-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-3.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise. * testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise. * testsuite/ld-i386/property-x86-1.S: Updated to the current GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED values. * testsuite/ld-i386/property-x86-2.S: Likewise. * testsuite/ld-i386/property-x86-3.s: Likewise. * testsuite/ld-x86-64/property-x86-1.S: Likewise. * testsuite/ld-x86-64/property-x86-2.S: Likewise. * testsuite/ld-x86-64/property-x86-3.s: Likewise. * ld/testsuite/ld-x86-64/x86-64.exp: Run pr23372c, pr23372c-x32, pr23372d, pr23372d-x32, pr23486c, pr23486c-x32, pr23486d and pr23486d-x32. --- bfd/ChangeLog | 16 + bfd/elfxx-x86.c | 136 +++++---- binutils/ChangeLog | 30 ++ binutils/readelf.c | 275 +++++++++++++++--- .../testsuite/binutils-all/i386/pr21231b.d | 4 +- .../testsuite/binutils-all/i386/pr21231b.s | 4 +- .../testsuite/binutils-all/x86-64/pr21231b.d | 4 +- .../testsuite/binutils-all/x86-64/pr21231b.s | 4 +- .../binutils-all/x86-64/pr23494a-x32.d | 4 +- .../testsuite/binutils-all/x86-64/pr23494a.d | 4 +- .../testsuite/binutils-all/x86-64/pr23494a.s | 6 +- .../testsuite/binutils-all/x86-64/pr23494b.s | 2 +- .../binutils-all/x86-64/pr23494c-x32.d | 2 +- .../testsuite/binutils-all/x86-64/pr23494c.d | 2 +- .../testsuite/binutils-all/x86-64/pr23494c.s | 6 +- .../binutils-all/x86-64/pr23494d-x32.d | 4 +- .../testsuite/binutils-all/x86-64/pr23494d.d | 4 +- .../binutils-all/x86-64/pr23494e-x32.d | 4 +- .../testsuite/binutils-all/x86-64/pr23494e.d | 4 +- include/ChangeLog | 59 ++++ include/elf/common.h | 112 +++++-- ld/ChangeLog | 61 ++++ ld/testsuite/ld-i386/i386.exp | 4 + ld/testsuite/ld-i386/pr23372a.s | 2 +- ld/testsuite/ld-i386/pr23372b.s | 2 +- ld/testsuite/ld-i386/pr23372c.d | 5 + ld/testsuite/ld-i386/pr23372c.s | 2 +- ld/testsuite/ld-i386/pr23372d.d | 5 + ld/testsuite/ld-i386/pr23486c.d | 10 + ld/testsuite/ld-i386/pr23486d.d | 10 + ld/testsuite/ld-i386/property-3.r | 2 +- ld/testsuite/ld-i386/property-4.r | 2 +- ld/testsuite/ld-i386/property-5.r | 2 +- ld/testsuite/ld-i386/property-x86-1.S | 4 +- ld/testsuite/ld-i386/property-x86-2.S | 4 +- ld/testsuite/ld-i386/property-x86-3.d | 4 +- ld/testsuite/ld-i386/property-x86-3.s | 8 +- ld/testsuite/ld-i386/property-x86-ibt3a.d | 2 +- ld/testsuite/ld-i386/property-x86-ibt3b.d | 2 +- ld/testsuite/ld-i386/property-x86-shstk3a.d | 2 +- ld/testsuite/ld-i386/property-x86-shstk3b.d | 2 +- ld/testsuite/ld-x86-64/pr23372a.s | 2 +- ld/testsuite/ld-x86-64/pr23372b.s | 2 +- ld/testsuite/ld-x86-64/pr23372c-x32.d | 5 + ld/testsuite/ld-x86-64/pr23372c.d | 5 + ld/testsuite/ld-x86-64/pr23372c.s | 2 +- ld/testsuite/ld-x86-64/pr23372d-x32.d | 5 + ld/testsuite/ld-x86-64/pr23372d.d | 5 + ld/testsuite/ld-x86-64/pr23372d.s | 30 ++ ld/testsuite/ld-x86-64/pr23372e.s | 30 ++ ld/testsuite/ld-x86-64/pr23372f.s | 30 ++ ld/testsuite/ld-x86-64/pr23486a.s | 2 +- ld/testsuite/ld-x86-64/pr23486b.s | 2 +- ld/testsuite/ld-x86-64/pr23486c-x32.d | 10 + ld/testsuite/ld-x86-64/pr23486c.d | 10 + ld/testsuite/ld-x86-64/pr23486c.s | 30 ++ ld/testsuite/ld-x86-64/pr23486d-x32.d | 10 + ld/testsuite/ld-x86-64/pr23486d.d | 10 + ld/testsuite/ld-x86-64/pr23486d.s | 30 ++ ld/testsuite/ld-x86-64/property-3.r | 2 +- ld/testsuite/ld-x86-64/property-4.r | 2 +- ld/testsuite/ld-x86-64/property-5.r | 2 +- ld/testsuite/ld-x86-64/property-x86-1.S | 4 +- ld/testsuite/ld-x86-64/property-x86-2.S | 4 +- ld/testsuite/ld-x86-64/property-x86-3-x32.d | 4 +- ld/testsuite/ld-x86-64/property-x86-3.d | 4 +- ld/testsuite/ld-x86-64/property-x86-3.s | 8 +- .../ld-x86-64/property-x86-ibt3a-x32.d | 2 +- ld/testsuite/ld-x86-64/property-x86-ibt3a.d | 2 +- .../ld-x86-64/property-x86-ibt3b-x32.d | 2 +- ld/testsuite/ld-x86-64/property-x86-ibt3b.d | 2 +- .../ld-x86-64/property-x86-shstk3a-x32.d | 2 +- ld/testsuite/ld-x86-64/property-x86-shstk3a.d | 2 +- .../ld-x86-64/property-x86-shstk3b-x32.d | 2 +- ld/testsuite/ld-x86-64/property-x86-shstk3b.d | 2 +- ld/testsuite/ld-x86-64/x86-64.exp | 8 + 76 files changed, 896 insertions(+), 199 deletions(-) create mode 100644 ld/testsuite/ld-i386/pr23372c.d create mode 100644 ld/testsuite/ld-i386/pr23372d.d create mode 100644 ld/testsuite/ld-i386/pr23486c.d create mode 100644 ld/testsuite/ld-i386/pr23486d.d create mode 100644 ld/testsuite/ld-x86-64/pr23372c-x32.d create mode 100644 ld/testsuite/ld-x86-64/pr23372c.d create mode 100644 ld/testsuite/ld-x86-64/pr23372d-x32.d create mode 100644 ld/testsuite/ld-x86-64/pr23372d.d create mode 100644 ld/testsuite/ld-x86-64/pr23372d.s create mode 100644 ld/testsuite/ld-x86-64/pr23372e.s create mode 100644 ld/testsuite/ld-x86-64/pr23372f.s create mode 100644 ld/testsuite/ld-x86-64/pr23486c-x32.d create mode 100644 ld/testsuite/ld-x86-64/pr23486c.d create mode 100644 ld/testsuite/ld-x86-64/pr23486c.s create mode 100644 ld/testsuite/ld-x86-64/pr23486d-x32.d create mode 100644 ld/testsuite/ld-x86-64/pr23486d.d create mode 100644 ld/testsuite/ld-x86-64/pr23486d.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 44690b831f..c9e7e2a850 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2018-08-24 H.J. Lu + + * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Handle + X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, + X86_UINT32_AND_LO, X86_UINT32_AND_HI, X86_UINT32_OR_LO, + X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI + instead of X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. + (_bfd_x86_elf_merge_gnu_properties): Likewise. + (_bfd_x86_elf_link_setup_gnu_properties): Add X86_FEATURE_2_NEEDED + instead of X86_ISA_1_NEEDED. + (_bfd_x86_elf_link_fixup_gnu_properties): Handle + X86_COMPAT_ISA_1_USED, X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, + X86_UINT32_AND_HI, X86_UINT32_OR_LO, X86_UINT32_OR_HI, + X86_UINT32_OR_AND_LO and X86_UINT32_OR_AND_HI instead of + X86_ISA_1_USED, X86_ISA_1_NEEDED and X86_FEATURE_1_AND. + 2018-08-24 H.J. Lu * elfxx-x86.c (_bfd_x86_elf_parse_gnu_properties): Mask out the diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index 0d91e4dfc9..d44ec5ad94 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -2361,20 +2361,20 @@ _bfd_x86_elf_parse_gnu_properties (bfd *abfd, unsigned int type, { elf_property *prop; - switch (type) + if (type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (type >= GNU_PROPERTY_X86_UINT32_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_AND_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) { - case GNU_PROPERTY_X86_ISA_1_USED: - case GNU_PROPERTY_X86_ISA_1_NEEDED: - case GNU_PROPERTY_X86_FEATURE_1_AND: if (datasz != 4) { _bfd_error_handler - ((type == GNU_PROPERTY_X86_ISA_1_USED - ? _("error: %pB: ") - : (type == GNU_PROPERTY_X86_ISA_1_NEEDED - ? _("error: %pB: ") - : _("error: %pB: "))), - abfd, datasz); + (_("error: %pB: "), + abfd, type, datasz); return property_corrupt; } prop = _bfd_elf_get_property (abfd, type, datasz); @@ -2383,13 +2383,10 @@ _bfd_x86_elf_parse_gnu_properties (bfd *abfd, unsigned int type, prop->u.number |= (bfd_h_get_32 (abfd, ptr) & ~GNU_PROPERTY_X86_UINT32_VALID); prop->pr_kind = property_number; - break; - - default: - return property_ignored; + return property_number; } - return property_number; + return property_ignored; } /* Merge x86 GNU property BPROP with APROP. If APROP isn't NULL, @@ -2406,9 +2403,10 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info, bfd_boolean updated = FALSE; unsigned int pr_type = aprop != NULL ? aprop->pr_type : bprop->pr_type; - switch (pr_type) + if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) { - case GNU_PROPERTY_X86_ISA_1_USED: if (aprop == NULL || bprop == NULL) { /* Only one of APROP and BPROP can be NULL. */ @@ -2419,11 +2417,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info, aprop->pr_kind = property_remove; updated = TRUE; } - break; + return updated; } goto or_property; - - case GNU_PROPERTY_X86_ISA_1_NEEDED: + } + else if (pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_OR_HI)) + { if (aprop != NULL && bprop != NULL) { or_property: @@ -2458,9 +2459,11 @@ or_property: updated = bprop->u.number != 0; } } - break; - - case GNU_PROPERTY_X86_FEATURE_1_AND: + return updated; + } + else if (pr_type >= GNU_PROPERTY_X86_UINT32_AND_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_AND_HI) + { /* Only one of APROP and BPROP can be NULL: 1. APROP & BPROP when both APROP and BPROP aren't NULL. 2. If APROP is NULL, remove x86 feature. @@ -2511,9 +2514,10 @@ or_property: updated = TRUE; } } - break; - - default: + return updated; + } + else + { /* Never should happen. */ abort (); } @@ -2598,27 +2602,30 @@ _bfd_x86_elf_link_setup_gnu_properties { /* If the separate code program header is needed, make sure that the first read-only PT_LOAD segment has no code by - adding a GNU_PROPERTY_X86_ISA_1_NEEDED note. */ + adding a GNU_PROPERTY_X86_FEATURE_2_NEEDED note. */ elf_property_list *list; bfd_boolean need_property = TRUE; for (list = elf_properties (ebfd); list; list = list->next) - switch (list->property.pr_type) - { - case GNU_PROPERTY_STACK_SIZE: - case GNU_PROPERTY_NO_COPY_ON_PROTECTED: - case GNU_PROPERTY_X86_ISA_1_NEEDED: - /* These properties won't be removed during merging. */ - need_property = FALSE; - break; - } + { + unsigned int pr_type = list->property.pr_type; + if (pr_type == GNU_PROPERTY_STACK_SIZE + || pr_type == GNU_PROPERTY_NO_COPY_ON_PROTECTED + || pr_type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (pr_type >= GNU_PROPERTY_X86_UINT32_OR_LO + && pr_type <= GNU_PROPERTY_X86_UINT32_OR_HI)) + { + /* These properties won't be removed during merging. */ + need_property = FALSE; + break; + } + } if (need_property) { - prop = _bfd_elf_get_property (ebfd, - GNU_PROPERTY_X86_ISA_1_NEEDED, - 4); - prop->u.number = GNU_PROPERTY_X86_ISA_1_486; + prop = _bfd_elf_get_property + (ebfd, GNU_PROPERTY_X86_FEATURE_2_NEEDED, 4); + prop->u.number = GNU_PROPERTY_X86_FEATURE_2_X86; prop->pr_kind = property_number; } } @@ -2971,26 +2978,35 @@ _bfd_x86_elf_link_fixup_gnu_properties (struct bfd_link_info *info, elf_property_list *p; for (p = *listp; p; p = p->next) - switch (p->property.pr_type) - { - case GNU_PROPERTY_X86_ISA_1_USED: - case GNU_PROPERTY_X86_ISA_1_NEEDED: - case GNU_PROPERTY_X86_FEATURE_1_AND: - if (p->property.u.number == 0) - { - /* Remove empty property. */ - *listp = p->next; - continue; - } + { + unsigned int type = p->property.pr_type; + if (type == GNU_PROPERTY_X86_COMPAT_ISA_1_USED + || type == GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED + || (type >= GNU_PROPERTY_X86_UINT32_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_AND_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_HI) + || (type >= GNU_PROPERTY_X86_UINT32_OR_AND_LO + && type <= GNU_PROPERTY_X86_UINT32_OR_AND_HI)) + { + if (p->property.u.number == 0) + { + /* Remove empty property. */ + *listp = p->next; + continue; + } - /* Mark x86-specific properties with X86_UINT32_VALID for - non-relocatable output. */ - if (!(bfd_link_relocatable (info))) - p->property.u.number |= GNU_PROPERTY_X86_UINT32_VALID; + /* Mark x86-specific properties with X86_UINT32_VALID for + non-relocatable output. */ + if (!bfd_link_relocatable (info)) + p->property.u.number |= GNU_PROPERTY_X86_UINT32_VALID; - listp = &p->next; - break; - default: - break; - } + listp = &p->next; + } + else if (type > GNU_PROPERTY_HIPROC) + { + /* The property list is sorted in order of type. */ + break; + } + } } diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 76af83b6ec..3e26571ea3 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,33 @@ +2018-08-24 H.J. Lu + + * readelf.c (decode_x86_compat_isa): New function. + (decode_x86_feature_2): Likewise. + (decode_x86_isa): Updated for new X86_ISA_1_XXX bits. + (decode_x86_feature): Renamed to ... + (decode_x86_feature_1): This. Remove the type argument. + (print_gnu_property_note): Handle X86_COMPAT_ISA_1_USED, + X86_COMPAT_ISA_1_NEEDED, X86_UINT32_AND_LO, X86_UINT32_AND_HI, + X86_UINT32_OR_LO, X86_UINT32_OR_HI, X86_UINT32_OR_AND_LO and + X86_UINT32_OR_AND_HI instead of X86_ISA_1_USED, X86_ISA_1_NEEDED + and X86_FEATURE_1_AND. + * testsuite/binutils-all/i386/pr21231b.s: Updated to the current + GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED + values. + * testsuite/binutils-all/x86-64/pr21231b.s: Likewise. + * testsuite/binutils-all/x86-64/pr23494a.s: Likewise. + * testsuite/binutils-all/x86-64/pr23494b.s: Likewise. + * testsuite/binutils-all/x86-64/pr23494c.s: Likewise. + * testsuite/binutils-all/i386/pr21231b.d: Updated. + * testsuite/binutils-all/x86-64/pr21231b.d: Likewise. + * testsuite/binutils-all/x86-64/pr23494a-x32.d: Likewise. + * testsuite/binutils-all/x86-64/pr23494a.d: 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. + * testsuite/binutils-all/x86-64/pr23494e-x32.d: Likewise. + * testsuite/binutils-all/x86-64/pr23494e.d: Likewise. + 2018-08-24 H.J. Lu * readelf.c (print_gnu_property_note): Check the diff --git a/binutils/readelf.c b/binutils/readelf.c index df946528ca..8d4054fbd2 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -16946,6 +16946,77 @@ get_gnu_elf_note_type (unsigned e_type) } } +static void +decode_x86_compat_isa (unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_X86_COMPAT_ISA_1_486: + printf ("i486"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_586: + printf ("586"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_686: + printf ("686"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE: + printf ("SSE"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE2: + printf ("SSE2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE3: + printf ("SSE3"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSSE3: + printf ("SSSE3"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_1: + printf ("SSE4_1"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_2: + printf ("SSE4_2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX: + printf ("AVX"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX2: + printf ("AVX2"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512F: + printf ("AVX512F"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512CD: + printf ("AVX512CD"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512ER: + printf ("AVX512ER"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512PF: + printf ("AVX512PF"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512VL: + printf ("AVX512VL"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512DQ: + printf ("AVX512DQ"); + break; + case GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512BW: + printf ("AVX512BW"); + break; + default: printf (_(""), bit); break; + } + if (bitmask) + printf (", "); + } +} + static void decode_x86_isa (unsigned int bitmask) { @@ -16956,24 +17027,78 @@ decode_x86_isa (unsigned int bitmask) bitmask &= ~ bit; switch (bit) { - case GNU_PROPERTY_X86_ISA_1_486: printf ("i486"); break; - case GNU_PROPERTY_X86_ISA_1_586: printf ("586"); break; - case GNU_PROPERTY_X86_ISA_1_686: printf ("686"); break; - case GNU_PROPERTY_X86_ISA_1_SSE: printf ("SSE"); break; - case GNU_PROPERTY_X86_ISA_1_SSE2: printf ("SSE2"); break; - case GNU_PROPERTY_X86_ISA_1_SSE3: printf ("SSE3"); break; - case GNU_PROPERTY_X86_ISA_1_SSSE3: printf ("SSSE3"); break; - case GNU_PROPERTY_X86_ISA_1_SSE4_1: printf ("SSE4_1"); break; - case GNU_PROPERTY_X86_ISA_1_SSE4_2: printf ("SSE4_2"); break; - case GNU_PROPERTY_X86_ISA_1_AVX: printf ("AVX"); break; - case GNU_PROPERTY_X86_ISA_1_AVX2: printf ("AVX2"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512F: printf ("AVX512F"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512CD: printf ("AVX512CD"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512ER: printf ("AVX512ER"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512PF: printf ("AVX512PF"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512VL: printf ("AVX512VL"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512DQ: printf ("AVX512DQ"); break; - case GNU_PROPERTY_X86_ISA_1_AVX512BW: printf ("AVX512BW"); break; + case GNU_PROPERTY_X86_ISA_1_CMOV: + printf ("CMOV"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE: + printf ("SSE"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE2: + printf ("SSE2"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE3: + printf ("SSE3"); + break; + case GNU_PROPERTY_X86_ISA_1_SSSE3: + printf ("SSSE3"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE4_1: + printf ("SSE4_1"); + break; + case GNU_PROPERTY_X86_ISA_1_SSE4_2: + printf ("SSE4_2"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX: + printf ("AVX"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX2: + printf ("AVX2"); + break; + case GNU_PROPERTY_X86_ISA_1_FMA: + printf ("FMA"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512F: + printf ("AVX512F"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512CD: + printf ("AVX512CD"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512ER: + printf ("AVX512ER"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512PF: + printf ("AVX512PF"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512VL: + printf ("AVX512VL"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512DQ: + printf ("AVX512DQ"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512BW: + printf ("AVX512BW"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS: + printf ("AVX512_4FMAPS"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW: + printf ("AVX512_4VNNIW"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_BITALG: + printf ("AVX512_BITALG"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_IFMA: + printf ("AVX512_IFMA"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VBMI: + printf ("AVX512_VBMI"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2: + printf ("AVX512_VBMI2"); + break; + case GNU_PROPERTY_X86_ISA_1_AVX512_VNNI: + printf ("AVX512_VNNI"); + break; default: printf (_(""), bit); break; } if (bitmask) @@ -16982,7 +17107,7 @@ decode_x86_isa (unsigned int bitmask) } static void -decode_x86_feature (unsigned int type, unsigned int bitmask) +decode_x86_feature_1 (unsigned int bitmask) { while (bitmask) { @@ -16992,26 +17117,10 @@ decode_x86_feature (unsigned int type, unsigned int bitmask) switch (bit) { case GNU_PROPERTY_X86_FEATURE_1_IBT: - switch (type) - { - case GNU_PROPERTY_X86_FEATURE_1_AND: - printf ("IBT"); - break; - default: - /* This should never happen. */ - abort (); - } + printf ("IBT"); break; case GNU_PROPERTY_X86_FEATURE_1_SHSTK: - switch (type) - { - case GNU_PROPERTY_X86_FEATURE_1_AND: - printf ("SHSTK"); - break; - default: - /* This should never happen. */ - abort (); - } + printf ("SHSTK"); break; default: printf (_(""), bit); @@ -17022,6 +17131,53 @@ decode_x86_feature (unsigned int type, unsigned int bitmask) } } +static void +decode_x86_feature_2 (unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_X86_FEATURE_2_X86: + printf ("x86"); + break; + case GNU_PROPERTY_X86_FEATURE_2_X87: + printf ("x87"); + break; + case GNU_PROPERTY_X86_FEATURE_2_MMX: + printf ("MMX"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XMM: + printf ("XMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_YMM: + printf ("YMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_ZMM: + printf ("ZMM"); + break; + case GNU_PROPERTY_X86_FEATURE_2_FXSR: + printf ("FXSR"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVE: + printf ("XSAVE"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT: + printf ("XSAVEOPT"); + break; + case GNU_PROPERTY_X86_FEATURE_2_XSAVEC: + printf ("XSAVEC"); + break; + default: printf (_(""), bit); break; + } + if (bitmask) + printf (", "); + } +} + static void print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) { @@ -17115,7 +17271,50 @@ print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) else { printf ("x86 feature: "); - decode_x86_feature (type, bitmask); + decode_x86_feature_1 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_FEATURE_2_USED: + if (datasz != 4) + printf (_("x86 feature used: "), + datasz); + else + { + printf ("x86 feature used: "); + decode_x86_feature_2 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_FEATURE_2_NEEDED: + if (datasz != 4) + printf (_("x86 feature needed: "), datasz); + else + { + printf ("x86 feature needed: "); + decode_x86_feature_2 (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_COMPAT_ISA_1_USED: + if (datasz != 4) + printf (_("x86 ISA used: "), + datasz); + else + { + printf ("x86 ISA used: "); + decode_x86_compat_isa (bitmask); + } + goto next; + + case GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED: + if (datasz != 4) + printf (_("x86 ISA needed: "), + datasz); + else + { + printf ("x86 ISA needed: "); + decode_x86_compat_isa (bitmask); } goto next; diff --git a/binutils/testsuite/binutils-all/i386/pr21231b.d b/binutils/testsuite/binutils-all/i386/pr21231b.d index 29a8f44570..55d878fdb9 100644 --- a/binutils/testsuite/binutils-all/i386/pr21231b.d +++ b/binutils/testsuite/binutils-all/i386/pr21231b.d @@ -8,5 +8,5 @@ Displaying notes found in: .note.gnu.property GNU 0x0000002c NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 no copy on protected - x86 ISA used: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, , , , , , , , , , , , , , - x86 ISA needed: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL + x86 ISA used: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, AVX512_4FMAPS, AVX512_4VNNIW, AVX512_BITALG, AVX512_IFMA, AVX512_VBMI, AVX512_VBMI2, AVX512_VNNI, , , , , , , , + x86 ISA needed: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ diff --git a/binutils/testsuite/binutils-all/i386/pr21231b.s b/binutils/testsuite/binutils-all/i386/pr21231b.s index 3d5474518e..793e282471 100644 --- a/binutils/testsuite/binutils-all/i386/pr21231b.s +++ b/binutils/testsuite/binutils-all/i386/pr21231b.s @@ -19,14 +19,14 @@ .long 0 /* pr_datasz. */ .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long -1 4: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long 0xffff diff --git a/binutils/testsuite/binutils-all/x86-64/pr21231b.d b/binutils/testsuite/binutils-all/x86-64/pr21231b.d index 9d7761c3fe..f433685e69 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr21231b.d +++ b/binutils/testsuite/binutils-all/x86-64/pr21231b.d @@ -8,5 +8,5 @@ Displaying notes found in: .note.gnu.property GNU 0x00000038 NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 no copy on protected - x86 ISA used: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, , , , , , , , , , , , , , - x86 ISA needed: i486, 586, 686, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL + x86 ISA used: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ, AVX512BW, AVX512_4FMAPS, AVX512_4VNNIW, AVX512_BITALG, AVX512_IFMA, AVX512_VBMI, AVX512_VBMI2, AVX512_VNNI, , , , , , , , + x86 ISA needed: CMOV, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, AVX, AVX2, FMA, AVX512F, AVX512CD, AVX512ER, AVX512PF, AVX512VL, AVX512DQ diff --git a/binutils/testsuite/binutils-all/x86-64/pr21231b.s b/binutils/testsuite/binutils-all/x86-64/pr21231b.s index afba4debf3..add9227977 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr21231b.s +++ b/binutils/testsuite/binutils-all/x86-64/pr21231b.s @@ -19,14 +19,14 @@ .long 0 /* pr_datasz. */ .p2align 3 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long -1 4: .p2align 3 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 4f - 3f /* pr_datasz. */ 3: .long 0xffff diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d b/binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d index 67e3aab89e..ad8f9b16c3 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494a-x32.d @@ -8,5 +8,5 @@ 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 + Properties: x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494a.d b/binutils/testsuite/binutils-all/x86-64/pr23494a.d index 06c193867e..32e296ff13 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494a.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494a.d @@ -8,5 +8,5 @@ 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 + Properties: x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494a.s b/binutils/testsuite/binutils-all/x86-64/pr23494a.s index 77185bdc1a..26f7139510 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494a.s +++ b/binutils/testsuite/binutils-all/x86-64/pr23494a.s @@ -17,7 +17,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa @@ -48,7 +48,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 @@ -79,7 +79,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494b.s b/binutils/testsuite/binutils-all/x86-64/pr23494b.s index 239477b082..75a8d5aa7d 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494b.s +++ b/binutils/testsuite/binutils-all/x86-64/pr23494b.s @@ -17,7 +17,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d b/binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d index c4a9414b41..761c1371e3 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494c-x32.d @@ -8,4 +8,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE + Properties: x86 ISA used: SSE, SSE3 diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494c.d b/binutils/testsuite/binutils-all/x86-64/pr23494c.d index 545777a2aa..e98b2ae201 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494c.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494c.d @@ -8,4 +8,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: 586, SSE + Properties: x86 ISA used: SSE, SSE3 diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494c.s b/binutils/testsuite/binutils-all/x86-64/pr23494c.s index a478e7a885..474182cfb0 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494c.s +++ b/binutils/testsuite/binutils-all/x86-64/pr23494c.s @@ -48,7 +48,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa @@ -79,7 +79,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 @@ -110,7 +110,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d b/binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d index 264c9d93cd..b0af2d9908 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494d-x32.d @@ -8,5 +8,5 @@ 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 + Properties: x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494d.d b/binutils/testsuite/binutils-all/x86-64/pr23494d.d index 3237eca54e..1731c03a92 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494d.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494d.d @@ -8,5 +8,5 @@ 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 + Properties: x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d b/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d index 825f45d679..4adfb4aa3b 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494e-x32.d @@ -9,5 +9,5 @@ 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 + x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/binutils/testsuite/binutils-all/x86-64/pr23494e.d b/binutils/testsuite/binutils-all/x86-64/pr23494e.d index ffb89886f7..d9b05388bb 100644 --- a/binutils/testsuite/binutils-all/x86-64/pr23494e.d +++ b/binutils/testsuite/binutils-all/x86-64/pr23494e.d @@ -9,5 +9,5 @@ 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 + x86 ISA needed: SSE4_1, AVX + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/include/ChangeLog b/include/ChangeLog index 4b933b157e..aec4b63589 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,62 @@ +2018-08-24 H.J. Lu + + * elf/common.h (GNU_PROPERTY_X86_ISA_1_USED): Renamed to ... + (GNU_PROPERTY_X86_COMPAT_ISA_1_USED): This. + (GNU_PROPERTY_X86_ISA_1_NEEDED): Renamed to ... + (GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED): This. + (GNU_PROPERTY_X86_ISA_1_XXX): Renamed to ... + (GNU_PROPERTY_X86_COMPAT_ISA_1_XXX): This. + (GNU_PROPERTY_X86_UINT32_AND_LO): New. + (GNU_PROPERTY_X86_UINT32_AND_HI): Likewise. + (GNU_PROPERTY_X86_UINT32_OR_LO): Likewise. + (GNU_PROPERTY_X86_UINT32_OR_HI): Likewise. + (GNU_PROPERTY_X86_UINT32_OR_AND_LO): Likewise. + (GNU_PROPERTY_X86_UINT32_OR_AND_HI): Likewise. + (GNU_PROPERTY_X86_ISA_1_CMOV): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSE): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSE2): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSE3): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSSE3): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSE4_1): Likewise. + (GNU_PROPERTY_X86_ISA_1_SSE4_2): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX2): Likewise. + (GNU_PROPERTY_X86_ISA_1_FMA): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512F): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512CD): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512ER): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512PF): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512VL): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512DQ): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512BW): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_BITALG): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_IFMA): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2): Likewise. + (GNU_PROPERTY_X86_ISA_1_AVX512_VNNI): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_X86): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_X87): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_MMX): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_XMM): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_YMM): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_ZMM): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_FXSR): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_XSAVE): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT): Likewise. + (GNU_PROPERTY_X86_FEATURE_2_XSAVEC): Likewise. + (GNU_PROPERTY_X86_FEATURE_1_AND): Updated to + (GNU_PROPERTY_X86_UINT32_AND_LO + 0). + (GNU_PROPERTY_X86_ISA_1_NEEDED): Defined to + (GNU_PROPERTY_X86_UINT32_OR_LO + 0). + (GNU_PROPERTY_X86_FEATURE_2_NEEDED): New. Defined to + (GNU_PROPERTY_X86_UINT32_OR_LO + 1). + (GNU_PROPERTY_X86_ISA_1_USED): Defined to + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0). + (GNU_PROPERTY_X86_FEATURE_2_USED): New. Defined to + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1). + 2018-08-24 H.J. Lu * elf/common.h (GNU_PROPERTY_X86_UINT32_VALID): New. diff --git a/include/elf/common.h b/include/elf/common.h index 55c5505bac..961d022a1b 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -748,34 +748,98 @@ /* Application-specific semantics, hi */ #define GNU_PROPERTY_HIUSER 0xffffffff -#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 -#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -#define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 +#define GNU_PROPERTY_X86_COMPAT_ISA_1_USED 0xc0000000 +#define GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED 0xc0000001 + +#define GNU_PROPERTY_X86_COMPAT_ISA_1_486 (1U << 0) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_586 (1U << 1) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_686 (1U << 2) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE (1U << 3) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE2 (1U << 4) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE3 (1U << 5) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSSE3 (1U << 6) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_1 (1U << 7) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_SSE4_2 (1U << 8) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX (1U << 9) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX2 (1U << 10) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512F (1U << 11) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512CD (1U << 12) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512ER (1U << 13) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512PF (1U << 14) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512VL (1U << 15) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512DQ (1U << 16) +#define GNU_PROPERTY_X86_COMPAT_ISA_1_AVX512BW (1U << 17) + +/* A 4-byte unsigned integer property: A bit is set if it is set in all + relocatable inputs. */ +#define GNU_PROPERTY_X86_UINT32_AND_LO 0xc0000002 +#define GNU_PROPERTY_X86_UINT32_AND_HI 0xc0007fff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs. */ +#define GNU_PROPERTY_X86_UINT32_OR_LO 0xc0008000 +#define GNU_PROPERTY_X86_UINT32_OR_HI 0xc000ffff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs and the property is present in all relocatable + inputs. */ +#define GNU_PROPERTY_X86_UINT32_OR_AND_LO 0xc0010000 +#define GNU_PROPERTY_X86_UINT32_OR_AND_HI 0xc0017fff + +#define GNU_PROPERTY_X86_FEATURE_1_AND \ + (GNU_PROPERTY_X86_UINT32_AND_LO + 0) + +#define GNU_PROPERTY_X86_ISA_1_NEEDED \ + (GNU_PROPERTY_X86_UINT32_OR_LO + 0) +#define GNU_PROPERTY_X86_FEATURE_2_NEEDED \ + (GNU_PROPERTY_X86_UINT32_OR_LO + 1) + +#define GNU_PROPERTY_X86_ISA_1_USED \ + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0) +#define GNU_PROPERTY_X86_FEATURE_2_USED \ + (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1) /* Set by linker to indicate that the property is valid. */ #define GNU_PROPERTY_X86_UINT32_VALID (1U << 31) -#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0) -#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1) -#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2) -#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3) -#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4) -#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5) -#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6) -#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7) -#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8) -#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9) -#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10) -#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11) -#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12) -#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13) -#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14) -#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15) -#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16) -#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17) - -#define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) -#define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) +#define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) +#define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) + +#define GNU_PROPERTY_X86_ISA_1_CMOV (1U << 0) +#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 1) +#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 2) +#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 3) +#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 4) +#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 5) +#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 6) +#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 7) +#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 8) +#define GNU_PROPERTY_X86_ISA_1_FMA (1U << 9) +#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 10) +#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 11) +#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 12) +#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 13) +#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 14) +#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 15) +#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 16) +#define GNU_PROPERTY_X86_ISA_1_AVX512_4FMAPS (1U << 17) +#define GNU_PROPERTY_X86_ISA_1_AVX512_4VNNIW (1U << 18) +#define GNU_PROPERTY_X86_ISA_1_AVX512_BITALG (1U << 19) +#define GNU_PROPERTY_X86_ISA_1_AVX512_IFMA (1U << 20) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VBMI (1U << 21) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VBMI2 (1U << 22) +#define GNU_PROPERTY_X86_ISA_1_AVX512_VNNI (1U << 23) + +#define GNU_PROPERTY_X86_FEATURE_2_X86 (1U << 0) +#define GNU_PROPERTY_X86_FEATURE_2_X87 (1U << 1) +#define GNU_PROPERTY_X86_FEATURE_2_MMX (1U << 2) +#define GNU_PROPERTY_X86_FEATURE_2_XMM (1U << 3) +#define GNU_PROPERTY_X86_FEATURE_2_YMM (1U << 4) +#define GNU_PROPERTY_X86_FEATURE_2_ZMM (1U << 5) +#define GNU_PROPERTY_X86_FEATURE_2_FXSR (1U << 6) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVE (1U << 7) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVEOPT (1U << 8) +#define GNU_PROPERTY_X86_FEATURE_2_XSAVEC (1U << 9) /* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */ #define GNU_ABI_TAG_LINUX 0 diff --git a/ld/ChangeLog b/ld/ChangeLog index c2d47fdcea..942843c7f1 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,64 @@ +2018-08-24 H.J. Lu + + * testsuite/ld-i386/i386.exp: Run pr23372c, pr23372d, pr23486c + and pr23486d. + * testsuite/ld-i386/pr23372a.s: Update comments. + * testsuite/ld-i386/pr23372b.s: Likewise. + * testsuite/ld-i386/pr23372c.s: Likewise. + * testsuite/ld-x86-64/pr23372a.s: Likewise. + * testsuite/ld-x86-64/pr23372b.s: Likewise. + * testsuite/ld-x86-64/pr23372c.s: Likewise. + * testsuite/ld-x86-64/pr23486a.s: Likewise. + * testsuite/ld-x86-64/pr23486b.s: Likewise. + * testsuite/ld-i386/pr23372c.d: New file. + * testsuite/ld-i386/pr23372d.d: Likewise. + * testsuite/ld-i386/pr23486c.d: Likewise. + * testsuite/ld-i386/pr23486d.d: Likewise. + * testsuite/ld-x86-64/pr23372c-x32.d: Likewise. + * testsuite/ld-x86-64/pr23372c.d: Likewise. + * testsuite/ld-x86-64/pr23372d-x32.d: Likewise. + * testsuite/ld-x86-64/pr23372d.d: Likewise. + * testsuite/ld-x86-64/pr23372d.s: Likewise. + * testsuite/ld-x86-64/pr23372e.s: Likewise. + * testsuite/ld-x86-64/pr23372f.s: Likewise. + * testsuite/ld-x86-64/pr23486c-x32.d: Likewise. + * testsuite/ld-x86-64/pr23486c.d: Likewise. + * testsuite/ld-x86-64/pr23486c.s: Likewise. + * testsuite/ld-x86-64/pr23486d-x32.d: Likewise. + * testsuite/ld-x86-64/pr23486d.d: Likewise. + * testsuite/ld-x86-64/pr23486d.s: Likewise. + * testsuite/ld-i386/property-3.r: Updated. + * testsuite/ld-i386/property-4.r: Likewise. + * testsuite/ld-i386/property-5.r: Likewise. + * testsuite/ld-i386/property-x86-3.d: Likewise. + * testsuite/ld-i386/property-x86-ibt3a.d: Likewise. + * testsuite/ld-i386/property-x86-shstk3a.d: Likewise. + * testsuite/ld-i386/property-x86-shstk3b.d: Likewise. + * testsuite/ld-x86-64/property-3.r: Likewise. + * testsuite/ld-x86-64/property-4.r: Likewise. + * testsuite/ld-x86-64/property-5.r: Likewise. + * testsuite/ld-x86-64/property-x86-3-x32.d: Likewise. + * testsuite/ld-x86-64/property-x86-3.d: Likewise. + * testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise. + * testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise. + * testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise. + * testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise. + * testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise. + * testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise. + * testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise. + * testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise. + * testsuite/ld-i386/property-x86-1.S: Updated to the current + GNU_PROPERTY_X86_ISA_1_USED and GNU_PROPERTY_X86_ISA_1_NEEDED + values. + * testsuite/ld-i386/property-x86-2.S: Likewise. + * testsuite/ld-i386/property-x86-3.s: Likewise. + * testsuite/ld-x86-64/property-x86-1.S: Likewise. + * testsuite/ld-x86-64/property-x86-2.S: Likewise. + * testsuite/ld-x86-64/property-x86-3.s: Likewise. + * ld/testsuite/ld-x86-64/x86-64.exp: Run pr23372c, pr23372c-x32, + pr23372d, pr23372d-x32, pr23486c, pr23486c-x32, pr23486d and + pr23486d-x32. + 2018-08-24 Alan Modra * emultempl/elf32.em (before_allocation): Don't restore diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 78dad02579..d1aa350f7e 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -462,8 +462,12 @@ run_dump_test "pr23189" run_dump_test "pr23194" run_dump_test "pr23372a" run_dump_test "pr23372b" +run_dump_test "pr23372c" +run_dump_test "pr23372d" run_dump_test "pr23486a" run_dump_test "pr23486b" +run_dump_test "pr23486c" +run_dump_test "pr23486d" if { !([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"] diff --git a/ld/testsuite/ld-i386/pr23372a.s b/ld/testsuite/ld-i386/pr23372a.s index 9849d620a1..eeeac0674e 100644 --- a/ld/testsuite/ld-i386/pr23372a.s +++ b/ld/testsuite/ld-i386/pr23372a.s @@ -8,7 +8,7 @@ .asciz "GNU" /* vendor name. */ 1: .p2align 2 - /* GNU_PROPERTY_X86_ISA_1_USED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_USED */ .long 0xc0000000 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-i386/pr23372b.s b/ld/testsuite/ld-i386/pr23372b.s index 9849d620a1..eeeac0674e 100644 --- a/ld/testsuite/ld-i386/pr23372b.s +++ b/ld/testsuite/ld-i386/pr23372b.s @@ -8,7 +8,7 @@ .asciz "GNU" /* vendor name. */ 1: .p2align 2 - /* GNU_PROPERTY_X86_ISA_1_USED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_USED */ .long 0xc0000000 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-i386/pr23372c.d b/ld/testsuite/ld-i386/pr23372c.d new file mode 100644 index 0000000000..987ae4cfe5 --- /dev/null +++ b/ld/testsuite/ld-i386/pr23372c.d @@ -0,0 +1,5 @@ +#source: ../ld-x86-64/pr23372d.s +#source: ../ld-x86-64/pr23372e.s +#as: --32 +#ld: -r -m elf_i386 +#readelf: -n diff --git a/ld/testsuite/ld-i386/pr23372c.s b/ld/testsuite/ld-i386/pr23372c.s index 3470dce649..6a871cc5f5 100644 --- a/ld/testsuite/ld-i386/pr23372c.s +++ b/ld/testsuite/ld-i386/pr23372c.s @@ -8,7 +8,7 @@ .asciz "GNU" /* vendor name. */ 1: .p2align 2 - /* GNU_PROPERTY_X86_ISA_1_NEEDED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED */ .long 0xc0000001 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-i386/pr23372d.d b/ld/testsuite/ld-i386/pr23372d.d new file mode 100644 index 0000000000..e44aee9d5c --- /dev/null +++ b/ld/testsuite/ld-i386/pr23372d.d @@ -0,0 +1,5 @@ +#source: ../ld-x86-64/pr23372d.s +#source: ../ld-x86-64/pr23372f.s +#as: --32 +#ld: -r -m elf_i386 +#readelf: -n diff --git a/ld/testsuite/ld-i386/pr23486c.d b/ld/testsuite/ld-i386/pr23486c.d new file mode 100644 index 0000000000..a557319638 --- /dev/null +++ b/ld/testsuite/ld-i386/pr23486c.d @@ -0,0 +1,10 @@ +#source: ../ld-x86-64/pr23486c.s +#source: ../ld-x86-64/pr23486d.s +#as: --32 +#ld: -r -m elf_i386 +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: CMOV, SSE diff --git a/ld/testsuite/ld-i386/pr23486d.d b/ld/testsuite/ld-i386/pr23486d.d new file mode 100644 index 0000000000..48cceb186f --- /dev/null +++ b/ld/testsuite/ld-i386/pr23486d.d @@ -0,0 +1,10 @@ +#source: ../ld-x86-64/pr23486d.s +#source: ../ld-x86-64/pr23486c.s +#as: --32 +#ld: -r -m elf_i386 +#readelf: -n + +Displaying notes found in: .note.gnu.property + Owner Data size Description + GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 + Properties: x86 ISA needed: CMOV, SSE diff --git a/ld/testsuite/ld-i386/property-3.r b/ld/testsuite/ld-i386/property-3.r index d03203c1e5..e9f7162357 100644 --- a/ld/testsuite/ld-i386/property-3.r +++ b/ld/testsuite/ld-i386/property-3.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA needed: i486, 586 + x86 ISA needed: CMOV, SSE #pass diff --git a/ld/testsuite/ld-i386/property-4.r b/ld/testsuite/ld-i386/property-4.r index da295eb6c7..876d05708f 100644 --- a/ld/testsuite/ld-i386/property-4.r +++ b/ld/testsuite/ld-i386/property-4.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA needed: i486, 586, SSE + x86 ISA needed: CMOV, SSE, SSE3 #pass diff --git a/ld/testsuite/ld-i386/property-5.r b/ld/testsuite/ld-i386/property-5.r index e4141594b3..adef5e8db2 100644 --- a/ld/testsuite/ld-i386/property-5.r +++ b/ld/testsuite/ld-i386/property-5.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x900000 - x86 ISA needed: i486, 586, SSE + x86 ISA needed: CMOV, SSE, SSE3 #pass diff --git a/ld/testsuite/ld-i386/property-x86-1.S b/ld/testsuite/ld-i386/property-x86-1.S index 953ca87930..f0b8fc0ce5 100644 --- a/ld/testsuite/ld-i386/property-x86-1.S +++ b/ld/testsuite/ld-i386/property-x86-1.S @@ -16,14 +16,14 @@ 5: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa 5: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 diff --git a/ld/testsuite/ld-i386/property-x86-2.S b/ld/testsuite/ld-i386/property-x86-2.S index f11e1fe241..39876811cb 100644 --- a/ld/testsuite/ld-i386/property-x86-2.S +++ b/ld/testsuite/ld-i386/property-x86-2.S @@ -9,14 +9,14 @@ 1: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 5: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa diff --git a/ld/testsuite/ld-i386/property-x86-3.d b/ld/testsuite/ld-i386/property-x86-3.d index 19c6699716..1cbd37a6ff 100644 --- a/ld/testsuite/ld-i386/property-x86-3.d +++ b/ld/testsuite/ld-i386/property-x86-3.d @@ -5,5 +5,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000018 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA used: i486, 586, SSE2, SSE3 - x86 ISA needed: 586, SSE, SSE3, SSE4_1 + Properties: x86 ISA needed: SSE, SSE3, SSE4_1, AVX + x86 ISA used: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-i386/property-x86-3.s b/ld/testsuite/ld-i386/property-x86-3.s index a6fd830977..7e5924f829 100644 --- a/ld/testsuite/ld-i386/property-x86-3.s +++ b/ld/testsuite/ld-i386/property-x86-3.s @@ -9,14 +9,14 @@ 1: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 5: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa @@ -35,14 +35,14 @@ 1: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x30 5: .p2align 2 /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 diff --git a/ld/testsuite/ld-i386/property-x86-ibt3a.d b/ld/testsuite/ld-i386/property-x86-ibt3a.d index 0aedea1614..b87bc27006 100644 --- a/ld/testsuite/ld-i386/property-x86-ibt3a.d +++ b/ld/testsuite/ld-i386/property-x86-ibt3a.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 + Properties: x86 ISA needed: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-i386/property-x86-ibt3b.d b/ld/testsuite/ld-i386/property-x86-ibt3b.d index bd69ac6478..f09ae520ab 100644 --- a/ld/testsuite/ld-i386/property-x86-ibt3b.d +++ b/ld/testsuite/ld-i386/property-x86-ibt3b.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 + Properties: x86 ISA needed: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-i386/property-x86-shstk3a.d b/ld/testsuite/ld-i386/property-x86-shstk3a.d index 76d2a39f2c..44f3e57416 100644 --- a/ld/testsuite/ld-i386/property-x86-shstk3a.d +++ b/ld/testsuite/ld-i386/property-x86-shstk3a.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 + Properties: x86 ISA needed: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-i386/property-x86-shstk3b.d b/ld/testsuite/ld-i386/property-x86-shstk3b.d index e770ecffa5..db136cdc9a 100644 --- a/ld/testsuite/ld-i386/property-x86-shstk3b.d +++ b/ld/testsuite/ld-i386/property-x86-shstk3b.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1 + Properties: x86 ISA needed: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-x86-64/pr23372a.s b/ld/testsuite/ld-x86-64/pr23372a.s index 639fc26de4..75ce47e0da 100644 --- a/ld/testsuite/ld-x86-64/pr23372a.s +++ b/ld/testsuite/ld-x86-64/pr23372a.s @@ -16,7 +16,7 @@ .else .p2align 2 .endif - /* GNU_PROPERTY_X86_ISA_1_USED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_USED */ .long 0xc0000000 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-x86-64/pr23372b.s b/ld/testsuite/ld-x86-64/pr23372b.s index 639fc26de4..75ce47e0da 100644 --- a/ld/testsuite/ld-x86-64/pr23372b.s +++ b/ld/testsuite/ld-x86-64/pr23372b.s @@ -16,7 +16,7 @@ .else .p2align 2 .endif - /* GNU_PROPERTY_X86_ISA_1_USED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_USED */ .long 0xc0000000 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-x86-64/pr23372c-x32.d b/ld/testsuite/ld-x86-64/pr23372c-x32.d new file mode 100644 index 0000000000..863f4b7e44 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372c-x32.d @@ -0,0 +1,5 @@ +#source: pr23372d.s +#source: pr23372e.s +#as: --x32 +#ld: -r -m elf32_x86_64 +#readelf: -n diff --git a/ld/testsuite/ld-x86-64/pr23372c.d b/ld/testsuite/ld-x86-64/pr23372c.d new file mode 100644 index 0000000000..23bdaa786a --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372c.d @@ -0,0 +1,5 @@ +#source: pr23372d.s +#source: pr23372e.s +#as: --64 -defsym __64_bit__=1 +#ld: -r -m elf_x86_64 +#readelf: -n diff --git a/ld/testsuite/ld-x86-64/pr23372c.s b/ld/testsuite/ld-x86-64/pr23372c.s index b4eaf69777..2efb9bded4 100644 --- a/ld/testsuite/ld-x86-64/pr23372c.s +++ b/ld/testsuite/ld-x86-64/pr23372c.s @@ -16,7 +16,7 @@ .else .p2align 2 .endif - /* GNU_PROPERTY_X86_ISA_1_NEEDED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED */ .long 0xc0000001 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-x86-64/pr23372d-x32.d b/ld/testsuite/ld-x86-64/pr23372d-x32.d new file mode 100644 index 0000000000..80c783dff7 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372d-x32.d @@ -0,0 +1,5 @@ +#source: pr23372d.s +#source: pr23372f.s +#as: --x32 +#ld: -r -m elf32_x86_64 +#readelf: -n diff --git a/ld/testsuite/ld-x86-64/pr23372d.d b/ld/testsuite/ld-x86-64/pr23372d.d new file mode 100644 index 0000000000..355269827b --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372d.d @@ -0,0 +1,5 @@ +#source: pr23372d.s +#source: pr23372f.s +#as: --64 -defsym __64_bit__=1 +#ld: -r -m elf_x86_64 +#readelf: -n diff --git a/ld/testsuite/ld-x86-64/pr23372d.s b/ld/testsuite/ld-x86-64/pr23372d.s new file mode 100644 index 0000000000..cec05cdba8 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372d.s @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 4f - 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 0xc0010000 /* pr_type. */ + .long 3f - 2f /* pr_datasz. */ +2: + .long 0x0 +3: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +4: diff --git a/ld/testsuite/ld-x86-64/pr23372e.s b/ld/testsuite/ld-x86-64/pr23372e.s new file mode 100644 index 0000000000..cec05cdba8 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372e.s @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 4f - 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 0xc0010000 /* pr_type. */ + .long 3f - 2f /* pr_datasz. */ +2: + .long 0x0 +3: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +4: diff --git a/ld/testsuite/ld-x86-64/pr23372f.s b/ld/testsuite/ld-x86-64/pr23372f.s new file mode 100644 index 0000000000..57797c8561 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23372f.s @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 4f - 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 0xc0008000 /* pr_type. */ + .long 3f - 2f /* pr_datasz. */ +2: + .long 0x0 +3: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +4: diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s index a07d0c7ced..b04960ca28 100644 --- a/ld/testsuite/ld-x86-64/pr23486a.s +++ b/ld/testsuite/ld-x86-64/pr23486a.s @@ -16,7 +16,7 @@ .else .p2align 2 .endif - /* GNU_PROPERTY_X86_ISA_1_USED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_USED */ .long 0xc0000000 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s index c5167eeb65..500da3a4ae 100644 --- a/ld/testsuite/ld-x86-64/pr23486b.s +++ b/ld/testsuite/ld-x86-64/pr23486b.s @@ -16,7 +16,7 @@ .else .p2align 2 .endif - /* GNU_PROPERTY_X86_ISA_1_NEEDED */ + /* GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED */ .long 0xc0000001 /* pr_type. */ .long 3f - 2f /* pr_datasz. */ 2: diff --git a/ld/testsuite/ld-x86-64/pr23486c-x32.d b/ld/testsuite/ld-x86-64/pr23486c-x32.d new file mode 100644 index 0000000000..acbabe148d --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486c-x32.d @@ -0,0 +1,10 @@ +#source: pr23486c.s +#source: pr23486d.s +#as: --x32 +#ld: -r -m 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 needed: CMOV, SSE diff --git a/ld/testsuite/ld-x86-64/pr23486c.d b/ld/testsuite/ld-x86-64/pr23486c.d new file mode 100644 index 0000000000..c7e91da301 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486c.d @@ -0,0 +1,10 @@ +#source: pr23486c.s +#source: pr23486d.s +#as: --64 -defsym __64_bit__=1 +#ld: -r -m elf_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 needed: CMOV, SSE diff --git a/ld/testsuite/ld-x86-64/pr23486c.s b/ld/testsuite/ld-x86-64/pr23486c.s new file mode 100644 index 0000000000..16bb94d959 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486c.s @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 4f - 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 0xc0010000 /* pr_type. */ + .long 3f - 2f /* pr_datasz. */ +2: + .long 0xa +3: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +4: diff --git a/ld/testsuite/ld-x86-64/pr23486d-x32.d b/ld/testsuite/ld-x86-64/pr23486d-x32.d new file mode 100644 index 0000000000..fa72d4bcf2 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486d-x32.d @@ -0,0 +1,10 @@ +#source: pr23486d.s +#source: pr23486c.s +#as: --x32 +#ld: -r -m 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 needed: CMOV, SSE diff --git a/ld/testsuite/ld-x86-64/pr23486d.d b/ld/testsuite/ld-x86-64/pr23486d.d new file mode 100644 index 0000000000..1f0ed231a5 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486d.d @@ -0,0 +1,10 @@ +#source: pr23486d.s +#source: pr23486c.s +#as: --64 -defsym __64_bit__=1 +#ld: -r -m elf_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 needed: CMOV, SSE diff --git a/ld/testsuite/ld-x86-64/pr23486d.s b/ld/testsuite/ld-x86-64/pr23486d.s new file mode 100644 index 0000000000..88f9c112c1 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr23486d.s @@ -0,0 +1,30 @@ + .section ".note.gnu.property", "a" +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif + .long 1f - 0f /* name length. */ + .long 4f - 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 0xc0008000 /* pr_type. */ + .long 3f - 2f /* pr_datasz. */ +2: + .long 0x3 +3: +.ifdef __64_bit__ + .p2align 3 +.else + .p2align 2 +.endif +4: diff --git a/ld/testsuite/ld-x86-64/property-3.r b/ld/testsuite/ld-x86-64/property-3.r index d03203c1e5..e9f7162357 100644 --- a/ld/testsuite/ld-x86-64/property-3.r +++ b/ld/testsuite/ld-x86-64/property-3.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA needed: i486, 586 + x86 ISA needed: CMOV, SSE #pass diff --git a/ld/testsuite/ld-x86-64/property-4.r b/ld/testsuite/ld-x86-64/property-4.r index da295eb6c7..876d05708f 100644 --- a/ld/testsuite/ld-x86-64/property-4.r +++ b/ld/testsuite/ld-x86-64/property-4.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x800000 - x86 ISA needed: i486, 586, SSE + x86 ISA needed: CMOV, SSE, SSE3 #pass diff --git a/ld/testsuite/ld-x86-64/property-5.r b/ld/testsuite/ld-x86-64/property-5.r index e4141594b3..adef5e8db2 100644 --- a/ld/testsuite/ld-x86-64/property-5.r +++ b/ld/testsuite/ld-x86-64/property-5.r @@ -3,5 +3,5 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 Properties: stack size: 0x900000 - x86 ISA needed: i486, 586, SSE + x86 ISA needed: CMOV, SSE, SSE3 #pass diff --git a/ld/testsuite/ld-x86-64/property-x86-1.S b/ld/testsuite/ld-x86-64/property-x86-1.S index 33f2ccdade..c950b9db19 100644 --- a/ld/testsuite/ld-x86-64/property-x86-1.S +++ b/ld/testsuite/ld-x86-64/property-x86-1.S @@ -21,14 +21,14 @@ 5: .p2align ALIGN /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa 5: .p2align ALIGN /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 diff --git a/ld/testsuite/ld-x86-64/property-x86-2.S b/ld/testsuite/ld-x86-64/property-x86-2.S index 132e5218f5..72056be46e 100644 --- a/ld/testsuite/ld-x86-64/property-x86-2.S +++ b/ld/testsuite/ld-x86-64/property-x86-2.S @@ -14,14 +14,14 @@ 1: .p2align ALIGN /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 5: .p2align ALIGN /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa diff --git a/ld/testsuite/ld-x86-64/property-x86-3-x32.d b/ld/testsuite/ld-x86-64/property-x86-3-x32.d index cd8a2b5c36..d70224a1f3 100644 --- a/ld/testsuite/ld-x86-64/property-x86-3-x32.d +++ b/ld/testsuite/ld-x86-64/property-x86-3-x32.d @@ -6,5 +6,5 @@ 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: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-x86-64/property-x86-3.d b/ld/testsuite/ld-x86-64/property-x86-3.d index 6686b14dd0..2cd5c8fcef 100644 --- a/ld/testsuite/ld-x86-64/property-x86-3.d +++ b/ld/testsuite/ld-x86-64/property-x86-3.d @@ -5,5 +5,5 @@ 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: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 + x86 ISA used: SSE, SSE3, SSE4_1, AVX diff --git a/ld/testsuite/ld-x86-64/property-x86-3.s b/ld/testsuite/ld-x86-64/property-x86-3.s index 239cf622ff..8c9d6dac84 100644 --- a/ld/testsuite/ld-x86-64/property-x86-3.s +++ b/ld/testsuite/ld-x86-64/property-x86-3.s @@ -17,7 +17,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa @@ -28,7 +28,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x3 @@ -59,7 +59,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_USED */ - .long 0xc0000000 /* pr_type. */ + .long 0xc0010000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0xa0 @@ -70,7 +70,7 @@ .p2align 2 .endif /* GNU_PROPERTY_X86_ISA_1_NEEDED */ - .long 0xc0000001 /* pr_type. */ + .long 0xc0008000 /* pr_type. */ .long 5f - 4f /* pr_datasz. */ 4: .long 0x30 diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d index 4cec728dc7..f87ecff6af 100644 --- a/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d +++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d index a8df49a351..902691395c 100644 --- a/ld/testsuite/ld-x86-64/property-x86-ibt3a.d +++ b/ld/testsuite/ld-x86-64/property-x86-ibt3a.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d index c112626711..45f6037ad7 100644 --- a/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d +++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d index f10dffdc2c..259e333bcd 100644 --- a/ld/testsuite/ld-x86-64/property-x86-ibt3b.d +++ b/ld/testsuite/ld-x86-64/property-x86-ibt3b.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d index 0147a3c7b6..85fcb6b353 100644 --- a/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d +++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d index 1f8c2dc929..0eb42e7ab2 100644 --- a/ld/testsuite/ld-x86-64/property-x86-shstk3a.d +++ b/ld/testsuite/ld-x86-64/property-x86-shstk3a.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d index 7ca2539ca5..23a8be6a23 100644 --- a/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d +++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x0000000c NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d index f66a40e449..152eea5353 100644 --- a/ld/testsuite/ld-x86-64/property-x86-shstk3b.d +++ b/ld/testsuite/ld-x86-64/property-x86-shstk3b.d @@ -7,4 +7,4 @@ Displaying notes found in: .note.gnu.property Owner Data size Description GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0 - Properties: x86 ISA needed: i486, 586, SSE2, SSE3 + Properties: x86 ISA needed: CMOV, SSE, SSSE3, SSE4_1 diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index ae21e554ad..41f40e7581 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -403,10 +403,18 @@ run_dump_test "pr23372a" run_dump_test "pr23372a-x32" run_dump_test "pr23372b" run_dump_test "pr23372b-x32" +run_dump_test "pr23372c" +run_dump_test "pr23372c-x32" +run_dump_test "pr23372d" +run_dump_test "pr23372d-x32" run_dump_test "pr23486a" run_dump_test "pr23486a-x32" run_dump_test "pr23486b" run_dump_test "pr23486b-x32" +run_dump_test "pr23486c" +run_dump_test "pr23486c-x32" +run_dump_test "pr23486d" +run_dump_test "pr23486d-x32" if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} { return -- 2.34.1