【发布时间】:2020-08-21 04:05:07
【问题描述】:
构建完成后,我在映射文件中发现了 (i.function name) 部分。
================================================ =======
例如)
[foo1.h] // 内联函数定义和声明
__forceinline UINT32 func1(VOID) { ... }
[foo2.cpp] // 使用内联函数
#include "foo1.h"
UINT32 func2(VOID) { ... 函数1(); // 编译时非内联 }
[地图文件]
foo2.o(.text) 指的是 func1 的 foo2.o(i.func1)
================================================ =======
映射文件中的典型部分如下所示:(.text), (.ARM.exidx), (.data), (.constdata), (.bss), (USER Defined Section Name), ...
经过几次构建测试,我猜 (i.function name) 部分会出现在定义 inline 但编译器不应用 inline 的函数在目标文件中制作 AREA 符号以制作行外版本时。而这样的函数位于 (i.function name) 部分。如果所有内联函数都是内联的,则没有符号或(i.function name)部分。
为什么非内联应用的内联函数位于该部分?(不是.text?)
(i.function name) 部分的确切含义是什么?
我查阅了以下文档,但无法得到我想要的关于内容的答案。
- ARM 编译器用户指南、ARM 编译器参考指南、ARM Link 用户指南、ARMCC 用户指南、用于 ARM 架构的 ELF
【问题讨论】: