gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:07:17 24 4
gpt4 key购买 nike

我下载了 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' 属性指令被忽略,但是当我用 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++ 7.0 及更高版本中可用.我猜你的i686-elf-g++交叉编译器早于7.0,而你的主机编译器g++是7.0或更高版本。您必须将 i686 交叉编译器升级到更新的版本。

关于gcc - gcc的跨平台版本忽略了我函数的属性标签__attribute__((interrupt)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47003777/

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