使用 te storage-mapping 类通过 toc 条目访问数据

TE 存储器-映射类用于访问外部数据。

与 TC 存储映射类的情况一样, TE 存储映射类可以用于访问外部数据。 通过首先从 TOC 装入外部数据项的地址,然后使用该地址来获取数据,可以访问该外部数据项。 为了避免生成 TOC 溢出代码,将从 TOC 装入 TE 符号,并使用两个指令序列,如以下示例中所示:

       .toc
       .tc      a[TE],a[RW]

       .extern  a[RW]
       .csect   prog1[PR]
       ...
       addis    3,a[TE](2)       # R_TOCU relocation used by default.
       ld       5,a[TE](3)       # R_TOCL relocation used by default.
       # Now GPR5 contains the address of a[RW]
从 TOC 装入 a[TE] 的两个指令不必是顺序的,但不允许向引用的符号添加偏移量。 例如, ld 指令不能如下所示:

       ld       5,a[TE]+8(3)       # Invalid reference
可单独选择存储映射类和 R_TOCU 和 R_TOCL 重定位类型。 例如, a[TE] 可用作具有以下指令的常规 TOC 符号:

       ld       5,a[TE]@tc(2)       # GPR5 contains the address of a[RW]
双指令序列还可以与先前示例中的 a[TC] 配合使用:

       addis    5,a[TC]@u(2)
       ld       5,a[TC]@l(5)       # GPR5 contains the address of a[RW]