RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V指令異常調(diào)試實(shí)例

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-06-08 10:50 ? 次閱讀

本文轉(zhuǎn)自公眾號,歡迎關(guān)注關(guān)于

RISC-V指令異常調(diào)試實(shí)例 (qq.com)

前言

本文以一個簡單的實(shí)例介紹RISC-V指令異常的調(diào)試過程,思路都是一樣的,遇到其他情況時分析過程也類似。

相關(guān)內(nèi)容參考《riscv-privileged-20211203.pdf》

過程

現(xiàn)象是程序執(zhí)行后進(jìn)入了異常中斷,可以通過GDB的bt命令看到

#12 0x02002e9c in exception () at src/lib/riscv/src/exception.c:55


#13 0x02002b40 in is_exception ()


Backtrace stopped: frame did not save the PC


(gdb)

既然是進(jìn)入了異常中斷,那么就需要確認(rèn)到底是什么異常,

這可以通過mcause寄存器查看

(gdb) info reg mcause


mcause 0x2      0x2


(gdb)

可以看到是非法指令異常

那么我們就搜索文檔的Illegal instruction可以查看到所有可能導(dǎo)致Illegal instruction的原因。

圖片

我們搜到以下信息,即mtval寄存器保存了異常指令,mepc指向了異常指令

圖片

圖片

可以看到mepc的內(nèi)容是0,那么猜測應(yīng)該是函數(shù)指針未初始化直接調(diào)用導(dǎo)致的

(gdb) info reg mtval


mtval 0x0      0x0


(gdb) info reg mepc


mepc 0x0      0x0


(gdb)

到這里基本就確認(rèn)了方向了,可以重點(diǎn)看哪些地方有函數(shù)指針,或者逐步注釋函數(shù),或者逐步斷點(diǎn)定位即可。

這里很快就確認(rèn)了是

是如下代碼導(dǎo)致

int xxx_ioctl(unsigned int dev_id, unsigned int cmd, void *data)
{


if (dev_id >= xxx_drv.dev_num)


return -1;


return xxx_drv.ops.ioctl(&(xxx_drv.dev[dev_id]), cmd, data);


}

查看函數(shù)指針正好是0

(gdb) p xxx_drv.ops.ioctl


$1 = (int (*)(struct xxx_dev_s *, unsigned int, void *)) 0x0


(gdb)

回溯代碼確認(rèn)了是某個外設(shè)沒有初始化成功則這個回調(diào)函數(shù)沒有初始化。原因就定位了。

總結(jié)

對于異常的調(diào)試可以參考手冊《riscv-privileged-20211203.pdf》,從異常原因入手,逐漸反推,確認(rèn)異常觸發(fā)點(diǎn)然后確定原因。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    607

    瀏覽量

    35692
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    578

    瀏覽量

    33923
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    683

    瀏覽量

    22011
  • RISC-V
    +關(guān)注

    關(guān)注

    45

    文章

    2270

    瀏覽量

    46125
