1
我想知道在下面的代碼%P3的含義:含義在Linux內核內聯組件的
#define get_user(x, ptr) \
({ \
int __ret_gu; \
register __inttype(*(ptr)) __val_gu asm("%edx"); \
__chk_user_ptr(ptr); \
might_fault(); \
asm volatile("call __get_user_%P3" \
: "=a" (__ret_gu), "=r" (__val_gu) \
: "0" (ptr), "i" (sizeof(*(ptr)))); \
(x) = (__typeof__(*(ptr))) __val_gu; \
__ret_gu; \
})
而且在LLVM IR代碼被映射到:
call { i32*, i64 } asm sideeffect "call __get_user_${3:P}", "={ax},={edx},0,i,~{dirflag},~{fpsr},~{flags}"(i32* %tmp73, i64 4)
我的理解是,這實際上調用了arch/x86/lib/getuser.S中的特定函數__get_user_X,但是不清楚哪一個特別(__get_user_4?)。
最後,我想了解%P和%P之間的差異。
[文檔似乎用於「spec文件」](https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html),它似乎與GAS沒有關係 – delcypher