.ref 伪操作

用途

在重定位表中为一个或多个符号创建 R_REF 类型条目。

语法

.ref 姓名[,姓名...]

描述

.ref 伪操作支持在同一位置中创建多个 RLD 项。 此 psuedo-op 在某些编译器的输出中使用,以确保链接编辑器不会废弃在文本或数据节中使用但未显式引用的例程。

例如,在 C + + 中,构造函数和析构函数用于构造和破坏类对象。 有时仅从运行时环境中调用构造函数和析构函数,而不会在文本部分中进行任何显式引用。

下列规则适用于 .ref 伪操作在源程序中的位置:

  • .ref 伪操作不能包含在具有 BS 或 UC 的存储器映射类的 dsect 或 csect 中。
  • .ref 伪操作不能包含在公共部分或局部公共部分中。

以下规则应用于 .ref 伪操作 ( 姓名 参数) 的操作数:

  • 必须在当前源模块中定义该符号。
  • 如果外部符号由 .extern.globl定义,那么可以使用这些符号。
  • 在当前源模块中,符号可以是 csect 名称 (表示高名称) 或在 csect 中定义的标签。
  • 不能将下列符号用于 .ref 操作数:
    • pseudo-op .dsect 名称
    • 在 dsect 中定义的 标签
    • 存储映射类为 BS 或 UC 的 csect 名称
    • 在具有存储映射类 BS 或 UC 的 csect 中定义的 标签
    • pseudo-op .set 姓名 操作数,表示不可重定位的表达式类型

参数

描述
名称 指定应该为其在重定位表中创建 R_REF 类型条目的符号。

示例

以下示例演示了如何使用 .ref 伪操作:


       .csect a1[pr]
C1:    l 10, 20(20)
       .long  0xff
       .csect  a2[pr]
       .set   r10,10
       .extern C4
C2:    .long   10
C3:    .long   20
       .ref C1,C2,C3
       .ref C4