这个内联汇编的含义是什么(:“0”(THREAD_SIZE – 1))在linux内
发布时间:2020-12-13 22:55:32 所属栏目:Linux 来源:网络整理
导读:在do_IRQ中,您可以找到以下代码! #ifdef CONFIG_DEBUG_STACKOVERFLOW /* Debugging check for stack overflow: is there less than 1KB free? */ { long esp; __asm__ __volatile__("andl %%esp,%0" : "=r" (esp) : "0" (THREAD_SIZE - 1)); if (unlikely(e
在do_IRQ中,您可以找到以下代码!
#ifdef CONFIG_DEBUG_STACKOVERFLOW /* Debugging check for stack overflow: is there less than 1KB free? */ { long esp; __asm__ __volatile__("andl %%esp,%0" : "=r" (esp) : "0" (THREAD_SIZE - 1)); if (unlikely(esp < (sizeof(struct thread_info) + STACK_WARN))) { printk("do_IRQ: stack overflow: %ldn",esp - sizeof(struct thread_info)); dump_stack(); } } #endif 我不明白这个asm集会的意义 解决方法
“0”约束意味着:使用与第0个操作数相同的约束(
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss6.1和6.1.3匹配(数字)约束).
基本上,此片段将THREAD_SIZE – 1作为输入寄存器,并在同一寄存器中输出anded值.该寄存器在源代码中被引用为esp变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |