网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

RISC-V的Store AMO access fault调试实例

时间:2023-06-08 11:10

人气:

作者:admin

标签: 调试  嵌入式  指针  RISC-V 

导读:本文以一个实例分享RISC-V的Store AMO access fault异常的调试过程。Store AMO access fault主要发生在非法地址访问时(栈溢出,指针异常等)。...

本文转自公众号,欢迎关注

RISC-V的Store AMO access fault调试实例 (qq.com)

前言

本文以一个实例分享RISC-V的Store AMO access fault异常的调试过程。Store AMO access fault主要发生在非法地址访问时(栈溢出,指针异常等)。

过程

现象是程序运行时进入了异常中断,如下

使用bt回溯可以看到进入了异常处理函数exception ()

(gdb) bt


......


#6 0x02002eb2 in exception () at src/lib/riscv/src/exception.c:55


#7 0x00000000 in ?? ()


Backtrace stopped: frame did not save the PC


(gdb)

那么首先想到的是确认异常原因

查看异常寄存器:info reg mcause

可以看到异常原因是0x07

图片

对应的是Store/AMO access fault 异常,这是一个写数据时的异常.

图片

那么接下来就要确认写哪个地方的数据错误了呢?

我们可以通过info reg mtval 查看mtval寄存器看到。

写0x28382ad0时产生了异常.

图片

那么什么时候写这个地址导致了异常呢,之前bt已经看不到回溯的地方了。

我们可以使用数据断点来监控

设置数据断点 watch (unsigned int )0x28382ad0

重新加载程序运行 load

c运行

看到断点停在了memset函数处,这印证了我们前面分析的是写数据导致的问题

图片

继续bt查看

图片

我们找到对应的代码处

图片

看下memset的参数,如果看不到可以在memset前打断点重新运行

图片

最终确认确实是栈初始化时写0x28382ad0这个地址的内容错误,原因是不具备写属性导致异常

(gdb) p pxStack


$8 = (StackType_t *) 0x28382ad0


(gdb)

图片

当然为什么这个地址不能写和这里没关系了,是另外一回事了,是我们的环境DDR的问题。

总结

以上是一个分析实例的过程,遇到类似问题可以参考。有几个关键点一是确认异常原因,异常访问的地址,然后通过数据断点确认什么时候访问了这个地址,到此基本就确认问题了,后面就顺藤摸瓜了。

审核编辑:汤梓红

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信