日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

.Net JIT支持的Risc-V/La/Arm

來源: 責編: 時間:2023-09-28 15:53:19 522觀看
導讀1.前言.Net CLR主線合并的部分Risc-v,龍芯,ARM代碼。當然ARM一直是主力支持的,這里主要是Risc-V和龍芯。通過UnwindCode看下。2.概述UnwindCode這個東西,主要是通過一些二進制代碼描述一些機器碼含義,然后對其進行相應的操

1.前言

.Net CLR主線合并的部分Risc-v,龍芯,ARM代碼。當然ARM一直是主力支持的,這里主要是Risc-V和龍芯。通過UnwindCode看下。kZo28資訊網——每日最新資訊28at.com

2.概述

UnwindCode這個東西,主要是通過一些二進制代碼描述一些機器碼含義,然后對其進行相應的操作。
我們通過lldb來看下這些操作的內容:kZo28資訊網——每日最新資訊28at.com

(lldb) b RunMainInternal(lldb) r(lldb) b allocUnwindInfo(lldb) c(lldb) source info(lldb) b jitinterface.cpp:11232(lldb) c

內容如下:kZo28資訊網——每日最新資訊28at.com

lldb) cProcess 58851 resumingProcess 58851 stopped* thread #1, name = 'clrrun', stop reason = breakpoint 6.1    frame #0: 0x00007ffff6e676c7 libcoreclr.so`CEEJitInfo::allocUnwindInfo(this=0x00007fffffffaf70, pHotCode="UH/x83/xecPH/x8dl$P/xc4A8W/xc0/xc5y/U0000007fE/xc0/xc5y/U0000007fE/xd0/xc5y/U0000007fE/xe03/xc0H/x89E/xf0H/x89}/xf8/x83=/xa9/xf3/U0000001d", pColdCode=0x0000000000000000, startOffset=0, endOffset=395, unwindSize=8, pUnwindBlock="/U00000001/U00000005/U00000002", funcKind=CORJIT_FUNC_ROOT) at jitinterface.cpp:11232:5   11229      }   11230  #endif // _DEBUG   11231  -> 11232      memcpy(pUnwindInfoRW, pUnwindBlock, unwindSize);

我們看到它是一個memcpy的賦值。看下pUnwindInfoRW里面是什么kZo28資訊網——每日最新資訊28at.com

(lldb) n(lldb) p/x *pUnwindInfoRW(UNWIND_INFO) $6 = {  Version = 0x01  Flags = 0x00  SizeOfProlog = 0x05  CountOfUnwindCodes = 0x02  FrameRegister = 0x00  FrameOffset = 0x00  UnwindCode = {    [0] = {       = (CodeOffset = 0x05, UnwindOp = 0x02, OpInfo = 0x09)      EpilogueCode = (OffsetLow = 0x05, UnwindOp = 0x02, OffsetHigh = 0x09)      FrameOffset = 0x9205    }  }}

CountOfUnwindCodes表示總共有兩個UnwindCode。kZo28資訊網——每日最新資訊28at.com

下面是UnwindCode成員意義:
CodeOffset表示機器碼的長度。UnwindOp表示對是枚舉類型_UNWIND_OP_CODES,表示機器碼指令,比如UWOP_ALLOC_SMALL表示分配小對象棧空間(sub指令),UWOP_PUSH_NONVOL(push指令)。OpInfo則表示機器操作數。
看下兩個UnwindCode的結構kZo28資訊網——每日最新資訊28at.com

(lldb) p/x pUnwindInfoRW->UnwindCode[0](UNWIND_CODE) $12 = {   = (CodeOffset = 0x05, UnwindOp = 0x02, OpInfo = 0x09)  EpilogueCode = (OffsetLow = 0x05, UnwindOp = 0x02, OffsetHigh = 0x09)  FrameOffset = 0x9205}(lldb) p/x pUnwindInfoRW->UnwindCode[1](UNWIND_CODE) $13 = {   = (CodeOffset = 0x01, UnwindOp = 0x00, OpInfo = 0x05)  EpilogueCode = (OffsetLow = 0x01, UnwindOp = 0x00, OffsetHigh = 0x05)  FrameOffset = 0x5001}(lldb) p/x pUnwindInfoRW->UnwindCode[2](UNWIND_CODE) $14 = {   = (CodeOffset = 0x00, UnwindOp = 0x00, OpInfo = 0x00)  EpilogueCode = (OffsetLow = 0x00, UnwindOp = 0x00, OffsetHigh = 0x00)  FrameOffset = 0x0000}

