ZHCU947E June 2015 – January 2023
标识一个符号,将其作为弱符号处理
.weak symbol name
.weak 指令用于标识在当前模块中使用但在另一模块中定义的符号。链接器在链接时解析此符号的定义。如果某弱符号需要解析某以其他方式未解析的引用,链接器不会默认在输出文件的符号表中包含该弱符号(就像全局符号那样),而只会在“最终”链接的输出中包含该弱符号。有关链接器如何处理弱符号的详细信息,请参阅GUID-984C4B6D-1F98-4621-B64B-B9EF2B72F31C.html#GUID-984C4B6D-1F98-4621-B64B-B9EF2B72F31C。
.weak 指令等同于 .ref 指令,只是引用具有弱链接。
.weak 指令始终为一个符号创建符号表条目,无论模块是否使用该符号。而 .symdepend 指令只在模块实际使用某符号时才为其创建符号表条目(请参阅 .symdepend 主题)。
如果某符号并未在当前模块中定义(当前模块包括宏文件、副本文件和包含文件),则使用 .weak 指令指示汇编器:该符号在外部模块中定义。这可防止汇编器发出未解析的引用错误。链接时,链接器会在其他模块中查找该符号的定义。
例如,如以下示例所示组合使用 .weak 和 .set 指令来定义弱绝对符号“ext_addr_sym”:
.weak ext_addr_sym
ext_addr_sym .set 0x12345678
如果汇编此汇编源代码,并在链接中包含生成的目标文件,本例中的“ext_addr_sym”可用作最终链接中的弱绝对符号。如果应用中的其他位置未引用该符号,它会成为候选的删除对象。