[PATCH] Raise the minimum binutils version to 2.39

H.J. Lu hjl.tools@gmail.com
Sun Apr 6 15:46:38 GMT 2025


On Fri, Apr 4, 2025 at 7:51 AM Stefan Liebler <stli@linux.ibm.com> wrote:
>
> The recent commit 27b96e069aad17cefea9437542180bff448ac3a0 raises the minimum
> GCC version to 12.1 which was released in 2022.
>
> The current minimum bintuils version 2.25 was released end of 2014.  This patch
> now raises the minimum binutils version to 2.39 which was also released in 2022.
>
> For ARC and powerpc, the special checks/hints are not needed anymore.
>
> On s390x, the used cfi_escape for cfi_val_offset can now be ommitted.
>
> In sysdeps/[alpha|hppa|csky]/configure.ac, PIE is unsupported with this comment:
> PIE builds fail on binutils 2.37 and earlier, see:
> https://sourceware.org/bugzilla/show_bug.cgi?id=28672
> This patch keeps PIE unsupported and let the machine maintainers test and
> enable it later.
>
> In sysdeps/arm/configure.ac, there is a check whether TPOFF relocs with addends
> are assembled correctly, which is known to be broken in binutils 2.24 and 2.25.
> See: https://sourceware.org/bugzilla/show_bug.cgi?id=18383
> This patch keeps the check as is and let the machine maintainers check if it
> still required.

Man files under sysdeps can be simplified after this.  Should we limit the
first patch to generic files and target maintainers can update target sysdeps
files as needed?

> ---
>  INSTALL                                   |  9 +--
>  NEWS                                      |  4 +-
>  configure                                 |  4 +-
>  configure.ac                              |  4 +-
>  manual/install.texi                       |  8 +--
>  sysdeps/generic/sysdep.h                  |  3 +
>  sysdeps/powerpc/powerpc64/le/configure    | 70 -----------------------
>  sysdeps/powerpc/powerpc64/le/configure.ac |  7 ---
>  sysdeps/s390/s390-64/s390x-mcount.h       |  6 +-
>  9 files changed, 13 insertions(+), 102 deletions(-)
>
> diff --git a/INSTALL b/INSTALL
> index d3200f271f..2c39c32d4a 100644
> --- a/INSTALL
> +++ b/INSTALL
> @@ -511,20 +511,13 @@ build the GNU C Library:
>       Check the FAQ for any special compiler issues on particular
>       platforms.
>
> -   * GNU 'binutils' 2.25 or later
> +   * GNU 'binutils' 2.39 or later
>
>       You must use GNU 'binutils' (as and ld) to build the GNU C Library.
>       No other assembler or linker has the necessary functionality at the
>       moment.  As of release time, GNU 'binutils' 2.43.1 is the newest
>       verified to work to build the GNU C Library.
>
> -     For PowerPC 64-bits little-endian (powerpc64le), 'objcopy' is
> -     required to support '--update-section'.  This option requires
> -     binutils 2.26 or newer.
> -
> -     ARC architecture needs 'binutils' 2.32 or higher for TLS related
> -     fixes.
> -
>     * GNU 'texinfo' 4.7 or later
>
>       To correctly translate and install the Texinfo documentation you
> diff --git a/NEWS b/NEWS
> index 52cbf1a989..23f590442f 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -24,7 +24,9 @@ Deprecated and removed features, and other changes affecting compatibility:
>
>  Changes to build and runtime requirements:
>
> -  [Add changes to build and runtime requirements here]
> +* GCC 12.1 or later is now required to build the GNU C Library.
> +
> +* GNU Binutils 2.39 or later is now required to build the GNU C Library.

Please rebase.

