2002-06-07 H.J. Lu <hjl@gnu.org>
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 7 Jun 2002 16:42:31 +0000 (16:42 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 7 Jun 2002 16:42:31 +0000 (16:42 +0000)
* 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.

binutils/ChangeLog
binutils/readelf.c

index db06f919ed7f90951f30b710ebb1aee47d6d7639..a4607a3558d649f58a0d6ec1ea12edb95528717d 100644 (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
index 8521cf548ebf285e9b25e47ae2adc366f3e21849..095310914a162053fe28b9722be0effabfe147d1 100644 (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;