Skip to content

Commit 3287ebd

Browse files
OjaswinMmpe
authored andcommitted
powerpc/boot: Fix incorrect version calculation issue in ld_version
The ld_version() function computes the wrong version value for certain ld versions such as the following: $ ld --version GNU ld (GNU Binutils; SUSE Linux Enterprise 15) 2.37.20211103-150100.7.37 For input 2.37.20211103, the value computed is 202348030000 which is higher than the value for a later version like 2.39.0, which is 23900000. This issue was highlighted because with the above ld version, the powerpc kernel build started failing with ld error: "unrecognized option --no-warn-rwx-segments". This was caused due to the recent commit 579aee9 ("powerpc: suppress some linker warnings in recent linker versions") which added the --no-warn-rwx-segments linker flag if the ld version is greater than 2.39. Due to the bug in ld_version(), ld version 2.37.20111103 is wrongly calculated to be greater than 2.39 and the unsupported flag is added. To fix it, if version is of the form x.y.z and length(z) == 8, then most probably it is a date [yyyymmdd] commonly used for release snapshots and not an actual new version. Hence, ignore the date part replacing it with 0. Fixes: 579aee9 ("powerpc: suppress some linker warnings in recent linker versions") Signed-off-by: Ojaswin Mujoo <[email protected]> [mpe: Tweak change log wording/formatting, add Fixes tag] Signed-off-by: Michael Ellerman <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent be5f95c commit 3287ebd

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

arch/powerpc/boot/wrapper

+4
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,10 @@ ld_version()
210210
gsub(".*version ", "");
211211
gsub("-.*", "");
212212
split($1,a, ".");
213+
if( length(a[3]) == "8" )
214+
# a[3] is probably a date of format yyyymmdd used for release snapshots. We
215+
# can assume it to be zero as it does not signify a new version as such.
216+
a[3] = 0;
213217
print a[1]*100000000 + a[2]*1000000 + a[3]*10000;
214218
exit
215219
}'

0 commit comments

Comments
 (0)