2004-03-23 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Tue, 23 Mar 2004 13:49:50 +0000 (13:49 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 23 Mar 2004 13:49:50 +0000 (13:49 +0000)
* Makefile.in (trad_frame_h): Add $(frame_h).
* trad-frame.h: Update copyright.  Include "frame.h".
(struct trad_frame_cache, trad_frame_cache_zalloc): Declare.
(trad_frame_set_id, trad_frame_get_id): Declare.
(trad_frame_set_reg_addr, trad_frame_get_register): Declare.
* trad-frame.c: Update copyright.
(struct trad_frame_cache): Define.
(trad_frame_cache_zalloc): New function.
(trad_frame_set_id, trad_frame_get_id): New functions.
(trad_frame_set_reg_addr, trad_frame_get_register): New functions.

gdb/ChangeLog
gdb/Makefile.in
gdb/trad-frame.c
gdb/trad-frame.h

index dcffe7055ced20599e54248feca8b8533e77a443..bb23e08d1dbf39f132e2fa60d568226c9b8574b5 100644 (file)
@@ -1,3 +1,16 @@
+2004-03-23  Andrew Cagney  <cagney@redhat.com>
+
+       * Makefile.in (trad_frame_h): Add $(frame_h).
+       * trad-frame.h: Update copyright.  Include "frame.h".
+       (struct trad_frame_cache, trad_frame_cache_zalloc): Declare.
+       (trad_frame_set_id, trad_frame_get_id): Declare.
+       (trad_frame_set_reg_addr, trad_frame_get_register): Declare.
+       * trad-frame.c: Update copyright.
+       (struct trad_frame_cache): Define.
+       (trad_frame_cache_zalloc): New function.
+       (trad_frame_set_id, trad_frame_get_id): New functions.
+       (trad_frame_set_reg_addr, trad_frame_get_register): New functions.
+       
 2004-03-22  Andrew Cagney  <cagney@redhat.com>
 
        * s390-tdep.c (struct s390_stub_unwind_cache): Rename
index 95f72d5c59f0ce6e9094d53753cf9eba423c1fae..7b31937cbea26acfdcf95b8ca702fcc24d882a9e 100644 (file)
@@ -756,7 +756,7 @@ target_h = target.h $(bfd_h) $(symtab_h) $(dcache_h) $(memattr_h)
 terminal_h = terminal.h
 top_h = top.h
 tracepoint_h = tracepoint.h
-trad_frame_h = trad-frame.h
+trad_frame_h = trad-frame.h $(frame_h)
 typeprint_h = typeprint.h
 ui_file_h = ui-file.h
 ui_out_h = ui-out.h
index f397f5d82417e92eba9bb2a797bda60bfb47e964..f51998d42b8f5ef27223f524ca8a22050bc46e71 100644 (file)
@@ -1,6 +1,6 @@
 /* Traditional frame unwind support, for GDB the GNU Debugger.
 
-   Copyright 2003 Free Software Foundation, Inc.
+   Copyright 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "trad-frame.h"
 #include "regcache.h"
 
+struct trad_frame_cache
+{
+  struct frame_info *next_frame;
+  CORE_ADDR this_base;
+  struct trad_frame_saved_reg *prev_regs;
+  struct frame_id this_id;
+};
+
+struct trad_frame_cache *
+trad_frame_cache_zalloc (struct frame_info *next_frame)
+{
+  struct trad_frame_cache *this_trad_cache;
+
+  this_trad_cache = FRAME_OBSTACK_ZALLOC (struct trad_frame_cache);
+  this_trad_cache->prev_regs = trad_frame_alloc_saved_regs (next_frame);
+  this_trad_cache->next_frame = next_frame;
+  return this_trad_cache;
+}
+
 /* A traditional frame is unwound by analysing the function prologue
    and using the information gathered to track registers.  For
    non-optimized frames, the technique is reliable (just need to check
@@ -78,6 +97,13 @@ trad_frame_set_value (struct trad_frame_saved_reg this_saved_regs[],
   this_saved_regs[regnum].addr = val;
 }
 
+void
+trad_frame_set_reg_addr (struct trad_frame_cache *this_trad_cache,
+                        int regnum, CORE_ADDR addr)
+{
+  this_trad_cache->prev_regs[regnum].addr = addr;
+}
+
 void
 trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
                        int regnum)
@@ -132,3 +158,29 @@ trad_frame_prev_register (struct frame_info *next_frame,
             gdbarch_register_name (gdbarch, regnum));
     }
 }
+
+void
+trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
+                        struct frame_info *next_frame,
+                        int regnum, int *optimizedp,
+                        enum lval_type *lvalp, CORE_ADDR *addrp,
+                        int *realregp, void *bufferp)
+{
+  trad_frame_prev_register (next_frame, this_trad_cache->prev_regs,
+                           regnum, optimizedp, lvalp, addrp, realregp,
+                           bufferp);
+}
+
+void
+trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
+                  struct frame_id this_id)
+{
+  this_trad_cache->this_id = this_id;
+}
+
+void
+trad_frame_get_id (struct trad_frame_cache *this_trad_cache,
+                  struct frame_id *this_id)
+{
+  (*this_id) = this_trad_cache->this_id;
+}
index 55720c7e836296634d82e5e1f4eb52aaa190fa76..194f39abdfbf456311d6c32f9ebf86d1036de9d6 100644 (file)
@@ -1,6 +1,6 @@
 /* Traditional frame unwind support, for GDB the GNU Debugger.
 
-   Copyright 2003 Free Software Foundation, Inc.
+   Copyright 2003, 2004 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #ifndef TRAD_FRAME_H
 #define TRAD_FRAME_H
 
+#include "frame.h"             /* For "struct frame_id".  */
+
 struct frame_info;
+struct trad_frame_cache;
+
+/* A simple, or traditional frame cache.
+
+   The entire cache is populated in a single pass and then generic
+   routines are used to extract the various cache values.  */
+
+struct trad_frame_cache *trad_frame_cache_zalloc (struct frame_info *next_frame);
+
+/* This frame's ID.  */
+void trad_frame_set_id (struct trad_frame_cache *this_trad_cache,
+                       struct frame_id this_id);
+void trad_frame_get_id (struct trad_frame_cache *this_trad_cache,
+                       struct frame_id *this_id);
+
+void trad_frame_set_reg_unknown (struct trad_frame_cache *this_trad_cache,
+                                int regnum, CORE_ADDR addr);
+void trad_frame_get_register (struct trad_frame_cache *this_trad_cache,
+                             struct frame_info *next_frame,
+                             int regnum, int *optimizedp,
+                             enum lval_type *lvalp, CORE_ADDR *addrp,
+                             int *realregp, void *bufferp);
 
 /* A traditional saved regs table, indexed by REGNUM, encoding where
    the value of REGNUM for the previous frame can be found in this