針對(duì)(且不限于)嵌入式處理器的可配置LLDB底層調(diào)試器
一般來(lái)說(shuō),軟件開(kāi)發(fā)人員或處理器開(kāi)發(fā)人員有時(shí)需要檢查和調(diào)試代碼。代碼調(diào)試可以在不同層次上進(jìn)行,例如查看波形或解析打印輸出,但首選是在交互會(huì)話(huà)中檢查代碼。調(diào)試器通過(guò)接受開(kāi)發(fā)人員的命令、執(zhí)行命令并顯示結(jié)果來(lái)促進(jìn)交互會(huì)話(huà)。例如,在代碼的某一行停止時(shí)顯示變量值。這次我們可以重點(diǎn)關(guān)注下 LLDB(底層調(diào)試器),它是在 LLVM 項(xiàng)目下開(kāi)發(fā)的調(diào)試器。
調(diào)試器和定制
調(diào)試器通常支持多種目標(biāo),如 x86、Arm或RISC-V。它們擁有這些目標(biāo)的嵌入式知識(shí)(也稱(chēng)為 ABI),例如程序員可以看到哪些寄存器、目標(biāo)有哪些指令或內(nèi)存映射如何?然而,RISC-V 的誕生帶來(lái)了一個(gè)新的維度。RISC-V 支持并認(rèn)可自定義擴(kuò)展,這意味著處理器可能擁有更多開(kāi)發(fā)人員感興趣的指令和/或寄存器,但標(biāo)準(zhǔn) RISC-V 目標(biāo)機(jī)并不知曉這些指令和/或寄存器。
對(duì)于這些問(wèn)題,Codasip給出了解決方案,這些解決方案不僅適用于 RISC-V 架構(gòu),還適用于使用 Codasip Studio 工具描述的幾乎所有架構(gòu)(即定制處理器)。
LLDB及其架構(gòu)
LLDB是 LLVM 項(xiàng)目下的下一代調(diào)試器,可重用 LLVM 編譯器中的大量代碼,如表達(dá)式評(píng)估。它包含所有標(biāo)準(zhǔn)功能:
斷點(diǎn)、觀(guān)察點(diǎn)
程序流程控制(步入/步出/步進(jìn)、繼續(xù)、中斷)
變量
寄存器
內(nèi)存
LLDB 結(jié)構(gòu)設(shè)計(jì)精良,模塊化程度高。而模塊化的意義在于它為擴(kuò)展做好了準(zhǔn)備且可以利用插件架構(gòu)。
LLDB插件
獨(dú)立的插件可處理以下功能:
指令反匯編
在不同平臺(tái)上啟動(dòng)可執(zhí)行文件
支持各種可執(zhí)行文件和調(diào)試格式或支持的高級(jí)語(yǔ)言,如 C 或 C++
每種插件類(lèi)型都有一個(gè)預(yù)定義的API,插件必須實(shí)現(xiàn)該API。除插件外,LLDB還有一個(gè)核心主體,可利用插件并保存有關(guān)支持的架構(gòu)/目標(biāo)及其特性的信息。然后目標(biāo)將插件和ABI連接起來(lái)。例如RISC-V 目標(biāo)機(jī)知道ELF 是默認(rèn)的可執(zhí)行文件格式,以及RISC-V 架構(gòu)可能是32位或64 位,有 32 個(gè)寄存器等信息。
雖然LLDB在起點(diǎn)(baseline)中是靈活的,但要最大限度地利用定制計(jì)算,就必須對(duì)其進(jìn)行增強(qiáng)。
Codasip如何實(shí)現(xiàn)對(duì)LLDB的增強(qiáng)?
對(duì)此我們使用插件增強(qiáng)LLDB,以添加對(duì)以下功能的支持:
作為平臺(tái)的Codasip仿真器、RTL仿真器或JTAG
在Codasip仿真器或FPGA/ASIC上運(yùn)行的進(jìn)程
可配置的ABI,且不僅僅適用于RISC-V處理器
可配置的反匯編器
CodAL語(yǔ)言(見(jiàn)下文)
除此以外我們還增強(qiáng)了LLDB內(nèi)核,支持雙棧架構(gòu)、哈佛架構(gòu)和16位架構(gòu),以及其他許多大大小小的全方位改進(jìn)。
但是對(duì)于定制計(jì)算來(lái)說(shuō)還需要更進(jìn)一步。如上所述,設(shè)計(jì)人員可能會(huì)添加新指令或新寄存器。在這種情況下LLDB插件系統(tǒng)是不夠的。當(dāng)然,Codasip Studio可以為插件生成代碼,但這么操作編譯時(shí)間會(huì)非常長(zhǎng)。
當(dāng)然沒(méi)有任何一個(gè)項(xiàng)目希望看到以上的不利情況。每個(gè)人都希望在開(kāi)發(fā)處理器時(shí)能在幾秒到幾分鐘的時(shí)間內(nèi)快速周轉(zhuǎn),而不是更長(zhǎng)。
添加配置功能
因此Codasip通過(guò)增加一個(gè)新的配置級(jí)別。該配置級(jí)別允許添加(或刪除)新的寄存器、指令或內(nèi)存映射,而無(wú)需重新編譯插件。配置本身由處理器模型自動(dòng)生成,并在LLDB啟動(dòng)時(shí)自動(dòng)傳遞。然后LLDB 會(huì)加載配置文件并更新加載的插件。這樣,我們就能從內(nèi)置插件和處理器定制中獲益,而且一切都在幾秒鐘內(nèi)完成。
下面的示例顯示了 LLDB 的命令行界面。
使用機(jī)器接口或Python,LLDB也可以集成到集成開(kāi)發(fā)環(huán)境中。
那么處理器將如何調(diào)試?
到目前為止,我們已經(jīng)討論了軟件和 C/C++ 調(diào)試。但是處理器設(shè)計(jì)也需要調(diào)試。Codasip Studio提供的不僅僅是標(biāo)準(zhǔn)的波形調(diào)試。我們還增強(qiáng)了 LLDB對(duì)CodAL語(yǔ)言的支持。這項(xiàng)功能允許直接在CodAL中調(diào)試處理器,而無(wú)需在RTL中檢查波形。換句話(huà)說(shuō),LLDB可以在CodAL級(jí)別完成所有標(biāo)準(zhǔn)調(diào)試工作,如訪(fǎng)問(wèn)CodAL變量、步進(jìn)或設(shè)置斷點(diǎn)等。設(shè)計(jì)人員可以輕松地從C/C++通過(guò)匯編轉(zhuǎn)到CodAL代碼。下圖顯示了這種情況。
同時(shí)LLDB還包括其他優(yōu)秀功能。其中一個(gè)值得一提的功能是使用Python 編寫(xiě)腳本。這可以無(wú)縫、順利地集成到CI/CD或其他自動(dòng)化框架中。它支持Windows、Linux或MacOS等主流平臺(tái)(Codasip Studio同時(shí)也支持所有平臺(tái))。LLDB可以使用機(jī)器接口協(xié)議或Python集成到大多數(shù)集成開(kāi)發(fā)環(huán)境(如 VS Code、Eclipse 等)中。此外,Codasip還為那些從GDB轉(zhuǎn)向LLDB的用戶(hù)提供了一個(gè)不錯(cuò)的命令圖。如果您對(duì)該話(huà)題感興趣,隨時(shí)歡迎加入LLDB社區(qū)和Codasip,探索更多LLDB功能和特性!
關(guān)于Codasip
Codasip作為領(lǐng)先的處理器解決方案供應(yīng)商,支持系統(tǒng)級(jí)芯片(SoC)開(kāi)發(fā)人員設(shè)計(jì)出差異化的產(chǎn)品,從而獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。客戶(hù)可使用Codasip Studio設(shè)計(jì)自動(dòng)化工具, 開(kāi)放的架構(gòu)許可以及可定制的RISC-V處理器IP系列,通過(guò)定制計(jì)算,充分解鎖RISC-V的無(wú)限潛力。Codasip總部位于歐洲,同時(shí)服務(wù)于全球市場(chǎng),目前已實(shí)現(xiàn)在數(shù)十億顆芯片中布局。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19436瀏覽量
231306 -
ARM
+關(guān)注
關(guān)注
134文章
9179瀏覽量
369425 -
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307957 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
306瀏覽量
23847
原文標(biāo)題:針對(duì)嵌入式處理器的可配置LLDB底層調(diào)試器都有哪些絕活兒?
文章出處:【微信號(hào):Codasip 科達(dá)希普,微信公眾號(hào):Codasip 科達(dá)希普】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于SoPC的通用在線(xiàn)調(diào)試器設(shè)計(jì)
如何設(shè)置VS代碼配置來(lái)調(diào)試嵌入式處理器
![如何設(shè)置VS代碼<b class='flag-5'>配置</b>來(lái)<b class='flag-5'>調(diào)試</b><b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>](https://file1.elecfans.com/web2/M00/B4/66/wKgZomVulFSAb4ohAAAXycng_DI620.png)
基于嵌入式調(diào)試器的網(wǎng)絡(luò)通信方法設(shè)計(jì)與實(shí)現(xiàn)
嵌入式系統(tǒng)軟件開(kāi)發(fā)環(huán)境中調(diào)試器的設(shè)計(jì)
基于DCC和JTAG的ARM硬件仿真調(diào)試器的研究與實(shí)現(xiàn)
飛思卡爾推出針對(duì)其嵌入式多核處理器的應(yīng)用軟件模塊
一個(gè)針對(duì)FPGA的完全可配置嵌入式32位RISC處理器
![一個(gè)<b class='flag-5'>針對(duì)</b>FPGA的完全<b class='flag-5'>可配置</b><b class='flag-5'>嵌入式</b>32位RISC<b class='flag-5'>處理器</b>](https://file1.elecfans.com//web2/M00/A5/58/wKgZomUMOAGAdm8yAAB9z_mS7wI884.jpg)
基于可配置處理器的嵌入式系統(tǒng)ESL設(shè)計(jì)需求
嵌入式處理器在片調(diào)試功能的設(shè)計(jì)
![<b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>在片<b class='flag-5'>調(diào)試</b>功能的設(shè)計(jì)](https://file.elecfans.com/web2/M00/49/02/pYYBAGKhtDOAJw-zAAAS0u6p-qA937.jpg)
基于SOPC的M8051嵌入式調(diào)試器設(shè)計(jì)
![基于SOPC的M8051<b class='flag-5'>嵌入式</b><b class='flag-5'>調(diào)試器</b>設(shè)計(jì)](https://file1.elecfans.com//web2/M00/A6/56/wKgZomUMPPeAJvY9AAAM3Aj6VHU898.jpg)
32位ARM嵌入式處理器的調(diào)試技術(shù)
利用Xtensa可配置處理器加速嵌入式算法的性能和增強(qiáng)系統(tǒng)的靈活性
![利用Xtensa<b class='flag-5'>可配置</b><b class='flag-5'>處理器</b>加速<b class='flag-5'>嵌入式</b>算法的性能和增強(qiáng)系統(tǒng)的靈活性](https://file.elecfans.com/web1/M00/BB/12/pIYBAF6frfKAdd6VAAECBYcnUME913.png)
嵌入式處理器
![<b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式處理器
![<b class='flag-5'>嵌入式</b><b class='flag-5'>處理器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論