]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
sparc: Validate VDSO for undefined symbols.
authorDavid S. Miller <davem@davemloft.net>
Mon, 22 Oct 2018 05:36:17 +0000 (22:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 22 Oct 2018 23:09:27 +0000 (16:09 -0700)
There should be no undefined symbols in the resulting VDSO image(s).

On sparc, fixed register usage can result in undefined symbols ending
up in the image.  To combat this, we do two things:

1) Define current_thread_info() specially when BUILD_DSO.

2) Ignore "#scratch" register undefined symbols in the output.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/thread_info_64.h
arch/sparc/vdso/Makefile
arch/sparc/vdso/checkundef.sh [new file with mode: 0644]

index 7fb67636092893dbacd13a3e596484fa3cf4b5d0..20255471e653d450b22ea149ba256651175915b9 100644 (file)
@@ -121,8 +121,12 @@ struct thread_info {
 }
 
 /* how to get the thread information struct from C */
+#ifndef BUILD_VDSO
 register struct thread_info *current_thread_info_reg asm("g6");
 #define current_thread_info()  (current_thread_info_reg)
+#else
+extern struct thread_info *current_thread_info(void);
+#endif
 
 /* thread information allocation */
 #if PAGE_SHIFT == 13
index a9e3a4f633a746b4e65444c5740f2fa28f8a4ea4..a6e18ca4cc18ce25fe87135b3034588c25fbee36 100644 (file)
@@ -111,7 +111,8 @@ $(obj)/vdso32.so.dbg: FORCE \
 quiet_cmd_vdso = VDSO    $@
       cmd_vdso = $(LD) -nostdlib -o $@ \
                       $(VDSO_LDFLAGS) $(VDSO_LDFLAGS_$(filter %.lds,$(^F))) \
-                      -T $(filter %.lds,$^) $(filter %.o,$^)
+                      -T $(filter %.lds,$^) $(filter %.o,$^) && \
+               sh $(srctree)/$(src)/checkundef.sh '$(OBJDUMP)' '$@'
 
 VDSO_LDFLAGS = -shared $(call ld-option, --hash-style=both) \
        $(call ld-option, --build-id) -Bsymbolic
diff --git a/arch/sparc/vdso/checkundef.sh b/arch/sparc/vdso/checkundef.sh
new file mode 100644 (file)
index 0000000..2d85876
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+objdump="$1"
+file="$2"
+$objdump -t "$file" | grep '*UUND*' | grep -v '#scratch' > /dev/null 2>&1
+if [ $? -eq 1 ]; then
+    exit 0
+else
+    echo "$file: undefined symbols found" >&2
+    exit 1
+fi