riscv代码调试遇到过的问题及坑
编译篇
riscv32-unknown-elf-gcc -march=rv32ima -mabi=ilp32 遇到这个问题
Error: unrecognized opcode `csrr a5,mhartid'解决方案:
https://lkml.org/lkml/2022/2/10/879
https://blog.csdn.net/u011011827/article/details/121371305
riscv32-unknown-elf-gcc -march=rv32ima_zicsr -mabi=ilp32//-march=rv32ima_zicsr_zifencei
原因:
> +# Newer binutils versions default to ISA spec version 20191213 which moves some
> +# instructions from the I extension to the Zicsr and Zifencei extensions.
链接篇
riscv64-unknown-elf-ld 链接遇到如下问题
target emulation `elf32-littleriscv' does not match `elf64-littleriscv'原因
应该是 riscv64-unknown-elf-ld 不支持 将32-elf 链接为 32-elf1.用 riscv 编译链 中的 gcc 链接试试
riscv64-unknown-elf-gcc -T arch/rv32/linker.lds -nostdlib -nostartfiles -Wl,-Map=baremetal.map -Wl,--whole-archive arch/rv32/built-in.a init/built-in.a modules/built-in.a -Wl,--no-whole-archive -o baremetal.elf2.用 riscv32 工具链试试
undefined reference to `__clzdi2' // https://github.com/riscv-collab/riscv-gnu-toolchain/issues/588我用的 是 x-tools 8.3.0 , riscv64-unknown-elf/lib/gcc/riscv64-unknown-elf/8.3.0/ 下的 .a 是 32bit的 直接链接 riscv64-unknown-elf/lib/gcc/riscv64-unknown-elf/8.3.0/rv64imac/lp64 下的 libgcc.a 会报其他的错/home/pop/x-tools/riscv64-unknown-elf/lib/gcc/riscv64-unknown-elf/8.3.0/rv64imac/lp64/libgcc.a(_clzsi2.o): in function `__clzdi2':/home/pop/work/freertos-riscv/crosstool-ng-crosstool-ng-1.24.0/.build/riscv64-unknown-elf/src/gcc/libgcc/libgcc2.c:710:(.text+0x1c): relocation truncated to fit: R_RISCV_HI20 against symbol `__clz_tab' defined in .rodata section in /home/pop/x-tools/riscv64-unknown-elf/lib/gcc/riscv64-unknown-elf/8.3.0/rv64imac/lp64/libgcc.a(_clz.o)
---riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14 编译 , 也是 这个问题 : undefined reference to `__clzdi2'riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/lib/gcc/riscv64-unknown-elf/10.2.0/ 下的 .a 是 64bit的 --- 目前观察到 10.2.1 的 adnes toolchain 没有这个问题,这个是rv64 only 的 , 可以正常链接 __clzdi2
---https://github.com/riscv-collab/riscv-gnu-toolchain/issues/457增加CT_LIBC_NEWLIB_TARGET_CFLAGS="-mcmodel=medany"没有解决解决方案:直接把 crosstool-ng 中的 ./.build/src/gcc-12.1.0/libgcc/config/nds32/lib2csrc-mculib/_clzsi2.c ./.build/src/gcc-12.1.0/libgcc/config/nds32/lib2csrc-mculib/_clzdi2.c 这两个文件放到 工程 中编译链接
gdb 篇
Could not fetch register "scause"; remote failure reply 'E14'原因
该版本的gdb中不支持该 csr1.更新到一个高版本的gdb 解决问题
Cannot find bounds of current function原因
abi的问题2.在gdb命令行中输入 set architecture riscv:rv32 解决问题
qemu 篇
mode 切换时
切换后的pc 执行第一条指令后会进入异常(不是中断)原因(mcause) 为 "Instruction access fault"mdcause 为 "Reserved"原因
未知1.换一个 qemu-system-riscv 解决了该问题
riscv代码调试遇到过的问题及坑相关推荐
- 基于易灵思开发板RiscV的调试流程
基于易灵思开发板RiscV的调试流程 一.相关环境准备 1.软件Install 2.硬件Device 二.硬件环境搭建 1.开发板连接 2.下载代码到开发板 三.软件环境搭建 1.启动Eclipse软 ...
- 【VS实践】代码调试与错误处理
程序员的装逼技能:调试,错误处理和快捷键 学计算机3年,只知道一些基础的理论知识,写代码和调试很差,基本不会什么吧! 花时间了解一下关于这块的东西!以前觉得调试就是代码写出来一运行,有问题了分析那里出 ...
- 转:Python 代码调试技巧
Python 代码调试技巧 转载于:https://www.cnblogs.com/kira2will/p/4254754.html
- 树形dp——树的重心(2) 代码调试理解
和树的最大独立问题类似,先任选一个结点作为根节点,把无根树变成有根树,然后设d(i)表示以i为根的子树的结点的个数.不难发现d(i)=∑d(j)+1,j∈s(i).s(i)为i结点的所有儿子结点的编号 ...
- 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》
案例需求:在销售订单上新增一个按钮,在订单明细中新增一个字段,命名[即时库存]. 点击按钮,弹出"Hello World!",并获取订单明细物料的即时库存,填入字段[即时库存]. ...
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
文章目录 一.Android 平台代码调试器代码 二.Android.mk 构建脚本内容 三.Application.mk 构建脚本内容 四.正式编译 五.博客资源 一.Android 平台代码调试器 ...
- 【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
文章目录 一.等待进程状态改变 二.detach 脱离进程调试 PTRACE_DETACH 三.调试中继续运行程序 PTRACE_CONT 一.等待进程状态改变 上一篇博客 [Android 逆向]代 ...
- 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )
文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...
- Python代码调试方法
对于每个程序开发者来说,调试几乎是必备技能.常用Pycharm编辑器里的方法有Print大法.log大法,但缺少类似Matlab的变量区,给代码调试带来不便,特别是在有函数的情况下,变量无法实时查看. ...
最新文章
- 邮箱的正则表达式验证总结经验
- 计算机网络·域名等级及域名服务器的命名
- Flex学习笔记2010-08-16
- E470 外放没声音问题解决
- CodeForces - 1236D Alice and the Doll(贪心+二分+模拟)
- [leetcode] 154.寻找旋转排序数组中的最小值 II
- 不定方程求解c语言_事业单位考试备考之数量关系:不定方程的求解
- seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
- 怎么查看电脑有没有python_python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学...
- c语言递归求塔移动次数,c语言递归调用汉诺塔
- Windows 平台安装 MongoDB
- 顶饰条行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 关于findViewById返回空指针的错误
- PAT (Basic Level) Practice1025 反转链表
- CF547D Mike and Fish 建图
- 【STM32H7的DSP教程】第12章 DSP基础函数-相反数,偏移,移位,减法和比例因子
- FastDfs与ElasticSearch和Mysql完成海量数据存储搜索功能
- html插入swf自动播放,如何在HTML页面中嵌入SWF文件?
- 施耐德电气:打造新一代数据中心基础设施
- 测试基础篇-开尔文测试基本原理