summaryrefslogtreecommitdiffstats
path: root/debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch')
-rw-r--r--debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch b/debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch
new file mode 100644
index 000000000..3da69882e
--- /dev/null
+++ b/debian/patches/bugfix/alpha/alpha-fix-missing-symbol-versions-for-str-n-cat-cpy.patch
@@ -0,0 +1,75 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Thu, 5 Jan 2023 17:04:40 +0100
+Subject: alpha: Fix missing symbol versions for str{,n}{cat,cpy}
+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>
+---
+ arch/alpha/lib/Makefile | 14 --------------
+ arch/alpha/lib/stycpy.S | 8 ++++++++
+ arch/alpha/lib/styncpy.S | 8 ++++++++
+ 3 files changed, 16 insertions(+), 14 deletions(-)
+ create mode 100644 arch/alpha/lib/stycpy.S
+ create mode 100644 arch/alpha/lib/styncpy.S
+
+diff --git a/arch/alpha/lib/Makefile b/arch/alpha/lib/Makefile
+index 1cc74f7b50ef..8f1c32a25a40 100644
+--- a/arch/alpha/lib/Makefile
++++ b/arch/alpha/lib/Makefile
+@@ -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
+index 000000000000..b4376834c91f
+--- /dev/null
++++ b/arch/alpha/lib/stycpy.S
+@@ -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
+index 000000000000..c393f816ff98
+--- /dev/null
++++ b/arch/alpha/lib/styncpy.S
+@@ -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