Commit ecd4c19f authored by David S. Miller's avatar David S. Miller
Browse files

sparc: Validate VDSO for undefined symbols.



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: default avatarDavid S. Miller <davem@davemloft.net>
parent 3c2b2d94
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
#!/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