I am trying to understand this inline assembly code which comes from _hypercall0
here.
asm volatile (\"call hypercall_page+%c[offset]\" \\
From the GCC internals documentation:
`%cdigit' can be used to substitute an operand that is a constant value without the syntax that normally indicates an immediate operand.
Check the assembly output (with gcc -S
, or maybe disassemble the object file) and it may be clearer.
My guess is that it stands for constant. hypercall_page
looks like a table of instructions that each do a syscall. Maybe this will generate a call hypercall_page + {constant based on the expression given}
, essentially having computed the address of this offset at compile time.
As an aside, this __HYPERVISOR##name
stuff really reminds me of the __NR_name_of_syscall
type convention you see for syscalls in Linux's <asm/unistd.h> and similar places.