当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-09-28 15:53:19 622观看
导读1.前言.Net CLR主线合并的部分Risc-v,龙芯,ARM代码。当然ARM一直是主力支持的,这里主要是Risc-V和龙芯。通过UnwindCode看下。2.概述UnwindCode这个东西,主要是通过一些二进制代码描述一些机器码含义,然后对其进行相应的操

1.前言

.Net CLR主线合并的部分Risc-v,龙芯,ARM代码。当然ARM一直是主力支持的,这里主要是Risc-V和龙芯。通过UnwindCode看下。uvP28资讯网——每日最新资讯28at.com

2.概述

UnwindCode这个东西,主要是通过一些二进制代码描述一些机器码含义,然后对其进行相应的操作。
我们通过lldb来看下这些操作的内容:uvP28资讯网——每日最新资讯28at.com

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

内容如下:uvP28资讯网——每日最新资讯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里面是什么uvP28资讯网——每日最新资讯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。uvP28资讯网——每日最新资讯28at.com

下面是UnwindCode成员意义:
CodeOffset表示机器码的长度。UnwindOp表示对是枚举类型_UNWIND_OP_CODES,表示机器码指令,比如UWOP_ALLOC_SMALL表示分配小对象栈空间(sub指令),UWOP_PUSH_NONVOL(push指令)。OpInfo则表示机器操作数。
看下两个UnwindCode的结构uvP28资讯网——每日最新资讯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。uvP28资讯网——每日最新资讯28at.com

OpInfouvP28资讯网——每日最新资讯28at.com

if (OpInfo == kRBP)

那么这个指令就很明显了uvP28资讯网——每日最新资讯28at.com

push rbpsub  rsp_80

OK,以上是UnwindCode解析,下面来看下UnwindCode对于Risc-V和龙芯的这次hi。uvP28资讯网——每日最新资讯28at.com

Risc-v和龙芯

在它进行赋值完成之后,也即是:uvP28资讯网——每日最新资讯28at.com

memcpy(pUnwindInfoRW, pUnwindBlock, unwindSize);

它总共有五个target,也就是指令集,分别为:amd64,arm64/arm,la64,riscv64uvP28资讯网——每日最新资讯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是或上uvP28资讯网——每日最新资讯28at.com

UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER;

而其他的三个则是:uvP28资讯网——每日最新资讯28at.com

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

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: WPF中WCF应用实例

下一篇: 为什么我们不擅长 CSS,看完这篇你就知道啦!

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。&ldquo;提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top