gcc - 声明“extern struct cpu * cpu asm (“%gs:0”)”是什么?意思是?

标签 gcc x86 inline-assembly xv6

在阅读xv6源代码时,我对以下声明的语法感到困惑。谁能向我解释?

extern struct cpu *cpu asm("%gs:0");

最佳答案

我假设您了解extern struct cpu *cpu的含义。您的问题是:asm("%gs:0")部分是什么意思?

该代码使用名为asm labels的gcc扩展来表示变量cpu由汇编字符串%gs:0定义。

这不是打算使用此扩展名的方式,而是将其视为hack

关于gs(和fs)here的讨论非常精彩,但简而言之gs指向当前线程的本地存储。 gs处的数据格式取决于您的操作系统(Windows与Linux有很大不同)。这个特定的代码说,在从gs偏移0的位置,有一个指向struct cpu的指针。

关于gcc - 声明“extern struct cpu * cpu asm (“%gs:0”)”是什么?意思是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578898/

相关文章:

c - GCC:在每条指令之后强制调用函数(用于多线程测试)?

c++ - 就嵌入式系统的大小而言,我可以获得多小的完整编译器(如 clang 或 gcc)?

winapi - 如何在不使用高级汇编程序的情况下显示 "Hello, world!"?

c - (编辑)何时应该在c中使用内联汇编(优化之外)?

c++ - Visual C++ 内联 x86 程序集 : Accessing "this" pointer

ubuntu - 如何在 Ubuntu 20 上下载 gcc v4.4.3 版本?

multithreading - 缓存一致性的重点是什么?

assembly - 编写跨步 x86 基准测试

C++ 多线程内联汇编

linux - 使用非主要 libc 编译,(即 eglibc、uClibc)