如何强制 IAR 链接器保留未使用的函数?
How to force IAR linker to keep unused functions?
我正在测试为 Renesas RL78 微控制器编写的 C 语言软件。该软件仍在开发中,因此有些功能已实现但尚未调用。结果,链接器消除了此类函数,链接器在清单中输出以下条目:
CODE
Segment part 42. NOT NEEDED.
LOCAL ADDRESS
===== =======
function_name
我的目标是在目标系统上执行这些功能的单元测试,因此我需要代码出现在输出 ELF 文件中。我怎样才能告诉链接器保留未使用的功能?我已经尝试将优化级别设置为 None,并将模块类型设置为 Program 或 Library。我还定义了一个名为 CODE
的代码段。所有这些操作都没有对链接器输出产生预期的影响。
我不能修改源代码(从技术上讲,我可以修改所有我想要的,但我不能提交任何东西),所以从 main()
调用我需要的所有函数不是一个选项。
我找到了相关的 tech note,建议如下:
- IAR XLINK Linker -g option
- IAR ILINK Linker --keep option
- use the REQUIRE keyword in assembler
- use the __root extension keyword
因为我使用 xlink
,所以我尝试了第一个选项并且它有效。这是选项快速参考:
-gsymbol1[,symbol2,symbol3,…] Requires global entries
IDE 中的选项设置方式如下:
并且由于 M.M 询问我如何对未被其余代码调用的函数进行单元测试,这里是我的调试器的屏幕截图。基本上,一旦到达主循环,它就会停止目标,为函数创建一个人工堆栈框架并调用它。
我正在测试为 Renesas RL78 微控制器编写的 C 语言软件。该软件仍在开发中,因此有些功能已实现但尚未调用。结果,链接器消除了此类函数,链接器在清单中输出以下条目:
CODE
Segment part 42. NOT NEEDED.
LOCAL ADDRESS
===== =======
function_name
我的目标是在目标系统上执行这些功能的单元测试,因此我需要代码出现在输出 ELF 文件中。我怎样才能告诉链接器保留未使用的功能?我已经尝试将优化级别设置为 None,并将模块类型设置为 Program 或 Library。我还定义了一个名为 CODE
的代码段。所有这些操作都没有对链接器输出产生预期的影响。
我不能修改源代码(从技术上讲,我可以修改所有我想要的,但我不能提交任何东西),所以从 main()
调用我需要的所有函数不是一个选项。
我找到了相关的 tech note,建议如下:
- IAR XLINK Linker -g option
- IAR ILINK Linker --keep option
- use the REQUIRE keyword in assembler
- use the __root extension keyword
因为我使用 xlink
,所以我尝试了第一个选项并且它有效。这是选项快速参考:
-gsymbol1[,symbol2,symbol3,…] Requires global entries
IDE 中的选项设置方式如下:
并且由于 M.M 询问我如何对未被其余代码调用的函数进行单元测试,这里是我的调试器的屏幕截图。基本上,一旦到达主循环,它就会停止目标,为函数创建一个人工堆栈框架并调用它。