diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2002-06-07 16:42:31 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2002-06-07 16:42:31 +0000 |
commit | 91a106e65e4ecec7cd92024af03b319a630c8e84 (patch) | |
tree | 735b89ac3c7bf30edddb33028a63644d71494477 /binutils/readelf.c | |
parent | 8dda97708fa5c4537d670a063d4a1b9a2690f3b5 (diff) | |
download | gdb-91a106e65e4ecec7cd92024af03b319a630c8e84.zip gdb-91a106e65e4ecec7cd92024af03b319a630c8e84.tar.gz gdb-91a106e65e4ecec7cd92024af03b319a630c8e84.tar.bz2 |
2002-06-07 H.J. Lu <hjl@gnu.org>
* readelf.c (DW_CFA_GNU_args_size): Don't define.
(DW_CFA_GNU_negative_offset_extended): Likewise.
(DW_CFA_GNU_window_save): Likewise.
(display_debug_frames): Handle DW_CFA_offset_extended_sf,
DW_CFA_def_cfa_sf and DW_CFA_def_cfa_offset_sf.
Diffstat (limited to 'binutils/readelf.c')
-rw-r--r-- | binutils/readelf.c | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/binutils/readelf.c b/binutils/readelf.c index 8521cf5..0953109 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -8473,15 +8473,20 @@ display_debug_frames (section, start, file) case DW_CFA_def_cfa_offset: LEB (); break; -#ifndef DW_CFA_GNU_args_size -#define DW_CFA_GNU_args_size 0x2e -#endif + case DW_CFA_offset_extended_sf: + reg = LEB (); SLEB (); + frame_need_space (fc, reg); + fc->col_type[reg] = DW_CFA_undefined; + break; + case DW_CFA_def_cfa_sf: + LEB (); SLEB (); + break; + case DW_CFA_def_cfa_offset_sf: + SLEB (); + break; case DW_CFA_GNU_args_size: LEB (); break; -#ifndef DW_CFA_GNU_negative_offset_extended -#define DW_CFA_GNU_negative_offset_extended 0x2f -#endif case DW_CFA_GNU_negative_offset_extended: reg = LEB (); LEB (); frame_need_space (fc, reg); @@ -8676,9 +8681,31 @@ display_debug_frames (section, start, file) printf (" DW_CFA_nop\n"); break; -#ifndef DW_CFA_GNU_window_save -#define DW_CFA_GNU_window_save 0x2d -#endif + case DW_CFA_offset_extended_sf: + reg = LEB (); + l = SLEB (); + frame_need_space (fc, reg); + if (! do_debug_frames_interp) + printf (" DW_CFA_offset_extended_sf: r%ld at cfa%+ld\n", + reg, l * fc->data_factor); + fc->col_type[reg] = DW_CFA_offset; + fc->col_offset[reg] = l * fc->data_factor; + break; + + case DW_CFA_def_cfa_sf: + fc->cfa_reg = LEB (); + fc->cfa_offset = SLEB (); + if (! do_debug_frames_interp) + printf (" DW_CFA_def_cfa_sf: r%d ofs %d\n", + fc->cfa_reg, fc->cfa_offset); + break; + + case DW_CFA_def_cfa_offset_sf: + fc->cfa_offset = SLEB (); + if (! do_debug_frames_interp) + printf (" DW_CFA_def_cfa_offset_sf: %d\n", fc->cfa_offset); + break; + case DW_CFA_GNU_window_save: if (! do_debug_frames_interp) printf (" DW_CFA_GNU_window_save\n"); @@ -8701,6 +8728,17 @@ display_debug_frames (section, start, file) fc->col_offset[reg] = l * fc->data_factor; break; + /* FIXME: How do we handle these? */ + case DW_CFA_def_cfa_expression: + fprintf (stderr, "unsupported DW_CFA_def_cfa_expression\n"); + start = block_end; + break; + + case DW_CFA_expression: + fprintf (stderr, "unsupported DW_CFA_expression\n"); + start = block_end; + break; + default: fprintf (stderr, "unsupported or unknown DW_CFA_%d\n", op); start = block_end; |