2003-07-02 Andrew Cagney <cagney@redhat.com>

* i386-tdep.c: Revert change committed as part of trad-frame code
	below.
This commit is contained in:
Andrew Cagney 2003-07-02 17:20:24 +00:00
parent 3f8091c1f6
commit fd13a04acf
2 changed files with 39 additions and 25 deletions

View file

@ -1,3 +1,8 @@
2003-07-02 Andrew Cagney <cagney@redhat.com>
* i386-tdep.c: Revert change committed as part of trad-frame code
below.
2003-07-02 Daniel Jacobowitz <drow@mvista.com> 2003-07-02 Daniel Jacobowitz <drow@mvista.com>
* breakpoint.c (insert_catchpoint): Make static. * breakpoint.c (insert_catchpoint): Make static.

View file

@ -41,7 +41,6 @@
#include "symtab.h" #include "symtab.h"
#include "target.h" #include "target.h"
#include "value.h" #include "value.h"
#include "trad-frame.h"
#include "gdb_assert.h" #include "gdb_assert.h"
#include "gdb_string.h" #include "gdb_string.h"
@ -249,10 +248,8 @@ struct i386_frame_cache
CORE_ADDR sp_offset; CORE_ADDR sp_offset;
CORE_ADDR pc; CORE_ADDR pc;
/* Saved registers. While trad-frame allocates space for the full /* Saved registers. */
NUM_REGS + NUM_PSEUDOREGS, some of the code below cheats and CORE_ADDR saved_regs[I386_NUM_SAVED_REGS];
allocates space for only I386_NUM_SAVED_REGS. */
struct trad_frame_saved_reg *saved_regs;
CORE_ADDR saved_sp; CORE_ADDR saved_sp;
int pc_in_eax; int pc_in_eax;
@ -263,7 +260,7 @@ struct i386_frame_cache
/* Allocate and initialize a frame cache. */ /* Allocate and initialize a frame cache. */
static struct i386_frame_cache * static struct i386_frame_cache *
i386_alloc_frame_cache (struct frame_info *next_frame) i386_alloc_frame_cache (void)
{ {
struct i386_frame_cache *cache; struct i386_frame_cache *cache;
int i; int i;
@ -275,7 +272,10 @@ i386_alloc_frame_cache (struct frame_info *next_frame)
cache->sp_offset = -4; cache->sp_offset = -4;
cache->pc = 0; cache->pc = 0;
cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); /* Saved registers. We initialize these to -1 since zero is a valid
offset (that's where %ebp is supposed to be stored). */
for (i = 0; i < I386_NUM_SAVED_REGS; i++)
cache->saved_regs[i] = -1;
cache->saved_sp = 0; cache->saved_sp = 0;
cache->pc_in_eax = 0; cache->pc_in_eax = 0;
@ -449,7 +449,7 @@ i386_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc,
{ {
/* Take into account that we've executed the `pushl %ebp' that /* Take into account that we've executed the `pushl %ebp' that
starts this instruction sequence. */ starts this instruction sequence. */
cache->saved_regs[I386_EBP_REGNUM].addr = 0; cache->saved_regs[I386_EBP_REGNUM] = 0;
cache->sp_offset += 4; cache->sp_offset += 4;
/* If that's all, return now. */ /* If that's all, return now. */
@ -547,7 +547,7 @@ i386_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
if (op < 0x50 || op > 0x57) if (op < 0x50 || op > 0x57)
break; break;
cache->saved_regs[op - 0x50].addr = offset; cache->saved_regs[op - 0x50] = offset;
offset -= 4; offset -= 4;
pc++; pc++;
} }
@ -609,11 +609,6 @@ i386_skip_prologue (CORE_ADDR start_pc)
unsigned char op; unsigned char op;
int i; int i;
/* Allocate space for the maximum number of saved registers. This
should include all registers mentioned above, and %eip. */
cache.saved_regs = alloca (I386_NUM_SAVED_REGS
* sizeof (cache.saved_regs[0]));
cache.locals = -1; cache.locals = -1;
pc = i386_analyze_prologue (start_pc, 0xffffffff, &cache); pc = i386_analyze_prologue (start_pc, 0xffffffff, &cache);
if (cache.locals < 0) if (cache.locals < 0)
@ -695,7 +690,7 @@ i386_frame_cache (struct frame_info *next_frame, void **this_cache)
if (*this_cache) if (*this_cache)
return *this_cache; return *this_cache;
cache = i386_alloc_frame_cache (next_frame); cache = i386_alloc_frame_cache ();
*this_cache = cache; *this_cache = cache;
/* In principle, for normal frames, %ebp holds the frame pointer, /* In principle, for normal frames, %ebp holds the frame pointer,
@ -713,7 +708,7 @@ i386_frame_cache (struct frame_info *next_frame, void **this_cache)
return cache; return cache;
/* For normal frames, %eip is stored at 4(%ebp). */ /* For normal frames, %eip is stored at 4(%ebp). */
cache->saved_regs[I386_EIP_REGNUM].addr = 4; cache->saved_regs[I386_EIP_REGNUM] = 4;
cache->pc = frame_func_unwind (next_frame); cache->pc = frame_func_unwind (next_frame);
if (cache->pc != 0) if (cache->pc != 0)
@ -740,9 +735,8 @@ i386_frame_cache (struct frame_info *next_frame, void **this_cache)
/* Adjust all the saved registers such that they contain addresses /* Adjust all the saved registers such that they contain addresses
instead of offsets. */ instead of offsets. */
for (i = 0; i < I386_NUM_SAVED_REGS; i++) for (i = 0; i < I386_NUM_SAVED_REGS; i++)
if (cache->saved_regs[i].realnum >= 0 if (cache->saved_regs[i] != -1)
&& cache->saved_regs[i].addr != -1) cache->saved_regs[i] += cache->base;
cache->saved_regs[i].addr += cache->base;
return cache; return cache;
} }
@ -830,8 +824,23 @@ i386_frame_prev_register (struct frame_info *next_frame, void **this_cache,
return; return;
} }
trad_frame_prev_register (next_frame, cache->saved_regs, regnum, if (regnum < I386_NUM_SAVED_REGS && cache->saved_regs[regnum] != -1)
optimizedp, lvalp, addrp, realnump, valuep); {
*optimizedp = 0;
*lvalp = lval_memory;
*addrp = cache->saved_regs[regnum];
*realnump = -1;
if (valuep)
{
/* Read the value in from memory. */
read_memory (*addrp, valuep,
register_size (current_gdbarch, regnum));
}
return;
}
frame_register_unwind (next_frame, regnum,
optimizedp, lvalp, addrp, realnump, valuep);
} }
static const struct frame_unwind i386_frame_unwind = static const struct frame_unwind i386_frame_unwind =
@ -861,7 +870,7 @@ i386_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
if (*this_cache) if (*this_cache)
return *this_cache; return *this_cache;
cache = i386_alloc_frame_cache (next_frame); cache = i386_alloc_frame_cache ();
frame_unwind_register (next_frame, I386_ESP_REGNUM, buf); frame_unwind_register (next_frame, I386_ESP_REGNUM, buf);
cache->base = extract_unsigned_integer (buf, 4) - 4; cache->base = extract_unsigned_integer (buf, 4) - 4;
@ -875,12 +884,12 @@ i386_sigtramp_frame_cache (struct frame_info *next_frame, void **this_cache)
for (i = 0; i < tdep->sc_num_regs; i++) for (i = 0; i < tdep->sc_num_regs; i++)
if (tdep->sc_reg_offset[i] != -1) if (tdep->sc_reg_offset[i] != -1)
cache->saved_regs[i].addr = addr + tdep->sc_reg_offset[i]; cache->saved_regs[i] = addr + tdep->sc_reg_offset[i];
} }
else else
{ {
cache->saved_regs[I386_EIP_REGNUM].addr = addr + tdep->sc_pc_offset; cache->saved_regs[I386_EIP_REGNUM] = addr + tdep->sc_pc_offset;
cache->saved_regs[I386_ESP_REGNUM].addr = addr + tdep->sc_sp_offset; cache->saved_regs[I386_ESP_REGNUM] = addr + tdep->sc_sp_offset;
} }
*this_cache = cache; *this_cache = cache;