logo

mstrace

Small Linux strace(1) implementationgit clone https://anongit.hacktivis.me/git/mstrace.git/

syscalls.sh (1282B)


  1. #!/bin/sh
  2. # SPDX-FileCopyrightText: 2024 Haelwenn (lanodan) Monnier <contact+mstrace@hacktivis.me>
  3. # SPDX-License-Identifier: MPL-2.0
  4. grep -v '^#' syscalls.txt | while read syscall args
  5. do
  6. fmt='">%s("'
  7. fmt_args='str_syscalls[nr]'
  8. fmt_sep=''
  9. n=0
  10. for i in $args; do
  11. case $i in
  12. "")
  13. break
  14. ;;
  15. size)
  16. fmt="${fmt}${fmt_sep}\"%zd\""
  17. fmt_args="${fmt_args}, (size_t)args[$n]"
  18. ;;
  19. off)
  20. fmt="${fmt}${fmt_sep}Pri_u"
  21. fmt_args="${fmt_args}, (off_t)args[$n]"
  22. ;;
  23. uint)
  24. fmt="${fmt}${fmt_sep}Pri_u"
  25. fmt_args="${fmt_args}, (uint64_t)args[$n]"
  26. ;;
  27. int)
  28. fmt="${fmt}${fmt_sep}Pri_i"
  29. fmt_args="${fmt_args}, (int64_t)args[$n]"
  30. ;;
  31. oct)
  32. fmt="${fmt}${fmt_sep}Pri_o"
  33. fmt_args="${fmt_args}, (int64_t)args[$n]"
  34. ;;
  35. hex|buf|str)
  36. fmt="${fmt}${fmt_sep}Pri_x"
  37. fmt_args="${fmt_args}, (int64_t)args[$n]"
  38. ;;
  39. path)
  40. fmt="${fmt}${fmt_sep}Pri_str"
  41. fmt_args="${fmt_args}, read_str(args[$n], PATH_MAX)"
  42. ;;
  43. *)
  44. echo "syscalls.sh: error: Unhandled type ${i}" >&2
  45. exit 1
  46. esac
  47. : $((n+=1))
  48. fmt_sep=' ", " '
  49. done
  50. fmt="${fmt}"' ")"'
  51. printf '#ifdef SYS_%s\n' "$syscall"
  52. printf ' case SYS_%s:\n' "$syscall"
  53. printf ' fprintf(out, %s, %s);\n' "$fmt" "$fmt_args"
  54. printf ' return;\n'
  55. printf '#endif\n'
  56. done >syscalls_cases.h