首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链路双重定向(IAR EWARM)

链路双重定向(IAR EWARM)
EN

Stack Overflow用户
提问于 2019-06-03 02:03:49
回答 1查看 281关注 0票数 2

我有一个IAR STM32项目,需要用一些自定义逻辑包装库函数。我无法重新编译库本身,所以我想要做的是创建一个函数libfunction_shim,该函数调用原始的libfunction。使用--redirect链接器选项(--redirect libfunction=libfunction_shim),我可以将对原始函数的调用重定向到shim,包括库本身内的调用。但是,我需要从垫片中调用原始函数。

如果我添加另一个重定向(--redirect libfunction_original=libfunction),它最终会将libfunction_original重定向到libfunction_shim,而不是原来的libfunction。我试过重新排序重定向,但是不管顺序如何,它都会做同样的事情。

链接器日志演示了这一点:

代码语言:javascript
复制
Symbol                     Redirected to          Reason        
-------------              ------                 ------
...
libfunction                libfunction_shim       command line  
libfunction_original       libfunction_shim       command line

我想要的是:

代码语言:javascript
复制
Symbol                     Redirected to          Reason        
-------------              ------                 ------
...
libfunction                libfunction_shim       command line  
libfunction_original       libfunction            command line

用链接器可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 08:14:51

使用链接器重定向是不可能的,您必须以特定的方式编写您的shim函数。手册中提供了完整的描述( 8.40.1版本中的第225页),但总括而言:首先您可以将shim命名为$sub$$libfunction,其中libfunction是要阴影的函数的名称。在shim内部,您可以使用$super$$libfunction调用libfunction的原始版本。下面是一个最小的例子。

代码语言:javascript
复制
extern void $Super$$foo(void);

void $Sub$$foo(void)
{
  $Super$$foo(); /* calls the original foo() function */
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56420356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档