ZHCADC4A September 2011 – March 2014
所有非自动或动态的变量都被视为静态数据;也就是说,具有 C 存储类 extern 或 static 的变量,其地址在(静态或动态)链接时确定。这些变量根据其属性被分配到各个段中,然后组合成一个或多个静态数据段。
指定为 DP 相对段 的数据段使用 DP 相对寻址进行寻址。在进入加载模块中的任何代码时,DP 会被初始化以指向加载模块中具有最低地址的 DP 相关段的进程私有副本。链接器定义符号 _ _C6000_DSBT_BASE 以指向该地址。
DP 相对寻址有两种形式。当 DP 相对偏移量可以作为 15 位无符号常量编码到单个指令中时,适用 Near DP 相对寻址。当无法编码到单个指令中,而需要额外的指令时,则适用 Far DP 相对寻址。使用 near 形式对变量进行寻址时,变量的放置限制在 DP 的 32KB 范围内。
DP 相对段由程序头文件中的 PF_C6000_DPREL 标志标识(请参阅节 14.1)。
某些平台(尤其是 Linux)可能会将加载模块限制为具有不超过一个 DP 相关段。
包含静态变量的其他数据段称为绝对数据段,并使用绝对寻址或基于 GOT 的寻址进行寻址。它们的数量、大小或放置位置没有限制。
如果程序是动态链接的并且具有共享库,则每个加载模块的数据段都独立于其他加载模块的数据段。具体来说,每个加载模块都有自己的数据段,包括 DP 相对段,因此也有自己的 DP。如果多个可执行文件共享一个库,则每个可执行文件都将获得该库中数据段的私有副本。在没有虚拟地址转换的情况下用于管理多个数据段的模型称为 DSBT 模型,如 节 6.7中所述。