收藏 人收藏

    評論

    相關(guān)推薦

    正式的RISC-V基礎(chǔ)指令集架構(gòu)與特權(quán)架構(gòu)規(guī)范來了,RISC-V基金會已正式批準(zhǔn)

    根據(jù)RISC-V基金會官網(wǎng)發(fā)布的公告,RISC-V 基金會宣布了批準(zhǔn)RISC-V 基礎(chǔ)指令集架構(gòu)與特權(quán)架構(gòu)規(guī)范,為 RISC-V的可擴(kuò)展性進(jìn)
    的頭像 發(fā)表于 07-11 10:46 ?9859次閱讀

    RISC-V指令集架構(gòu)特點(diǎn)

    RISC-V是當(dāng)下熱門的技術(shù),值得大家學(xué)習(xí),這里分享一份關(guān)于RISC-V指令的內(nèi)容給大家。
    的頭像 發(fā)表于 10-14 09:08 ?3589次閱讀

    RISC-V的Store AMO access fault調(diào)試實(shí)例

    本文以一個實(shí)例分享RISC-V的Store AMO access fault異常調(diào)試過程。Store AMO access fault主要發(fā)生在非法地址訪問時(棧溢出,指針
    的頭像 發(fā)表于 06-08 11:10 ?4520次閱讀
    <b class='flag-5'>RISC-V</b>的Store AMO access fault<b class='flag-5'>調(diào)試</b><b class='flag-5'>實(shí)例</b>

    RISC-V PMP調(diào)試

    RISC-V PMP調(diào)試
    的頭像 發(fā)表于 06-08 11:52 ?1917次閱讀
    <b class='flag-5'>RISC-V</b> PMP<b class='flag-5'>調(diào)試</b>

    RISC-V開放架構(gòu)設(shè)計(jì)之道|閱讀體驗(yàn)】RISC-V基礎(chǔ)整數(shù)指令

    第2章 RV32I:RISC-V基礎(chǔ)整數(shù)指令集 本章重點(diǎn)講解構(gòu)成RISC-V基礎(chǔ)整數(shù)指令集的基本指令
    發(fā)表于 01-31 21:10

    關(guān)于RISC-V學(xué)習(xí)路線圖推薦

    的編程方法。 學(xué)習(xí)RISC-V匯編語言 : 了解RISC-V匯編語言的語法和指令格式,編寫簡單的匯編程序。 調(diào)試與優(yōu)化 : 使用調(diào)試工具(如
    發(fā)表于 11-30 15:21

    RISC-V指令集概述

    RISC-V就是RISC的第五代指令集架構(gòu)。而RISC-V目標(biāo)就是“成為一種完全開放的指令集架構(gòu),可被任何學(xué)術(shù)機(jī)構(gòu)或商業(yè)組織自由使用”。
    發(fā)表于 11-30 23:30

    什么是RISC-V? RISC-V指令具有哪些特點(diǎn)應(yīng)用?

    什么是RISC-V?RISC-V指令具有哪些特點(diǎn)應(yīng)用?自己怎么才能設(shè)計(jì)出設(shè)計(jì)一套指令集?
    發(fā)表于 10-14 09:05

    RISC-V 發(fā)展

    不完善的地方,有傳言未來可能會形成x86、ARM、RISC-V三足鼎立的天下,但能夠形成這個局面,還需要大家的共同努力。RISC-V指令RISC-V
    發(fā)表于 04-14 10:18

    關(guān)于RISC-V的P擴(kuò)展簡述與實(shí)例解析

    在研究RISC-V指令集的時候,其指令是模塊化的,這就為其指令的擴(kuò)展提供了更多的可能性。下面僅代表我對RISC
    的頭像 發(fā)表于 04-27 11:30 ?7427次閱讀
    關(guān)于<b class='flag-5'>RISC-V</b>的P擴(kuò)展簡述與<b class='flag-5'>實(shí)例</b>解析

    RISC-V調(diào)試標(biāo)準(zhǔn)及跟蹤技術(shù)

    本文主要詳細(xì)介紹了RISC-V調(diào)試標(biāo)準(zhǔn)以及RISC-V的跟蹤技術(shù),感興趣的小伙伴跟小編一起了解一下吧。
    的頭像 發(fā)表于 06-23 17:19 ?2927次閱讀
    <b class='flag-5'>RISC-V</b>的<b class='flag-5'>調(diào)試</b>標(biāo)準(zhǔn)及跟蹤技術(shù)

    第一屆RISC-V中國峰會看點(diǎn) risc-v開發(fā)要怎么優(yōu)化risc-v指令集架構(gòu)代碼密度

    在第一屆RISC-V中國峰會上看點(diǎn)很多,RISC-V是開源的,那么代碼密度要怎么控制,會不會因?yàn)殚_源而導(dǎo)致代碼密度特別大? 我們一起來看看risc-v峰會其中一個非常重要的亮點(diǎn);卡姆派樂信息科技有限公司解讀針對
    發(fā)表于 06-23 18:22 ?9674次閱讀
    第一屆<b class='flag-5'>RISC-V</b>中國峰會看點(diǎn) <b class='flag-5'>risc-v</b>開發(fā)要怎么優(yōu)化<b class='flag-5'>risc-v</b><b class='flag-5'>指令</b>集架構(gòu)代碼密度

    簡單講講RISC-V指令集CPU的參數(shù)

    本次CPU采用32位RISC-V指令集架構(gòu)(一代是自己瞎編指令集)。指令集就是程序指令的集合,指引硬件如何設(shè)計(jì)、如何運(yùn)行。
    的頭像 發(fā)表于 08-07 14:55 ?3645次閱讀
    簡單講講<b class='flag-5'>RISC-V</b><b class='flag-5'>指令</b>集CPU的參數(shù)

    RISC-V CPU調(diào)試機(jī)制的設(shè)計(jì)原理

    本文將詳細(xì)介紹RISC-V CPU調(diào)試機(jī)制的設(shè)計(jì)原理。
    發(fā)表于 10-18 09:19 ?2230次閱讀

    RISC-V調(diào)試和完善的跟蹤解決方案

    RISC-V調(diào)試和完善的跟蹤解決方案ppt分享
    發(fā)表于 07-14 17:15 ?0次下載
    RM新时代网站-首页