| Status: Unsuitable for upstream (at least, without a lot of arguing). |
| |
| GCC does not specify the state of every last register in the CIE. Since |
| GCC's focus is on correctness of runtime unwinding, any registers which |
| have to be unwound will be specified; but unmodified registers will not |
| be explicitly marked. (How about modified, call-clobbered registers? |
| I'm not sure if they are marked as unavailable.) |
| |
| GDB issues a noisy warning about this. The warning is generally not useful, |
| and we can get it extremely frequently (any time we load a new CIE). |
| |
| This patch disables the warning. Alternately we could set the complaints |
| threshold to zero, or implement a default frame init-register method for |
| every architecture. But someday the compiler will support using different |
| calling conventions for internal functions, so that's not much of a stopgap. |
| ARM has a complex algorithm for handling this, involving scanning all CIEs - |
| benefit not completely clear outside of the ARM context of flexible register |
| sets. |
| |
| Index: gdb-6.3/gdb/dwarf2-frame.c |
| =================================================================== |
| --- gdb-6.3.orig/gdb/dwarf2-frame.c 2004-11-15 11:54:57.000000000 -0500 |
| +++ gdb-6.3/gdb/dwarf2-frame.c 2004-12-08 18:02:23.896409471 -0500 |
| @@ -705,9 +705,12 @@ dwarf2_frame_cache (struct frame_info *n |
| 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)); |
| + { |
| + if (0) |
| + complaint (&symfile_complaints, |
| + "Incomplete CFI data; unspecified registers at 0x%s", |
| + paddr (fs->pc)); |
| + } |
| else |
| cache->reg[regnum] = fs->regs.reg[column]; |
| } |