diff --git a/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch b/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch deleted file mode 100644 index 004271bd45ab..000000000000 --- a/pkgs/development/tools/misc/binutils/CVE-2021-3487.patch +++ /dev/null @@ -1,73 +0,0 @@ -From: Nick Clifton -Date: Thu, 26 Nov 2020 17:08:33 +0000 (+0000) -Subject: Prevent a memory allocation failure when parsing corrupt DWARF debug sections. -X-Git-Tag: binutils-2_36~485 -X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff_plain;h=647cebce12a6b0a26960220caff96ff38978cf24;hp=239ca5e497dda2c151009d664d500086a5c2173a - -Prevent a memory allocation failure when parsing corrupt DWARF debug sections. - - PR 26946 - * dwarf2.c (read_section): Check for debug sections with excessive - sizes. ---- - -diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c -index 977bf43a6a1..8bbfc81d3e7 100644 ---- a/bfd/dwarf2.c -+++ b/bfd/dwarf2.c -@@ -531,22 +531,24 @@ read_section (bfd * abfd, - bfd_byte ** section_buffer, - bfd_size_type * section_size) - { -- asection *msec; - const char *section_name = sec->uncompressed_name; - bfd_byte *contents = *section_buffer; -- bfd_size_type amt; - - /* The section may have already been read. */ - if (contents == NULL) - { -+ bfd_size_type amt; -+ asection *msec; -+ ufile_ptr filesize; -+ - msec = bfd_get_section_by_name (abfd, section_name); -- if (! msec) -+ if (msec == NULL) - { - section_name = sec->compressed_name; - if (section_name != NULL) - msec = bfd_get_section_by_name (abfd, section_name); - } -- if (! msec) -+ if (msec == NULL) - { - _bfd_error_handler (_("DWARF error: can't find %s section."), - sec->uncompressed_name); -@@ -554,12 +556,23 @@ read_section (bfd * abfd, - return FALSE; - } - -- *section_size = msec->rawsize ? msec->rawsize : msec->size; -+ amt = bfd_get_section_limit_octets (abfd, msec); -+ filesize = bfd_get_file_size (abfd); -+ if (amt >= filesize) -+ { -+ /* PR 26946 */ -+ _bfd_error_handler (_("DWARF error: section %s is larger than its filesize! (0x%lx vs 0x%lx)"), -+ section_name, (long) amt, (long) filesize); -+ bfd_set_error (bfd_error_bad_value); -+ return FALSE; -+ } -+ *section_size = amt; - /* Paranoia - alloc one extra so that we can make sure a string - section is NUL terminated. */ -- amt = *section_size + 1; -+ amt += 1; - if (amt == 0) - { -+ /* Paranoia - this should never happen. */ - bfd_set_error (bfd_error_no_memory); - return FALSE; - } - diff --git a/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch b/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch deleted file mode 100644 index af1c95fac806..000000000000 --- a/pkgs/development/tools/misc/binutils/CVE-2021-45078.patch +++ /dev/null @@ -1,239 +0,0 @@ -based on upstream https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=161e87d12167b1e36193385485c1f6ce92f74f02;hp=d5c94731766bf4f276146fd29c1df8eebc2aaf69 - -adapted by ris to apply to 2.35.2 (simply capitalizing booleans) - -diff --git a/binutils/stabs.c b/binutils/stabs.c -index 274bfb0e7fa..83ee3ea5fa4 100644 ---- a/binutils/stabs.c -+++ b/binutils/stabs.c -@@ -202,7 +202,7 @@ static debug_type stab_find_type (void *, struct stab_handle *, const int *); - static bool stab_record_type - (void *, struct stab_handle *, const int *, debug_type); - static debug_type stab_xcoff_builtin_type -- (void *, struct stab_handle *, int); -+ (void *, struct stab_handle *, unsigned int); - static debug_type stab_find_tagged_type - (void *, struct stab_handle *, const char *, int, enum debug_type_kind); - static debug_type *stab_demangle_argtypes -@@ -3496,166 +3496,167 @@ stab_record_type (void *dhandle ATTRIBUTE_UNUSED, struct stab_handle *info, - - static debug_type - stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info, -- int typenum) -+ unsigned int typenum) - { - debug_type rettype; - const char *name; - -- if (typenum >= 0 || typenum < -XCOFF_TYPE_COUNT) -+ typenum = -typenum - 1; -+ if (typenum >= XCOFF_TYPE_COUNT) - { -- fprintf (stderr, _("Unrecognized XCOFF type %d\n"), typenum); -+ fprintf (stderr, _("Unrecognized XCOFF type %d\n"), -typenum - 1); - return DEBUG_TYPE_NULL; - } -- if (info->xcoff_types[-typenum] != NULL) -- return info->xcoff_types[-typenum]; -+ if (info->xcoff_types[typenum] != NULL) -+ return info->xcoff_types[typenum]; - -- switch (-typenum) -+ switch (typenum) - { -- case 1: -+ case 0: - /* The size of this and all the other types are fixed, defined - by the debugging format. */ - name = "int"; - rettype = debug_make_int_type (dhandle, 4, FALSE); - break; -- case 2: -+ case 1: - name = "char"; - rettype = debug_make_int_type (dhandle, 1, FALSE); - break; -- case 3: -+ case 2: - name = "short"; - rettype = debug_make_int_type (dhandle, 2, FALSE); - break; -- case 4: -+ case 3: - name = "long"; - rettype = debug_make_int_type (dhandle, 4, FALSE); - break; -- case 5: -+ case 4: - name = "unsigned char"; - rettype = debug_make_int_type (dhandle, 1, TRUE); - break; -- case 6: -+ case 5: - name = "signed char"; - rettype = debug_make_int_type (dhandle, 1, FALSE); - break; -- case 7: -+ case 6: - name = "unsigned short"; - rettype = debug_make_int_type (dhandle, 2, TRUE); - break; -- case 8: -+ case 7: - name = "unsigned int"; - rettype = debug_make_int_type (dhandle, 4, TRUE); - break; -- case 9: -+ case 8: - name = "unsigned"; - rettype = debug_make_int_type (dhandle, 4, TRUE); - break; -- case 10: -+ case 9: - name = "unsigned long"; - rettype = debug_make_int_type (dhandle, 4, TRUE); - break; -- case 11: -+ case 10: - name = "void"; - rettype = debug_make_void_type (dhandle); - break; -- case 12: -+ case 11: - /* IEEE single precision (32 bit). */ - name = "float"; - rettype = debug_make_float_type (dhandle, 4); - break; -- case 13: -+ case 12: - /* IEEE double precision (64 bit). */ - name = "double"; - rettype = debug_make_float_type (dhandle, 8); - break; -- case 14: -+ case 13: - /* This is an IEEE double on the RS/6000, and different machines - with different sizes for "long double" should use different - negative type numbers. See stabs.texinfo. */ - name = "long double"; - rettype = debug_make_float_type (dhandle, 8); - break; -- case 15: -+ case 14: - name = "integer"; - rettype = debug_make_int_type (dhandle, 4, FALSE); - break; -- case 16: -+ case 15: - name = "boolean"; - rettype = debug_make_bool_type (dhandle, 4); - break; -- case 17: -+ case 16: - name = "short real"; - rettype = debug_make_float_type (dhandle, 4); - break; -- case 18: -+ case 17: - name = "real"; - rettype = debug_make_float_type (dhandle, 8); - break; -- case 19: -+ case 18: - /* FIXME */ - name = "stringptr"; - rettype = NULL; - break; -- case 20: -+ case 19: - /* FIXME */ - name = "character"; - rettype = debug_make_int_type (dhandle, 1, TRUE); - break; -- case 21: -+ case 20: - name = "logical*1"; - rettype = debug_make_bool_type (dhandle, 1); - break; -- case 22: -+ case 21: - name = "logical*2"; - rettype = debug_make_bool_type (dhandle, 2); - break; -- case 23: -+ case 22: - name = "logical*4"; - rettype = debug_make_bool_type (dhandle, 4); - break; -- case 24: -+ case 23: - name = "logical"; - rettype = debug_make_bool_type (dhandle, 4); - break; -- case 25: -+ case 24: - /* Complex type consisting of two IEEE single precision values. */ - name = "complex"; - rettype = debug_make_complex_type (dhandle, 8); - break; -- case 26: -+ case 25: - /* Complex type consisting of two IEEE double precision values. */ - name = "double complex"; - rettype = debug_make_complex_type (dhandle, 16); - break; -- case 27: -+ case 26: - name = "integer*1"; - rettype = debug_make_int_type (dhandle, 1, FALSE); - break; -- case 28: -+ case 27: - name = "integer*2"; - rettype = debug_make_int_type (dhandle, 2, FALSE); - break; -- case 29: -+ case 28: - name = "integer*4"; - rettype = debug_make_int_type (dhandle, 4, FALSE); - break; -- case 30: -+ case 29: - /* FIXME */ - name = "wchar"; - rettype = debug_make_int_type (dhandle, 2, FALSE); - break; -- case 31: -+ case 30: - name = "long long"; - rettype = debug_make_int_type (dhandle, 8, FALSE); - break; -- case 32: -+ case 31: - name = "unsigned long long"; - rettype = debug_make_int_type (dhandle, 8, TRUE); - break; -- case 33: -+ case 32: - name = "logical*8"; - rettype = debug_make_bool_type (dhandle, 8); - break; -- case 34: -+ case 33: - name = "integer*8"; - rettype = debug_make_int_type (dhandle, 8, FALSE); - break; -@@ -3664,9 +3665,7 @@ stab_xcoff_builtin_type (void *dhandle, struct stab_handle *info, - } - - rettype = debug_name_type (dhandle, name, rettype); -- -- info->xcoff_types[-typenum] = rettype; -- -+ info->xcoff_types[typenum] = rettype; - return rettype; - } - --- -2.27.0 - diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index b09cfd00c6ff..4a4e223ded0c 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -30,13 +30,13 @@ assert enableGold -> execFormatIsELF stdenv.targetPlatform; let inherit (stdenv) buildPlatform hostPlatform targetPlatform; - version = "2.37"; + version = "2.38"; srcs = { # HACK: to ensure that we preserve source from bootstrap binutils to not rebuild LLVM normal = stdenv.__bootPackages.binutils-unwrapped.src or (fetchurl { url = "mirror://gnu/binutils/binutils-${version}.tar.bz2"; - sha256 = "sha256-Z/waQDDQjuh3pIZ9PcqzWCgUj4fh/QXabbWF7VoWa9Q="; + sha256 = "sha256-Bw7HHPB3pqWOC5WfBaCaNQFTeMLYpR6Q866r/jBZDvg="; }); vc4-none = fetchFromGitHub { owner = "itszor"; @@ -71,10 +71,6 @@ stdenv.mkDerivation { # override this behavior, forcing ld to search DT_RPATH even when # cross-compiling. ./always-search-rpath.patch - - # WARN: Remove on the next release - # https://sourceware.org/bugzilla/show_bug.cgi?id=28138 - ./fix-ld-descriptors.patch ] ++ lib.optional targetPlatform.isiOS ./support-ios.patch # This patch was suggested by Nick Clifton to fix diff --git a/pkgs/development/tools/misc/binutils/fix-ld-descriptors.patch b/pkgs/development/tools/misc/binutils/fix-ld-descriptors.patch deleted file mode 100644 index 192d4e02d456..000000000000 --- a/pkgs/development/tools/misc/binutils/fix-ld-descriptors.patch +++ /dev/null @@ -1,232 +0,0 @@ -From 1c611b40e6bfc8029bff7696814330b5bc0ee5c0 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Mon, 26 Jul 2021 05:59:55 -0700 -Subject: [PATCH] bfd: Close the file descriptor if there is no archive fd - -Close the file descriptor if there is no archive plugin file descriptor -to avoid running out of file descriptors on thin archives with many -archive members. - -bfd/ - - PR ld/28138 - * plugin.c (bfd_plugin_close_file_descriptor): Close the file - descriptor there is no archive plugin file descriptor. - -ld/ - - PR ld/28138 - * testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for - native build. - - PR ld/28138 - * testsuite/ld-plugin/lto.exp: Run ld/28138 tests. - * testsuite/ld-plugin/pr28138.c: New file. - * testsuite/ld-plugin/pr28138-1.c: Likewise. - * testsuite/ld-plugin/pr28138-2.c: Likewise. - * testsuite/ld-plugin/pr28138-3.c: Likewise. - * testsuite/ld-plugin/pr28138-4.c: Likewise. - * testsuite/ld-plugin/pr28138-5.c: Likewise. - * testsuite/ld-plugin/pr28138-6.c: Likewise. - * testsuite/ld-plugin/pr28138-7.c: Likewise. - -(cherry picked from commit 5a98fb7513b559e20dfebdbaa2a471afda3b4742) -(cherry picked from commit 7dc37e1e1209c80e0bab784df6b6bac335e836f2) ---- - bfd/plugin.c | 8 +++++++ - ld/testsuite/ld-plugin/lto.exp | 34 ++++++++++++++++++++++++++++++ - ld/testsuite/ld-plugin/pr28138-1.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-2.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-3.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-4.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-5.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-6.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138-7.c | 6 ++++++ - ld/testsuite/ld-plugin/pr28138.c | 20 ++++++++++++++++++ - 10 files changed, 104 insertions(+) - create mode 100644 ld/testsuite/ld-plugin/pr28138-1.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-2.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-3.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-4.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-5.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-6.c - create mode 100644 ld/testsuite/ld-plugin/pr28138-7.c - create mode 100644 ld/testsuite/ld-plugin/pr28138.c - -diff --git a/bfd/plugin.c b/bfd/plugin.c -index 6cfa2b66470..3bab8febe88 100644 ---- a/bfd/plugin.c -+++ b/bfd/plugin.c -@@ -291,6 +291,14 @@ bfd_plugin_close_file_descriptor (bfd *abfd, int fd) - && !bfd_is_thin_archive (abfd->my_archive)) - abfd = abfd->my_archive; - -+ /* Close the file descriptor if there is no archive plugin file -+ descriptor. */ -+ if (abfd->archive_plugin_fd == -1) -+ { -+ close (fd); -+ return; -+ } -+ - abfd->archive_plugin_fd_open_count--; - /* Dup the archive plugin file descriptor for later use, which - will be closed by _bfd_archive_close_and_cleanup. */ -diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp -index def69e43ab3..999d911ce6a 100644 ---- a/ld/testsuite/ld-plugin/lto.exp -+++ b/ld/testsuite/ld-plugin/lto.exp -@@ -687,6 +687,40 @@ if { [is_elf_format] && [check_lto_shared_available] } { - } - } - -+run_cc_link_tests [list \ -+ [list \ -+ "Build pr28138.a" \ -+ "-T" "" \ -+ {pr28138-1.c pr28138-2.c pr28138-3.c pr28138-4.c pr28138-5.c \ -+ pr28138-6.c pr28138-7.c} {} "pr28138.a" \ -+ ] \ -+ [list \ -+ "Build pr28138.o" \ -+ "" "" \ -+ {pr28138.c} {} \ -+ ] \ -+] -+ -+set exec_output [run_host_cmd "sh" \ -+ "-c \"ulimit -n 20; \ -+ $CC -Btmpdir/ld -o tmpdir/pr28138 \ -+ tmpdir/pr28138.o tmpdir/pr28138.a\""] -+set exec_output [prune_warnings $exec_output] -+if [string match "" $exec_output] then { -+ if { [isnative] } { -+ set exec_output [run_host_cmd "tmpdir/pr28138" ""] -+ if [string match "PASS" $exec_output] then { -+ pass "PR ld/28138" -+ } else { -+ fail "PR ld/28138" -+ } -+ } else { -+ pass "PR ld/28138" -+ } -+} else { -+ fail "PR ld/28138" -+} -+ - set testname "Build liblto-11.a" - remote_file host delete "tmpdir/liblto-11.a" - set catch_output [run_host_cmd "$ar" "rc $plug_opt tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"] -diff --git a/ld/testsuite/ld-plugin/pr28138-1.c b/ld/testsuite/ld-plugin/pr28138-1.c -new file mode 100644 -index 00000000000..51d119e1642 ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-1.c -@@ -0,0 +1,6 @@ -+extern int a0(void); -+int -+a1(void) -+{ -+ return 1 + a0(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-2.c b/ld/testsuite/ld-plugin/pr28138-2.c -new file mode 100644 -index 00000000000..1120cd797e9 ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-2.c -@@ -0,0 +1,6 @@ -+extern int a1(void); -+int -+a2(void) -+{ -+ return 1 + a1(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-3.c b/ld/testsuite/ld-plugin/pr28138-3.c -new file mode 100644 -index 00000000000..ec464947ee6 ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-3.c -@@ -0,0 +1,6 @@ -+extern int a2(void); -+int -+a3(void) -+{ -+ return 1 + a2(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-4.c b/ld/testsuite/ld-plugin/pr28138-4.c -new file mode 100644 -index 00000000000..475701b2c5c ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-4.c -@@ -0,0 +1,6 @@ -+extern int a3(void); -+int -+a4(void) -+{ -+ return 1 + a3(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-5.c b/ld/testsuite/ld-plugin/pr28138-5.c -new file mode 100644 -index 00000000000..e24f86c363e ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-5.c -@@ -0,0 +1,6 @@ -+extern int a4(void); -+int -+a5(void) -+{ -+ return 1 + a4(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-6.c b/ld/testsuite/ld-plugin/pr28138-6.c -new file mode 100644 -index 00000000000..b5b938bdb21 ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-6.c -@@ -0,0 +1,6 @@ -+extern int a5(void); -+int -+a6(void) -+{ -+ return 1 + a5(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138-7.c b/ld/testsuite/ld-plugin/pr28138-7.c -new file mode 100644 -index 00000000000..4ef75bf0f0c ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138-7.c -@@ -0,0 +1,6 @@ -+extern int a6(void); -+int -+a7(void) -+{ -+ return 1 + a6(); -+} -diff --git a/ld/testsuite/ld-plugin/pr28138.c b/ld/testsuite/ld-plugin/pr28138.c -new file mode 100644 -index 00000000000..68252c9f382 ---- /dev/null -+++ b/ld/testsuite/ld-plugin/pr28138.c -@@ -0,0 +1,20 @@ -+#include -+ -+extern int a7(void); -+ -+int -+a0(void) -+{ -+ return 0; -+} -+ -+int -+main() -+{ -+ if (a7() == 7) -+ { -+ printf ("PASS\n"); -+ return 0; -+ } -+ return 1; -+} --- -2.27.0 - diff --git a/pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch b/pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch deleted file mode 100644 index c4eef87a0c8d..000000000000 --- a/pkgs/development/tools/misc/binutils/gold-Update-GNU_PROPERTY_X86_XXX-macros.patch +++ /dev/null @@ -1,292 +0,0 @@ -From 586e30940e640f67bd55bd72e1d1355a4faf8079 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Tue, 13 Oct 2020 05:20:49 -0700 -Subject: [PATCH] gold: Update GNU_PROPERTY_X86_XXX macros - -This patch updates GNU_PROPERTY_X86_XXX macros for gold: - -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 and GNU_PROPERTY_X86_COMPAT_2_ISA_1_XXX. - -elfcpp/ - - * elfcpp.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_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_COMPAT_2_ISA_1_NEEDED): New. - (GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED): Likewise. - (GNU_PROPERTY_X86_FEATURE_1_AND): Updated to - (GNU_PROPERTY_X86_UINT32_AND_LO + 0). - (GNU_PROPERTY_X86_ISA_1_NEEDED): New. Defined to - GNU_PROPERTY_X86_UINT32_OR_LO + 2. - (GNU_PROPERTY_X86_FEATURE_2_NEEDED): New. Defined to - (GNU_PROPERTY_X86_UINT32_OR_LO + 1). - (GNU_PROPERTY_X86_ISA_1_USED): New. Defined to - GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2. - (GNU_PROPERTY_X86_FEATURE_2_USED): New. Defined to - (GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1). - -gold/ - - * x86_64.cc (Target_x86_64::Target_x86_64): Initialize - feature_2_used_, feature_2_needed_ and object_feature_2_used_. - (Target_x86_64::feature_2_used_): New data member. - (Target_x86_64::feature_2_needed_): Likewise. - (Target_x86_64::object_isa_1_used_): Likewise. - (Target_x86_64::record_gnu_property): Support - GNU_PROPERTY_X86_COMPAT_ISA_1_USED, - GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED, - GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED, - GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED, - GNU_PROPERTY_X86_FEATURE_2_USED and - GNU_PROPERTY_X86_FEATURE_2_NEEDED. - (Target_x86_64::merge_gnu_properties): Merge FEATURE_2_USED bits. - Initialize object_feature_2_used_. - (Target_x86_64::do_finalize_gnu_properties): Support - GNU_PROPERTY_X86_FEATURE_2_USED and - GNU_PROPERTY_X86_FEATURE_2_NEEDED. - * testsuite/gnu_property_a.S (GNU_PROPERTY_X86_ISA_1_USED): Set - to 0xc0010002. - (GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002. - * testsuite/gnu_property_b.S (GNU_PROPERTY_X86_ISA_1_USED): Set - to 0xc0010002. - (GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002. - * testsuite/gnu_property_c.S (GNU_PROPERTY_X86_ISA_1_USED): Set - to 0xc0010002. - (GNU_PROPERTY_X86_ISA_1_NEEDED): Set to 0xc0008002. - * testsuite/gnu_property_test.sh: Updated. ---- - elfcpp/ChangeLog | [omitted] - elfcpp/elfcpp.h | 18 ++++++++++++--- - gold/ChangeLog | [omitted] - gold/testsuite/gnu_property_a.S | 4 ++-- - gold/testsuite/gnu_property_b.S | 4 ++-- - gold/testsuite/gnu_property_c.S | 4 ++-- - gold/testsuite/gnu_property_test.sh | 4 ++-- - gold/x86_64.cc | 34 +++++++++++++++++++++++++++-- - 8 files changed, 110 insertions(+), 13 deletions(-) - -diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h -index 65d803c00e2..4b6ff94a654 100644 ---- a/elfcpp/elfcpp.h -+++ b/elfcpp/elfcpp.h -@@ -1013,9 +1013,21 @@ enum - GNU_PROPERTY_STACK_SIZE = 1, - GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2, - GNU_PROPERTY_LOPROC = 0xc0000000, -- GNU_PROPERTY_X86_ISA_1_USED = 0xc0000000, -- GNU_PROPERTY_X86_ISA_1_NEEDED = 0xc0000001, -- GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002, -+ GNU_PROPERTY_X86_COMPAT_ISA_1_USED = 0xc0000000, -+ GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED = 0xc0000001, -+ GNU_PROPERTY_X86_UINT32_AND_LO = 0xc0000002, -+ GNU_PROPERTY_X86_UINT32_AND_HI = 0xc0007fff, -+ GNU_PROPERTY_X86_UINT32_OR_LO = 0xc0008000, -+ GNU_PROPERTY_X86_UINT32_OR_HI = 0xc000ffff, -+ GNU_PROPERTY_X86_UINT32_OR_AND_LO = 0xc0010000, -+ GNU_PROPERTY_X86_UINT32_OR_AND_HI = 0xc0017fff, -+ GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 0, -+ GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0, -+ GNU_PROPERTY_X86_FEATURE_1_AND = GNU_PROPERTY_X86_UINT32_AND_LO + 0, -+ GNU_PROPERTY_X86_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 2, -+ GNU_PROPERTY_X86_FEATURE_2_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 1, -+ GNU_PROPERTY_X86_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2, -+ GNU_PROPERTY_X86_FEATURE_2_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1, - GNU_PROPERTY_HIPROC = 0xdfffffff, - GNU_PROPERTY_LOUSER = 0xe0000000, - GNU_PROPERTY_HIUSER = 0xffffffff -diff --git a/gold/testsuite/gnu_property_a.S b/gold/testsuite/gnu_property_a.S -index 463bc8e52fe..5fbbbc9c4bb 100644 ---- a/gold/testsuite/gnu_property_a.S -+++ b/gold/testsuite/gnu_property_a.S -@@ -1,8 +1,8 @@ - #define NT_GNU_PROPERTY_TYPE_0 5 - - #define GNU_PROPERTY_STACK_SIZE 1 --#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 --#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 -+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 - #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 - - #if __SIZEOF_PTRDIFF_T__ == 8 -diff --git a/gold/testsuite/gnu_property_b.S b/gold/testsuite/gnu_property_b.S -index 0c0c038ead1..7028f73d7ab 100644 ---- a/gold/testsuite/gnu_property_b.S -+++ b/gold/testsuite/gnu_property_b.S -@@ -2,8 +2,8 @@ - - #define GNU_PROPERTY_STACK_SIZE 1 - #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 --#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 --#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 -+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 - #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 - - #if __SIZEOF_PTRDIFF_T__ == 8 -diff --git a/gold/testsuite/gnu_property_c.S b/gold/testsuite/gnu_property_c.S -index ace159a9a9d..c8cbd8bce28 100644 ---- a/gold/testsuite/gnu_property_c.S -+++ b/gold/testsuite/gnu_property_c.S -@@ -2,8 +2,8 @@ - - #define GNU_PROPERTY_STACK_SIZE 1 - #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 --#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 --#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 -+#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 -+#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 - #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 - - #if __SIZEOF_PTRDIFF_T__ == 8 -diff --git a/gold/testsuite/gnu_property_test.sh b/gold/testsuite/gnu_property_test.sh -index 1806d3474cc..a4096005b78 100755 ---- a/gold/testsuite/gnu_property_test.sh -+++ b/gold/testsuite/gnu_property_test.sh -@@ -77,8 +77,8 @@ check_count gnu_property_test.stdout "^ NOTE" 2 - - check gnu_property_test.stdout "stack size: 0x111100" - check gnu_property_test.stdout "no copy on protected" --check gnu_property_test.stdout "x86 ISA used: i486, SSE2, SSE4_2, AVX512CD" --check gnu_property_test.stdout "x86 ISA needed: i486, SSE2, SSE4_2, AVX512CD" -+check gnu_property_test.stdout "x86 ISA used: x86-64-v2, , , " -+check gnu_property_test.stdout "x86 ISA needed: x86-64-v2, , , " - check gnu_property_test.stdout "x86 feature: IBT" - - exit 0 -diff --git a/gold/x86_64.cc b/gold/x86_64.cc -index 9cb2cf0a322..378bac16f78 100644 ---- a/gold/x86_64.cc -+++ b/gold/x86_64.cc -@@ -706,8 +706,9 @@ class Target_x86_64 : public Sized_target - rela_irelative_(NULL), copy_relocs_(elfcpp::R_X86_64_COPY), - got_mod_index_offset_(-1U), tlsdesc_reloc_info_(), - tls_base_symbol_defined_(false), isa_1_used_(0), isa_1_needed_(0), -- feature_1_(0), object_isa_1_used_(0), object_feature_1_(0), -- seen_first_object_(false) -+ feature_1_(0), feature_2_used_(0), feature_2_needed_(0), -+ object_isa_1_used_(0), object_feature_1_(0), -+ object_feature_2_used_(0), seen_first_object_(false) - { } - - // Hook for a new output section. -@@ -1382,6 +1383,8 @@ class Target_x86_64 : public Sized_target - uint32_t isa_1_used_; - uint32_t isa_1_needed_; - uint32_t feature_1_; -+ uint32_t feature_2_used_; -+ uint32_t feature_2_needed_; - // Target-specific properties from the current object. - // These bits get ORed into ISA_1_USED_ after all properties for the object - // have been processed. But if either is all zeroes (as when the property -@@ -1391,6 +1394,7 @@ class Target_x86_64 : public Sized_target - // These bits get ANDed into FEATURE_1_ after all properties for the object - // have been processed. - uint32_t object_feature_1_; -+ uint32_t object_feature_2_used_; - // Whether we have seen our first object, for use in initializing FEATURE_1_. - bool seen_first_object_; - }; -@@ -1594,9 +1598,15 @@ Target_x86_64::record_gnu_property( - - switch (pr_type) - { -+ case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_USED: -+ case elfcpp::GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED: -+ case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED: -+ case elfcpp::GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED: - case elfcpp::GNU_PROPERTY_X86_ISA_1_USED: - case elfcpp::GNU_PROPERTY_X86_ISA_1_NEEDED: - case elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND: -+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED: -+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED: - if (pr_datasz != 4) - { - gold_warning(_("%s: corrupt .note.gnu.property section " -@@ -1625,6 +1635,12 @@ Target_x86_64::record_gnu_property( - // If we see multiple feature props in one object, OR them together. - this->object_feature_1_ |= val; - break; -+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED: -+ this->object_feature_2_used_ |= val; -+ break; -+ case elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED: -+ this->feature_2_needed_ |= val; -+ break; - } - } - -@@ -1642,15 +1658,23 @@ Target_x86_64::merge_gnu_properties(const Object*) - else if (this->isa_1_used_ != 0) - this->isa_1_used_ |= this->object_isa_1_used_; - this->feature_1_ &= this->object_feature_1_; -+ // If any object is missing the FEATURE_2_USED property, we must -+ // omit it from the output file. -+ if (this->object_feature_2_used_ == 0) -+ this->feature_2_used_ = 0; -+ else if (this->feature_2_used_ != 0) -+ this->feature_2_used_ |= this->object_feature_2_used_; - } - else - { - this->isa_1_used_ = this->object_isa_1_used_; - this->feature_1_ = this->object_feature_1_; -+ this->feature_2_used_ = this->object_feature_2_used_; - this->seen_first_object_ = true; - } - this->object_isa_1_used_ = 0; - this->object_feature_1_ = 0; -+ this->object_feature_2_used_ = 0; - } - - static inline void -@@ -1676,6 +1700,12 @@ Target_x86_64::do_finalize_gnu_properties(Layout* layout) const - if (this->feature_1_ != 0) - add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_1_AND, - this->feature_1_); -+ if (this->feature_2_used_ != 0) -+ add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_USED, -+ this->feature_2_used_); -+ if (this->feature_2_needed_ != 0) -+ add_property(layout, elfcpp::GNU_PROPERTY_X86_FEATURE_2_NEEDED, -+ this->feature_2_needed_); - } - - // Write the first three reserved words of the .got.plt section. --- -2.27.0 -