【问题标题】:Include standard library functions in a specific memory section在特定的内存部分中包含标准库函数
【发布时间】: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) }

标签: c gcc linker glibc musl


【解决方案1】:
猜你喜欢
  • 2017-01-06
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2023-03-09
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多