• Hexagon_V65_Programmers_Reference_Manual(11)


    8.软件栈

    Hexagon处理器包括支持呼叫的专用寄存器和指令

    子程序执行堆栈。

    堆栈结构遵循标准C约定

    8.1 栈结构

    堆栈定义为从高地址增长到低地址。堆栈指针寄存器SP指向当前位于堆栈顶部的数据元素。
    f8-1
    注意,Hexagon处理器支持三个专用堆栈指令:

    allocframe、deallocframe和Deallocu_返回(第8.5节)。

    对于堆栈指令,SP地址必须始终保持8字节对齐正常工作。

    8.2 栈框架

    堆栈用于存储堆栈帧,堆栈帧是存储状态的数据结构

    关于程序中活动子程序的信息(即那些被调用但具有

    尚未返回)。每个堆栈帧对应于程序中的一个活动子例程。

    堆栈框架包含以下元素:

    • 子程序使用的局部变量和数据

    • 子程序调用的返回地址(从链接寄存器LR推送)

    • 在堆栈上分配的上一个堆栈帧的地址(从帧指针寄存器FP)

    帧指针寄存器FP始终包含中保存的帧指针的地址当前堆栈帧。它通过允许调试器检查堆栈在内存中,可以轻松确定调用序列、函数参数等。

    注意:对于叶函数,通常不需要保存FP和LR。在这种情况下,FP包含调用函数的帧指针,而不是当前函数。

    8.3 堆栈保护

    Hexagon V6x处理器支持以下功能,以保护软件堆栈:

    • 堆栈边界检查

    • 堆叠粉碎保护

    8.3.1堆栈边界检查

    堆栈边界检查可防止堆栈帧被分配超过下限软件堆栈的边界。

    FRAMELIMIT是一个32位控制寄存器,它存储指定为软件堆栈保留的内存区域的下限。当allocframe指令分配一个新的堆栈帧,它将SP中的新堆栈指针值与FRAMELIMIT中的堆栈绑定值。如果SP小于FRAMELIMIT,则Hexagon 处理器引发异常0x27(第7.10节)。

    注意:当处理器处于用户和来宾状态时,将执行堆栈边界检查模式,但不在监视器模式下。

    8.3.2 堆栈边界检查

    堆栈边界检查可防止堆栈帧被分配超过下限软件堆栈的边界。

    FRAMELIMIT是一个32位控制寄存器,它存储指定为软件堆栈保留的内存区域的下限。当allocframe指令分配一个新的堆栈帧,它将SP中的新堆栈指针值与FRAMELIMIT中的堆栈绑定值。如果SP小于FRAMELIMIT,则Hexagon 处理器引发异常0x27(第7.10节)。

    注意:当处理器处于用户和来宾状态时,将执行堆栈边界检查模式,但不在监视器模式下。

  • 相关阅读:
    练习7-在Verilog中使用任务task
    [每周一更]-(第13期):灰度测试的解释说明
    Python分享之多进程探索 (multiprocessing包)
    【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇
    c++builder 6.0 安装xpmenu3.0组件
    商标复审的流程和材料?
    LeetCode——贪心篇(三)
    一次性能测试,为啥把我逼疯了?
    行业报告 | 智慧三角:长三角掀起AI产业热潮
    人工神经网络与遗传算法,遗传算法和神经算法
  • 原文地址:https://blog.csdn.net/weixin_38498942/article/details/126030467