1*e018004aSPuranjay Mohan#!/bin/bash 2*e018004aSPuranjay Mohan# SPDX-License-Identifier: GPL-2.0 3*e018004aSPuranjay Mohan# 4*e018004aSPuranjay Mohan# .klp.symid must not reference symbols in sections the vmlinux link discards. 5*e018004aSPuranjay Mohan# Each such section has been its own bug, found only when someone built a 6*e018004aSPuranjay Mohan# config where a duplicate happened to land there, so cover the whole list 7*e018004aSPuranjay Mohan# rather than whichever one was reported last. 8*e018004aSPuranjay Mohan 9*e018004aSPuranjay Mohan. "$(dirname "$0")/../lib.sh" 10*e018004aSPuranjay Mohan 11*e018004aSPuranjay Mohansetup 12*e018004aSPuranjay Mohan 13*e018004aSPuranjay Mohan# Allocated sections which vmlinux.lds.h discards unconditionally. A symid 14*e018004aSPuranjay Mohan# referencing one of these fails the vmlinux link outright: 15*e018004aSPuranjay Mohan# 16*e018004aSPuranjay Mohan# `__exitcall_hid_exit' referenced in section `.klp.symid' of vmlinux.o: 17*e018004aSPuranjay Mohan# defined in discarded section `.exitcall.exit' of vmlinux.o 18*e018004aSPuranjay Mohanfor sec in .exitcall.exit .no_trim_symbol; do 19*e018004aSPuranjay Mohan build_one symid_discarded.c a.o \ 20*e018004aSPuranjay Mohan -DFUNC_NAME=use_a -DDISCARDED_SEC="\"$sec\"" 21*e018004aSPuranjay Mohan build_one symid_discarded.c b.o \ 22*e018004aSPuranjay Mohan -DFUNC_NAME=use_b -DDISCARDED_SEC="\"$sec\"" 23*e018004aSPuranjay Mohan 24*e018004aSPuranjay Mohan # --klp-symids only runs on a file named vmlinux.o 25*e018004aSPuranjay Mohan rm -f "$workdir/vmlinux.o" 26*e018004aSPuranjay Mohan partial_link "$workdir/vmlinux.o" "$workdir/a.o" "$workdir/b.o" || 27*e018004aSPuranjay Mohan probe_skip "partial link unavailable" 28*e018004aSPuranjay Mohan 29*e018004aSPuranjay Mohan "$OBJTOOL" --klp-symids --link "$workdir/vmlinux.o" || 30*e018004aSPuranjay Mohan fail "objtool --klp-symids failed" 31*e018004aSPuranjay Mohan 32*e018004aSPuranjay Mohan symids="$(in_relocs vmlinux.o | 33*e018004aSPuranjay Mohan awk '/rela.klp.symid/,/^$/')" 34*e018004aSPuranjay Mohan 35*e018004aSPuranjay Mohan # Without this the test would also pass if symid generation stopped 36*e018004aSPuranjay Mohan # entirely. 37*e018004aSPuranjay Mohan echo "$symids" | grep -q 'dup_normal' || 38*e018004aSPuranjay Mohan fail "$sec: no symid for the duplicate in a live section" 39*e018004aSPuranjay Mohan 40*e018004aSPuranjay Mohan echo "$symids" | grep -q 'dup_discarded' && 41*e018004aSPuranjay Mohan fail "symid emitted for a symbol in discarded section $sec" 42*e018004aSPuranjay Mohandone 43*e018004aSPuranjay Mohan 44*e018004aSPuranjay Mohanpass "no symids for symbols in discarded sections" 45