Hi Ian,

Some my Linux system, system call numbers are defined as

#define __NR_x32_rt_sigaction                   __NR_X32_SYSCALL(0)

and

__NR_X32_SYSCALL(0) is expanded to (0x40000000 | (512 + 0)).  This patch
tries to deal with by checking '^// unknowndefine SYS_[a-z]' and uses
"${CC} -E" to extract the real number.  Tested on Linux/x86-64.  OK
to install?

Thanks.


H.J.
---
2011-12-09  H.J. Lu  <hongjiu...@intel.com>

        * mksysinfo.sh: Handle system call numbers "(0x40000000 | (234))".

diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index e29febf..1766136 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -118,6 +118,22 @@ grep '^const _SYS_' gen-sysinfo.go | \
     echo "const $sup = _$sys" >> ${OUT}
   done
 
+# Handle system call numbers like "(0x40000000 | (234))"
+if grep '^// unknowndefine SYS_[a-z]' gen-sysinfo.go >/dev/null 2>&1; then
+  rm -f unknown-syscalls.c
+  echo "#include \"sysinfo.c\"" > unknown-syscalls.c
+  grep '^// unknowndefine SYS_[a-z]' gen-sysinfo.go | \
+    grep __NR_ | \
+    awk '{ print $3 }' | \
+    while read sys; do
+      sup=`echo $sys | tr abcdefghijklmnopqrstuvwxyz 
ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+      echo "const $sup = $sys"
+    done >> unknown-syscalls.c
+    ${CC} -E unknown-syscalls.c | \
+      grep "^const SYS_.*=" | \
+      grep -v __NR_ >> ${OUT}
+fi
+
 # Stat constants.
 grep '^const _S_' gen-sysinfo.go | \
   sed -e 's/^\(const \)_\(S_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}

Reply via email to