ZHCADC4A September 2011 – March 2014
如果调用目标是在同一静态链接单元中定义的,但使用 21 位字偏移量是无法到达,静态链接器就会生成蹦床函数,它是一个使用备用寻址形式来到达目标的存根函数。该示例说明了使用绝对寻址的蹦床函数:(2)
$Tramp$$sym2:
MVKL sym,tmp ;reloc R_C6000_ABS_L16
MVKH sym,tmp ;reloc R_C6000_ABS_H16
B tmp
或者,蹦床函数可使用 节 5.1 中所述的其他寻址形式来计算目标函数的地址。
如果未在同一静态链接单元中定义调用目标,静态链接器就会生成一个类似于蹦床函数的 PLT 条目。节 6.5 介绍了这种情况。
根据所使用的寻址,蹦床函数通常需要一两个临时寄存器(例如前一个序列中的 tmp)。
对于 C64x 和较新的目标,B30 和 B31 可供任何蹦床函数使用。防止调用方假设 B30 和 B31 由调用保留,即使已知所调用函数不能修改它们(请参阅 节 3.7)。
对于较旧的 C62 和 C67 目标,蹦床函数必须保存和恢复它们使用的任何寄存器。