I've been using other tables but they were always incomplete and often x86_64 only. This one contains everything: number, symbol, links to kernel implementation, signature, user space ABI registers. And I can select kernel version, kernel binary interface and processor architecture!
I'm very interested in how you are collecting or generating all this information. Please post details on the process. I need similar information in order to compile system call tables into lone, my own programming language which features direct Linux system call support.
I use scripts that parse the information out of Linux user space API headers: the compiler prints all the preprocessor definitions from linux/unistd.h, the "SYS_" definitions are selected and then turned into a C array initializer for a number/name structure.
# makefile
$(call source_to_object,source/lone/lisp/modules/intrinsic/linux.c): $(targets.NR.c)
$(targets.NR.c): $(targets.NR.list) scripts/NR.generate
scripts/NR.generate < $< > $@
$(targets.NR.list): scripts/NR.filter
$(CC) -E -dM -include linux/unistd.h - < /dev/null | scripts/NR.filter > $@
# scripts/NR.filter
grep __NR_ | sed 's/#define //g' | cut -d ' ' -f 1
# scripts/NR.generate
# generates C array initializers like:
# { "read", __NR_read },
while read -r NR; do
printf '{ "%s", %s },\n' "${NR#__NR_}" "${NR}"
done
// source/lone/lisp/modules/intrinsic/linux.c
static struct linux_system_call {
char *symbol;
lone_lisp_integer number;
} linux_system_calls[] = {
/* huge generated array initializer
* with all the system calls found
* on the host platform
*/
#include <lone/lisp/modules/intrinsic/linux/NR.c>
};