Merge pull request #185297 from trofi/binutils-2.39

binutils: 2.38 -> 2.39
This commit is contained in:
Bernardo Meurer
2022-09-02 11:57:08 -03:00
committed by GitHub
5 changed files with 86 additions and 205 deletions
@@ -1,137 +0,0 @@
From beca4a2c25ee86e4020f8b8bddc4d8e0ed3430b3 Mon Sep 17 00:00:00 2001
From: Andrew Childs <andrew.childs@bibo.com.ph>
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 <nick.alcock@oracle.com>
-
- 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 <nick.alcock@oracle.com>
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
@@ -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;
@@ -1,36 +0,0 @@
From 99852365513266afdd793289813e8e565186c9e6 Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
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
@@ -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. */
@@ -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" ];