我正在编写用于调试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
工具链的设计者对此实体的使用的任何确认。任何人都可以详细说明我的发现的意义和用法吗?