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.
This commit is contained in:
parent
88d65ad6f1
commit
0db9b4b709
4 changed files with 92 additions and 3 deletions
|
@ -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>
|
2004-03-22 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* s390-tdep.c (struct s390_stub_unwind_cache): Rename
|
* s390-tdep.c (struct s390_stub_unwind_cache): Rename
|
||||||
|
|
|
@ -756,7 +756,7 @@ target_h = target.h $(bfd_h) $(symtab_h) $(dcache_h) $(memattr_h)
|
||||||
terminal_h = terminal.h
|
terminal_h = terminal.h
|
||||||
top_h = top.h
|
top_h = top.h
|
||||||
tracepoint_h = tracepoint.h
|
tracepoint_h = tracepoint.h
|
||||||
trad_frame_h = trad-frame.h
|
trad_frame_h = trad-frame.h $(frame_h)
|
||||||
typeprint_h = typeprint.h
|
typeprint_h = typeprint.h
|
||||||
ui_file_h = ui-file.h
|
ui_file_h = ui-file.h
|
||||||
ui_out_h = ui-out.h
|
ui_out_h = ui-out.h
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Traditional frame unwind support, for GDB the GNU Debugger.
|
/* 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.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -24,6 +24,25 @@
|
||||||
#include "trad-frame.h"
|
#include "trad-frame.h"
|
||||||
#include "regcache.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
|
/* A traditional frame is unwound by analysing the function prologue
|
||||||
and using the information gathered to track registers. For
|
and using the information gathered to track registers. For
|
||||||
non-optimized frames, the technique is reliable (just need to check
|
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;
|
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
|
void
|
||||||
trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
|
trad_frame_set_unknown (struct trad_frame_saved_reg this_saved_regs[],
|
||||||
int regnum)
|
int regnum)
|
||||||
|
@ -132,3 +158,29 @@ trad_frame_prev_register (struct frame_info *next_frame,
|
||||||
gdbarch_register_name (gdbarch, regnum));
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Traditional frame unwind support, for GDB the GNU Debugger.
|
/* 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.
|
This file is part of GDB.
|
||||||
|
|
||||||
|
@ -22,7 +22,31 @@
|
||||||
#ifndef TRAD_FRAME_H
|
#ifndef TRAD_FRAME_H
|
||||||
#define TRAD_FRAME_H
|
#define TRAD_FRAME_H
|
||||||
|
|
||||||
|
#include "frame.h" /* For "struct frame_id". */
|
||||||
|
|
||||||
struct frame_info;
|
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
|
/* A traditional saved regs table, indexed by REGNUM, encoding where
|
||||||
the value of REGNUM for the previous frame can be found in this
|
the value of REGNUM for the previous frame can be found in this
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue