【问题标题】:What's the meaning of (i.function name) section in ARMCC (C++)?ARMCC(C++)中(i.function name)部分的含义是什么?
【发布时间】: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

【问题讨论】:

    标签: c++ arm inline armcc


    【解决方案1】:

    当包含标志--split_sections (see here) 时,编译器将为每个函数生成一个节,该标记是节i.functionName 的指定名称。

    请注意,由于缺少与共享资源相关的潜在优化,此标志可能会增加代码的大小。

    另一方面,inline 将(来自wikipedia):

    如果需要,发出一个在翻译单元之间共享的函数,通常将其放入需要它的目标文件的公共部分

    因此,在没有任何控制(或彼此限制)的情况下,两者一起可能最终导致调用错误的段。

    【讨论】:

      猜你喜欢
      • 2019-12-18
      • 2013-12-31
      • 2015-07-14
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2013-03-26
      相关资源
      最近更新 更多