From 6a378e9c44064628234a1c783504f5a1ea833e11 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Fri, 5 Aug 2022 21:20:17 +0100 Subject: [PATCH] binutils: 2.38 -> 2.39 Changes: https://sourceware.org/pipermail/binutils/2022-August/122246.html --- ...libtool.m4-fix-nm-BSD-flag-detection.patch | 137 ------------------ .../tools/misc/binutils/default.nix | 39 ++--- .../deterministic-temp-prefixes.patch | 36 ----- .../binutils/gas-dwarf-zero-PR29451.patch | 71 +++++++++ .../tools/misc/binutils/libbfd.nix | 8 +- 5 files changed, 86 insertions(+), 205 deletions(-) delete mode 100644 pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch delete mode 100644 pkgs/development/tools/misc/binutils/deterministic-temp-prefixes.patch create mode 100644 pkgs/development/tools/misc/binutils/gas-dwarf-zero-PR29451.patch diff --git a/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch b/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch deleted file mode 100644 index f9c6e88d97b4..000000000000 --- a/pkgs/development/tools/misc/binutils/0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch +++ /dev/null @@ -1,137 +0,0 @@ -From beca4a2c25ee86e4020f8b8bddc4d8e0ed3430b3 Mon Sep 17 00:00:00 2001 -From: Andrew Childs -Date: Tue, 22 Feb 2022 11:28:04 +0900 -Subject: [PATCH] Revert "libtool.m4: fix nm BSD flag detection" - -This reverts commit bef9ef8ca0f941d743c77cc55b5fe7985990b2a7. ---- - ChangeLog | 9 ------ - libtool.m4 | 88 ++++++++++++++++++++++++++---------------------------- - 2 files changed, 43 insertions(+), 54 deletions(-) - -diff --git a/ChangeLog b/ChangeLog -index 18e8b6835da..c12f07403c3 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -375,15 +375,6 @@ - - * src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace. - --2021-09-27 Nick Alcock -- -- PR libctf/27967 -- * libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided -- NM, if there is one. Run nm on itself, not on /dev/null, to avoid -- errors from nms that refuse to work on non-regular files. Remove -- other workarounds for this problem. Strip out blank lines from the -- nm output. -- - 2021-09-27 Nick Alcock - - PR libctf/27967 -diff --git a/libtool.m4 b/libtool.m4 -index a216bb14e99..7a711249304 100644 ---- a/libtool.m4 -+++ b/libtool.m4 -@@ -3200,55 +3200,53 @@ _LT_DECL([], [file_magic_cmd], [1], - - # LT_PATH_NM - # ---------- --# find the pathname to a BSD- or MS-compatible name lister, and any flags --# needed to make it compatible -+# find the pathname to a BSD- or MS-compatible name lister - AC_DEFUN([LT_PATH_NM], - [AC_REQUIRE([AC_PROG_CC])dnl - AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, - [if test -n "$NM"; then -- # Let the user override the nm to test. -- lt_nm_to_check="$NM" -- else -- lt_nm_to_check="${ac_tool_prefix}nm" -- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then -- lt_nm_to_check="$lt_nm_to_check nm" -- fi -- fi -- for lt_tmp_nm in $lt_nm_to_check; do -- lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -- for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do -- IFS="$lt_save_ifs" -- test -z "$ac_dir" && ac_dir=. -- case "$lt_tmp_nm" in -- */*|*\\*) tmp_nm="$lt_tmp_nm";; -- *) tmp_nm="$ac_dir/$lt_tmp_nm";; -- esac -- if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then -- # Check to see if the nm accepts a BSD-compat flag. -- # Adding the `sed 1q' prevents false positives on HP-UX, which says: -- # nm: unknown option "B" ignored -- case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in -- *$tmp_nm*) lt_cv_path_NM="$tmp_nm -B" -- break -- ;; -- *) -- case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in -- *$tmp_nm*) -- lt_cv_path_NM="$tmp_nm -p" -- break -- ;; -- *) -- lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but -- continue # so that we can try to find one that supports BSD flags -- ;; -- esac -- ;; -- esac -- fi -- done -- IFS="$lt_save_ifs" -- done -- : ${lt_cv_path_NM=no}]) -+ # Let the user override the test. -+ lt_cv_path_NM="$NM" -+else -+ lt_nm_to_check="${ac_tool_prefix}nm" -+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then -+ lt_nm_to_check="$lt_nm_to_check nm" -+ fi -+ for lt_tmp_nm in $lt_nm_to_check; do -+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do -+ IFS="$lt_save_ifs" -+ test -z "$ac_dir" && ac_dir=. -+ tmp_nm="$ac_dir/$lt_tmp_nm" -+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then -+ # Check to see if the nm accepts a BSD-compat flag. -+ # Adding the `sed 1q' prevents false positives on HP-UX, which says: -+ # nm: unknown option "B" ignored -+ # Tru64's nm complains that /dev/null is an invalid object file -+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in -+ */dev/null* | *'Invalid file or object type'*) -+ lt_cv_path_NM="$tmp_nm -B" -+ break -+ ;; -+ *) -+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in -+ */dev/null*) -+ lt_cv_path_NM="$tmp_nm -p" -+ break -+ ;; -+ *) -+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but -+ continue # so that we can try to find one that supports BSD flags -+ ;; -+ esac -+ ;; -+ esac -+ fi -+ done -+ IFS="$lt_save_ifs" -+ done -+ : ${lt_cv_path_NM=no} -+fi]) - if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" - else --- -2.34.1 - diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index a25c1ce87b07..fb891c67da40 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -32,12 +32,12 @@ assert enableGold -> execFormatIsELF stdenv.targetPlatform; let inherit (stdenv) buildPlatform hostPlatform targetPlatform; - version = "2.38"; + version = "2.39"; srcs = { normal = fetchurl { url = "mirror://gnu/binutils/binutils-${version}.tar.bz2"; - sha256 = "sha256-Bw7HHPB3pqWOC5WfBaCaNQFTeMLYpR6Q866r/jBZDvg="; + sha256 = "sha256-2iSoT+8iAQLdJAQt8G/eqFHCYUpTd/hu/6KPM7exYUg="; }; vc4-none = fetchFromGitHub { owner = "itszor"; @@ -68,10 +68,6 @@ stdenv.mkDerivation { # Make binutils output deterministic by default. ./deterministic.patch - - # Breaks nm BSD flag detection - ./0001-Revert-libtool.m4-fix-nm-BSD-flag-detection.patch - # Required for newer macos versions ./0001-libtool.m4-update-macos-version-detection-block.patch @@ -83,11 +79,12 @@ stdenv.mkDerivation { # cross-compiling. ./always-search-rpath.patch - # Fixed in 2.39 - # https://sourceware.org/bugzilla/show_bug.cgi?id=28885 - # https://sourceware.org/git/?p=binutils-gdb.git;a=patch;h=99852365513266afdd793289813e8e565186c9e6 - # https://github.com/NixOS/nixpkgs/issues/170946 - ./deterministic-temp-prefixes.patch + # Upstream backport of https://sourceware.org/PR29451: + # Don't emit 0-sized debug entries for objects without size. + # Without the change elfutils on i686-linux fail dwarf validity test: + # https://sourceware.org/PR29450 + # Remove once 2.40 releases. + ./gas-dwarf-zero-PR29451.patch ] ++ lib.optional targetPlatform.isiOS ./support-ios.patch # This patch was suggested by Nick Clifton to fix @@ -105,17 +102,6 @@ stdenv.mkDerivation { (if stdenv.targetPlatform.isMusl then substitute { src = ./mips64-default-n64.patch; replacements = [ "--replace" "gnuabi64" "muslabi64" ]; } else ./mips64-default-n64.patch) - # On PowerPC, when generating assembly code, GCC generates a `.machine` - # custom instruction which instructs the assembler to generate code for this - # machine. However, some GCC versions generate the wrong one, or make it - # too strict, which leads to some confusing "unrecognized opcode: wrtee" - # or "unrecognized opcode: eieio" errors. - # - # To remove when binutils 2.39 is released. - # - # Upstream commit: - # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=cebc89b9328eab994f6b0314c263f94e7949a553 - ++ lib.optional stdenv.targetPlatform.isPower ./ppc-make-machine-less-strict.patch ; outputs = [ "out" "info" "man" ]; @@ -190,6 +176,11 @@ stdenv.mkDerivation { # for us to do is not leave it to chance, and force the program prefix to be # what we want it to be. "--program-prefix=${targetPrefix}" + + # Unconditionally disable: + # - musl target needs porting: https://sourceware.org/PR29477 + # - all targets rely on javac: https://sourceware.org/PR29479 + "--disable-gprofng" ] ++ lib.optionals withAllTargets [ "--enable-targets=all" ] ++ lib.optionals enableGold [ "--enable-gold" "--enable-plugins" ] @@ -201,10 +192,6 @@ stdenv.mkDerivation { # Fails doCheck = false; - # Remove on next bump. It's a vestige of past conditional. Stays here to avoid - # mass rebuild. - postFixup = ""; - # Break dependency on pkgsBuildBuild.gcc when building a cross-binutils stripDebugList = if stdenv.hostPlatform != stdenv.targetPlatform then "bin lib ${stdenv.hostPlatform.config}" else null; diff --git a/pkgs/development/tools/misc/binutils/deterministic-temp-prefixes.patch b/pkgs/development/tools/misc/binutils/deterministic-temp-prefixes.patch deleted file mode 100644 index 3c27340b9c04..000000000000 --- a/pkgs/development/tools/misc/binutils/deterministic-temp-prefixes.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 99852365513266afdd793289813e8e565186c9e6 Mon Sep 17 00:00:00 2001 -From: Nick Clifton -Date: Wed, 23 Mar 2022 11:39:49 +0000 -Subject: [PATCH] dlltool: Use the output name as basis for deterministic temp - prefixes - - PR 28885 - * dlltool.c (main): use imp_name rather than dll_name when - generating a temporary file name. ---- - binutils/ChangeLog | 9 +++++++++ - binutils/dlltool.c | 7 ++++--- - 2 files changed, 13 insertions(+), 3 deletions(-) - -diff --git a/binutils/dlltool.c b/binutils/dlltool.c -index d95bf3f5470..89871510b45 100644 ---- a/binutils/dlltool.c -+++ b/binutils/dlltool.c -@@ -3992,10 +3992,11 @@ main (int ac, char **av) - if (tmp_prefix == NULL) - { - /* If possible use a deterministic prefix. */ -- if (dll_name) -+ if (imp_name || delayimp_name) - { -- tmp_prefix = xmalloc (strlen (dll_name) + 2); -- sprintf (tmp_prefix, "%s_", dll_name); -+ const char *input = imp_name ? imp_name : delayimp_name; -+ tmp_prefix = xmalloc (strlen (input) + 2); -+ sprintf (tmp_prefix, "%s_", input); - for (i = 0; tmp_prefix[i]; i++) - if (!ISALNUM (tmp_prefix[i])) - tmp_prefix[i] = '_'; --- -2.31.1 - diff --git a/pkgs/development/tools/misc/binutils/gas-dwarf-zero-PR29451.patch b/pkgs/development/tools/misc/binutils/gas-dwarf-zero-PR29451.patch new file mode 100644 index 000000000000..5f1293f8f732 --- /dev/null +++ b/pkgs/development/tools/misc/binutils/gas-dwarf-zero-PR29451.patch @@ -0,0 +1,71 @@ +https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=d7abcbcea5ddd40a3bf28758b62f35933c59f996 + +Don't emit 0-sized debug entries for objects without size. +Without the change elfutils on i686-linux fail dwarf validity test: + https://sourceware.org/PR29450 +--- a/gas/dwarf2dbg.c ++++ b/gas/dwarf2dbg.c +@@ -2882,6 +2882,7 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT str_seg, + { + const char *name; + size_t len; ++ expressionS size = { .X_op = O_constant }; + + /* Skip warning constructs (see above). */ + if (symbol_get_bfdsym (symp)->flags & BSF_WARNING) +@@ -2895,6 +2896,18 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT str_seg, + if (!S_IS_DEFINED (symp) || !S_IS_FUNCTION (symp)) + continue; + ++#if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */ ++ size.X_add_number = S_GET_SIZE (symp); ++ if (size.X_add_number == 0 && IS_ELF ++ && symbol_get_obj (symp)->size != NULL) ++ { ++ size.X_op = O_add; ++ size.X_op_symbol = make_expr_symbol (symbol_get_obj (symp)->size); ++ } ++#endif ++ if (size.X_op == O_constant && size.X_add_number == 0) ++ continue; ++ + subseg_set (str_seg, 0); + name_sym = symbol_temp_new_now_octets (); + name = S_GET_NAME (symp); +@@ -2920,29 +2933,17 @@ out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT str_seg, + emit_expr (&exp, sizeof_address); + + /* DW_AT_high_pc */ +- exp.X_op = O_constant; +-#if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */ +- exp.X_add_number = S_GET_SIZE (symp); +- if (exp.X_add_number == 0 && IS_ELF +- && symbol_get_obj (symp)->size != NULL) +- { +- exp.X_op = O_add; +- exp.X_op_symbol = make_expr_symbol (symbol_get_obj (symp)->size); +- } +-#else +- exp.X_add_number = 0; +-#endif + if (DWARF2_VERSION < 4) + { +- if (exp.X_op == O_constant) +- exp.X_op = O_symbol; +- exp.X_add_symbol = symp; +- emit_expr (&exp, sizeof_address); ++ if (size.X_op == O_constant) ++ size.X_op = O_symbol; ++ size.X_add_symbol = symp; ++ emit_expr (&size, sizeof_address); + } +- else if (exp.X_op == O_constant) +- out_uleb128 (exp.X_add_number); ++ else if (size.X_op == O_constant) ++ out_uleb128 (size.X_add_number); + else +- emit_leb128_expr (symbol_get_value_expression (exp.X_op_symbol), 0); ++ emit_leb128_expr (symbol_get_value_expression (size.X_op_symbol), 0); + } + + /* End of children. */ diff --git a/pkgs/development/tools/misc/binutils/libbfd.nix b/pkgs/development/tools/misc/binutils/libbfd.nix index eed23a746d2a..ff5e2f1a1815 100644 --- a/pkgs/development/tools/misc/binutils/libbfd.nix +++ b/pkgs/development/tools/misc/binutils/libbfd.nix @@ -1,5 +1,5 @@ { lib, stdenv -, fetchpatch, gnu-config, autoreconfHook, bison, binutils-unwrapped +, gnu-config, autoreconfHook, bison, binutils-unwrapped, texinfo , libiberty, libintl, zlib }: @@ -11,10 +11,6 @@ stdenv.mkDerivation { patches = binutils-unwrapped.patches ++ [ ./build-components-separately.patch - (fetchpatch { - url = "https://raw.githubusercontent.com/mxe/mxe/e1d4c144ee1994f70f86cf7fd8168fe69bd629c6/src/bfd-1-disable-subdir-doc.patch"; - sha256 = "0pzb3i74d1r7lhjan376h59a7kirw15j7swwm8pz3zy9lkdqkj6q"; - }) ]; # We just want to build libbfd @@ -31,7 +27,7 @@ stdenv.mkDerivation { dontUpdateAutotoolsGnuConfigScripts = true; strictDeps = true; - nativeBuildInputs = [ autoreconfHook bison ]; + nativeBuildInputs = [ autoreconfHook bison texinfo ]; buildInputs = [ libiberty zlib ] ++ lib.optionals stdenv.isDarwin [ libintl ]; configurePlatforms = [ "build" "host" ];