Re: [main-line]Build warnings on PowerPC system

From: Christophe Leroy
Date: Fri Mar 28 2025 - 08:20:33 EST




Le 28/03/2025 à 12:14, Madhavan Srinivasan a écrit :

diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index 1db60fe13802..09ceb5a42d81 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -235,7 +235,7 @@ fi
  # suppress some warnings in recent ld versions
  nowarn="-z noexecstack"
  if ! ld_is_lld; then
-       if [ "$LD_VERSION" -ge "$(echo 2.39 | ld_version)" ]; then
+       if [ "$LD_VERSION" -ge "$(echo 2.35 | ld_version)" ]; then
                 nowarn="$nowarn --no-warn-rwx-segments"
         fi
  fi
Above change fixes the issue. No warnings observed. Thank you!!

Take care, this must be a special version of binutils.

With regular 2.36.1 I get following error:

$ /opt/gcc/gcc-8.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version
GNU ld (GNU Binutils) 2.36.1
Copyright (C) 2021 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.

$ /opt/gcc/gcc-8.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --no-warn-rwx-segments test.o
/opt/gcc/gcc-8.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld: unrecognized option '--no-warn-rwx-segments'
/opt/gcc/gcc-8.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld: use the --help option for usage information


Nice catch. Thanks Christophe.

May be we need to handle this special/specific case with an
additional check

diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index 1db60fe13802..d3779c20e548 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -237,6 +237,8 @@ nowarn="-z noexecstack"
if ! ld_is_lld; then
if [ "$LD_VERSION" -ge "$(echo 2.39 | ld_version)" ]; then
nowarn="$nowarn --no-warn-rwx-segments"
+ elif [ "$LD_VERSION" -eq "235020000" ]; then
+ nowarn="$nowarn --no-warn-rwx-segments"
fi
fi


I think it is not the official version of 2.35.2, it is a modified version from a distribution. It doesn't exist in the official 2.35.2:

$ git remote -v
origin https://sourceware.org/git/binutils-gdb.git (fetch)
origin https://sourceware.org/git/binutils-gdb.git (push)

$ git grep rwx-segments origin/binutils-2_35-branch
[empty]

What about doing something like commit 0d362be5b142 ("Makefile: link with -z noexecstack --no-warn-rwx-segments") ?

Christophe