ZHCADC4A September 2011 – March 2014
以下代码序列说明了导出函数如何通过编制索引到其调用方的 DSBT 来更改 DP 以指向其数据区段。任何更改 DP 的函数都有责任在返回时恢复 DP(DP 是由被调用方保存的)。
设置 DP 的进入序列
func:
MV DP,somewhere ;typically the stack
LD *+DP[$DSBT_index(func)],DP ;reloc R_C6000_DSBT_INDEX
; body of function
表达式 $DSBT_index(func) 计算当前对象的唯一库索引,并生成特殊重定位来指示这一点。将在静态链接时或动态绑定索引。
退出序列
MV somewhere, DP
RET
退出序列仅恢复调用方的 DP。
如果导出函数不使用任何 DP 相对寻址,并且不调用任何使用 DP 相对寻址的函数,则可选择不更改 DP。