xref: /linux/lib/tests/module/gen_test_kallsyms.sh (revision 1260ed77798502de9c98020040d2995008de10cc)
1*aa0fdccdSJoel Granados#!/usr/bin/env bash
284b4a51fSLuis Chamberlain
384b4a51fSLuis ChamberlainTARGET=$(basename $1)
484b4a51fSLuis ChamberlainDIR=lib/tests/module
584b4a51fSLuis ChamberlainTARGET="$DIR/$TARGET"
684b4a51fSLuis ChamberlainNUM_SYMS=$2
784b4a51fSLuis ChamberlainSCALE_FACTOR=$3
884b4a51fSLuis ChamberlainTEST_TYPE=$(echo $TARGET | sed -e 's|lib/tests/module/test_kallsyms_||g')
984b4a51fSLuis ChamberlainTEST_TYPE=$(echo $TEST_TYPE | sed -e 's|.c||g')
103e1d95b6SLuis ChamberlainFIRST_B_LOOKUP=1
113e1d95b6SLuis Chamberlain
123e1d95b6SLuis Chamberlainif [[ $NUM_SYMS -gt 2 ]]; then
133e1d95b6SLuis Chamberlain	FIRST_B_LOOKUP=$((NUM_SYMS/2))
143e1d95b6SLuis Chamberlainfi
1584b4a51fSLuis Chamberlain
1684b4a51fSLuis Chamberlaingen_template_module_header()
1784b4a51fSLuis Chamberlain{
1884b4a51fSLuis Chamberlain	cat <<____END_MODULE
1984b4a51fSLuis Chamberlain// SPDX-License-Identifier: GPL-2.0-or-later OR copyleft-next-0.3.1
2084b4a51fSLuis Chamberlain/*
2184b4a51fSLuis Chamberlain * Copyright (C) 2023 Luis Chamberlain <mcgrof@kernel.org>
2284b4a51fSLuis Chamberlain *
2384b4a51fSLuis Chamberlain * Automatically generated code for testing, do not edit manually.
2484b4a51fSLuis Chamberlain */
2584b4a51fSLuis Chamberlain
2684b4a51fSLuis Chamberlain#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
2784b4a51fSLuis Chamberlain
2884b4a51fSLuis Chamberlain#include <linux/init.h>
2984b4a51fSLuis Chamberlain#include <linux/module.h>
3084b4a51fSLuis Chamberlain#include <linux/printk.h>
3184b4a51fSLuis Chamberlain
3284b4a51fSLuis Chamberlain____END_MODULE
3384b4a51fSLuis Chamberlain}
3484b4a51fSLuis Chamberlain
3584b4a51fSLuis Chamberlaingen_num_syms()
3684b4a51fSLuis Chamberlain{
3784b4a51fSLuis Chamberlain	PREFIX=$1
3884b4a51fSLuis Chamberlain	NUM=$2
3984b4a51fSLuis Chamberlain	for i in $(seq 1 $NUM); do
402466b312SLuis Chamberlain		printf "int auto_test_%s_%010d = 0;\n" $PREFIX $i
4184b4a51fSLuis Chamberlain		printf "EXPORT_SYMBOL_GPL(auto_test_%s_%010d);\n" $PREFIX $i
4284b4a51fSLuis Chamberlain	done
4384b4a51fSLuis Chamberlain	echo
4484b4a51fSLuis Chamberlain}
4584b4a51fSLuis Chamberlain
4684b4a51fSLuis Chamberlaingen_template_module_data_a()
4784b4a51fSLuis Chamberlain{
4884b4a51fSLuis Chamberlain	gen_num_syms a $1
4984b4a51fSLuis Chamberlain	cat <<____END_MODULE
5084b4a51fSLuis Chamberlainstatic int auto_runtime_test(void)
5184b4a51fSLuis Chamberlain{
5284b4a51fSLuis Chamberlain	return 0;
5384b4a51fSLuis Chamberlain}
5484b4a51fSLuis Chamberlain
5584b4a51fSLuis Chamberlain____END_MODULE
5684b4a51fSLuis Chamberlain}
5784b4a51fSLuis Chamberlain
5884b4a51fSLuis Chamberlaingen_template_module_data_b()
5984b4a51fSLuis Chamberlain{
603e1d95b6SLuis Chamberlain	printf "\nextern int auto_test_a_%010d;\n\n" $FIRST_B_LOOKUP
6184b4a51fSLuis Chamberlain	echo "static int auto_runtime_test(void)"
6284b4a51fSLuis Chamberlain	echo "{"
633e1d95b6SLuis Chamberlain	printf "\nreturn auto_test_a_%010d;\n" $FIRST_B_LOOKUP
6484b4a51fSLuis Chamberlain	echo "}"
6584b4a51fSLuis Chamberlain}
6684b4a51fSLuis Chamberlain
6784b4a51fSLuis Chamberlaingen_template_module_data_c()
6884b4a51fSLuis Chamberlain{
6984b4a51fSLuis Chamberlain	gen_num_syms c $1
7084b4a51fSLuis Chamberlain	cat <<____END_MODULE
7184b4a51fSLuis Chamberlainstatic int auto_runtime_test(void)
7284b4a51fSLuis Chamberlain{
7384b4a51fSLuis Chamberlain	return 0;
7484b4a51fSLuis Chamberlain}
7584b4a51fSLuis Chamberlain
7684b4a51fSLuis Chamberlain____END_MODULE
7784b4a51fSLuis Chamberlain}
7884b4a51fSLuis Chamberlain
7984b4a51fSLuis Chamberlaingen_template_module_data_d()
8084b4a51fSLuis Chamberlain{
8184b4a51fSLuis Chamberlain	gen_num_syms d $1
8284b4a51fSLuis Chamberlain	cat <<____END_MODULE
8384b4a51fSLuis Chamberlainstatic int auto_runtime_test(void)
8484b4a51fSLuis Chamberlain{
8584b4a51fSLuis Chamberlain	return 0;
8684b4a51fSLuis Chamberlain}
8784b4a51fSLuis Chamberlain
8884b4a51fSLuis Chamberlain____END_MODULE
8984b4a51fSLuis Chamberlain}
9084b4a51fSLuis Chamberlain
9184b4a51fSLuis Chamberlaingen_template_module_exit()
9284b4a51fSLuis Chamberlain{
9384b4a51fSLuis Chamberlain	cat <<____END_MODULE
9484b4a51fSLuis Chamberlainstatic int __init auto_test_module_init(void)
9584b4a51fSLuis Chamberlain{
9684b4a51fSLuis Chamberlain	return auto_runtime_test();
9784b4a51fSLuis Chamberlain}
9884b4a51fSLuis Chamberlainmodule_init(auto_test_module_init);
9984b4a51fSLuis Chamberlain
10084b4a51fSLuis Chamberlainstatic void __exit auto_test_module_exit(void)
10184b4a51fSLuis Chamberlain{
10284b4a51fSLuis Chamberlain}
10384b4a51fSLuis Chamberlainmodule_exit(auto_test_module_exit);
10484b4a51fSLuis Chamberlain
10584b4a51fSLuis ChamberlainMODULE_AUTHOR("Luis Chamberlain <mcgrof@kernel.org>");
10684b4a51fSLuis ChamberlainMODULE_LICENSE("GPL");
107af084753SArnd BergmannMODULE_DESCRIPTION("Test module for kallsyms");
10884b4a51fSLuis Chamberlain____END_MODULE
10984b4a51fSLuis Chamberlain}
11084b4a51fSLuis Chamberlain
11184b4a51fSLuis Chamberlaincase $TEST_TYPE in
11284b4a51fSLuis Chamberlain	a)
11384b4a51fSLuis Chamberlain		gen_template_module_header > $TARGET
11484b4a51fSLuis Chamberlain		gen_template_module_data_a $NUM_SYMS >> $TARGET
11584b4a51fSLuis Chamberlain		gen_template_module_exit >> $TARGET
11684b4a51fSLuis Chamberlain		;;
11784b4a51fSLuis Chamberlain	b)
11884b4a51fSLuis Chamberlain		gen_template_module_header > $TARGET
11984b4a51fSLuis Chamberlain		gen_template_module_data_b >> $TARGET
12084b4a51fSLuis Chamberlain		gen_template_module_exit >> $TARGET
12184b4a51fSLuis Chamberlain		;;
12284b4a51fSLuis Chamberlain	c)
12384b4a51fSLuis Chamberlain		gen_template_module_header > $TARGET
12484b4a51fSLuis Chamberlain		gen_template_module_data_c $((NUM_SYMS * SCALE_FACTOR)) >> $TARGET
12584b4a51fSLuis Chamberlain		gen_template_module_exit >> $TARGET
12684b4a51fSLuis Chamberlain		;;
12784b4a51fSLuis Chamberlain	d)
12884b4a51fSLuis Chamberlain		gen_template_module_header > $TARGET
12984b4a51fSLuis Chamberlain		gen_template_module_data_d $((NUM_SYMS * SCALE_FACTOR * 2)) >> $TARGET
13084b4a51fSLuis Chamberlain		gen_template_module_exit >> $TARGET
13184b4a51fSLuis Chamberlain		;;
13284b4a51fSLuis Chamberlain	*)
13384b4a51fSLuis Chamberlain		;;
13484b4a51fSLuis Chamberlainesac
135