吴忠躺衫网络科技有限公司

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

本文轉自公眾號,歡迎關注關于

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

前言

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

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

過程

現(xiàn)象是程序執(zhí)行后進入了異常中斷,可以通過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)

既然是進入了異常中斷,那么就需要確認到底是什么異常,

這可以通過mcause寄存器查看

(gdb) info reg mcause


mcause 0x2      0x2


(gdb)

可以看到是非法指令異常

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

圖片

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

圖片

圖片

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

(gdb) info reg mtval


mtval 0x0      0x0


(gdb) info reg mepc


mepc 0x0      0x0


(gdb)

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

這里很快就確認了是

是如下代碼導致

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)

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

總結

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

審核編輯:湯梓紅

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

    關注

    1

    文章

    611

    瀏覽量

    35812
  • 調(diào)試
    +關注

    關注

    7

    文章

    589

    瀏覽量

    34064
  • 命令
    +關注

    關注

    5

    文章

    696

    瀏覽量

    22109
  • RISC-V
    +關注

    關注

    45

    文章

    2322

    瀏覽量

    46592
收藏 人收藏

    評論

    相關推薦

    正式的RISC-V基礎指令集架構與特權架構規(guī)范來了,RISC-V基金會已正式批準

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

    RISC-V指令集架構特點

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

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

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

    RISC-V PMP調(diào)試

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

    RISC-V開放架構設計之道|閱讀體驗】RISC-V基礎整數(shù)指令

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

    關于RISC-V學習路線圖推薦

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

    RISC-V指令集概述

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

    RISC-V基礎指令詳解

    RISC-V中定義了六種指令類型,其中包括 R型指令 : 用于寄存器與寄存器之間算數(shù)運算的指令 I型指令 : 用于寄存器和立即數(shù)算術運算和讀
    發(fā)表于 12-29 18:47

    什么是RISC-VRISC-V指令具有哪些特點應用?

    什么是RISC-VRISC-V指令具有哪些特點應用?自己怎么才能設計出設計一套指令集?
    發(fā)表于 10-14 09:05

    RISC-V 發(fā)展

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

    關于RISC-V的P擴展簡述與實例解析

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

    RISC-V調(diào)試標準及跟蹤技術

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

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

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

    RISC-V CPU調(diào)試機制的設計原理

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

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

    RISC-V調(diào)試和完善的跟蹤解決方案ppt分享
    發(fā)表于 07-14 17:15 ?0次下載
    百家乐官网波音平台导航网| 金海岸百家乐官网的玩法技巧和规则 | 永利高百家乐现金网| 百家乐游戏卡通| 明珠娱乐开户| 百家乐视频软件| 安福县| 百家乐官网那个娱乐城信誉好| 百家乐投注外围哪里好| 关于百家乐官网概率的书| 24山来水吉凶| 平武县| 百家乐网站开户| 巴中市| 百家乐专业赌博| 聊城市| 风水97年农历6月24八字| 真錢棋牌游戏| 百家乐赢钱皇冠| 噢门百家乐官网玩法| 大发888出纳柜台 2014| 百家乐官网赌博彩| 百家乐官网电脑上怎么赌| 将军百家乐的玩法技巧和规则| 最好的百家乐官网娱乐场| 德州扑克加注规则| 百家乐论坛博彩啦| 百家乐官网衬衣| 皇冠网社区| 百家乐凯时娱乐网| 网络百家乐官网怎样出千| 皇冠开户正网 | 百家乐赌博机销售| 百家乐官网计划| 通河县| 百家乐哪家信誉好| 百家乐官网赌博玩法技巧| 大发888官方c8| 百家乐在线怎么玩| 真人百家乐官网对决| 百家乐官网有破解的吗|