xref: /linux/lib/tests/module/gen_test_kallsyms.sh (revision 84b4a51fce4ccc6605113ed8af41a3d91609a756)
1#!/bin/bash
2
3TARGET=$(basename $1)
4DIR=lib/tests/module
5TARGET="$DIR/$TARGET"
6NUM_SYMS=$2
7SCALE_FACTOR=$3
8TEST_TYPE=$(echo $TARGET | sed -e 's|lib/tests/module/test_kallsyms_||g')
9TEST_TYPE=$(echo $TEST_TYPE | sed -e 's|.c||g')
10
11gen_template_module_header()
12{
13	cat <<____END_MODULE
14// SPDX-License-Identifier: GPL-2.0-or-later OR copyleft-next-0.3.1
15/*
16 * Copyright (C) 2023 Luis Chamberlain <mcgrof@kernel.org>
17 *
18 * Automatically generated code for testing, do not edit manually.
19 */
20
21#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
22
23#include <linux/init.h>
24#include <linux/module.h>
25#include <linux/printk.h>
26
27____END_MODULE
28}
29
30gen_num_syms()
31{
32	PREFIX=$1
33	NUM=$2
34	for i in $(seq 1 $NUM); do
35		printf "int auto_test_%s_%010d = 0xff;\n" $PREFIX $i
36		printf "EXPORT_SYMBOL_GPL(auto_test_%s_%010d);\n" $PREFIX $i
37	done
38	echo
39}
40
41gen_template_module_data_a()
42{
43	gen_num_syms a $1
44	cat <<____END_MODULE
45static int auto_runtime_test(void)
46{
47	return 0;
48}
49
50____END_MODULE
51}
52
53gen_template_module_data_b()
54{
55	printf "\nextern int auto_test_a_%010d;\n\n" 28
56	echo "static int auto_runtime_test(void)"
57	echo "{"
58	printf "\nreturn auto_test_a_%010d;\n" 28
59	echo "}"
60}
61
62gen_template_module_data_c()
63{
64	gen_num_syms c $1
65	cat <<____END_MODULE
66static int auto_runtime_test(void)
67{
68	return 0;
69}
70
71____END_MODULE
72}
73
74gen_template_module_data_d()
75{
76	gen_num_syms d $1
77	cat <<____END_MODULE
78static int auto_runtime_test(void)
79{
80	return 0;
81}
82
83____END_MODULE
84}
85
86gen_template_module_exit()
87{
88	cat <<____END_MODULE
89static int __init auto_test_module_init(void)
90{
91	return auto_runtime_test();
92}
93module_init(auto_test_module_init);
94
95static void __exit auto_test_module_exit(void)
96{
97}
98module_exit(auto_test_module_exit);
99
100MODULE_AUTHOR("Luis Chamberlain <mcgrof@kernel.org>");
101MODULE_LICENSE("GPL");
102____END_MODULE
103}
104
105case $TEST_TYPE in
106	a)
107		gen_template_module_header > $TARGET
108		gen_template_module_data_a $NUM_SYMS >> $TARGET
109		gen_template_module_exit >> $TARGET
110		;;
111	b)
112		gen_template_module_header > $TARGET
113		gen_template_module_data_b >> $TARGET
114		gen_template_module_exit >> $TARGET
115		;;
116	c)
117		gen_template_module_header > $TARGET
118		gen_template_module_data_c $((NUM_SYMS * SCALE_FACTOR)) >> $TARGET
119		gen_template_module_exit >> $TARGET
120		;;
121	d)
122		gen_template_module_header > $TARGET
123		gen_template_module_data_d $((NUM_SYMS * SCALE_FACTOR * 2)) >> $TARGET
124		gen_template_module_exit >> $TARGET
125		;;
126	*)
127		;;
128esac
129