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.
This commit is contained in:
H.J. Lu 2002-06-07 16:42:31 +00:00
parent 8dda97708f
commit 91a106e65e
2 changed files with 55 additions and 9 deletions

View File

@ -1,3 +1,11 @@
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.
2002-06-07 Elias Athanasopoulos <eathan@otenet.gr>
* nm.c: When computing size of symbols for an ELF target use the

View File

@ -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;