alpha: Fix missing symbol versions for str{,n}{cat,cpy}
authorBen Hutchings <ben@decadent.org.uk>
Thu, 5 Jan 2023 16:04:40 +0000 (17:04 +0100)
committerSalvatore Bonaccorso <carnil@debian.org>
Fri, 7 Feb 2025 09:43:47 +0000 (10:43 +0100)
Origin: https://marc.info/?l=linux-alpha&m=167364720725291&w=2

Now that modpost extracts symbol versions from *.cmd files, it can't
find the versions for these 4 symbols.  This is due to the way we link
their objects together ahead of the full vmlinux link.  genksyms puts
their symbol CRCs in .str{,n}{cat,cpy}.o.cmd, but modpost only reads
the .sty{,n}cpy.o.cmd files.

Add assembly sources that bring the appropriate routines together with
include directives instead of using the linker for this.

Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Fixes: f292d875d0dc ("modpost: extract symbol versions from *.cmd files")
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Gbp-Pq: Topic bugfix/alpha
Gbp-Pq: Name alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch

arch/alpha/lib/Makefile
arch/alpha/lib/stycpy.S [new file with mode: 0644]
arch/alpha/lib/styncpy.S [new file with mode: 0644]

index 1cc74f7b50efbebe3c873db5a3cc55207f005248..8f1c32a25a408d7d085aa9e4971a3543f5553596 100644 (file)
@@ -45,17 +45,3 @@ AFLAGS___remlu.o =       -DREM -DINTSIZE
 $(addprefix $(obj)/,__divqu.o __remqu.o __divlu.o __remlu.o): \
                                                $(src)/$(ev6-y)divide.S FORCE
        $(call if_changed_rule,as_o_S)
-
-# There are direct branches between {str*cpy,str*cat} and stx*cpy.
-# Ensure the branches are within range by merging these objects.
-
-LDFLAGS_stycpy.o := -r
-LDFLAGS_styncpy.o := -r
-
-$(obj)/stycpy.o: $(obj)/strcpy.o $(obj)/$(ev67-y)strcat.o \
-                $(obj)/$(ev6-y)stxcpy.o FORCE
-       $(call if_changed,ld)
-
-$(obj)/styncpy.o: $(obj)/strncpy.o $(obj)/$(ev67-y)strncat.o \
-                $(obj)/$(ev6-y)stxncpy.o FORCE
-       $(call if_changed,ld)
diff --git a/arch/alpha/lib/stycpy.S b/arch/alpha/lib/stycpy.S
new file mode 100644 (file)
index 0000000..b437683
--- /dev/null
@@ -0,0 +1,8 @@
+#include "strcpy.S"
+#ifdef CONFIG_ALPHA_EV6
+#include "ev6-strcat.S"
+#include "ev6-stxcpy.S"
+#else
+#include "strcat.S"
+#include "stxcpy.S"
+#endif
diff --git a/arch/alpha/lib/styncpy.S b/arch/alpha/lib/styncpy.S
new file mode 100644 (file)
index 0000000..c393f81
--- /dev/null
@@ -0,0 +1,8 @@
+#include "strncpy.S"
+#ifdef CONFIG_ALPHA_EV6
+#include "ev6-strncat.S"
+#include "ev6-stxncpy.S"
+#else
+#include "strncat.S"
+#include "stxncpy.S"
+#endif