• 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节)。

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

  • 相关阅读:
    实用工具系列 - Pycharm插件推荐
    vue 在使用post提交json数据、表单数据,object数据,解决方案
    golang操作zookeeper
    JAVA开发中常用RDMS
    C语言——二周目——程序的翻译与执行环境
    python分享之读取xml文件
    C++入门第八篇---STL模板---list的模拟实现
    云计算时代改变了什么?
    使用四则运算实现异或
    项目流程管理效率提升的3个核心点
  • 原文地址:https://blog.csdn.net/weixin_38498942/article/details/126030467