gpt4 book ai didi

linux - __range_ok 宏中的汇编代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:13 26 4
gpt4 key购买 nike

你能解释一下这段代码吗?我真的不明白。

参见 http://lxr.free-electrons.com/source/arch/arm/include/asm/uaccess.h#L70

 #define __addr_ok(addr) ({ \
unsigned long flag; \
__asm__("cmp %2, %0; movlo %0, #0" \
: "=&r" (flag) \
: "" (current_thread_info()->addr_limit), "r" (addr) \
: "cc"); \
(flag == 0); })

/* We use 33-bit arithmetic here... */
#define __range_ok(addr,size) ({ \
unsigned long flag, roksum; \
__chk_user_ptr(addr); \
__asm__("adds %1, %2, %3; sbcccs %1, %1, %0; movcc %0, #0" \
: "=&r" (flag), "=&r" (roksum) \
: "r" (addr), "Ir" (size), "" (current_thread_info()->addr_limit) \
: "cc"); \
flag; })

这是来自 ARM Linux 内核,__range_ok

最佳答案

作为有关寄存器使用和其他装饰的一般信息来源,请查看 GCC Extended Inline Assembly 的文档

我建议你通过

运行这个源
gcc .... -S

查看生成的结果是什么。

你也可以运行

objdump -dC -S <objectfile.o>

您将需要交叉编译器工具链中的 objdump。此外,使用调试信息进行编译以获得源注释 (-S)。编译时加上 -O0 以避免优化造成的混淆。

关于linux - __range_ok 宏中的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7398369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com