xref: /linux/tools/objtool/tests/generic/test-jump-label-key.sh (revision 5b6dca02b3e2254d2fd5706d76d7ab4610a67296)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# A cloned __jump_table entry must keep a relocation in its key slot, whether
5# the key needs a klp relocation or not.
6
7. "$(dirname "$0")/../lib.sh"
8
9key=klp_test_key
10
11setup
12build_pair jump_label.c
13
14has_input_section orig.o __jump_table ||
15	probe_skip "fixture produced no __jump_table on this arch"
16
17key_slot_relocs()
18{
19	out_relocs | awk '/rela__jump_table/,/^$/' | grep -c "^0*8[[:space:]]"
20}
21
22# Unexported: klp relocation, key slot holds a tombstone.
23export_syms
24run_diff
25
26[ "$(key_slot_relocs)" = 1 ] ||
27	fail "unexported key: key slot has no relocation"
28out_relocs | awk '/rela__jump_table/,/^$/' | grep -q "\.klp\.tombstone\.$key" ||
29	fail "unexported key: expected a .klp.tombstone.$key relocation"
30out_symbols | grep -q "\.klp\.sym\..*\.$key," ||
31	fail "unexported key: no .klp.sym reference for the real relocation"
32
33# Exported: ordinary relocation, no klp machinery.
34export_syms "$key"
35run_diff
36
37[ "$(key_slot_relocs)" = 1 ] ||
38	fail "exported key: key slot has no relocation"
39out_relocs | awk '/rela__jump_table/,/^$/' | grep -q "[[:space:]]$key[[:space:]]*+" ||
40	fail "exported key: expected a direct relocation to $key"
41out_symbols | grep -q '\.klp\.tombstone\.' &&
42	fail "exported key: tombstone emitted for an exported symbol"
43
44pass "key slot populated for exported and unexported vmlinux keys"
45