1

我正在编写用于调试 Cortex-M 的工具,并且在查看.debug_infoarmcc 为某些 C 源代码输出的 DWARF 部分时发现了一个伪像。(确切的编译器是 ARM Compiler 5.05。)

例如,当 C 源代码包含一个简单的函数时,例如:

int function(int a)
{
    int x;
    int y;

我发现.debug_info按预期描述了 x 和 y 局部变量,另外还有一个“隐藏变量” __result,如下所示:

<2><218>: Abbrev Number: 94 (DW_TAG_variable)
  <219>   DW_AT_name        : __result
  <222>   DW_AT_type        : DW_FORM_ref2 <0x188>
  <225>   DW_AT_location    : 1 byte block: 50  (DW_OP_reg0 (r0))
  <227>   DW_AT_start_scope : 64
  <228>   DW_AT_artificial  : 1

这个“变量”的“隐藏”性质的线索,就是DW_AT_artificial标志的存在。

我已经阅读了有关该DW_AT_artificial标志的 DWARF 文档,这被怀疑所证实。我还通过实验推断出这个特性与这个函数的返回值有关,因为这个“变量”没有出现在void类型函数的 DWARF 中。

我找不到armcc工具链设计者所期望的对该实体使用的任何确认。谁能详细说明我的发现的含义和用途?

4

0 回答 0