* alpha-tdep.c (alpha_heuristic_proc_start)

(alpha_sigtramp_register_address): Add gdbarch as parameter. Replace
	current_gdbarch by gdbarch.

	(alpha_heuristic_frame_unwind_cache): Use get_frame_arch to get at the
	current architecture by frame_info. Update alpha_heuristic_proc_start
	call.

	(alpha_sigtramp_frame_this_id, alpha_sigtramp_frame_prev_register): Use
	get_frame_arch to get at the current architecture by frame_info. Update
	alpha_sigtramp_register_address call.

	* arm-tdep.c (thumb_scan_prologue): Add gdbarch as parameter and replace
	current_gdbarch by gdbarch. Update caller.
	(convert_to_extended, convert_from_extended): Add endianess parameter
	for comparison. Update caller.
	(arm_extract_return_value, arm_store_return_value): Use
	get_regcache_arch to get at the current	architecture.

	* cris-tdep.c (cris_register_size): Add gdbarch as parameter. Replace
	current_gdbarch by gdbarch. Update caller.
	(cris_gdb_func, move_to_preg_op, none_reg_mode_move_from_preg_op): Add
	gdbarch as parameter. Update caller. Replace current_gdbarch by gdbarch.

	* h8300-tdep.c (E_PSEUDO_CCR_REGNUM, E_PSEUDO_EXR_REGNUM, BINWORD): Add
	gdbarch	as parameter. Update caller.
	(h8300_init_frame_cache): Add gdbarch as parameter. Replace
	current_gdbarch by gdbarch. Update caller.

	* hppa-tdep.c (skip_prologue_hard_way): Add gdbarch as parameter and
	update caller. Replace current_gdbarch by gdbarch.

	* m32c-tdep.c (m32c_skip_trampoline_code): Use get_frame_arch to get at
	the current architecture. Replace current_gdbarch by gdbarch.
	* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
	(STACK_CORRECTION, USE_PAGE_REGISTER): Replace M6811_TDEP by its
	expression. Add gdbarch as parameter and replace current_gdbarch with
	it. Update caller.
	(M6811_TDEP): Remove.
	(m68hc11_frame_prev_register): Use get_frame_arch to get at the current
	architecture.
	(m68hc11_scan_prologue): Add gdbarch as parameter. Replace
	current_gdbarch by gdbarch. Update caller.

	* m68k-tdep.c (m68k_analyze_prologue): Add gdbarch as parameter and
	update caller.
	(m68k_analyze_register_saves): Likewise. Also replace current_gdbarch
	by gdbarch.

	* rs6000-tdep.c (skip_prologue): Add gdbarch as parameter and update
	caller. Relace current_gdbarch by gdbarch.
	(altivec_register_p, spe_register_p): Likewise.
	* ppc-tdep.h (altivec_register_p, spe_register_p): Add gdbarch as
	parameter.
	* ppc-linux-nat.c (fetch_register, store_register): Update caller of
	altivec_register_p and spe_register_p.

	* score-tdep.c (score_fetch_inst): Add gdbarch as parameter. Update
	caller. Replace current_gdbarch by gdbarch.
	(score_analyze_prologue): use get_frame_arch to get at the current
	architecture.

	* sparc-tdep.h (sparc_analyze_prologue): Add gdbarch as parameter.
	* sparc-tdep.c (sparc_analyze_prologue): Likewise. Replace
	current_gdbarch by gdbarch. Update caller.
	(sparc_frame_cache): Use get_frame_arch to get at the current
	architecture.
	* sparce64-tdep.c (sparc64_skip_prologue): Update call of
	sparc_analyze_prologue.

	* mn10300-tdep.c (mn10300_dwarf2_reg_to_regnum): Add gdbarch as
	parameter.
This commit is contained in:
Markus Deuling 2008-01-11 14:43:15 +00:00
parent ed49a04fe1
commit be8626e05a
17 changed files with 244 additions and 140 deletions

View File

@ -1,3 +1,78 @@
2008-01-11 Markus Deuling <deuling@de.ibm.com>
* alpha-tdep.c (alpha_heuristic_proc_start)
(alpha_sigtramp_register_address): Add gdbarch as parameter. Replace
current_gdbarch by gdbarch.
(alpha_heuristic_frame_unwind_cache): Use get_frame_arch to get at the
current architecture by frame_info. Update alpha_heuristic_proc_start
call.
(alpha_sigtramp_frame_this_id, alpha_sigtramp_frame_prev_register): Use
get_frame_arch to get at the current architecture by frame_info. Update
alpha_sigtramp_register_address call.
* arm-tdep.c (thumb_scan_prologue): Add gdbarch as parameter and replace
current_gdbarch by gdbarch. Update caller.
(convert_to_extended, convert_from_extended): Add endianess parameter
for comparison. Update caller.
(arm_extract_return_value, arm_store_return_value): Use
get_regcache_arch to get at the current architecture.
* cris-tdep.c (cris_register_size): Add gdbarch as parameter. Replace
current_gdbarch by gdbarch. Update caller.
(cris_gdb_func, move_to_preg_op, none_reg_mode_move_from_preg_op): Add
gdbarch as parameter. Update caller. Replace current_gdbarch by gdbarch.
* h8300-tdep.c (E_PSEUDO_CCR_REGNUM, E_PSEUDO_EXR_REGNUM, BINWORD): Add
gdbarch as parameter. Update caller.
(h8300_init_frame_cache): Add gdbarch as parameter. Replace
current_gdbarch by gdbarch. Update caller.
* hppa-tdep.c (skip_prologue_hard_way): Add gdbarch as parameter and
update caller. Replace current_gdbarch by gdbarch.
* m32c-tdep.c (m32c_skip_trampoline_code): Use get_frame_arch to get at
the current architecture. Replace current_gdbarch by gdbarch.
* m68hc11-tdep.c (m68hc11_frame_unwind_cache): Likewise.
(STACK_CORRECTION, USE_PAGE_REGISTER): Replace M6811_TDEP by its
expression. Add gdbarch as parameter and replace current_gdbarch with
it. Update caller.
(M6811_TDEP): Remove.
(m68hc11_frame_prev_register): Use get_frame_arch to get at the current
architecture.
(m68hc11_scan_prologue): Add gdbarch as parameter. Replace
current_gdbarch by gdbarch. Update caller.
* m68k-tdep.c (m68k_analyze_prologue): Add gdbarch as parameter and
update caller.
(m68k_analyze_register_saves): Likewise. Also replace current_gdbarch
by gdbarch.
* rs6000-tdep.c (skip_prologue): Add gdbarch as parameter and update
caller. Relace current_gdbarch by gdbarch.
(altivec_register_p, spe_register_p): Likewise.
* ppc-tdep.h (altivec_register_p, spe_register_p): Add gdbarch as
parameter.
* ppc-linux-nat.c (fetch_register, store_register): Update caller of
altivec_register_p and spe_register_p.
* score-tdep.c (score_fetch_inst): Add gdbarch as parameter. Update
caller. Replace current_gdbarch by gdbarch.
(score_analyze_prologue): use get_frame_arch to get at the current
architecture.
* sparc-tdep.h (sparc_analyze_prologue): Add gdbarch as parameter.
* sparc-tdep.c (sparc_analyze_prologue): Likewise. Replace
current_gdbarch by gdbarch. Update caller.
(sparc_frame_cache): Use get_frame_arch to get at the current
architecture.
* sparce64-tdep.c (sparc64_skip_prologue): Update call of
sparc_analyze_prologue.
* mn10300-tdep.c (mn10300_dwarf2_reg_to_regnum): Add gdbarch as
parameter.
2008-01-11 Markus Deuling <deuling@de.ibm.com>
* exec.c: #include "arch-utils.h"

