누군가이 코드 스 니펫을 설명 할 수 있습니까? 또한이 링크에 대해 더 자세히 알 수있는 링크/URL을 알려주십시오. 이 코드는 라이브러리의 "extern int errno"를 재정의하는 래퍼로 사용됩니다. 누군가이 함수를 설명 할 수 있고 왜 일부 시스템 콜에 래퍼가 필요하다고 말할 수 있습니까? WeakSYSCALLS라고도하는 것은 무엇입니까?syscall wrapper 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