【发布时间】:2021-03-21 17:50:10
【问题描述】:
在 C 语言中,我们可以强制链接器将特定函数放在源代码的特定部分中,使用类似于以下示例的内容。
这里,函数my_function 用预处理器宏PUT_IN_USER_SECTION 标记,以便告诉链接器将其放入.user_section 部分。
#define PUT_IN_USER_SECTION __attribute__((__section__(".user_section"))) __attribute__ ((noinline))
double PUT_IN_USER_SECTION my_function(double a, double b)
{
// Function content
}
现在,我想知道的是,当我们使用 GLIBC、MUSL 中的标准函数(例如来自 math.h 库的日志函数)时,我们执行静态链接:是否可以把这些功能放在特定的部分?以及如何做到这一点?
【问题讨论】:
-
为什么不只是
objcopy? -
@KamilCuk 我想过,但是,默认情况下(使用 gcc + musl + 静态链接)数学函数包含在
.text部分中。例如,如何仅隔离数学函数? -
好吧,您可以列出所有数学函数(连同
nm libm.a)并使用--function-sections进行编译,然后使用objcopy将所有.text.math_function_name移动到其他部分。但是为什么不使用链接描述文件呢?我猜是链接器脚本中的section { *libm.a:(.text) }。