2002-12-13 Andrew Cagney <ac131313@redhat.com>
[external/binutils.git] / gdb / frame.h
index 5a45502..0fd305e 100644 (file)
@@ -298,6 +298,10 @@ extern const char *frame_map_regnum_to_name (int regnum);
 
 extern CORE_ADDR frame_pc_unwind (struct frame_info *frame);
 
+/* Unwind the frame ID.  Return an ID that uniquely identifies the
+   caller's frame.  */
+extern struct frame_id frame_id_unwind (struct frame_info *frame);
+
 \f
 /* Return the location (and possibly value) of REGNUM for the previous
    (older, up) frame.  All parameters except VALUEP can be assumed to
@@ -328,6 +332,12 @@ typedef void (frame_register_unwind_ftype) (struct frame_info *frame,
 typedef CORE_ADDR (frame_pc_unwind_ftype) (struct frame_info *frame,
                                           void **unwind_cache);
 
+/* Same as for registers above, but return the ID of the frame that
+   called this one.  */
+
+typedef struct frame_info (frame_id_unwind_ftype) (struct frame_info *frame,
+                                                  void **unwind_cache);
+
 /* Describe the saved registers of a frame.  */
 
 #if defined (EXTRA_FRAME_INFO) || defined (FRAME_FIND_SAVED_REGS)
@@ -424,6 +434,12 @@ struct frame_info
     int pc_unwind_cache_p;
     CORE_ADDR pc_unwind_cache;
 
+    /* See description above.  The previous frame's resume address.
+       Save the previous PC in a local cache.  */
+    frame_id_unwind_ftype *id_unwind;
+    int id_unwind_cache_p;
+    struct frame_id id_unwind_cache;
+
     /* Pointers to the next (down, inner, younger) and previous (up,
        outer, older) frame_info's in the frame cache.  */
     struct frame_info *next; /* down, inner, younger */