当我阅读 xv6 源代码时,我对下面声明的语法感到困惑。谁能给我解释一下吗?
extern struct cpu *cpu asm("%gs:0");
我假设你明白什么extern struct cpu *cpu
方法。你的问题是:asm("%gs:0")
部分意思是?
这段代码使用了一个名为的 gcc 扩展汇编标签 https://gcc.gnu.org/onlinedocs/gcc/Asm-Labels.html#Asm-Labels说变量cpu
由汇编字符串定义%gs:0
.
这不是此扩展的用途,并且被视为hack https://gcc.gnu.org/ml/gcc/2015-08/msg00075.html.
有关于 gs(和 fs)的精彩讨论here https://stackoverflow.com/a/10810340/2189500,但总之 gs 指向当前线程的本地存储。 gs 中数据的格式取决于您的操作系统(Windows 与 Linux 有很大不同)。这个特定的代码表示在偏移处0
从 gs 中,有一个指向 a 的指针struct cpu
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)