跨平台版本的gcc忽略我函数的属性标签__attribute__((interrupt))

The cross-platform version of gcc ignore the attribute tag __attribute__((interrupt)) of my function

我下载了 intel IA-64 和 32 这本书,因为我想更深入地了解 CPU 是如何工作的。所以我读了这本书并开始编写一些东西。我启用了 IDT,当我想编写中断处理程序时,我有代码:

extern "C"  __attribute__((interrupt)) void test (void* ptr)
{

}

int main (void)
{
    return 0;
}

当我用 i686-elf-g++ -Wall -Wextra -O2 -c -m32 main.cpp 编译时,我有以下警告:main.cpp:6:60: warning: 'interrupt' attribute directive ignored,但是当我用 g++ -Wall -Wextra -O2 -c -m32 main.cpp 编译时,编译工作正常,生成的代码应该是最后有 iret 指令(这就是我想要的):

Disassembly of section __TEXT,__text:
_test:
       0:       55      push    ebp
       1:       89 e5   mov     ebp, esp
       3:       fc      cld
       4:       5d      pop     ebp
       5:       cf      iretd
       6:       66 2e 0f 1f 84 00 00 00 00 00   nop     word ptr cs:[eax + eax]

有谁知道为什么我的跨平台版本的 gcc 会出现此警告? (而且我也想知道为什么中断处理程序必须有一个指向 gcc 参数的指针)

interrupt 属性只是最近添加到 G++ 的目标 x86/x86-64 架构,并且在 G++[=17 中可用=] 7.0 和 later.I 会猜测您的 i686-elf-g++ 交叉编译器早于 7.0,而您的主机编译器 g++ 是 7.0 或更高版本。您必须将 i686 交叉编译器升级到更新版本。