第三個索引它就為零,確實是是兩個。它的Unwindop分別是0x02和0x00.這分別代表了:UWOP_ALLOC_SMALL和UWOP_PUSH_NONVOL.也即機器碼:sub和push。它的OpInfo分別為:0x09和0x05。分別代表了操作機器碼:8* 9+8以及rbp。kZo28資訊網——每日最新資訊28at.com

OpInfokZo28資訊網——每日最新資訊28at.com

if (OpInfo == kRBP)

那么這個指令就很明顯了kZo28資訊網——每日最新資訊28at.com

push rbpsub  rsp_80

OK,以上是UnwindCode解析,下面來看下UnwindCode對于Risc-V和龍芯的這次hi。kZo28資訊網——每日最新資訊28at.com

Risc-v和龍芯

在它進行賦值完成之后,也即是:kZo28資訊網——每日最新資訊28at.com

memcpy(pUnwindInfoRW, pUnwindBlock, unwindSize);

它總共有五個target,也就是指令集,分別為:amd64,arm64/arm,la64,riscv64kZo28資訊網——每日最新資訊28at.com

#elif defined(TARGET_AMD64)    pUnwindInfoRW->Flags = UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER;#elif defined(TARGET_ARM64)    *(LONG *)pUnwindInfoRW |= (1 << 20); // X bit#elif defined(TARGET_ARM)    *(LONG *)pUnwindInfoRW |= (1 << 20); // X bit#elif defined(TARGET_LOONGARCH64)    *(LONG *)pUnwindInfoRW |= (1 << 20); // X bit#elif defined(TARGET_RISCV64)    *(LONG *)pUnwindInfoRW |= (1 << 20); // X bit#endif

我們看到.Net的主線當中支持的Risc-v和La64,這里和x64的區別就在于,x64是pUnwindInfoRW的flag是或上kZo28資訊網——每日最新資訊28at.com

UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER;

而其他的三個則是:kZo28資訊網——每日最新資訊28at.com

*(LONG *)pUnwindInfoRW |= (1 << 20);

本文鏈接:http://www.www897cc.com/showinfo-26-11911-0.html.Net JIT支持的Risc-V/La/Arm

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: WPF中WCF應用實例

下一篇: 為什么我們不擅長 CSS,看完這篇你就知道啦!

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 跑分安卓第一!Redmi K60至尊版8月發布!盧偉冰:目標年度性能之王

    8月5日消息,Redmi K60至尊版將于8月發布,在此前舉行的戰略發布會上,官方該機將搭載搭載天璣9200+處理器,安兔兔V10跑分超177萬分,是目前安卓陣營最高的分數
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 三言兩語說透設計模式的藝術-單例模式

    寫在前面單例模式是一種常用的軟件設計模式,它所創建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統中的其他對象共享,從而減少
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • iQOO Neo8系列或定檔5月23日:首發天璣9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列機型,不僅搭載了天璣9000+,而且是同價位唯一一款天璣9000+直屏旗艦,一經上市便受到了用戶的廣泛關注。在時隔半年后,
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 黑河市| 石阡县| 高碑店市| 宽城| 读书| 西华县| 彝良县| 武汉市| 香港| 崇义县| 晋城| 德州市| 宁陕县| 柳林县| 溧阳市| 普兰店市| 仙居县| 长白| 米易县| 延庆县| 容城县| 石家庄市| 镇沅| 张家界市| 达州市| 彭州市| 剑阁县| 友谊县| 丹阳市| 潞城市| 大姚县| 乌兰浩特市| 万载县| 长沙市| 安仁县| 和田县| 莎车县| 莱芜市| 团风县| 南和县| 巩留县|