誰かが私にこのコードスニペットを説明できますか? また、私はこれについてもっと知ることができるいくつかのリンク/ URLを教えてください? このコードは、私たちのライブラリ内の "extern int errno"を上書きするためのラッパーとして使用されます。誰かが私にこの機能を説明することができ、なぜいくつかのシステムコールでラッパーが必要だと言うことができますか? WeakSYSCALLSとも呼ばれる?syscallラッパーasm C
#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
#define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3)
#define LOADREGS_5(a1, a2, a3, a4, a5) \
register int _v1 asm ("v1") = (int) (a5); \
LOADREGS_4 (a1, a2, a3, a4)
#define LOADREGS_6(a1, a2, a3, a4, a5, a6) \
register int _v2 asm ("v2") = (int) (a6); \
LOADREGS_5 (a1, a2, a3, a4, a5)
#define MYLIBC_SYSCALL(name, nargs, args...) \
({ \
unsigned int retval; \
{ \
register int _a1 asm ("r0"), _nargs asm ("r7"); \
LOADREGS_##nargs(args) \
_nargs = __NR_##name; \
asm volatile ( \
"swi 0x0" \
:"=r"(_a1) \
:"r"(_nargs) ASM_ARGS_##nargs \
: "memory"); \
retval = _a1; \
} \
if (retval >= 0xfffff001) { \
errno = -retval; \
retval = (unsigned int)-1; \
} \
(int) retval; \
})
あなたの答えは何ですか? – kingsmasher1