armcc DWARF调试信息中隐藏的__result局部变量

时间:2018-01-31 06:52:17

标签: arm dwarf armcc

我正在编写用于调试Cortex-M的工具,我在查看armcc为某些C源输出的DWARF .debug_info部分时发现了一个假象。 (确切的编译器是ARM​​编译器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工具链的设计者对此实体的使用的任何确认。任何人都可以详细说明我的发现的意义和用法吗?

0 个答案:

没有答案