# This program will construct ksyms.s. Ksyms.s contains a symbol table # for all the kernel symbols included in the file ksyms.lst. The following # variables are defined in ksym.s: # # int symbol_table_size; /* number of symbols */ # struct { # void *value; /* value of symbol */ # char *name; /* name of symbol */ # } symbol_table[]; # # trap "rm -f ksyms.tmp ksyms.lst" 1 2 sed -e '/^#/d' -e '/^[ ]*$/d' ksyms.lst | sort > ksyms.tmp echo ' .data .globl _symbol_table_size, _symbol_table _symbol_table_size:' echo " .long" `wc -l < ksyms.tmp` echo ' _symbol_table:' awk 'BEGIN {stringloc = 0} {print " .long " $1; print " .long strings+" stringloc; \ stringloc += length($1) + 1;}' ksyms.tmp echo ' strings:' awk '{print " .ascii \"" $1 "\\0\""}' ksyms.tmp rm -f ksyms.tmp # # Alternativly, if the kernel is c++ compiled: # By using gsub() we can forse all function names to appear as extern "C". # This allows linkable drivers written in C or C++ - Jon # awk '{gsub(/__F.*/, "") ; print " .ascii \"" $0 "\\0\""}' ksyms.tmp