aboutsummaryrefslogtreecommitdiff
path: root/binutils/readelf.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2002-06-07 16:42:31 +0000
committerH.J. Lu <hjl.tools@gmail.com>2002-06-07 16:42:31 +0000
commit91a106e65e4ecec7cd92024af03b319a630c8e84 (patch)
tree735b89ac3c7bf30edddb33028a63644d71494477 /binutils/readelf.c
parent8dda97708fa5c4537d670a063d4a1b9a2690f3b5 (diff)
downloadgdb-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.c56
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;