我需要一个符号作为此问题中描述alias
的函数的别名,但对于IAR编译器/链接器而言。我已经尝试过GCC的答案,但是显然这些都不起作用:function
// source code
void alias(void) __attribute__ ((alias ("function")));
Error[Pe130]: expected a "{" C:\project\test.c 61
void alias(void) asm("function");
Error[Pe065]: expected a ";" C:\project\test.c 61
#pragma weak alias=function
Error[e46]: Undefined external "alias" referred in ?ABS_ENTRY_MOD ( )
// linker options:
-Dalias=function
Fatal Error[e163]: The command line symbol "function" in -Dalias=function is not defined.
有谁知道如何在IAR / Xlink中定义函数别名?
一些背景知识:我负责在多个项目中使用的模块。为了对其进行测试,我为testIDEA工具开发了测试用例,该工具可以在某些断点处验证断言。然而,一些常见的功能在不同的项目,不同的名称(如初始化函数可以调用init()
,init_mcu()
,startup()
等),所以每次我的模块集成在一个新的项目的时候,我要修改我的测试案例,以符合新的函数名。相反,我想test_init()
为调用init函数定义一个通用别名(例如),以便我的测试用例始终可以使用该通用名称设置断点。我希望该符号可以将其放入ELF文件,调试器可以在该文件中看到它。
在仔细研究了xlink
选项之后,我发现了一种可以满足我的需求的选项:
-e -enew = old [,old]…
使用-e在链接时通过将一个函数调用从一个函数重定向到另一个函数来配置程序。
这也可以用于创建存根函数。即,当系统尚未完成时,可以将未定义的函数调用定向到虚拟例程,直到编写了实函数为止。
我最终得到了这段代码:
void alias(void) {
// copy the body of function()
}
// Linker parameters
-ealias=function
这重定向到所有呼叫function()
到alias()
,无论实际的名称function
了。当然这是一个丑陋的破解,因为我必须复制代码,但是我得到了我想要的:我可以alias()
按名称设置断点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句