如何强制 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,并将模块类型设置为 ProgramLibrary。我还定义了一个名为 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 询问我如何对未被其余代码调用的函数进行单元测试,这里是我的调试器的屏幕截图。基本上,一旦到达主循环,它就会停止目标,为函数创建一个人工堆栈框架并调用它。