Gdb complaints Incomplete CFI data; unspecified registers

H. J. Lu
2004-12-31T19:03:09Z

Gdb 6.3 generates many

(gdb) bt
#0 loc_descriptor (rtl=0xb7d671d4, can_use_fbreg=1 '\001')
at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:8737
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813b181.
#1 0x0813c15e in add_location_or_const_value_attribute
(die=0xb7d66784,
decl=0xb7d6021c, attr=DW_AT_location)
at /net/gnu/export/gnu/src/gcc/gcc/gcc/dwarf2out.c:10041
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813c0c9.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813c0c9.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813c0c9.
During symbol reading, Incomplete CFI data; unspecified registers at
0x0813c0c9.

on binaries generated by gcc 4.0. According to the comments in gdb 6.3:

/* NOTE: cagney/2003-09-05: CFI should specify the disposition
of all debug info registers. If it doesn't, complain (but
not too loudly). It turns out that GCC assumes that an
unspecified register implies "same value" when CFI (draft
7) specifies nothing at all. Such a register could equally
be interpreted as "undefined". Also note that this check
isn't sufficient; it only checks that all registers in the
range [0 .. max column] are specified, and won't detect
problems when a debug info register falls outside of the
table. We need a way of iterating through all the valid
DWARF2 register numbers. */
if (fs->regs.reg[column].how == DWARF2_FRAME_REG_UNSPECIFIED)
complaint (&symfile_complaints,
"Incomplete CFI data; unspecified registers at
0x%s",
paddr (fs->pc));

it is intentional. My question is why gdb generates those annoying
messages at all if it can detect the code is generated by gcc.

H.J.