From sys.c line 123:
void *sys_call_table[__NR_syscalls] =
{
[0 ... __NR_syscalls-1] = sys_ni_syscall,
#include
};
<
It is initialization using Designated Initializers.
The range based initialization is a gnu gcc extension.
To initialize a range of elements to the same value, write
[first ... last] = value
. This is a GNU extension. For example,int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
It is not portable. Compiling with -pedantic
with tell you so.
How does it work here?
The preprocessor replaces #include <asm/unistd.h>
with its actual contents(it defines miscellaneous symbolic constants and types, and declares miscellaneous functions) in the range based construct, which are then further used for initializing the array of pointers.