我正在编写用于调试 Cortex-M 的工具,并且在查看.debug_info
armcc 为某些 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
工具链设计者所期望的对该实体使用的任何确认。谁能详细说明我的发现的含义和用途?