>  Security related changes:
>
> diff --git a/configure b/configure
> index 7cda641fce..7decd93baa 100755
> --- a/configure
> +++ b/configure
> @@ -5124,7 +5124,7 @@ fi
>
>
>
> -# Accept binutils 2.25 or newer.
> +# Accept binutils 2.39 or newer.
>  libc_cv_with_lld=no
>  case $($LD --version) in
>    "GNU gold"*)
> @@ -5330,7 +5330,7 @@ printf %s "checking version of $LD... " >&6; }
>    ac_prog_version=`$LD --version 2>&1 | sed -n 's/^.*GNU ld.* \([0-9][0-9]*\.[0-9.]*\).*$/\1/p'`
>    case $ac_prog_version in
>      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> -    2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> +    2.[1-9][0-9][0-9]*|2.39*|2.[4-9][0-9]*|[3-9].*|[1-9][0-9]*)
>         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
>      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
>
> diff --git a/configure.ac b/configure.ac
> index 0b0d8875cc..abd3b238d2 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -522,7 +522,7 @@ AC_PROG_LN_S
>
>  LIBC_PROG_BINUTILS
>
> -# Accept binutils 2.25 or newer.
> +# Accept binutils 2.39 or newer.
>  libc_cv_with_lld=no
>  case $($LD --version) in
>    "GNU gold"*)
> @@ -543,7 +543,7 @@ case $($LD --version) in
>    *)
>      AC_CHECK_PROG_VER(LD, $LD, --version,
>                     [GNU ld.* \([0-9][0-9]*\.[0-9.]*\)],
> -                   [2.1[0-9][0-9]*|2.2[5-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
> +                   [2.[1-9][0-9][0-9]*|2.39*|2.[4-9][0-9]*|[3-9].*|[1-9][0-9]*],
>                     LD=: critic_missing="$critic_missing GNU ld")
>      ;;
>  esac
> diff --git a/manual/install.texi b/manual/install.texi
> index 7fcdda9146..006f93bb71 100644
> --- a/manual/install.texi
> +++ b/manual/install.texi
> @@ -552,19 +552,13 @@ You can use whatever compiler you like to compile programs that use
>  Check the FAQ for any special compiler issues on particular platforms.
>
>  @item
> -GNU @code{binutils} 2.25 or later
> +GNU @code{binutils} 2.39 or later
>
>  You must use GNU @code{binutils} (as and ld) to build @theglibc{}.
>  No other assembler or linker has the necessary functionality at the
>  moment. As of release time, GNU @code{binutils} 2.43.1 is the newest
>  verified to work to build @theglibc{}.
>
> -For PowerPC 64-bits little-endian (powerpc64le), @command{objcopy} is required
> -to support @option{--update-section}.  This option requires binutils 2.26 or
> -newer.
> -
> -ARC architecture needs @code{binutils} 2.32 or higher for TLS related fixes.
> -
>  @item
>  GNU @code{texinfo} 4.7 or later
>
> diff --git a/sysdeps/generic/sysdep.h b/sysdeps/generic/sysdep.h
> index 4c0dda4d23..ef5eba2c87 100644
> --- a/sysdeps/generic/sysdep.h
> +++ b/sysdeps/generic/sysdep.h
> @@ -45,6 +45,7 @@
>  # define cfi_adjust_cfa_offset(off)    .cfi_adjust_cfa_offset off
>  # define cfi_offset(reg, off)          .cfi_offset reg, off
>  # define cfi_rel_offset(reg, off)      .cfi_rel_offset reg, off
> +# define cfi_val_offset(reg, off)      .cfi_val_offset reg, off
>  # define cfi_register(r1, r2)          .cfi_register r1, r2
>  # define cfi_return_column(reg)        .cfi_return_column reg
>  # define cfi_restore(reg)              .cfi_restore reg
> @@ -74,6 +75,8 @@
>     ".cfi_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
>  # define CFI_REL_OFFSET(reg, off) \
>     ".cfi_rel_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
> +# define CFI_VAL_OFFSET(reg, off) \
> +   ".cfi_val_offset " CFI_STRINGIFY(reg) "," CFI_STRINGIFY(off)
>  # define CFI_REGISTER(r1, r2) \
>     ".cfi_register " CFI_STRINGIFY(r1) "," CFI_STRINGIFY(r2)
>  # define CFI_RETURN_COLUMN(reg) \
> diff --git a/sysdeps/powerpc/powerpc64/le/configure b/sysdeps/powerpc/powerpc64/le/configure
> index 7092f61bd4..ef17f245a1 100644
> --- a/sysdeps/powerpc/powerpc64/le/configure
> +++ b/sysdeps/powerpc/powerpc64/le/configure
> @@ -137,75 +137,5 @@ then :
>    critic_missing="$critic_missing The compiler must support -mabi=ieeelongdouble and -mlong-double-128 simultaneously."
>  fi
>
> -for ac_prog in $OBJCOPY
> -do
> -  # Extract the first word of "$ac_prog", so it can be a program name with args.
> -set dummy $ac_prog; ac_word=$2
> -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> -printf %s "checking for $ac_word... " >&6; }
> -if test ${ac_cv_prog_OBJCOPY+y}
> -then :
> -  printf %s "(cached) " >&6
> -else case e in #(
> -  e) if test -n "$OBJCOPY"; then
> -  ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test.
> -else
> -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> -for as_dir in $PATH
> -do
> -  IFS=$as_save_IFS
> -  case $as_dir in #(((
> -    '') as_dir=./ ;;
> -    */) ;;
> -    *) as_dir=$as_dir/ ;;
> -  esac
> -    for ac_exec_ext in '' $ac_executable_extensions; do
> -  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
> -    ac_cv_prog_OBJCOPY="$ac_prog"
> -    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
> -    break 2
> -  fi
> -done
> -  done
> -IFS=$as_save_IFS
> -
> -fi ;;
> -esac
> -fi
> -OBJCOPY=$ac_cv_prog_OBJCOPY
> -if test -n "$OBJCOPY"; then
> -  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5
> -printf "%s\n" "$OBJCOPY" >&6; }
> -else
> -  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
> -printf "%s\n" "no" >&6; }
> -fi
> -
> -
> -  test -n "$OBJCOPY" && break
> -done
> -
> -if test -z "$OBJCOPY"; then
> -  ac_verc_fail=yes
> -else
> -  # Found it, now check the version.
> -  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of $OBJCOPY" >&5
> -printf %s "checking version of $OBJCOPY... " >&6; }
> -  ac_prog_version=`$OBJCOPY --version 2>&1 | sed -n 's/^.*GNU objcopy.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
> -  case $ac_prog_version in
> -    '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
> -    2.1[0-9][0-9]*|2.2[6-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*)
> -       ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
> -    *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
> -
> -  esac
> -  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
> -printf "%s\n" "$ac_prog_version" >&6; }
> -fi
> -if test $ac_verc_fail = yes; then
> -  AS=: critic_missing="$critic_missing objcopy >= 2.26 is required on powerpc64le"
> -fi
> -
> -
>  test -n "$critic_missing" && as_fn_error $? "*** $critic_missing" "$LINENO" 5
>
> diff --git a/sysdeps/powerpc/powerpc64/le/configure.ac b/sysdeps/powerpc/powerpc64/le/configure.ac
> index 48d7089b63..79b3d434e8 100644
> --- a/sysdeps/powerpc/powerpc64/le/configure.ac
> +++ b/sysdeps/powerpc/powerpc64/le/configure.ac
> @@ -66,11 +66,4 @@ CFLAGS="$save_CFLAGS"])
>  AS_IF([test "$libc_cv_compiler_powerpc64le_ldbl128_mabi" = "no"],
>        [critic_missing="$critic_missing The compiler must support -mabi=ieeelongdouble and -mlong-double-128 simultaneously."])
>
> -dnl objcopy (binutils) 2.26 or newer required to support the --update-section
> -dnl feature for fixing up .gnu.attribute section with IEEE ldbl.
> -AC_CHECK_PROG_VER(OBJCOPY, $OBJCOPY, --version,
> -                 [GNU objcopy.* \([0-9]*\.[0-9.]*\)],
> -                 [2.1[0-9][0-9]*|2.2[6-9]*|2.[3-9][0-9]*|[3-9].*|[1-9][0-9]*],
> -                 AS=: critic_missing="$critic_missing objcopy >= 2.26 is required on powerpc64le")
> -
>  test -n "$critic_missing" && AC_MSG_ERROR([*** $critic_missing])
> diff --git a/sysdeps/s390/s390-64/s390x-mcount.h b/sysdeps/s390/s390-64/s390x-mcount.h
> index b82f1a8e6b..c5bd70d160 100644
> --- a/sysdeps/s390/s390-64/s390x-mcount.h
> +++ b/sysdeps/s390/s390-64/s390x-mcount.h
> @@ -68,11 +68,7 @@ C_LABEL(MCOUNT_SYMBOL)
>         /* Save the caller-clobbered registers.  */
>         aghi  %r15,-224
>         cfi_adjust_cfa_offset (224)
> -       /* binutils 2.28+: .cfi_val_offset r15, -160 */
> -       .cfi_escape \
> -               /* DW_CFA_val_offset */ 0x14, \
> -               /* r15 */               0x0f, \
> -               /* scaled offset */     0x14
> +       cfi_val_offset (r15, -160)
>         stmg  %r14,%r5,160(%r15)
>         cfi_offset (r14, -224)
>         cfi_offset (r0, -224+16)
> --
> 2.47.0
>


-- 
H.J.


More information about the Libc-alpha mailing list