View File

@ -768,9 +768,10 @@ alpha_sigtramp_frame_unwind_cache (struct frame_info *next_frame,
all arithmetic, it doesn't seem worthwhile to cache it. */
static CORE_ADDR
alpha_sigtramp_register_address (CORE_ADDR sigcontext_addr, int regnum)
alpha_sigtramp_register_address (struct gdbarch *gdbarch,
CORE_ADDR sigcontext_addr, int regnum)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
if (regnum >= 0 && regnum < 32)
return sigcontext_addr + tdep->sc_regs_offset + regnum * 8;
@ -790,9 +791,10 @@ alpha_sigtramp_frame_this_id (struct frame_info *next_frame,
void **this_prologue_cache,
struct frame_id *this_id)
{
struct gdbarch *gdbarch = get_frame_arch (next_frame);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
struct alpha_sigtramp_unwind_cache *info
= alpha_sigtramp_frame_unwind_cache (next_frame, this_prologue_cache);
struct gdbarch_tdep *tdep;
CORE_ADDR stack_addr, code_addr;
/* If the OSABI couldn't locate the sigcontext, give up. */
@ -802,7 +804,6 @@ alpha_sigtramp_frame_this_id (struct frame_info *next_frame,
/* If we have dynamic signal trampolines, find their start.
If we do not, then we must assume there is a symbol record
that can provide the start address. */
tdep = gdbarch_tdep (get_frame_arch (next_frame));
if (tdep->dynamic_sigtramp_offset)
{
int offset;
@ -817,7 +818,7 @@ alpha_sigtramp_frame_this_id (struct frame_info *next_frame,
code_addr = frame_func_unwind (next_frame, SIGTRAMP_FRAME);
/* The stack address is trivially read from the sigcontext. */
stack_addr = alpha_sigtramp_register_address (info->sigcontext_addr,
stack_addr = alpha_sigtramp_register_address (gdbarch, info->sigcontext_addr,
ALPHA_SP_REGNUM);
stack_addr = get_frame_memory_unsigned (next_frame, stack_addr,
ALPHA_REGISTER_SIZE);
@ -841,7 +842,8 @@ alpha_sigtramp_frame_prev_register (struct frame_info *next_frame,
if (info->sigcontext_addr != 0)
{
/* All integer and fp registers are stored in memory. */
addr = alpha_sigtramp_register_address (info->sigcontext_addr, regnum);
addr = alpha_sigtramp_register_address (get_frame_arch (next_frame),
info->sigcontext_addr, regnum);
if (addr != 0)
{
*optimizedp = 0;
@ -920,9 +922,9 @@ static unsigned int heuristic_fence_post = 0;
function. But we're guessing anyway... */
static CORE_ADDR
alpha_heuristic_proc_start (CORE_ADDR pc)
alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
CORE_ADDR last_non_nop = pc;
CORE_ADDR fence = pc - heuristic_fence_post;
CORE_ADDR orig_pc = pc;
@ -999,6 +1001,7 @@ alpha_heuristic_frame_unwind_cache (struct frame_info *next_frame,
void **this_prologue_cache,
CORE_ADDR start_pc)
{
struct gdbarch *gdbarch = get_frame_arch (next_frame);
struct alpha_heuristic_unwind_cache *info;
ULONGEST val;
CORE_ADDR limit_pc, cur_pc;
@ -1013,7 +1016,7 @@ alpha_heuristic_frame_unwind_cache (struct frame_info *next_frame,
limit_pc = frame_pc_unwind (next_frame);
if (start_pc == 0)
start_pc = alpha_heuristic_proc_start (limit_pc);
start_pc = alpha_heuristic_proc_start (gdbarch, limit_pc);
info->start_pc = start_pc;
frame_reg = ALPHA_SP_REGNUM;

View File

@ -177,9 +177,9 @@ static void set_disassembly_style_sfunc(char *, int,
static void set_disassembly_style (void);
static void convert_from_extended (const struct floatformat *, const void *,
void *);
void *, int);
static void convert_to_extended (const struct floatformat *, void *,
const void *);
const void *, int);
struct arm_prologue_cache
{
@ -534,7 +534,8 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
/* *INDENT-ON* */
static void
thumb_scan_prologue (CORE_ADDR prev_pc, struct arm_prologue_cache *cache)
thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
struct arm_prologue_cache *cache)
{
CORE_ADDR prologue_start;
CORE_ADDR prologue_end;
@ -565,8 +566,7 @@ thumb_scan_prologue (CORE_ADDR prev_pc, struct arm_prologue_cache *cache)
prologue_end = min (prologue_end, prev_pc);
thumb_analyze_prologue (current_gdbarch, prologue_start, prologue_end,
cache);
thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
}
/* This function decodes an ARM function prologue to determine:
@ -656,7 +656,7 @@ arm_scan_prologue (struct frame_info *next_frame,
/* Check for Thumb prologue. */
if (arm_pc_is_thumb (prev_pc))
{
thumb_scan_prologue (prev_pc, cache);
thumb_scan_prologue (gdbarch, prev_pc, cache);
return;
}
@ -1499,10 +1499,11 @@ arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
static void
convert_from_extended (const struct floatformat *fmt, const void *ptr,
void *dbl)
void *dbl, int endianess)
{
DOUBLEST d;
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
if (endianess == BFD_ENDIAN_BIG)
floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
else
floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
@ -1511,11 +1512,13 @@ convert_from_extended (const struct floatformat *fmt, const void *ptr,
}
static void
convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr)
convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
int endianess)
{
DOUBLEST d;
floatformat_to_doublest (fmt, ptr, &d);
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
if (endianess == BFD_ENDIAN_BIG)
floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
else
floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
@ -2094,9 +2097,11 @@ static void
arm_extract_return_value (struct type *type, struct regcache *regs,
gdb_byte *valbuf)
{
struct gdbarch *gdbarch = get_regcache_arch (regs);
if (TYPE_CODE_FLT == TYPE_CODE (type))
{
switch (gdbarch_tdep (get_regcache_arch (regs))->fp_model)
switch (gdbarch_tdep (gdbarch)->fp_model)
{
case ARM_FLOAT_FPA:
{
@ -2107,7 +2112,7 @@ arm_extract_return_value (struct type *type, struct regcache *regs,
regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
convert_from_extended (floatformat_from_type (type), tmpbuf,
valbuf);
valbuf, gdbarch_byte_order (gdbarch));
}
break;
@ -2281,15 +2286,18 @@ static void
arm_store_return_value (struct type *type, struct regcache *regs,
const gdb_byte *valbuf)
{
struct gdbarch *gdbarch = get_regcache_arch (regs);
if (TYPE_CODE (type) == TYPE_CODE_FLT)
{
char buf[MAX_REGISTER_SIZE];
switch (gdbarch_tdep (get_regcache_arch (regs))->fp_model)
switch (gdbarch_tdep (gdbarch)->fp_model)
{
case ARM_FLOAT_FPA:
convert_to_extended (floatformat_from_type (type), buf, valbuf);
convert_to_extended (floatformat_from_type (type), buf, valbuf,
gdbarch_byte_order (gdbarch));
regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
break;

View File

@ -699,7 +699,8 @@ cris_get_signed_offset (unsigned short insn)
/* Calls an op function given the op-type, working on the insn and the
inst_env. */
static void cris_gdb_func (enum cris_op_type, unsigned short, inst_env_type *);
static void cris_gdb_func (struct gdbarch *, enum cris_op_type, unsigned short,
inst_env_type *);
static struct gdbarch *cris_gdbarch_init (struct gdbarch_info,
struct gdbarch_list *);
@ -1547,9 +1548,9 @@ cris_spec_reg_applicable (struct cris_spec_reg spec_reg)
register, -1 for an invalid register. */
static int
cris_register_size (int regno)
cris_register_size (struct gdbarch *gdbarch, int regno)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
int i;
int spec_regno;
@ -1574,8 +1575,8 @@ cris_register_size (int regno)
/* Special register not applicable to this CRIS version. */
return 0;
}
else if (regno >= gdbarch_pc_regnum (current_gdbarch)
&& regno < gdbarch_num_regs (current_gdbarch))
else if (regno >= gdbarch_pc_regnum (gdbarch)
&& regno < gdbarch_num_regs (gdbarch))
{
/* This will apply to CRISv32 only where there are additional registers
after the special registers (pseudo PC and support registers). */
@ -1593,7 +1594,7 @@ static int
cris_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
{
return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
|| (cris_register_size (regno) == 0));
|| (cris_register_size (gdbarch, regno) == 0));
}
/* Nonzero if regno should not be written to the target, for various
@ -1610,7 +1611,7 @@ cris_cannot_store_register (struct gdbarch *gdbarch, int regno)
if (regno < 0
|| regno >= gdbarch_num_regs (gdbarch)
|| cris_register_size (regno) == 0)
|| cris_register_size (gdbarch, regno) == 0)
/* Not implemented. */
return 1;
@ -1635,7 +1636,7 @@ static int
crisv32_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
{
return ((regno < 0 || regno >= gdbarch_num_regs (gdbarch))
|| (cris_register_size (regno) == 0));
|| (cris_register_size (gdbarch, regno) == 0));
}
/* Nonzero if regno should not be written to the target, for various
@ -1652,7 +1653,7 @@ crisv32_cannot_store_register (struct gdbarch *gdbarch, int regno)
if (regno < 0
|| regno >= gdbarch_num_regs (gdbarch)
|| cris_register_size (regno) == 0)
|| cris_register_size (gdbarch, regno) == 0)
/* Not implemented. */
return 1;
@ -2132,7 +2133,7 @@ find_step_target (struct frame_info *frame, inst_env_type *inst_env)
}
else
{
cris_gdb_func (cris_opcodes[i].op, insn, inst_env);
cris_gdb_func (gdbarch, cris_opcodes[i].op, insn, inst_env);
}
} while (!inst_env->invalid
&& (inst_env->prefix_found || inst_env->xflag_found
@ -2928,7 +2929,8 @@ none_reg_mode_jump_op (unsigned short inst, inst_env_type *inst_env)
/* Handles moves to special registers (aka P-register) for all modes. */
static void
move_to_preg_op (unsigned short inst, inst_env_type *inst_env)
move_to_preg_op (struct gdbarch *gdbarch, unsigned short inst,
inst_env_type *inst_env)
{
if (inst_env->prefix_found)
{
@ -2959,11 +2961,11 @@ move_to_preg_op (unsigned short inst, inst_env_type *inst_env)
}
/* The increment depends on the size of the special register. */
if (cris_register_size (cris_get_operand2 (inst)) == 1)
if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
{
process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
}
else if (cris_register_size (cris_get_operand2 (inst)) == 2)
else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
{
process_autoincrement (INST_WORD_SIZE, inst, inst_env);
}
@ -2983,7 +2985,8 @@ move_to_preg_op (unsigned short inst, inst_env_type *inst_env)
except register. */
static void
none_reg_mode_move_from_preg_op (unsigned short inst, inst_env_type *inst_env)
none_reg_mode_move_from_preg_op (struct gdbarch *gdbarch, unsigned short inst,
inst_env_type *inst_env)
{
if (inst_env->prefix_found)
{
@ -3014,11 +3017,11 @@ none_reg_mode_move_from_preg_op (unsigned short inst, inst_env_type *inst_env)
}
/* The increment depends on the size of the special register. */
if (cris_register_size (cris_get_operand2 (inst)) == 1)
if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 1)
{
process_autoincrement (INST_BYTE_SIZE, inst, inst_env);
}
else if (cris_register_size (cris_get_operand2 (inst)) == 2)
else if (cris_register_size (gdbarch, cris_get_operand2 (inst)) == 2)
{
process_autoincrement (INST_WORD_SIZE, inst, inst_env);
}
@ -3698,8 +3701,8 @@ quick_mode_and_cmp_move_or_op (unsigned short inst, inst_env_type *inst_env)
/* Translate op_type to a function and call it. */
static void
cris_gdb_func (enum cris_op_type op_type, unsigned short inst,
inst_env_type *inst_env)
cris_gdb_func (struct gdbarch *gdbarch, enum cris_op_type op_type,
unsigned short inst, inst_env_type *inst_env)
{
switch (op_type)
{
@ -3768,7 +3771,7 @@ cris_gdb_func (enum cris_op_type op_type, unsigned short inst,
break;
case cris_move_to_preg_op:
move_to_preg_op (inst, inst_env);
move_to_preg_op (gdbarch, inst, inst_env);
break;
case cris_muls_op:
@ -3792,7 +3795,7 @@ cris_gdb_func (enum cris_op_type op_type, unsigned short inst,
break;
case cris_none_reg_mode_move_from_preg_op:
none_reg_mode_move_from_preg_op (inst, inst_env);
none_reg_mode_move_from_preg_op (gdbarch, inst, inst_env);
break;
case cris_quick_mode_add_sub_op:

View File

@ -60,8 +60,8 @@ enum gdb_regnum
#define H8300_MAX_NUM_REGS 18
#define E_PSEUDO_CCR_REGNUM (gdbarch_num_regs (current_gdbarch))
#define E_PSEUDO_EXR_REGNUM (gdbarch_num_regs (current_gdbarch)+1)
#define E_PSEUDO_CCR_REGNUM(gdbarch) (gdbarch_num_regs (gdbarch))
#define E_PSEUDO_EXR_REGNUM(gdbarch) (gdbarch_num_regs (gdbarch)+1)
struct h8300_frame_cache
{
@ -90,8 +90,8 @@ static int is_h8300smode (struct gdbarch *gdbarch);
static int is_h8300sxmode (struct gdbarch *gdbarch);
static int is_h8300_normal_mode (struct gdbarch *gdbarch);
#define BINWORD ((is_h8300hmode (current_gdbarch) \
&& !is_h8300_normal_mode (current_gdbarch)) \
#define BINWORD(gdbarch) ((is_h8300hmode (gdbarch) \
&& !is_h8300_normal_mode (gdbarch)) \
? h8300h_reg_size : h8300_reg_size)
static CORE_ADDR
@ -118,7 +118,8 @@ h8300_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
/* Allocate and initialize a frame cache. */
static void
h8300_init_frame_cache (struct h8300_frame_cache *cache)
h8300_init_frame_cache (struct gdbarch *gdbarch,
struct h8300_frame_cache *cache)
{
int i;
@ -132,7 +133,7 @@ h8300_init_frame_cache (struct h8300_frame_cache *cache)
/* Saved registers. We initialize these to -1 since zero is a valid
offset (that's where %fp is supposed to be stored). */
for (i = 0; i < gdbarch_num_regs (current_gdbarch); i++)
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
cache->saved_regs[i] = -1;
}
@ -421,6 +422,7 @@ h8300_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
static struct h8300_frame_cache *
h8300_frame_cache (struct frame_info *next_frame, void **this_cache)
{
struct gdbarch *gdbarch = get_frame_arch (next_frame);
struct h8300_frame_cache *cache;
char buf[4];
int i;
@ -430,7 +432,7 @@ h8300_frame_cache (struct frame_info *next_frame, void **this_cache)
return *this_cache;
cache = FRAME_OBSTACK_ZALLOC (struct h8300_frame_cache);
h8300_init_frame_cache (cache);
h8300_init_frame_cache (gdbarch, cache);
*this_cache = cache;
/* In principle, for normal frames, %fp holds the frame pointer,
@ -443,7 +445,7 @@ h8300_frame_cache (struct frame_info *next_frame, void **this_cache)
if (cache->base == 0)
return cache;
cache->saved_regs[E_PC_REGNUM] = -BINWORD;
cache->saved_regs[E_PC_REGNUM] = -BINWORD (gdbarch);
cache->pc = frame_func_unwind (next_frame, NORMAL_FRAME);
current_pc = frame_pc_unwind (next_frame);
@ -462,18 +464,18 @@ h8300_frame_cache (struct frame_info *next_frame, void **this_cache)
cache->base = frame_unwind_register_unsigned (next_frame, E_SP_REGNUM)
+ cache->sp_offset;
cache->saved_sp = cache->base + BINWORD;
cache->saved_sp = cache->base + BINWORD (gdbarch);
cache->saved_regs[E_PC_REGNUM] = 0;
}
else
{
cache->saved_sp = cache->base + 2 * BINWORD;
cache->saved_regs[E_PC_REGNUM] = -BINWORD;
cache->saved_sp = cache->base + 2 * BINWORD (gdbarch);
cache->saved_regs[E_PC_REGNUM] = -BINWORD (gdbarch);
}
/* Adjust all the saved registers such that they contain addresses
instead of offsets. */
for (i = 0; i < gdbarch_num_regs (get_frame_arch (next_frame)); i++)
for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
if (cache->saved_regs[i] != -1)
cache->saved_regs[i] = cache->base - cache->saved_regs[i];
@ -513,7 +515,7 @@ h8300_frame_prev_register (struct frame_info *next_frame, void **this_cache,
*addrp = 0;
*realnump = -1;
if (valuep)
store_unsigned_integer (valuep, BINWORD, cache->saved_sp);
store_unsigned_integer (valuep, BINWORD (gdbarch), cache->saved_sp);
return;
}
@ -580,7 +582,7 @@ h8300_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
return sal.end;
/* No useable line symbol. Use prologue parsing method. */
h8300_init_frame_cache (&cache);
h8300_init_frame_cache (gdbarch, &cache);
return h8300_analyze_prologue (func_addr, func_end, &cache);
}
@ -659,7 +661,7 @@ h8300_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
int struct_return, CORE_ADDR struct_addr)
{
int stack_alloc = 0, stack_offset = 0;
int wordsize = BINWORD;
int wordsize = BINWORD (gdbarch);
int reg = E_ARG0_REGNUM;
int argument;
@ -1013,18 +1015,19 @@ h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
rval = get_frame_register_signed (frame, regno);
fprintf_filtered (file, "%-14s ", name);
if ((regno == E_PSEUDO_CCR_REGNUM) || \
(regno == E_PSEUDO_EXR_REGNUM && is_h8300smode (gdbarch)))
if ((regno == E_PSEUDO_CCR_REGNUM (gdbarch)) || \
(regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch)))
{
fprintf_filtered (file, "0x%02x ", (unsigned char) rval);
print_longest (file, 'u', 1, rval);
}
else
{
fprintf_filtered (file, "0x%s ", phex ((ULONGEST) rval, BINWORD));
fprintf_filtered (file, "0x%s ", phex ((ULONGEST) rval,
BINWORD (gdbarch)));
print_longest (file, 'd', 1, rval);
}
if (regno == E_PSEUDO_CCR_REGNUM)
if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
{
/* CCR register */
int C, Z, N, V;
@ -1063,7 +1066,7 @@ h8300_print_register (struct gdbarch *gdbarch, struct ui_file *file,
if ((Z | (N ^ V)) == 1)
fprintf_filtered (file, "<= ");
}
else if (regno == E_PSEUDO_EXR_REGNUM && is_h8300smode (gdbarch))
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch) && is_h8300smode (gdbarch))
{
/* EXR register */
unsigned char l = rval & 0xff;
@ -1084,11 +1087,13 @@ h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
{
for (regno = E_R0_REGNUM; regno <= E_SP_REGNUM; ++regno)
h8300_print_register (gdbarch, file, frame, regno);
h8300_print_register (gdbarch, file, frame, E_PSEUDO_CCR_REGNUM);
h8300_print_register (gdbarch, file, frame,
E_PSEUDO_CCR_REGNUM (gdbarch));
h8300_print_register (gdbarch, file, frame, E_PC_REGNUM);
if (is_h8300smode (gdbarch))
{
h8300_print_register (gdbarch, file, frame, E_PSEUDO_EXR_REGNUM);
h8300_print_register (gdbarch, file, frame,
E_PSEUDO_EXR_REGNUM (gdbarch));
if (is_h8300sxmode (gdbarch))
{
h8300_print_register (gdbarch, file, frame, E_SBR_REGNUM);
@ -1110,10 +1115,12 @@ h8300_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
else
{
if (regno == E_CCR_REGNUM)
h8300_print_register (gdbarch, file, frame, E_PSEUDO_CCR_REGNUM);
else if (regno == E_PSEUDO_EXR_REGNUM
h8300_print_register (gdbarch, file, frame,
E_PSEUDO_CCR_REGNUM (gdbarch));
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch)
&& is_h8300smode (gdbarch))
h8300_print_register (gdbarch, file, frame, E_PSEUDO_EXR_REGNUM);
h8300_print_register (gdbarch, file, frame,
E_PSEUDO_EXR_REGNUM (gdbarch));
else
h8300_print_register (gdbarch, file, frame, regno);
}
@ -1136,9 +1143,9 @@ h8300_register_type (struct gdbarch *gdbarch, int regno)
case E_FP_REGNUM:
return builtin_type_void_data_ptr;
default:
if (regno == E_PSEUDO_CCR_REGNUM)
if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
return builtin_type_uint8;
else if (regno == E_PSEUDO_EXR_REGNUM)
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
return builtin_type_uint8;
else if (is_h8300hmode (gdbarch))
return builtin_type_int32;
@ -1153,9 +1160,9 @@ h8300_pseudo_register_read (struct gdbarch *gdbarch,
struct regcache *regcache, int regno,
gdb_byte *buf)
{
if (regno == E_PSEUDO_CCR_REGNUM)
if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
regcache_raw_read (regcache, E_CCR_REGNUM, buf);
else if (regno == E_PSEUDO_EXR_REGNUM)
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
regcache_raw_read (regcache, E_EXR_REGNUM, buf);
else
regcache_raw_read (regcache, regno, buf);
@ -1166,9 +1173,9 @@ h8300_pseudo_register_write (struct gdbarch *gdbarch,
struct regcache *regcache, int regno,
const gdb_byte *buf)
{
if (regno == E_PSEUDO_CCR_REGNUM)
if (regno == E_PSEUDO_CCR_REGNUM (gdbarch))
regcache_raw_write (regcache, E_CCR_REGNUM, buf);
else if (regno == E_PSEUDO_EXR_REGNUM)
else if (regno == E_PSEUDO_EXR_REGNUM (gdbarch))
regcache_raw_write (regcache, E_EXR_REGNUM, buf);
else
regcache_raw_write (regcache, regno, buf);
@ -1178,7 +1185,7 @@ static int
h8300_dbg_reg_to_regnum (struct gdbarch *gdbarch, int regno)
{
if (regno == E_CCR_REGNUM)
return E_PSEUDO_CCR_REGNUM;
return E_PSEUDO_CCR_REGNUM (gdbarch);
return regno;
}
@ -1186,9 +1193,9 @@ static int
h8300s_dbg_reg_to_regnum (struct gdbarch *gdbarch, int regno)
{
if (regno == E_CCR_REGNUM)
return E_PSEUDO_CCR_REGNUM;
return E_PSEUDO_CCR_REGNUM (gdbarch);
if (regno == E_EXR_REGNUM)
return E_PSEUDO_EXR_REGNUM;
return E_PSEUDO_EXR_REGNUM (gdbarch);
return regno;
}

View File

@ -1469,7 +1469,8 @@ inst_saves_fr (unsigned long inst)
static CORE_ADDR
skip_prologue_hard_way (CORE_ADDR pc, int stop_before_branch)
skip_prologue_hard_way (struct gdbarch *gdbarch, CORE_ADDR pc,
int stop_before_branch)
{
char buf[4];
CORE_ADDR orig_pc = pc;
@ -1595,10 +1596,10 @@ restart:
FIXME. Can still die if we have a mix of GR and FR argument
stores! */
if (reg_num >= (gdbarch_ptr_bit (current_gdbarch) == 64 ? 19 : 23)
if (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
&& reg_num <= 26)
{
while (reg_num >= (gdbarch_ptr_bit (current_gdbarch) == 64 ? 19 : 23)
while (reg_num >= (gdbarch_ptr_bit (gdbarch) == 64 ? 19 : 23)
&& reg_num <= 26)
{
pc += 4;
@ -1627,7 +1628,7 @@ restart:
if ((inst & 0xfc000000) == 0x34000000
&& inst_saves_fr (next_inst) >= 4
&& inst_saves_fr (next_inst)
<= (gdbarch_ptr_bit (current_gdbarch) == 64 ? 11 : 7))
<= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
{
/* So we drop into the code below in a reasonable state. */
reg_num = inst_saves_fr (next_inst);
@ -1639,11 +1640,11 @@ restart:
never does prologue scheduling. So once we see one, skip past
all of them. */
if (reg_num >= 4
&& reg_num <= (gdbarch_ptr_bit (current_gdbarch) == 64 ? 11 : 7))
&& reg_num <= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
{
while (reg_num >= 4
&& reg_num
<= (gdbarch_ptr_bit (current_gdbarch) == 64 ? 11 : 7))
<= (gdbarch_ptr_bit (gdbarch) == 64 ? 11 : 7))
{
pc += 8;
status = read_memory_nobpt (pc, buf, 4);
@ -1781,7 +1782,7 @@ hppa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
if (post_prologue_pc != 0)
return max (pc, post_prologue_pc);
else
return (skip_prologue_hard_way (pc, 1));
return (skip_prologue_hard_way (gdbarch, pc, 1));
}
/* Return an unwind entry that falls within the frame's code block. */
@ -1908,7 +1909,7 @@ hppa_frame_cache (struct frame_info *next_frame, void **this_cache)
else
start_pc = frame_func_unwind (next_frame, NORMAL_FRAME);
prologue_end = skip_prologue_hard_way (start_pc, 0);
prologue_end = skip_prologue_hard_way (gdbarch, start_pc, 0);
end_pc = frame_pc_unwind (next_frame);
if (prologue_end != 0 && end_pc > prologue_end)

View File

@ -2332,7 +2332,7 @@ m32c_return_value (struct gdbarch *gdbarch,
static CORE_ADDR
m32c_skip_trampoline_code (struct frame_info *frame, CORE_ADDR stop_pc)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
/* It would be nicer to simply look up the addresses of known
trampolines once, and then compare stop_pc with them. However,

View File

@ -146,9 +146,8 @@ struct gdbarch_tdep
int elf_flags;
};
#define M6811_TDEP gdbarch_tdep (current_gdbarch)
#define STACK_CORRECTION (M6811_TDEP->stack_correction)
#define USE_PAGE_REGISTER (M6811_TDEP->use_page_register)
#define STACK_CORRECTION(gdbarch) (gdbarch_tdep (gdbarch)->stack_correction)
#define USE_PAGE_REGISTER(gdbarch) (gdbarch_tdep (gdbarch)->use_page_register)
struct m68hc11_unwind_cache
{
@ -367,9 +366,9 @@ m68hc11_pseudo_register_write (struct gdbarch *gdbarch,
static const char *
m68hc11_register_name (struct gdbarch *gdbarch, int reg_nr)
{
if (reg_nr == M68HC12_HARD_PC_REGNUM && USE_PAGE_REGISTER)
if (reg_nr == M68HC12_HARD_PC_REGNUM && USE_PAGE_REGISTER (gdbarch))
return "pc";
if (reg_nr == HARD_PC_REGNUM && USE_PAGE_REGISTER)
if (reg_nr == HARD_PC_REGNUM && USE_PAGE_REGISTER (gdbarch))
return "ppc";
if (reg_nr < 0)
@ -604,8 +603,8 @@ m68hc11_get_return_insn (CORE_ADDR pc)
- the offset of the previous frame saved address (from current frame)
- the soft registers which are pushed. */
static CORE_ADDR
m68hc11_scan_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
struct m68hc11_unwind_cache *info)
m68hc11_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
CORE_ADDR current_pc, struct m68hc11_unwind_cache *info)
{
LONGEST save_addr;
CORE_ADDR func_end;
@ -629,7 +628,7 @@ m68hc11_scan_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
return pc;
}
seq_table = gdbarch_tdep (current_gdbarch)->prologue;
seq_table = gdbarch_tdep (gdbarch)->prologue;
/* The 68hc11 stack is as follows:
@ -755,7 +754,7 @@ m68hc11_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
return sal.end;
}
pc = m68hc11_scan_prologue (pc, (CORE_ADDR) -1, &tmp_cache);
pc = m68hc11_scan_prologue (gdbarch, pc, (CORE_ADDR) -1, &tmp_cache);
return pc;
}
@ -778,6 +777,7 @@ struct m68hc11_unwind_cache *
m68hc11_frame_unwind_cache (struct frame_info *next_frame,
void **this_prologue_cache)
{
struct gdbarch *gdbarch = get_frame_arch (next_frame);
ULONGEST prev_sp;
ULONGEST this_base;
struct m68hc11_unwind_cache *info;
@ -808,7 +808,7 @@ m68hc11_frame_unwind_cache (struct frame_info *next_frame,
current_pc = frame_pc_unwind (next_frame);
if (info->pc != 0)
m68hc11_scan_prologue (info->pc, current_pc, info);
m68hc11_scan_prologue (gdbarch, info->pc, current_pc, info);
info->saved_regs[HARD_PC_REGNUM].addr = info->size;
@ -817,7 +817,7 @@ m68hc11_frame_unwind_cache (struct frame_info *next_frame,
info->saved_regs[HARD_PC_REGNUM].addr = info->sp_offset;
this_base = frame_unwind_register_unsigned (next_frame, HARD_SP_REGNUM);
prev_sp = this_base + info->sp_offset + 2;
this_base += STACK_CORRECTION;
this_base += STACK_CORRECTION (gdbarch);
}
else
{
@ -825,7 +825,7 @@ m68hc11_frame_unwind_cache (struct frame_info *next_frame,
to before the first saved register giving the SP. */
prev_sp = this_base + info->size + 2;
this_base += STACK_CORRECTION;
this_base += STACK_CORRECTION (gdbarch);
if (soft_regs[SOFT_FP_REGNUM].name)
info->saved_regs[SOFT_FP_REGNUM].addr = info->size - 2;
}
@ -855,8 +855,8 @@ m68hc11_frame_unwind_cache (struct frame_info *next_frame,
/* Adjust all the saved registers so that they contain addresses and not
offsets. */
for (i = 0;
i < gdbarch_num_regs (current_gdbarch)
+ gdbarch_num_pseudo_regs (current_gdbarch) - 1;
i < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch) - 1;
i++)
if (trad_frame_addr_p (info->saved_regs, i))
{
@ -916,7 +916,7 @@ m68hc11_frame_prev_register (struct frame_info *next_frame,
/* Take into account the 68HC12 specific call (PC + page). */
if (info->return_kind == RETURN_RTC
&& *addrp >= 0x08000 && *addrp < 0x0c000
&& USE_PAGE_REGISTER)
&& USE_PAGE_REGISTER (get_frame_arch (next_frame)))
{
int page_optimized;
@ -1216,7 +1216,7 @@ m68hc11_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
write_memory (sp, buf, 2);
/* Finally, update the stack pointer... */
sp -= STACK_CORRECTION;
sp -= STACK_CORRECTION (gdbarch);
regcache_cooked_write_unsigned (regcache, HARD_SP_REGNUM, sp);
/* ...and fake a frame pointer. */

View File

@ -690,7 +690,8 @@ m68k_analyze_frame_setup (CORE_ADDR pc, CORE_ADDR current_pc,
smaller. Otherwise, return PC. */
static CORE_ADDR
m68k_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc,
CORE_ADDR current_pc,
struct m68k_frame_cache *cache)
{
if (cache->locals >= 0)
@ -704,7 +705,7 @@ m68k_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
{
op = read_memory_unsigned_integer (pc, 2);
if (op == P_FMOVEMX_SP
&& gdbarch_tdep (current_gdbarch)->fpregs_present)
&& gdbarch_tdep (gdbarch)->fpregs_present)
{
/* fmovem.x REGS,-(%sp) */
op = read_memory_unsigned_integer (pc + 2, 2);
@ -788,13 +789,13 @@ m68k_analyze_register_saves (CORE_ADDR pc, CORE_ADDR current_pc,
*/
static CORE_ADDR
m68k_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
struct m68k_frame_cache *cache)
m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
CORE_ADDR current_pc, struct m68k_frame_cache *cache)
{
unsigned int op;
pc = m68k_analyze_frame_setup (pc, current_pc, cache);
pc = m68k_analyze_register_saves (pc, current_pc, cache);
pc = m68k_analyze_register_saves (gdbarch, pc, current_pc, cache);
if (pc >= current_pc)
return current_pc;
@ -819,7 +820,7 @@ m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
int op;
cache.locals = -1;
pc = m68k_analyze_prologue (start_pc, (CORE_ADDR) -1, &cache);
pc = m68k_analyze_prologue (gdbarch, start_pc, (CORE_ADDR) -1, &cache);
if (cache.locals < 0)
return start_pc;
return pc;
@ -868,7 +869,8 @@ m68k_frame_cache (struct frame_info *next_frame, void **this_cache)
cache->pc = frame_func_unwind (next_frame, NORMAL_FRAME);
if (cache->pc != 0)
m68k_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
m68k_analyze_prologue (get_frame_arch (next_frame), cache->pc,
frame_pc_unwind (next_frame), cache);
if (cache->locals < 0)
{

View File

@ -1080,7 +1080,7 @@ mn10300_push_dummy_call (struct gdbarch *gdbarch,
to work with the existing GDB, neither of them can change. So we
just have to cope. */
static int
mn10300_dwarf2_reg_to_regnum (int dwarf2)
mn10300_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2)
{
/* This table is supposed to be shaped like the gdbarch_register_name
initializer in gcc/config/mn10300/mn10300.h. Registers which

View File

@ -337,7 +337,7 @@ fetch_register (struct regcache *regcache, int tid, int regno)
unsigned int offset; /* Offset of registers within the u area. */
char buf[MAX_REGISTER_SIZE];
if (altivec_register_p (regno))
if (altivec_register_p (gdbarch, regno))
{
/* If this is the first time through, or if it is not the first
time through, and we have comfirmed that there is kernel
@ -352,7 +352,7 @@ fetch_register (struct regcache *regcache, int tid, int regno)
AltiVec registers, fall through and return zeroes, because
regaddr will be -1 in this case. */
}
else if (spe_register_p (regno))
else if (spe_register_p (gdbarch, regno))
{
fetch_spe_register (regcache, tid, regno);
return;
@ -637,12 +637,12 @@ store_register (const struct regcache *regcache, int tid, int regno)
size_t bytes_to_transfer;
char buf[MAX_REGISTER_SIZE];
if (altivec_register_p (regno))
if (altivec_register_p (gdbarch, regno))
{
store_altivec_register (regcache, tid, regno);
return;
}
else if (spe_register_p (regno))
else if (spe_register_p (gdbarch, regno))
{
store_spe_register (regcache, tid, regno);
return;

View File

@ -66,8 +66,8 @@ enum return_value_convention ppc64_sysv_abi_return_value (struct gdbarch *gdbarc
const gdb_byte *writebuf);
/* From rs6000-tdep.c... */
int altivec_register_p (int regno);
int spe_register_p (int regno);
int altivec_register_p (struct gdbarch *gdbarch, int regno);
int spe_register_p (struct gdbarch *gdbarch, int regno);
/* Return non-zero if the architecture described by GDBARCH has
floating-point registers (f0 --- f31 and fpscr). */

View File

@ -157,14 +157,14 @@ CORE_ADDR (*rs6000_find_toc_address_hook) (CORE_ADDR) = NULL;
static CORE_ADDR branch_dest (struct frame_info *frame, int opcode,
int instr, CORE_ADDR pc, CORE_ADDR safety);
static CORE_ADDR skip_prologue (CORE_ADDR, CORE_ADDR,
static CORE_ADDR skip_prologue (struct gdbarch *, CORE_ADDR, CORE_ADDR,
struct rs6000_framedata *);
/* Is REGNO an AltiVec register? Return 1 if so, 0 otherwise. */
int
altivec_register_p (int regno)
altivec_register_p (struct gdbarch *gdbarch, int regno)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
if (tdep->ppc_vr0_regnum < 0 || tdep->ppc_vrsave_regnum < 0)
return 0;
else
@ -174,9 +174,9 @@ altivec_register_p (int regno)
/* Return true if REGNO is an SPE register, false otherwise. */
int
spe_register_p (int regno)
spe_register_p (struct gdbarch *gdbarch, int regno)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
/* Is it a reference to EV0 -- EV31, and do we have those? */
if (tdep->ppc_ev0_regnum >= 0
@ -779,7 +779,7 @@ rs6000_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
if (limit_pc == 0)
limit_pc = pc + 100; /* Magic. */
pc = skip_prologue (pc, limit_pc, &frame);
pc = skip_prologue (gdbarch, pc, limit_pc, &frame);
return pc;
}
@ -1251,7 +1251,8 @@ bl_to_blrl_insn_p (CORE_ADDR pc, int insn)
*/
static CORE_ADDR
skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
struct rs6000_framedata *fdata)
{
CORE_ADDR orig_pc = pc;
CORE_ADDR last_prologue_pc = pc;
@ -1272,8 +1273,8 @@ skip_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct rs6000_framedata *fdata)
int prev_insn_was_prologue_insn = 1;
int num_skip_non_prologue_insns = 0;
int r0_contains_arg = 0;
const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
memset (fdata, 0, sizeof (struct rs6000_framedata));
fdata->saved_gpr = -1;
@ -2882,7 +2883,7 @@ rs6000_frame_cache (struct frame_info *next_frame, void **this_cache)
func = frame_func_unwind (next_frame, NORMAL_FRAME);
pc = frame_pc_unwind (next_frame);
skip_prologue (func, pc, &fdata);
skip_prologue (gdbarch, func, pc, &fdata);
/* Figure out the parent's stack pointer. */

View File

@ -641,7 +641,7 @@ score_adjust_memblock_ptr (char **memblock, CORE_ADDR prev_pc,
}
static inst_t *
score_fetch_inst (CORE_ADDR addr, char *memblock)
score_fetch_inst (struct gdbarch *gdbarch, CORE_ADDR addr, char *memblock)
{
static inst_t inst = { 0, 0 };
char buf[SCORE_INSTLEN] = { 0 };
@ -668,7 +668,7 @@ score_fetch_inst (CORE_ADDR addr, char *memblock)
inst.raw = extract_unsigned_integer (buf, SCORE_INSTLEN);
inst.is15 = !(inst.raw & 0x80008000);
inst.v = RM_PBITS (inst.raw);
big = (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG);
big = (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG);
if (inst.is15)
{
if (big ^ ((addr & 0x2) == 2))
@ -686,7 +686,7 @@ score_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
int iscan = 32, stack_sub = 0;
while (iscan-- > 0)
{
inst_t *inst = score_fetch_inst (cpc, NULL);
inst_t *inst = score_fetch_inst (gdbarch, cpc, NULL);
if (!inst)
break;
if (!inst->is15 && !stack_sub
@ -731,7 +731,7 @@ score_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
static int
score_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc)
{
inst_t *inst = score_fetch_inst (cur_pc, NULL);
inst_t *inst = score_fetch_inst (gdbarch, cur_pc, NULL);
if (inst->v == 0x23)
return 1; /* mv! r0, r2 */
@ -757,6 +757,7 @@ score_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
struct frame_info *next_frame,
struct score_frame_cache *this_cache)
{
struct gdbarch *gdbarch = get_frame_arch (next_frame);
CORE_ADDR sp;
CORE_ADDR fp;
CORE_ADDR cur_pc = startaddr;
@ -787,13 +788,13 @@ score_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
/* Reading memory block from target succefully and got all
the instructions(from STARTADDR to PC) needed. */
score_adjust_memblock_ptr (&memblock, prev_pc, cur_pc);
inst = score_fetch_inst (cur_pc, memblock);
inst = score_fetch_inst (gdbarch, cur_pc, memblock);
}
else
{
/* Otherwise, we fetch 4 bytes from target, and GDB also
work correctly. */
inst = score_fetch_inst (cur_pc, NULL);
inst = score_fetch_inst (gdbarch, cur_pc, NULL);
}
if (inst->is15 == 1)
@ -895,7 +896,7 @@ score_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
{
unsigned int save_v = inst->v;
inst_t *inst2 =
score_fetch_inst (cur_pc + SCORE_INSTLEN, NULL);
score_fetch_inst (gdbarch, cur_pc + SCORE_INSTLEN, NULL);
if (inst2->v == 0x23)
{
/* mv! r0, r2 */

View File

@ -711,10 +711,10 @@ sparc_skip_stack_check (const CORE_ADDR start_pc)
}
CORE_ADDR
sparc_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
struct sparc_frame_cache *cache)
sparc_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
CORE_ADDR current_pc, struct sparc_frame_cache *cache)
{
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
unsigned long insn;
int offset = 0;
int dest = -1;
@ -795,7 +795,7 @@ sparc32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
return sal.end;
}
start_pc = sparc_analyze_prologue (start_pc, 0xffffffffUL, &cache);
start_pc = sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffUL, &cache);
/* The psABI says that "Although the first 6 words of arguments
reside in registers, the standard stack frame reserves space for
@ -842,7 +842,8 @@ sparc_frame_cache (struct frame_info *next_frame, void **this_cache)
cache->pc = frame_func_unwind (next_frame, NORMAL_FRAME);
if (cache->pc != 0)
sparc_analyze_prologue (cache->pc, frame_pc_unwind (next_frame), cache);
sparc_analyze_prologue (get_frame_arch (next_frame), cache->pc,
frame_pc_unwind (next_frame), cache);
if (cache->frameless_p)
{

View File

@ -151,7 +151,8 @@ extern unsigned long sparc_fetch_instruction (CORE_ADDR pc);
/* Fetch StackGhost Per-Process XOR cookie. */
extern ULONGEST sparc_fetch_wcookie (void);
extern CORE_ADDR sparc_analyze_prologue (CORE_ADDR pc, CORE_ADDR current_pc,
extern CORE_ADDR sparc_analyze_prologue (struct gdbarch *gdbarch,
CORE_ADDR pc, CORE_ADDR current_pc,
struct sparc_frame_cache *cache);
extern struct sparc_frame_cache *

View File

@ -428,7 +428,8 @@ sparc64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
return sal.end;
}
return sparc_analyze_prologue (start_pc, 0xffffffffffffffffULL, &cache);
return sparc_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffULL,
&cache);
}
/* Normal frames. */