FRTOS使用GHS编译报告错误Only basic asm expressions are allowed for functions with __attribute__((naked))

在使用GHS编译FreeRTOS的时候,遇到了port.c文件编译错误,按照错误信息打开文件一看人麻了,全汇编。
错误提示的内容是”Only basic asm expressions are allowed for functions with attribute((naked))“,翻译成中文就是”attribute((naked))定义的函数只能使用基本汇编语法”,去查看了函数声明的地方,确实使用了naked定义。
好嘛,我上哪儿知道哪些才是汇编的基本语法(╯°□°)╯︵ ┻━┻。在这里插入图片描述
多方搜索无果,最后在GHS的技术支持那里获取到了手册的关键信息,查询了手册里的语法,发现上图里面第449行里面同样用了“%0”这个通配符。
所以最终解决方案就是,查看了通配符对应的变量,其实是一个宏,它是由几个宏计算得来的。确认在代码里是一个固定值之后,直接把结果计算出来放在这里。
但需要注意是这里是一个坑,但凡与之相关的参数配置发生变化,这个值就得跟着变。特立此帖,以便后续踩坑的时候反思,同时也征集广大网友的智慧,看还有没有更好的方法避免这个坑。
在这里插入图片描述

### 关于 DW_AT_ghs_frames 的定义与作用 DWARF 是一种广泛用于程序调试信息的标准格式。它通过一系列属性描述编译单元、变量、函数以及其他代码结构的信息,以便调试器能够解析并显示这些数据。 `DW_AT_ghs_frames` 属于特定厂商扩展的一部分,在标准 DWARF 中并未被正式定义[^1]。此属性通常由 Green Hills Software 提供的支持工具链引入,主要用于描述与其编译器生成的帧信息相关的特性。具体来说: - **Green Hills 编译器支持**:该属性可能涉及优化后的栈帧布局或特殊调用约定下的额外元数据[^2]。 - **调试上下文中的应用**:当开发者使用 Green Hills 工具链时,可能会遇到这种自定义属性,其目的是增强对复杂嵌入式环境或者高性能计算场景下堆栈管理的理解能力[^3]。 以下是展示如何读取此类非标准 Dwarf 属性的一个简单 Python 脚本例子: ```python import pyelftools as pt def parse_dwarf_info(file_path): with open(file_path, 'rb') as f: elffile = pt.ELFFile(f) if not elffile.has_dwarf_info(): raise Exception("No DWARF info found.") dwarfinfo = elffile.get_dwarf_info() for cu in dwarfinfo.iter_CUs(): for die in cu.iter_DIEs(): if 'DW_AT_ghs_frames' in die.attributes: attr_val = die.attributes['DW_AT_ghs_frames'] print(f"Found GHS Frames Attribute Value: {attr_val.value}") parse_dwarf_info('example_binary') ``` 上述脚本利用 `pyelftools` 库来提取二进制文件内的 DWARF 数据,并查找是否存在名为 `DW_AT_ghs_frames` 的属性实例。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChenglimK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值