使用 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]