首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么processor_t::egalize_privilege(ret_t prv)返回PRV_U if (prv == PRV_HS维珍(prv == PRV_S &&!supports_extension(‘S’)

为什么processor_t::egalize_privilege(ret_t prv)返回PRV_U if (prv == PRV_HS维珍(prv == PRV_S &&!supports_extension(‘S’)
EN

Stack Overflow用户
提问于 2021-07-19 03:22:59
回答 1查看 32关注 0票数 0

我无法理解legalize_privilege()中的源代码,如下所示:

代码语言:javascript
复制
reg_t processor_t::legalize_privilege(reg_t prv)
{
  if (!supports_extension('U'))
    return PRV_M;

  if (prv == PRV_HS || (prv == PRV_S && !supports_extension('S')))
    return PRV_U;
 //according to my understanding, HS mode actually works in Supervisor mode. So PRV_S should be returned here.
  return prv;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 16:55:27

PRV_HS仅用作模拟器中用于CSR权限检查的虚拟特权级别。

在H-扩展规范中,HS-模式取代了S-模式(级别1).

整数值2用于PRV_HS,以区别于PRV_S,但这是RISC特权体系结构(ISA手册第2卷§1.2特权级别)中的保留值,H-扩展不使用该值。

因此,实际设置此模式是非法的。若要设置HS或S模式,请始终使用PRV_S

在同样的情况下,您还可以看到,如果S扩展不受支持,则设置S模式是非法的。

这两种情况都是非法的,因此特权级别被强制到最低级别,即PRV_U

PRV_HS的唯一用途是在processor_t::get_csr (这里)的权限检查段(这里)中,如果处理器没有处于虚拟状态(如processor_t::set_virt设置),则使用它来代替PRV_S来允许对Hypervisor CSR的访问。

这是因为CSR地址编码了BIT9:8中访问所需的最低特权级别,BIT9:8定义为Hypervisor CSR的10b = 2,尽管没有这样不同的特权级别(ISA手册第2卷§2.1CSR地址映射约定)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68434777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档