91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

嵌入式USB開發(fā) ? 來源:嵌入式USB開發(fā) ? 作者:嵌入式USB開發(fā) ? 2023-06-08 10:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

前言

本文以一個簡單的實例介紹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

    文章

    623

    瀏覽量

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

    關(guān)注

    7

    文章

    646

    瀏覽量

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

    關(guān)注

    5

    文章

    755

    瀏覽量

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

    關(guān)注

    48

    文章

    2887

    瀏覽量

    52941
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎ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 ?1.1w次閱讀

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

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

    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 ?7330次閱讀
    <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 ?3244次閱讀
    <b class='flag-5'>RISC-V</b> PMP<b class='flag-5'>調(diào)試</b>

    RISC-V開放架構(gòu)設(shè)計之道|閱讀體驗】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基礎(chǔ)指令詳解

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

    RISC-V指令集手冊中F指令部分

    的設(shè)定。舍入模式可以分為靜態(tài)舍入和動態(tài)舍入,靜態(tài)舍入即按照浮點(diǎn)指令內(nèi)固定的模式去執(zhí)行,動態(tài)舍入可以通過frm域的值動態(tài)選擇,此時指令編碼中的rm域為111,無效的舍入會引起非法指令異常
    發(fā)表于 10-22 08:18

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

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

    RISC-V 發(fā)展

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

    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 ?3762次閱讀
    <b class='flag-5'>RISC-V</b>的<b class='flag-5'>調(diào)試</b>標(biāo)準(zhǔn)及跟蹤技術(shù)

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

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

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

    RISC-V調(diào)試和完善的跟蹤解決方案ppt分享
    發(fā)表于 07-14 17:15 ?3次下載

    RISC-V異常中斷機(jī)制全解析

    RISC-V 作為開源、模塊化的精簡指令集架構(gòu),其異常中斷機(jī)制是保障系統(tǒng)可靠運(yùn)行、響應(yīng)外部事件與處理內(nèi)部錯誤的核心支撐。
    的頭像 發(fā)表于 12-28 14:41 ?1435次閱讀
    <b class='flag-5'>RISC-V</b><b class='flag-5'>異常</b>中斷機(jī)制全解析