#!/bin/sh # # Generate private_symbols[_jet].awk. # # Usage: private_symbols.sh <sym_prefix> <sym>* # # <sym_prefix> is typically "" or "_". sym_prefix=$1 shift cat <<EOF #!/usr/bin/env awk -f BEGIN { sym_prefix = "${sym_prefix}" split("\\ EOF for public_sym in "$@" ; do cat <<EOF ${sym_prefix}${public_sym} \\ EOF done cat <<"EOF" ", exported_symbol_names) # Store exported symbol names as keys in exported_symbols. for (i in exported_symbol_names) { exported_symbols[exported_symbol_names[i]] = 1 } } # Process 'nm -a <c_source.o>' output. # # Handle lines like: # 0000000000000008 D opt_junk # 0000000000007574 T malloc_initialized (NF == 3 && $2 ~ /^[ABCDGRSTVW]$/ && !($3 in exported_symbols) && $3 ~ /^[A-Za-z0-9_]+$/) { print substr($3, 1+length(sym_prefix), length($3)-length(sym_prefix)) } # Process 'dumpbin /SYMBOLS <c_source.obj>' output. # # Handle lines like: # 353 00008098 SECT4 notype External | opt_junk # 3F1 00000000 SECT7 notype () External | malloc_initialized ($3 ~ /^SECT[0-9]+/ && $(NF-2) == "External" && !($NF in exported_symbols)) { print $NF } EOF