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