kmod_syms.awk 702 B

1234567891011121314151617181920212223242526272829303132
  1. # Read global symbols from object file.
  2. BEGIN {
  3. modname = ARGV[1]
  4. while ("${NM:='nm'} -g " ARGV[1] | getline) {
  5. if (match($0, /^[^[:space:]]+ [^AU] (.*)$/)) {
  6. syms[$3] = $2
  7. }
  8. }
  9. delete ARGV[1]
  10. }
  11. # De-list symbols from the export list.
  12. {
  13. smbl = $0
  14. if (!(smbl in syms)) {
  15. printf "Symbol %s is not present in %s\n", \
  16. smbl, modname > "/dev/stderr"
  17. }
  18. delete syms[smbl]
  19. }
  20. # Strip commons, make everything else local.
  21. END {
  22. for (member in syms) {
  23. if (syms[member] == "C")
  24. print "-N" member
  25. else
  26. print "-L" member
  27. }
  28. }