# ./update-linux.sh amd64-linux.xml.in
# ./update-linux.sh i386-linux.xml.in -m32
-
if [ $# -lt 1 ]; then
echo "file argument needed"
exit 1
echo '<syscalls_info>'
+# There are __NR_ and __NR3264_ prefixed syscall numbers, handle them
+# automatically in this script. Here are the examples of the two types:
+#
+# #define __NR_io_setup 0
+# #define __NR3264_fcntl 25
+
echo '#include <asm/unistd.h>' \
| gcc -E - -dD "$@" \
- | grep -E '#define __NR_' \
+ | grep -E '#define (__NR_|__NR3264_)' \
| while read -r line; do
- name=$(echo "$line" | awk '{print $2}' | sed 's/^__NR_//')
- nr=$(echo "$line" | awk '{print $3}')
+ line=$(echo "$line" | awk '$2 ~ "__NR" && $3 !~ "__NR3264_" {
+ sub("^#define __NR(3264)?_", ""); print | "sort -k2 -n"}')
+ if [ -z "$line" ]; then
+ continue
+ fi
+ name=$(echo "$line" | awk '{print $1}')
+ nr=$(echo "$line" | awk '{print $2}')
echo " <syscall name=\"$name\" number=\"$nr\"/>"
done