2007-01-04 08:09:54 +01:00
|
|
|
/* Target-dependent code for the S+core architecture, for GDB,
|
|
|
|
the GNU Debugger.
|
|
|
|
|
2018-01-01 05:43:02 +01:00
|
|
|
Copyright (C) 2006-2018 Free Software Foundation, Inc.
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
Contributed by Qinwei (qinwei@sunnorth.com.cn)
|
|
|
|
Contributed by Ching-Peng Lin (cplin@sunplus.com)
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
2007-01-04 08:09:54 +01:00
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
#include "inferior.h"
|
|
|
|
#include "symtab.h"
|
|
|
|
#include "objfiles.h"
|
|
|
|
#include "gdbcore.h"
|
|
|
|
#include "target.h"
|
|
|
|
#include "arch-utils.h"
|
|
|
|
#include "regcache.h"
|
2009-08-06 12:28:38 +02:00
|
|
|
#include "regset.h"
|
2007-01-04 08:09:54 +01:00
|
|
|
#include "dis-asm.h"
|
|
|
|
#include "frame-unwind.h"
|
|
|
|
#include "frame-base.h"
|
|
|
|
#include "trad-frame.h"
|
|
|
|
#include "dwarf2-frame.h"
|
|
|
|
#include "score-tdep.h"
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
#define G_FLD(_i,_ms,_ls) \
|
|
|
|
((unsigned)((_i) << (31 - (_ms))) >> (31 - (_ms) + (_ls)))
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
typedef struct{
|
2011-01-11 22:53:25 +01:00
|
|
|
unsigned long long v;
|
|
|
|
unsigned long long raw;
|
|
|
|
unsigned int len;
|
2007-01-04 08:09:54 +01:00
|
|
|
}inst_t;
|
|
|
|
|
|
|
|
struct score_frame_cache
|
|
|
|
{
|
|
|
|
CORE_ADDR base;
|
2007-05-17 05:15:42 +02:00
|
|
|
CORE_ADDR fp;
|
2007-01-04 08:09:54 +01:00
|
|
|
struct trad_frame_saved_reg *saved_regs;
|
|
|
|
};
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static int target_mach = bfd_mach_score7;
|
2007-05-17 05:15:42 +02:00
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
static struct type *
|
|
|
|
score_register_type (struct gdbarch *gdbarch, int regnum)
|
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
gdb_assert (regnum >= 0
|
2011-01-11 22:53:25 +01:00
|
|
|
&& regnum < ((target_mach == bfd_mach_score7)
|
|
|
|
? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
|
* gdbtypes.h (builtin_type_int0, builtin_type_int8, builtin_type_uint8,
builtin_type_int16, builtin_type_uint16, builtin_type_int32,
builtin_type_uint32, builtin_type_int64, builtin_type_uint64,
builtin_type_int128, builtin_type_uint128): Remove.
(struct builtin_type): New members builtin_int0, builtin_int8,
builtin_uint8, builtin_int16, builtin_uint16, builtin_int32,
builtin_uint32, builtin_int64, builtin_uint64, builtin_int128,
and builtin_uint128.
* gdbtypes.c (builtin_type_int0, builtin_type_int8, builtin_type_uint8,
builtin_type_int16, builtin_type_uint16, builtin_type_int32,
builtin_type_uint32, builtin_type_int64, builtin_type_uint64,
builtin_type_int128, builtin_type_uint128): Remove.
(_initialize_gdbtypes): Do not initialize them.
(gdbtypes_post_init): Initialize fixed-size integer types.
* dwarf2expr.c (unsigned_address_type, signed_address_type): Add
GDBARCH argument. Return platform-specific type.
(dwarf2_read_address, execute_stack_op): Update calls.
* target-descriptions.c (tdesc_gdb_type): Use platform-specific types
instead of global builtin_int_... variables.
* mi/mi-main.c (mi_cmd_data_read_memory): Likewise.
* printcmd.c (do_examine): Likewise.
* jv-exp.y (parse_number): Likewise.
* alpha-tdep.c (alpha_register_type, alpha_push_dummy_call,
alpha_store_return_value): Likewise.
* amd64-linux-tdep.c (amd64_linux_register_type): Likewise.
* amd64-tdep.c (amd64_register_type): Likewise.
* arm-tdep.c (arm_register_type): Likewise.
* avr-tdep.c (avr_register_type): Likewise.
* cris-tdep.c (cris_register_type, crisv32_register_type): Likewise.
* frv-tdep.c (frv_register_type): Likewise.
* h8300-tdep.c h8300_register_type): Likewise.
* hppa-tdep.c (hppa64_push_dummy_call, hppa32_register_type,
hppa64_register_type): Likewise.
* i386-tdep.c (i386_mmx_type, i386_sse_type): Likewise.
* iq2000-tdep.c (iq2000_register_type): Likewise.
* lm32-tdep.c (lm32_register_type, lm32_push_dummy_call): Likewise.
* m32r-tdep.c (m32r_register_type): Likewise.
* m68hc11-tdep.c (m68hc11_register_type, m68hc11_pseudo_register_read,
m68hc11_pseudo_register_write): Likewise.
* m68k-tdep.c (m68k_register_type): Likewise.
* m88k-tdep.c (m88k_register_type, m88k_store_arguments): Likewise.
* mep-tdep.c (mep_register_type): Likewise.
* mips-tdep.c (mips_register_type, mips_pseudo_register_type,
mips_print_fp_register): Likewise.
* moxie-tdep.c (moxie_register_type): Likewise.
* mt-tdep.c (mt_copro_register_type, mt_register_type): Likewise.
* rs6000-tdep.c (rs6000_builtin_type_vec64,
rs6000_builtin_type_vec128): Likewise.
* score-tdep.c (score_register_type): Likewise.
* sparc-tdep.c (sparc32_register_type, sparc32_store_arguments):
Likewise.
* sparc64-tdep.c (sparc64_register_type, sparc64_store_arguments):
Likewise.
* spu-tdep.c (spu_builtin_type_vec128, spu_register_type): Likewise.
* v850-tdep.c (v850_register_type): Likewise.
* xstormy16-tdep.c (xstormy16_register_type): Likewise.
* xtensa-tdep.c (xtensa_register_type): Likewise.
* mt-tdep.c (struct gdbarch_tdep): New data structure.
(mt_gdbarch_init): Alloc TDEP structures.
(mt_register_type): Cache coprocessor type in TDEP instead of
static global variable.
* xtensa-tdep.h (struct gdbarch_tdep): Add type_entries member.
* xtensa-tdep.c (type_entries): Remove.
(xtensa_register_type): Cache fixed-size types in TDEP instead
of in global variable.
2009-07-02 14:46:19 +02:00
|
|
|
return builtin_type (gdbarch)->builtin_uint32;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static CORE_ADDR
|
|
|
|
score_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
|
|
|
|
{
|
|
|
|
return frame_unwind_register_unsigned (next_frame, SCORE_SP_REGNUM);
|
|
|
|
}
|
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
static CORE_ADDR
|
2007-05-14 17:17:00 +02:00
|
|
|
score_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2007-05-14 17:17:00 +02:00
|
|
|
return frame_unwind_register_unsigned (next_frame, SCORE_PC_REGNUM);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static const char *
|
|
|
|
score7_register_name (struct gdbarch *gdbarch, int regnum)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
const char *score_register_names[] = {
|
|
|
|
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
|
|
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
|
|
|
|
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
|
|
|
|
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
|
|
|
|
|
|
|
|
"PSR", "COND", "ECR", "EXCPVEC", "CCR",
|
|
|
|
"EPC", "EMA", "TLBLOCK", "TLBPT", "PEADDR",
|
|
|
|
"TLBRPT", "PEVN", "PECTX", "LIMPFN", "LDMPFN",
|
|
|
|
"PREV", "DREG", "PC", "DSAVE", "COUNTER",
|
|
|
|
"LDCR", "STCR", "CEH", "CEL",
|
|
|
|
};
|
|
|
|
|
|
|
|
gdb_assert (regnum >= 0 && regnum < SCORE7_NUM_REGS);
|
|
|
|
return score_register_names[regnum];
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static const char *
|
2009-08-06 12:28:38 +02:00
|
|
|
score3_register_name (struct gdbarch *gdbarch, int regnum)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
const char *score_register_names[] = {
|
|
|
|
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
|
|
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
|
|
|
|
"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
|
|
|
|
"r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
"PSR", "COND", "ECR", "EXCPVEC", "CCR",
|
|
|
|
"EPC", "EMA", "PREV", "DREG", "DSAVE",
|
|
|
|
"COUNTER", "LDCR", "STCR", "CEH", "CEL",
|
|
|
|
"", "", "PC",
|
2007-01-04 08:09:54 +01:00
|
|
|
};
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
gdb_assert (regnum >= 0 && regnum < SCORE3_NUM_REGS);
|
2007-01-04 08:09:54 +01:00
|
|
|
return score_register_names[regnum];
|
|
|
|
}
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
#if WITH_SIM
|
2007-01-04 08:09:54 +01:00
|
|
|
static int
|
2007-11-19 06:06:24 +01:00
|
|
|
score_register_sim_regno (struct gdbarch *gdbarch, int regnum)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
gdb_assert (regnum >= 0
|
2011-01-11 22:53:25 +01:00
|
|
|
&& regnum < ((target_mach == bfd_mach_score7)
|
|
|
|
? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
|
2007-01-04 08:09:54 +01:00
|
|
|
return regnum;
|
|
|
|
}
|
2009-08-06 12:28:38 +02:00
|
|
|
#endif
|
2007-01-04 08:09:54 +01:00
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static inst_t *
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
score7_fetch_inst (struct gdbarch *gdbarch, CORE_ADDR addr, gdb_byte *memblock)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
|
|
static inst_t inst = { 0, 0, 0 };
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
gdb_byte buf[SCORE_INSTLEN] = { 0 };
|
2009-08-06 12:28:38 +02:00
|
|
|
int big;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
if (target_has_execution && memblock != NULL)
|
|
|
|
{
|
|
|
|
/* Fetch instruction from local MEMBLOCK. */
|
|
|
|
memcpy (buf, memblock, SCORE_INSTLEN);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Fetch instruction from target. */
|
|
|
|
ret = target_read_memory (addr & ~0x3, buf, SCORE_INSTLEN);
|
|
|
|
if (ret)
|
|
|
|
{
|
2011-01-10 18:14:13 +01:00
|
|
|
error (_("Error: target_read_memory in file:%s, line:%d!"),
|
2009-08-06 12:28:38 +02:00
|
|
|
__FILE__, __LINE__);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inst.raw = extract_unsigned_integer (buf, SCORE_INSTLEN, byte_order);
|
|
|
|
inst.len = (inst.raw & 0x80008000) ? 4 : 2;
|
|
|
|
inst.v = ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
|
|
|
|
big = (byte_order == BFD_ENDIAN_BIG);
|
|
|
|
if (inst.len == 2)
|
|
|
|
{
|
|
|
|
if (big ^ ((addr & 0x2) == 2))
|
|
|
|
inst.v = G_FLD (inst.v, 29, 15);
|
|
|
|
else
|
|
|
|
inst.v = G_FLD (inst.v, 14, 0);
|
|
|
|
}
|
|
|
|
return &inst;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inst_t *
|
|
|
|
score3_adjust_pc_and_fetch_inst (CORE_ADDR *pcptr, int *lenptr,
|
|
|
|
enum bfd_endian byte_order)
|
|
|
|
{
|
|
|
|
static inst_t inst = { 0, 0, 0 };
|
|
|
|
|
|
|
|
struct breakplace
|
|
|
|
{
|
|
|
|
int break_offset;
|
|
|
|
int inst_len;
|
|
|
|
};
|
|
|
|
/* raw table 1 (column 2, 3, 4)
|
|
|
|
* 0 1 0 * # 2
|
|
|
|
* 0 1 1 0 # 3
|
|
|
|
0 1 1 0 * # 6
|
|
|
|
table 2 (column 1, 2, 3)
|
|
|
|
* 0 0 * * # 0, 4
|
|
|
|
0 1 0 * * # 2
|
|
|
|
1 1 0 * * # 6
|
|
|
|
*/
|
|
|
|
|
|
|
|
static const struct breakplace bk_table[16] =
|
|
|
|
{
|
|
|
|
/* table 1 */
|
|
|
|
{0, 0},
|
|
|
|
{0, 0},
|
|
|
|
{0, 4},
|
|
|
|
{0, 6},
|
|
|
|
{0, 0},
|
|
|
|
{0, 0},
|
|
|
|
{-2, 6},
|
|
|
|
{0, 0},
|
|
|
|
/* table 2 */
|
|
|
|
{0, 2},
|
|
|
|
{0, 0},
|
|
|
|
{-2, 4},
|
|
|
|
{0, 0},
|
|
|
|
{0, 2},
|
|
|
|
{0, 0},
|
|
|
|
{-4, 6},
|
|
|
|
{0, 0}
|
|
|
|
};
|
|
|
|
|
|
|
|
#define EXTRACT_LEN 2
|
|
|
|
CORE_ADDR adjust_pc = *pcptr & ~0x1;
|
|
|
|
gdb_byte buf[5][EXTRACT_LEN] =
|
|
|
|
{
|
|
|
|
{'\0', '\0'},
|
|
|
|
{'\0', '\0'},
|
|
|
|
{'\0', '\0'},
|
|
|
|
{'\0', '\0'},
|
|
|
|
{'\0', '\0'}
|
|
|
|
};
|
|
|
|
int ret;
|
|
|
|
unsigned int raw;
|
|
|
|
unsigned int cbits = 0;
|
|
|
|
int bk_index;
|
|
|
|
int i, count;
|
|
|
|
|
|
|
|
inst.v = 0;
|
|
|
|
inst.raw = 0;
|
|
|
|
inst.len = 0;
|
|
|
|
|
|
|
|
adjust_pc -= 4;
|
|
|
|
for (i = 0; i < 5; i++)
|
|
|
|
{
|
|
|
|
ret = target_read_memory (adjust_pc + 2 * i, buf[i], EXTRACT_LEN);
|
|
|
|
if (ret != 0)
|
|
|
|
{
|
|
|
|
buf[i][0] = '\0';
|
|
|
|
buf[i][1] = '\0';
|
|
|
|
if (i == 2)
|
2011-01-10 18:14:13 +01:00
|
|
|
error (_("Error: target_read_memory in file:%s, line:%d!"),
|
2009-08-06 12:28:38 +02:00
|
|
|
__FILE__, __LINE__);
|
|
|
|
}
|
|
|
|
|
|
|
|
raw = extract_unsigned_integer (buf[i], EXTRACT_LEN, byte_order);
|
|
|
|
cbits = (cbits << 1) | (raw >> 15);
|
|
|
|
}
|
|
|
|
adjust_pc += 4;
|
|
|
|
|
|
|
|
if (cbits & 0x4)
|
|
|
|
{
|
|
|
|
/* table 1 */
|
|
|
|
cbits = (cbits >> 1) & 0x7;
|
|
|
|
bk_index = cbits;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* table 2 */
|
|
|
|
cbits = (cbits >> 2) & 0x7;
|
|
|
|
bk_index = cbits + 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
gdb_assert (!((bk_table[bk_index].break_offset == 0)
|
|
|
|
&& (bk_table[bk_index].inst_len == 0)));
|
|
|
|
|
|
|
|
inst.len = bk_table[bk_index].inst_len;
|
|
|
|
|
|
|
|
i = (bk_table[bk_index].break_offset + 4) / 2;
|
|
|
|
count = inst.len / 2;
|
|
|
|
for (; count > 0; i++, count--)
|
|
|
|
{
|
|
|
|
inst.raw = (inst.raw << 16)
|
|
|
|
| extract_unsigned_integer (buf[i], EXTRACT_LEN, byte_order);
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (inst.len)
|
|
|
|
{
|
|
|
|
case 2:
|
|
|
|
inst.v = inst.raw & 0x7FFF;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
inst.v = ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
inst.v = ((inst.raw >> 32 & 0x7FFF) << 30)
|
|
|
|
| ((inst.raw >> 16 & 0x7FFF) << 15) | (inst.raw & 0x7FFF);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (pcptr)
|
|
|
|
*pcptr = adjust_pc + bk_table[bk_index].break_offset;
|
|
|
|
if (lenptr)
|
|
|
|
*lenptr = bk_table[bk_index].inst_len;
|
|
|
|
|
|
|
|
#undef EXTRACT_LEN
|
|
|
|
|
|
|
|
return &inst;
|
|
|
|
}
|
|
|
|
|
New gdbarch methods breakpoint_kind_from_pc and sw_breakpoint_from_kind
This patch adds two gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind, and uses target_info.placed_size as "kind"
of the breakpoint. This patch updates the usages of
target_info.placed_size.
The "kind" of a breakpoint is determined by gdbarch rather than
target, so we have gdbarch method breakpoint_kind_from_pc, and we
should set target_info.placed_size out of each implementation of
target to_insert_breakpoint. In this way, each target doesn't have
to set target_info.placed_size any more.
This patch also sets target_info.placed_address before
target_insert_breakpoint too, so that target to_insert_breakpoint
can use it, see record_full_insert_breakpoint.
Before we call target_insert_breakpoint, we set
target_info.placed_address and target_info.placed_size like this,
CORE_ADDR addr = bl->target_info.reqstd_address;
bl->target_info.placed_size = gdbarch_breakpoint_kind_from_pc (bl->gdbarch, &addr);
bl->target_info.placed_address = addr;
return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
target_insert_breakpoint may fail, but it doesn't matter to the "kind"
and "placed_address" of a breakpoint. They should be determined by
gdbarch.
gdb:
2016-11-03 Yao Qi <yao.qi@linaro.org>
* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Define
breakpoint_kind_from_pc and sw_breakpoint_from_kind.
(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): Likewise.
(SET_GDBARCH_BREAKPOINT_MANIPULATION): Call
set_gdbarch_breakpoint_kind_from_pc and
set_gdbarch_sw_breakpoint_from_kind.
* arm-tdep.c: Add comments.
* bfin-tdep.c: Likewise.
* breakpoint.c (breakpoint_kind): New function.
(insert_bp_location): Set target_info.placed_size and
target_info.placed_address.
(bkpt_insert_location): Likewise.
* cris-tdep.c: Add comments.
* gdbarch.sh (breakpoint_kind_from_pc): New.
(sw_breakpoint_from_kind): New.
* gdbarch.c, gdbarch.h: Regenerated.
* ia64-tdep.c (ia64_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
(ia64_memory_remove_breakpoint): Don't assert
bp_tgt->placed_size.
(ia64_breakpoint_kind_from_pc): New function.
(ia64_gdbarch_init): Install ia64_breakpoint_kind_from_pc.
* m32r-tdep.c (m32r_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
* mem-break.c (default_memory_insert_breakpoint): Don't set
bp_tgt->placed_size. Call gdbarch_sw_breakpoint_from_kind.
(default_memory_remove_breakpoint): Call
gdbarch_sw_breakpoint_from_kind.
(memory_validate_breakpoint): Don't check bp_tgt->placed_size.
* mips-tdep.c: Add comments.
* mt-tdep.c: Likewise.
* nios2-tdep.c: Likewise.
* record-full.c (record_full_insert_breakpoint): Don't call
gdbarch_breakpoint_from_pc. Don't set bp_tgt->placed_address
and bp_tgt->placed_size.
* remote.c (remote_insert_breakpoint): Don't call
gdbarch_remote_breakpoint_from_pc. Use bp_tgt->placed_size.
Don't set bp_tgt->placed_address and bp_tgt->placed_size.
(remote_insert_hw_breakpoint): Likewise.
* score-tdep.c: Likewise.
* sh-tdep.c: Likewise.
* tic6x-tdep.c: Likewise.
* v850-tdep.c: Likewise.
* xtensa-tdep.c: Likewise.
2016-11-03 15:35:13 +01:00
|
|
|
/* Implement the breakpoint_kind_from_pc gdbarch method. */
|
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
static int
|
|
|
|
score7_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
unsigned int raw;
|
2016-11-03 15:35:13 +01:00
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
|
|
gdb_byte buf[SCORE_INSTLEN] = { 0 };
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
if ((ret = target_read_memory (*pcptr & ~0x3, buf, SCORE_INSTLEN)) != 0)
|
|
|
|
{
|
2011-01-10 18:14:13 +01:00
|
|
|
error (_("Error: target_read_memory in file:%s, line:%d!"),
|
2016-11-03 15:35:13 +01:00
|
|
|
__FILE__, __LINE__);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
* defs.h (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter.
* findvar.c (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
* gdbcore.h (read_memory_integer, safe_read_memory_integer,
read_memory_unsigned_integer, write_memory_signed_integer,
write_memory_unsigned_integer): Add BYTE_ORDER parameter.
* corefile.c (struct captured_read_memory_integer_arguments): Add
BYTE_ORDER member.
(safe_read_memory_integer): Add BYTE_ORDER parameter. Store it into
struct captured_read_memory_integer_arguments.
(do_captured_read_memory_integer): Pass it to read_memory_integer.
(read_memory_integer): Add BYTE_ORDER parameter. Pass it to
extract_signed_integer.
(read_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it to
extract_unsigned_integer.
(write_memory_signed_integer): Add BYTE_ORDER parameter. Pass it
to store_signed_integer.
(write_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it
to store_unsigned_integer.
* target.h (get_target_memory_unsigned): Add BYTE_ORDER parameter.
* target.c (get_target_memory_unsigned): Add BYTE_ORDER parameter.
Pass it to extract_unsigned_integer.
Update calls to extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer, read_memory_integer,
read_memory_unsigned_integer, safe_read_memory_integer,
write_memory_signed_integer, write_memory_unsigned_integer, and
get_target_memory_unsigned to pass byte order:
* ada-lang.c (ada_value_binop): Update.
* ada-valprint.c (char_at): Update.
* alpha-osf1-tdep.c (alpha_osf1_sigcontext_addr): Update.
* alpha-tdep.c (alpha_lds, alpha_sts, alpha_push_dummy_call,
alpha_extract_return_value, alpha_read_insn,
alpha_get_longjmp_target): Update.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Update.
* amd64obsd-tdep.c (amd64obsd_supply_uthread,
amd64obsd_collect_uthread, amd64obsd_trapframe_cache): Update.
* amd64-tdep.c (amd64_push_dummy_call, amd64_analyze_prologue,
amd64_frame_cache, amd64_sigtramp_frame_cache, fixup_riprel,
amd64_displaced_step_fixup): Update.
* arm-linux-tdep.c (arm_linux_sigreturn_init,
arm_linux_rt_sigreturn_init, arm_linux_supply_gregset): Update.
* arm-tdep.c (thumb_analyze_prologue, arm_skip_prologue,
arm_scan_prologue, arm_push_dummy_call, thumb_get_next_pc,
arm_get_next_pc, arm_extract_return_value, arm_store_return_value,
arm_return_value): Update.
* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
* auxv.c (default_auxv_parse): Update.
* avr-tdep.c (avr_address_to_pointer, avr_pointer_to_address,
avr_scan_prologue, avr_extract_return_value,
avr_frame_prev_register, avr_push_dummy_call): Update.
* bsd-uthread.c (bsd_uthread_check_magic, bsd_uthread_lookup_offset,
bsd_uthread_wait, bsd_uthread_thread_alive,
bsd_uthread_extra_thread_info): Update.
* c-lang.c (c_printstr, print_wchar): Update.
* cp-valprint.c (cp_print_class_member): Update.
* cris-tdep.c (cris_sigcontext_addr, cris_sigtramp_frame_unwind_cache,
cris_push_dummy_call, cris_scan_prologue, cris_store_return_value,
cris_extract_return_value, find_step_target, dip_prefix,
sixteen_bit_offset_branch_op, none_reg_mode_jump_op,
move_mem_to_reg_movem_op, get_data_from_address): Update.
* dwarf2expr.c (dwarf2_read_address, execute_stack_op): Update.
* dwarf2-frame.c (execute_cfa_program): Update.
* dwarf2loc.c (find_location_expression): Update.
* dwarf2read.c (dwarf2_const_value): Update.
* expprint.c (print_subexp_standard): Update.
* findvar.c (unsigned_pointer_to_address, signed_pointer_to_address,
unsigned_address_to_pointer, address_to_signed_pointer,
read_var_value): Update.
* frame.c (frame_unwind_register_signed,
frame_unwind_register_unsigned, get_frame_memory_signed,
get_frame_memory_unsigned): Update.
* frame-unwind.c (frame_unwind_got_constant): Update.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp,
frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Update.
* frv-tdep.c (frv_analyze_prologue, frv_skip_main_prologue,
frv_extract_return_value, find_func_descr,
frv_convert_from_func_ptr_addr, frv_push_dummy_call): Update.
* f-valprint.c (f_val_print): Update.
* gnu-v3-abi.c (gnuv3_decode_method_ptr, gnuv3_make_method_ptr):
Update.
* h8300-tdep.c (h8300_is_argument_spill, h8300_analyze_prologue,
h8300_push_dummy_call, h8300_extract_return_value,
h8300h_extract_return_value, h8300_store_return_value,
h8300h_store_return_value): Update.
* hppabsd-tdep.c (hppabsd_find_global_pointer): Update.
* hppa-hpux-nat.c (hppa_hpux_fetch_register, hppa_hpux_store_register):
Update.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline,
hppa64_hpux_in_solib_call_trampoline,
hppa_hpux_in_solib_return_trampoline, hppa_hpux_skip_trampoline_code,
hppa_hpux_sigtramp_frame_unwind_cache,
hppa_hpux_sigtramp_unwind_sniffer, hppa32_hpux_find_global_pointer,
hppa64_hpux_find_global_pointer, hppa_hpux_search_pattern,
hppa32_hpux_search_dummy_call_sequence,
hppa64_hpux_search_dummy_call_sequence, hppa_hpux_supply_save_state,
hppa_hpux_unwind_adjust_stub): Update.
* hppa-linux-tdep.c (insns_match_pattern,
hppa_linux_find_global_pointer): Update.
* hppa-tdep.c (hppa_in_function_epilogue_p, hppa32_push_dummy_call,
hppa64_convert_code_addr_to_fptr, hppa64_push_dummy_call,
skip_prologue_hard_way, hppa_frame_cache, hppa_fallback_frame_cache,
hppa_pseudo_register_read, hppa_frame_prev_register_helper,
hppa_match_insns): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* i386-tdep.c (i386bsd_sigcontext_addr): Update.
* i386-cygwin-tdep.c (core_process_module_section): Update.
* i386-darwin-nat.c (i386_darwin_sstep_at_sigreturn,
amd64_darwin_sstep_at_sigreturn): Update.
* i386-darwin-tdep.c (i386_darwin_sigcontext_addr,
amd64_darwin_sigcontext_addr): Likewise.
* i386-linux-nat.c (i386_linux_sigcontext_addr): Update.
* i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Update.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Update.
* i386obsd-nat.c (i386obsd_supply_pcb): Update.
* i386obsd-tdep.c (i386obsd_supply_uthread, i386obsd_collect_uthread,
i386obsd_trapframe_cache): Update.
* i386-tdep.c (i386_displaced_step_fixup, i386_follow_jump,
i386_analyze_frame_setup, i386_analyze_prologue,
i386_skip_main_prologue, i386_frame_cache, i386_sigtramp_frame_cache,
i386_get_longjmp_target, i386_push_dummy_call,
i386_pe_skip_trampoline_code, i386_svr4_sigcontext_addr,
i386_fetch_pointer_argument): Update.
* i387-tdep.c (i387_supply_fsave): Update.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Update.
* ia64-tdep.c (ia64_pseudo_register_read, ia64_pseudo_register_write,
examine_prologue, ia64_frame_cache, ia64_frame_prev_register,
ia64_sigtramp_frame_cache, ia64_sigtramp_frame_prev_register,
ia64_access_reg, ia64_access_rse_reg, ia64_libunwind_frame_this_id,
ia64_libunwind_frame_prev_register,
ia64_libunwind_sigtramp_frame_this_id,
ia64_libunwind_sigtramp_frame_prev_register, ia64_find_global_pointer,
find_extant_func_descr, find_func_descr,
ia64_convert_from_func_ptr_addr, ia64_push_dummy_call, ia64_dummy_id,
ia64_unwind_pc): Update.
* iq2000-tdep.c (iq2000_pointer_to_address, iq2000_address_to_pointer,
iq2000_scan_prologue, iq2000_extract_return_value,
iq2000_push_dummy_call): Update.
* irix5nat.c (fill_gregset): Update.
* jv-lang.c (evaluate_subexp_java): Update.
* jv-valprint.c (java_value_print): Update.
* lm32-tdep.c (lm32_analyze_prologue, lm32_push_dummy_call,
lm32_extract_return_value, lm32_store_return_value): Update.
* m32c-tdep.c (m32c_push_dummy_call, m32c_return_value,
m32c_skip_trampoline_code, m32c_m16c_address_to_pointer,
m32c_m16c_pointer_to_address): Update.
* m32r-tdep.c (m32r_store_return_value, decode_prologue,
m32r_skip_prologue, m32r_push_dummy_call, m32r_extract_return_value):
Update.
* m68hc11-tdep.c (m68hc11_pseudo_register_read,
m68hc11_pseudo_register_write, m68hc11_analyze_instruction,
m68hc11_push_dummy_call): Update.
* m68linux-tdep.c (m68k_linux_pc_in_sigtramp,
m68k_linux_get_sigtramp_info, m68k_linux_sigtramp_frame_cache):
Update.
* m68k-tdep.c (m68k_push_dummy_call, m68k_analyze_frame_setup,
m68k_analyze_register_saves, m68k_analyze_prologue, m68k_frame_cache,
m68k_get_longjmp_target): Update.
* m88k-tdep.c (m88k_fetch_instruction): Update.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_csr_write,
mep_pseudo_cr32_write, mep_get_insn, mep_push_dummy_call): Update.
* mi/mi-main.c (mi_cmd_data_write_memory): Update.
* mips-linux-tdep.c (mips_linux_get_longjmp_target, supply_32bit_reg,
mips64_linux_get_longjmp_target, mips64_fill_gregset,
mips64_fill_fpregset, mips_linux_in_dynsym_stub): Update.
* mipsnbdsd-tdep.c (mipsnbsd_get_longjmp_target): Update.
* mips-tdep.c (mips_fetch_instruction, fetch_mips_16,
mips_eabi_push_dummy_call, mips_n32n64_push_dummy_call,
mips_o32_push_dummy_call, mips_o64_push_dummy_call,
mips_single_step_through_delay, mips_skip_pic_trampoline_code,
mips_integer_to_address): Update.
* mn10300-tdep.c (mn10300_analyze_prologue, mn10300_push_dummy_call):
Update.
* monitor.c (monitor_supply_register, monitor_write_memory,
monitor_read_memory_single): Update.
* moxie-tdep.c (moxie_store_return_value, moxie_extract_return_value,
moxie_analyze_prologue): Update.
* mt-tdep.c (mt_return_value, mt_skip_prologue, mt_select_coprocessor,
mt_pseudo_register_read, mt_pseudo_register_write, mt_registers_info,
mt_push_dummy_call): Update.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class, find_implementation_from_class): Update.
* ppc64-linux-tdep.c (ppc64_desc_entry_point,
ppc64_linux_convert_from_func_ptr_addr, ppc_linux_sigtramp_cache):
Update.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_sniffer,
ppcobsd_sigtramp_frame_cache): Update.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call,
do_ppc_sysv_return_value, ppc64_sysv_abi_push_dummy_call,
ppc64_sysv_abi_return_value): Update.
* ppc-linux-nat.c (ppc_linux_auxv_parse): Update.
* procfs.c (procfs_auxv_parse): Update.
* p-valprint.c (pascal_val_print): Update.
* regcache.c (regcache_raw_read_signed, regcache_raw_read_unsigned,
regcache_raw_write_signed, regcache_raw_write_unsigned,
regcache_cooked_read_signed, regcache_cooked_read_unsigned,
regcache_cooked_write_signed, regcache_cooked_write_unsigned): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-mips.c (mips_wait, mips_fetch_registers, mips_xfer_memory):
Update.
* rs6000-aix-tdep.c (rs6000_push_dummy_call, rs6000_return_value,
rs6000_convert_from_func_ptr_addr, branch_dest,
rs6000_software_single_step): Update.
* rs6000-tdep.c (rs6000_in_function_epilogue_p,
ppc_displaced_step_fixup, ppc_deal_with_atomic_sequence,
bl_to_blrl_insn_p, rs6000_fetch_instruction, skip_prologue,
rs6000_skip_main_prologue, rs6000_skip_trampoline_code,
rs6000_frame_cache): Update.
* s390-tdep.c (s390_pseudo_register_read, s390_pseudo_register_write,
s390x_pseudo_register_read, s390x_pseudo_register_write, s390_load,
s390_backchain_frame_unwind_cache, s390_sigtramp_frame_unwind_cache,
extend_simple_arg, s390_push_dummy_call, s390_return_value): Update.
* scm-exp.c (scm_lreadr): Update.
* scm-lang.c (scm_get_field, scm_unpack): Update.
* scm-valprint.c (scm_val_print): Update.
* score-tdep.c (score_breakpoint_from_pc, score_push_dummy_call,
score_fetch_inst): Update.
* sh64-tdep.c (look_for_args_moves, sh64_skip_prologue_hard_way,
sh64_analyze_prologue, sh64_push_dummy_call, sh64_extract_return_value,
sh64_pseudo_register_read, sh64_pseudo_register_write,
sh64_frame_prev_register): Update:
* sh-tdep.c (sh_analyze_prologue, sh_push_dummy_call_fpu,
sh_push_dummy_call_nofpu, sh_extract_return_value_nofpu,
sh_store_return_value_nofpu, sh_in_function_epilogue_p): Update.
* solib-darwin.c (darwin_load_image_infos): Update.
* solib-frv.c (fetch_loadmap, lm_base, frv_current_sos, enable_break2,
find_canonical_descriptor_in_load_object): Update.
* solib-irix.c (extract_mips_address, fetch_lm_info, irix_current_sos,
irix_open_symbol_file_object): Update.
* solib-som.c (som_solib_create_inferior_hook, link_map_start,
som_current_sos, som_open_symbol_file_object): Update.
* solib-sunos.c (SOLIB_EXTRACT_ADDRESS, LM_ADDR, LM_NEXT, LM_NAME):
Update.
* solib-svr4.c (read_program_header, scan_dyntag_auxv,
solib_svr4_r_ldsomap): Update.
* sparc64-linux-tdep.c (sparc64_linux_step_trap): Update.
* sparc64obsd-tdep.c (sparc64obsd_supply_uthread,
sparc64obsd_collect_uthread): Update.
* sparc64-tdep.c (sparc64_pseudo_register_read,
sparc64_pseudo_register_write, sparc64_supply_gregset,
sparc64_collect_gregset): Update.
* sparc-linux-tdep.c (sparc32_linux_step_trap): Update.
* sparcobsd-tdep.c (sparc32obsd_supply_uthread,
sparc32obsd_collect_uthread): Update.
* sparc-tdep.c (sparc_fetch_wcookie, sparc32_push_dummy_code,
sparc32_store_arguments, sparc32_return_value, sparc_supply_rwindow,
sparc_collect_rwindow): Update.
* spu-linux-nat.c (parse_spufs_run): Update.
* spu-tdep.c (spu_pseudo_register_read_spu,
spu_pseudo_register_write_spu, spu_pointer_to_address,
spu_analyze_prologue, spu_in_function_epilogue_p,
spu_frame_unwind_cache, spu_push_dummy_call, spu_software_single_step,
spu_get_longjmp_target, spu_get_overlay_table, spu_overlay_update_osect,
info_spu_signal_command, info_spu_mailbox_list, info_spu_dma_cmdlist,
info_spu_dma_command, info_spu_proxydma_command): Update.
* stack.c (print_frame_nameless_args, frame_info): Update.
* symfile.c (read_target_long_array, simple_read_overlay_table,
simple_read_overlay_region_table): Update.
* target.c (debug_print_register): Update.
* tramp-frame.c (tramp_frame_start): Update.
* v850-tdep.c (v850_analyze_prologue, v850_push_dummy_call,
v850_extract_return_value, v850_store_return_value,
* valarith.c (value_binop, value_bit_index): Update.
* valops.c (value_cast): Update.
* valprint.c (val_print_type_code_int, val_print_string,
read_string): Update.
* value.c (unpack_long, unpack_double, unpack_field_as_long,
modify_field, pack_long): Update.
* vax-tdep.c (vax_store_arguments, vax_push_dummy_call,
vax_skip_prologue): Update.
* xstormy16-tdep.c (xstormy16_push_dummy_call,
xstormy16_analyze_prologue, xstormy16_in_function_epilogue_p,
xstormy16_resolve_jmp_table_entry, xstormy16_find_jmp_table_entry,
xstormy16_pointer_to_address, xstormy16_address_to_pointer): Update.
* xtensa-tdep.c (extract_call_winsize, xtensa_pseudo_register_read,
xtensa_pseudo_register_write, xtensa_frame_cache,
xtensa_push_dummy_call, call0_track_op, call0_frame_cache): Update.
* dfp.h (decimal_to_string, decimal_from_string, decimal_from_integral,
decimal_from_floating, decimal_to_doublest, decimal_is_zero): Add
BYTE_ORDER parameter.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
* dfp.c (match_endianness): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
(decimal_to_string, decimal_from_integral, decimal_from_floating,
decimal_to_doublest, decimal_is_zero): Add BYTE_ORDER parameter.
Pass it to match_endianness.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters. Pass them to match_endianness.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
Pass them to match_endianness.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
Pass them to match_endianness.
* valarith.c (value_args_as_decimal): Add BYTE_ORDER_X and
BYTE_ORDER_Y output parameters.
(value_binop): Update call to value_args_as_decimal.
Update calls to decimal_to_string, decimal_from_string,
decimal_from_integral, decimal_from_floating, decimal_to_doublest,
decimal_is_zero, decimal_binop, decimal_compare and decimal_convert
to pass/receive byte order:
* c-exp.y (parse_number): Update.
* printcmd.c (printf_command): Update.
* valarith.c (value_args_as_decimal, value_binop, value_logical_not,
value_equal, value_less): Update.
* valops.c (value_cast, value_one): Update.
* valprint.c (print_decimal_floating): Update.
* value.c (unpack_long, unpack_double): Update.
* python/python-value.c (valpy_nonzero): Update.
* ada-valprint.c (char_at): Add BYTE_ORDER parameter.
(printstr): Update calls to char_at.
(ada_val_print_array): Likewise.
* valprint.c (read_string): Add BYTE_ORDER parameter.
(val_print_string): Update call to read_string.
* c-lang.c (c_get_string): Likewise.
* charset.h (target_wide_charset): Add BYTE_ORDER parameter.
* charset.c (target_wide_charset): Add BYTE_ORDER parameter.
Use it instead of current_gdbarch.
* printcmd.c (printf_command): Update calls to target_wide_charset.
* c-lang.c (charset_for_string_type): Add BYTE_ORDER parameter.
Pass to target_wide_charset. Use it instead of current_gdbarch.
(classify_type): Add BYTE_ORDER parameter. Pass to
charset_for_string_type. Allow NULL encoding pointer.
(print_wchar): Add BYTE_ORDER parameter.
(c_emit_char): Update calls to classify_type and print_wchar.
(c_printchar, c_printstr): Likewise.
* gdbarch.sh (in_solib_return_trampoline): Convert to type "m".
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.h (generic_in_solib_return_trampoline): Add GDBARCH
parameter.
* arch-utils.c (generic_in_solib_return_trampoline): Likewise.
* hppa-hpux-tdep.c (hppa_hpux_in_solib_return_trampoline): Likewise.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise.
(rs6000_skip_trampoline_code): Update call.
* alpha-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
dynamic_sigtramp_offset and pc_in_sigtramp callbacks.
(alpha_read_insn): Add GDBARCH parameter.
* alpha-tdep.c (alpha_lds, alpha_sts): Add GDBARCH parameter.
(alpha_register_to_value): Pass architecture to alpha_sts.
(alpha_extract_return_value): Likewise.
(alpha_value_to_register): Pass architecture to alpha_lds.
(alpha_store_return_value): Likewise.
(alpha_read_insn): Add GDBARCH parameter.
(alpha_skip_prologue): Pass architecture to alpha_read_insn.
(alpha_heuristic_proc_start): Likewise.
(alpha_heuristic_frame_unwind_cache): Likewise.
(alpha_next_pc): Likewise.
(alpha_sigtramp_frame_this_id): Pass architecture to
tdep->dynamic_sigtramp_offset callback.
(alpha_sigtramp_frame_sniffer): Pass architecture to
tdep->pc_in_sigtramp callback.
* alphafbsd-tdep.c (alphafbsd_pc_in_sigtramp): Add GDBARCH parameter.
(alphafbsd_sigtramp_offset): Likewise.
* alpha-linux-tdep.c (alpha_linux_sigtramp_offset_1): Add GDBARCH
parameter. Pass to alpha_read_insn.
(alpha_linux_sigtramp_offset): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset_1.
(alpha_linux_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset.
(alpha_linux_sigcontext_addr): Pass architecture to alpha_read_insn
and alpha_linux_sigtramp_offset.
* alphanbsd-tdep.c (alphanbsd_sigtramp_offset): Add GDBARCH parameter.
(alphanbsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alphanbsd_sigtramp_offset.
* alphaobsd-tdep.c (alphaobsd_sigtramp_offset): Add GDBARCH parameter.
(alphaobsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_read_insn.
(alphaobsd_sigcontext_addr): Pass architecture to
alphaobsd_sigtramp_offset.
* alpha-osf1-tdep.c (alpha_osf1_pc_in_sigtramp): Add GDBARCH
parameter.
* amd64-tdep.c (amd64_analyze_prologue): Add GDBARCH parameter.
(amd64_skip_prologue): Pass architecture to amd64_analyze_prologue.
(amd64_frame_cache): Likewise.
* arm-tdep.c (SWAP_SHORT, SWAP_INT): Remove.
(thumb_analyze_prologue, arm_skip_prologue, arm_scan_prologue,
thumb_get_next_pc, arm_get_next_pc): Do not use SWAP_ macros.
* arm-wince-tdep.c: Include "frame.h".
* avr-tdep.c (EXTRACT_INSN): Remove.
(avr_scan_prologue): Add GDBARCH argument, inline EXTRACT_INSN.
(avr_skip_prologue): Pass architecture to avr_scan_prologue.
(avr_frame_unwind_cache): Likewise.
* cris-tdep.c (struct instruction_environment): Add BYTE_ORDER member.
(find_step_target): Initialize it.
(get_data_from_address): Add BYTE_ORDER parameter.
(bdap_prefix): Pass byte order to get_data_from_address.
(handle_prefix_assign_mode_for_aritm_op): Likewise.
(three_operand_add_sub_cmp_and_or_op): Likewise.
(handle_inc_and_index_mode_for_aritm_op): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp): Add GDBARCH parameter.
(frv_linux_sigcontext_reg_addr): Pass architecture to
frv_linux_pc_in_sigtramp.
(frv_linux_sigtramp_frame_sniffer): Likewise.
* h8300-tdep.c (h8300_is_argument_spill): Add GDBARCH parameter.
(h8300_analyze_prologue): Add GDBARCH parameter. Pass to
h8300_is_argument_spill.
(h8300_frame_cache, h8300_skip_prologue): Pass architecture
to h8300_analyze_prologue.
* hppa-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
in_solib_call_trampoline callback.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter.
* hppa-tdep.c (hppa64_convert_code_addr_to_fptr): Add GDBARCH
parameter.
(hppa64_push_dummy_call): Pass architecture to
hppa64_convert_code_addr_to_fptr.
(hppa_match_insns): Add GDBARCH parameter.
(hppa_match_insns_relaxed): Add GDBARCH parameter. Pass to
hppa_match_insns.
(hppa_skip_trampoline_code): Pass architecture to hppa_match_insns.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter. Pass to
hppa_match_insns_relaxed.
(hppa_stub_unwind_sniffer): Pass architecture to
tdep->in_solib_call_trampoline callback.
* hppa-hpux-tdep.c (hppa_hpux_search_pattern): Add GDBARCH parameter.
(hppa32_hpux_search_dummy_call_sequence): Pass architecture to
hppa_hpux_search_pattern.
* hppa-linux-tdep.c (insns_match_pattern): Add GDBARCH parameter.
(hppa_linux_sigtramp_find_sigcontext): Add GDBARCH parameter.
Pass to insns_match_pattern.
(hppa_linux_sigtramp_frame_unwind_cache): Pass architecture to
hppa_linux_sigtramp_find_sigcontext.
(hppa_linux_sigtramp_frame_sniffer): Likewise.
(hppa32_hpux_in_solib_call_trampoline): Add GDBARCH parameter.
(hppa64_hpux_in_solib_call_trampoline): Likewise.
* i386-tdep.c (i386_follow_jump): Add GDBARCH parameter.
(i386_analyze_frame_setup): Add GDBARCH parameter.
(i386_analyze_prologue): Add GDBARCH parameter. Pass to
i386_follow_jump and i386_analyze_frame_setup.
(i386_skip_prologue): Pass architecture to i386_analyze_prologue
and i386_follow_jump.
(i386_frame_cache): Pass architecture to i386_analyze_prologue.
(i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-tdep.h (i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-cygwin-tdep.c (i386_cygwin_skip_trampoline_code): Pass
frame to i386_pe_skip_trampoline_code.
* ia64-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter
to sigcontext_register_address callback.
* ia64-tdep.c (ia64_find_global_pointer): Add GDBARCH parameter.
(ia64_find_unwind_table): Pass architecture to
ia64_find_global_pointer.
(find_extant_func_descr): Add GDBARCH parameter.
(find_func_descr): Pass architecture to find_extant_func_descr
and ia64_find_global_pointer.
(ia64_sigtramp_frame_init_saved_regs): Pass architecture to
tdep->sigcontext_register_address callback.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Add
GDBARCH parameter.
* iq2000-tdep.c (iq2000_scan_prologue): Add GDBARCH parameter.
(iq2000_frame_cache): Pass architecture to iq2000_scan_prologue.
* lm32-tdep.c (lm32_analyze_prologue): Add GDBARCH parameter.
(lm32_skip_prologue, lm32_frame_cache): Pass architecture to
lm32_analyze_prologue.
* m32r-tdep.c (decode_prologue): Add GDBARCH parameter.
(m32r_skip_prologue): Pass architecture to decode_prologue.
* m68hc11-tdep.c (m68hc11_analyze_instruction): Add GDBARCH parameter.
(m68hc11_scan_prologue): Pass architecture to
m68hc11_analyze_instruction.
* m68k-tdep.c (m68k_analyze_frame_setup): Add GDBARCH parameter.
(m68k_analyze_prologue): Pass architecture to
m68k_analyze_frame_setup.
* m88k-tdep.c (m88k_fetch_instruction): Add BYTE_ORDER parameter.
(m88k_analyze_prologue): Add GDBARCH parameter. Pass byte order
to m88k_fetch_instruction.
(m88k_skip_prologue): Pass architecture to m88k_analyze_prologue.
(m88k_frame_cache): Likewise.
* mep-tdep.c (mep_get_insn): Add GDBARCH parameter.
(mep_analyze_prologue): Pass architecture to mep_get_insn.
* mips-tdep.c (mips_fetch_instruction): Add GDBARCH parameter.
(mips32_next_pc): Pass architecture to mips_fetch_instruction.
(deal_with_atomic_sequence): Likewise.
(unpack_mips16): Add GDBARCH parameter, pass to mips_fetch_instruction.
(mips16_scan_prologue): Likewise.
(mips32_scan_prologue): Likewise.
(mips16_in_function_epilogue_p): Likewise.
(mips32_in_function_epilogue_p): Likewise.
(mips_about_to_return): Likewise.
(mips_insn16_frame_cache): Pass architecture to mips16_scan_prologue.
(mips_insn32_frame_cache): Pass architecture to mips32_scan_prologue.
(mips_skip_prologue): Pass architecture to mips16_scan_prologue
and mips32_scan_prologue.
(mips_in_function_epilogue_p): Pass architecture to
mips16_in_function_epilogue_p and
mips32_in_function_epilogue_p.
(heuristic_proc_start): Pass architecture to mips_fetch_instruction
and mips_about_to_return.
(mips_skip_mips16_trampoline_code): Pass architecture to
mips_fetch_instruction.
(fetch_mips_16): Add GDBARCH parameter.
(mips16_next_pc): Pass architecture to fetch_mips_16.
(extended_mips16_next_pc): Pass architecture to unpack_mips16 and
fetch_mips_16.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class): Add GDBARCH parameter.
(find_implementation_from_class): Add GDBARCH parameter, pass
to read_objc_class, read_objc_methlist_nmethods, and
read_objc_methlist_method.
(find_implementation): Add GDBARCH parameter, pass to
read_objc_object and find_implementation_from_class.
(resolve_msgsend, resolve_msgsend_stret): Pass architecture
to find_implementation.
(resolve_msgsend_super, resolve_msgsend_super_stret): Pass
architecture to read_objc_super and find_implementation_from_class.
* ppc64-linux-tdep.c (ppc64_desc_entry_point): Add GDBARCH parameter.
(ppc64_standard_linkage1_target, ppc64_standard_linkage2_target,
ppc64_standard_linkage3_target): Pass architecture to
ppc64_desc_entry_point.
* rs6000-tdep.c (bl_to_blrl_insn_p): Add BYTE_ORDER parameter.
(skip_prologue): Pass byte order to bl_to_blrl_insn_p.
(rs6000_fetch_instruction): Add GDBARCH parameter.
(rs6000_skip_stack_check): Add GDBARCH parameter, pass to
rs6000_fetch_instruction.
(skip_prologue): Pass architecture to rs6000_fetch_instruction.
* remote-mips.c (mips_store_word): Return old_contents as host
integer value instead of target bytes.
* s390-tdep.c (struct s390_prologue_data): Add BYTE_ORDER member.
(s390_analyze_prologue): Initialize it.
(extend_simple_arg): Add GDBARCH parameter.
(s390_push_dummy_call): Pass architecture to extend_simple_arg.
* scm-lang.c (scm_get_field): Add BYTE_ORDER parameter.
* scm-lang.h (scm_get_field): Add BYTE_ORDER parameter.
(SCM_CAR, SCM_CDR): Pass SCM_BYTE_ORDER to scm_get_field.
* scm-valprint.c (scm_scmval_print): Likewise.
(scm_scmlist_print, scm_ipruk, scm_scmval_print): Define
SCM_BYTE_ORDER.
* sh64-tdep.c (look_for_args_moves): Add GDBARCH parameter.
(sh64_skip_prologue_hard_way): Add GDBARCH parameter, pass to
look_for_args_moves.
(sh64_skip_prologue): Pass architecture to
sh64_skip_prologue_hard_way.
* sh-tdep.c (sh_analyze_prologue): Add GDBARCH parameter.
(sh_skip_prologue): Pass architecture to sh_analyze_prologue.
(sh_frame_cache): Likewise.
* solib-irix.c (extract_mips_address): Add GDBARCH parameter.
(fetch_lm_info, irix_current_sos, irix_open_symbol_file_object):
Pass architecture to extract_mips_address.
* sparc-tdep.h (sparc_fetch_wcookie): Add GDBARCH parameter.
* sparc-tdep.c (sparc_fetch_wcookie): Add GDBARCH parameter.
(sparc_supply_rwindow, sparc_collect_rwindow): Pass architecture
to sparc_fetch_wcookie.
(sparc32_frame_prev_register): Likewise.
* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
* sparc32nbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
* spu-tdep.c (spu_analyze_prologue): Add GDBARCH parameter.
(spu_skip_prologue): Pass architecture to spu_analyze_prologue.
(spu_virtual_frame_pointer): Likewise.
(spu_frame_unwind_cache): Likewise.
(info_spu_mailbox_list): Add BYTE_ORER parameter.
(info_spu_mailbox_command): Pass byte order to info_spu_mailbox_list.
(info_spu_dma_cmdlist): Add BYTE_ORER parameter.
(info_spu_dma_command, info_spu_proxydma_command): Pass byte order
to info_spu_dma_cmdlist.
* symfile.c (read_target_long_array): Add GDBARCH parameter.
(simple_read_overlay_table, simple_read_overlay_region_table,
simple_overlay_update_1): Pass architecture to read_target_long_array.
* v850-tdep.c (v850_analyze_prologue): Add GDBARCH parameter.
(v850_frame_cache): Pass architecture to v850_analyze_prologue.
* xstormy16-tdep.c (xstormy16_analyze_prologue): Add GDBARCH
parameter.
(xstormy16_skip_prologue, xstormy16_frame_cache): Pass architecture
to xstormy16_analyze_prologue.
(xstormy16_resolve_jmp_table_entry): Add GDBARCH parameter.
(xstormy16_find_jmp_table_entry): Likewise.
(xstormy16_skip_trampoline_code): Pass architecture to
xstormy16_resolve_jmp_table_entry.
(xstormy16_pointer_to_address): Likewise.
(xstormy16_address_to_pointer): Pass architecture to
xstormy16_find_jmp_table_entry.
* xtensa-tdep.c (call0_track_op): Add GDBARCH parameter.
(call0_analyze_prologue): Add GDBARCH parameter, pass to
call0_track_op.
(call0_frame_cache): Pass architecture to call0_analyze_prologue.
(xtensa_skip_prologue): Likewise.
2009-07-02 19:25:59 +02:00
|
|
|
raw = extract_unsigned_integer (buf, SCORE_INSTLEN, byte_order);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
if (!(raw & 0x80008000))
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2016-11-03 15:35:13 +01:00
|
|
|
/* 16bits instruction. */
|
|
|
|
*pcptr &= ~0x1;
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* 32bits instruction. */
|
|
|
|
*pcptr &= ~0x3;
|
|
|
|
return 4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
New gdbarch methods breakpoint_kind_from_pc and sw_breakpoint_from_kind
This patch adds two gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind, and uses target_info.placed_size as "kind"
of the breakpoint. This patch updates the usages of
target_info.placed_size.
The "kind" of a breakpoint is determined by gdbarch rather than
target, so we have gdbarch method breakpoint_kind_from_pc, and we
should set target_info.placed_size out of each implementation of
target to_insert_breakpoint. In this way, each target doesn't have
to set target_info.placed_size any more.
This patch also sets target_info.placed_address before
target_insert_breakpoint too, so that target to_insert_breakpoint
can use it, see record_full_insert_breakpoint.
Before we call target_insert_breakpoint, we set
target_info.placed_address and target_info.placed_size like this,
CORE_ADDR addr = bl->target_info.reqstd_address;
bl->target_info.placed_size = gdbarch_breakpoint_kind_from_pc (bl->gdbarch, &addr);
bl->target_info.placed_address = addr;
return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
target_insert_breakpoint may fail, but it doesn't matter to the "kind"
and "placed_address" of a breakpoint. They should be determined by
gdbarch.
gdb:
2016-11-03 Yao Qi <yao.qi@linaro.org>
* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Define
breakpoint_kind_from_pc and sw_breakpoint_from_kind.
(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): Likewise.
(SET_GDBARCH_BREAKPOINT_MANIPULATION): Call
set_gdbarch_breakpoint_kind_from_pc and
set_gdbarch_sw_breakpoint_from_kind.
* arm-tdep.c: Add comments.
* bfin-tdep.c: Likewise.
* breakpoint.c (breakpoint_kind): New function.
(insert_bp_location): Set target_info.placed_size and
target_info.placed_address.
(bkpt_insert_location): Likewise.
* cris-tdep.c: Add comments.
* gdbarch.sh (breakpoint_kind_from_pc): New.
(sw_breakpoint_from_kind): New.
* gdbarch.c, gdbarch.h: Regenerated.
* ia64-tdep.c (ia64_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
(ia64_memory_remove_breakpoint): Don't assert
bp_tgt->placed_size.
(ia64_breakpoint_kind_from_pc): New function.
(ia64_gdbarch_init): Install ia64_breakpoint_kind_from_pc.
* m32r-tdep.c (m32r_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
* mem-break.c (default_memory_insert_breakpoint): Don't set
bp_tgt->placed_size. Call gdbarch_sw_breakpoint_from_kind.
(default_memory_remove_breakpoint): Call
gdbarch_sw_breakpoint_from_kind.
(memory_validate_breakpoint): Don't check bp_tgt->placed_size.
* mips-tdep.c: Add comments.
* mt-tdep.c: Likewise.
* nios2-tdep.c: Likewise.
* record-full.c (record_full_insert_breakpoint): Don't call
gdbarch_breakpoint_from_pc. Don't set bp_tgt->placed_address
and bp_tgt->placed_size.
* remote.c (remote_insert_breakpoint): Don't call
gdbarch_remote_breakpoint_from_pc. Use bp_tgt->placed_size.
Don't set bp_tgt->placed_address and bp_tgt->placed_size.
(remote_insert_hw_breakpoint): Likewise.
* score-tdep.c: Likewise.
* sh-tdep.c: Likewise.
* tic6x-tdep.c: Likewise.
* v850-tdep.c: Likewise.
* xtensa-tdep.c: Likewise.
2016-11-03 15:35:13 +01:00
|
|
|
/* Implement the sw_breakpoint_from_kind gdbarch method. */
|
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
static const gdb_byte *
|
|
|
|
score7_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
|
|
|
|
{
|
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
|
|
|
|
|
|
*size = kind;
|
|
|
|
|
|
|
|
if (kind == 4)
|
|
|
|
{
|
|
|
|
static gdb_byte big_breakpoint32[] = { 0x80, 0x00, 0x80, 0x06 };
|
|
|
|
static gdb_byte little_breakpoint32[] = { 0x06, 0x80, 0x00, 0x80 };
|
|
|
|
|
|
|
|
if (byte_order == BFD_ENDIAN_BIG)
|
|
|
|
return big_breakpoint32;
|
2007-01-04 08:09:54 +01:00
|
|
|
else
|
2016-11-03 15:35:13 +01:00
|
|
|
return little_breakpoint32;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2016-11-03 15:35:13 +01:00
|
|
|
static gdb_byte big_breakpoint16[] = { 0x60, 0x02 };
|
|
|
|
static gdb_byte little_breakpoint16[] = { 0x02, 0x60 };
|
|
|
|
|
|
|
|
if (byte_order == BFD_ENDIAN_BIG)
|
|
|
|
return big_breakpoint16;
|
2007-01-04 08:09:54 +01:00
|
|
|
else
|
2016-11-03 15:35:13 +01:00
|
|
|
return little_breakpoint16;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
New gdbarch methods breakpoint_kind_from_pc and sw_breakpoint_from_kind
This patch adds two gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind, and uses target_info.placed_size as "kind"
of the breakpoint. This patch updates the usages of
target_info.placed_size.
The "kind" of a breakpoint is determined by gdbarch rather than
target, so we have gdbarch method breakpoint_kind_from_pc, and we
should set target_info.placed_size out of each implementation of
target to_insert_breakpoint. In this way, each target doesn't have
to set target_info.placed_size any more.
This patch also sets target_info.placed_address before
target_insert_breakpoint too, so that target to_insert_breakpoint
can use it, see record_full_insert_breakpoint.
Before we call target_insert_breakpoint, we set
target_info.placed_address and target_info.placed_size like this,
CORE_ADDR addr = bl->target_info.reqstd_address;
bl->target_info.placed_size = gdbarch_breakpoint_kind_from_pc (bl->gdbarch, &addr);
bl->target_info.placed_address = addr;
return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
target_insert_breakpoint may fail, but it doesn't matter to the "kind"
and "placed_address" of a breakpoint. They should be determined by
gdbarch.
gdb:
2016-11-03 Yao Qi <yao.qi@linaro.org>
* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Define
breakpoint_kind_from_pc and sw_breakpoint_from_kind.
(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): Likewise.
(SET_GDBARCH_BREAKPOINT_MANIPULATION): Call
set_gdbarch_breakpoint_kind_from_pc and
set_gdbarch_sw_breakpoint_from_kind.
* arm-tdep.c: Add comments.
* bfin-tdep.c: Likewise.
* breakpoint.c (breakpoint_kind): New function.
(insert_bp_location): Set target_info.placed_size and
target_info.placed_address.
(bkpt_insert_location): Likewise.
* cris-tdep.c: Add comments.
* gdbarch.sh (breakpoint_kind_from_pc): New.
(sw_breakpoint_from_kind): New.
* gdbarch.c, gdbarch.h: Regenerated.
* ia64-tdep.c (ia64_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
(ia64_memory_remove_breakpoint): Don't assert
bp_tgt->placed_size.
(ia64_breakpoint_kind_from_pc): New function.
(ia64_gdbarch_init): Install ia64_breakpoint_kind_from_pc.
* m32r-tdep.c (m32r_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
* mem-break.c (default_memory_insert_breakpoint): Don't set
bp_tgt->placed_size. Call gdbarch_sw_breakpoint_from_kind.
(default_memory_remove_breakpoint): Call
gdbarch_sw_breakpoint_from_kind.
(memory_validate_breakpoint): Don't check bp_tgt->placed_size.
* mips-tdep.c: Add comments.
* mt-tdep.c: Likewise.
* nios2-tdep.c: Likewise.
* record-full.c (record_full_insert_breakpoint): Don't call
gdbarch_breakpoint_from_pc. Don't set bp_tgt->placed_address
and bp_tgt->placed_size.
* remote.c (remote_insert_breakpoint): Don't call
gdbarch_remote_breakpoint_from_pc. Use bp_tgt->placed_size.
Don't set bp_tgt->placed_address and bp_tgt->placed_size.
(remote_insert_hw_breakpoint): Likewise.
* score-tdep.c: Likewise.
* sh-tdep.c: Likewise.
* tic6x-tdep.c: Likewise.
* v850-tdep.c: Likewise.
* xtensa-tdep.c: Likewise.
2016-11-03 15:35:13 +01:00
|
|
|
/* Implement the breakpoint_kind_from_pc gdbarch method. */
|
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
static int
|
|
|
|
score3_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
|
|
int len;
|
2016-11-03 15:35:13 +01:00
|
|
|
|
|
|
|
score3_adjust_pc_and_fetch_inst (pcptr, &len, byte_order);
|
|
|
|
|
|
|
|
return len;
|
|
|
|
}
|
|
|
|
|
New gdbarch methods breakpoint_kind_from_pc and sw_breakpoint_from_kind
This patch adds two gdbarch methods breakpoint_kind_from_pc and
sw_breakpoint_from_kind, and uses target_info.placed_size as "kind"
of the breakpoint. This patch updates the usages of
target_info.placed_size.
The "kind" of a breakpoint is determined by gdbarch rather than
target, so we have gdbarch method breakpoint_kind_from_pc, and we
should set target_info.placed_size out of each implementation of
target to_insert_breakpoint. In this way, each target doesn't have
to set target_info.placed_size any more.
This patch also sets target_info.placed_address before
target_insert_breakpoint too, so that target to_insert_breakpoint
can use it, see record_full_insert_breakpoint.
Before we call target_insert_breakpoint, we set
target_info.placed_address and target_info.placed_size like this,
CORE_ADDR addr = bl->target_info.reqstd_address;
bl->target_info.placed_size = gdbarch_breakpoint_kind_from_pc (bl->gdbarch, &addr);
bl->target_info.placed_address = addr;
return target_insert_breakpoint (bl->gdbarch, &bl->target_info);
target_insert_breakpoint may fail, but it doesn't matter to the "kind"
and "placed_address" of a breakpoint. They should be determined by
gdbarch.
gdb:
2016-11-03 Yao Qi <yao.qi@linaro.org>
* arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): Define
breakpoint_kind_from_pc and sw_breakpoint_from_kind.
(GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN): Likewise.
(SET_GDBARCH_BREAKPOINT_MANIPULATION): Call
set_gdbarch_breakpoint_kind_from_pc and
set_gdbarch_sw_breakpoint_from_kind.
* arm-tdep.c: Add comments.
* bfin-tdep.c: Likewise.
* breakpoint.c (breakpoint_kind): New function.
(insert_bp_location): Set target_info.placed_size and
target_info.placed_address.
(bkpt_insert_location): Likewise.
* cris-tdep.c: Add comments.
* gdbarch.sh (breakpoint_kind_from_pc): New.
(sw_breakpoint_from_kind): New.
* gdbarch.c, gdbarch.h: Regenerated.
* ia64-tdep.c (ia64_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
(ia64_memory_remove_breakpoint): Don't assert
bp_tgt->placed_size.
(ia64_breakpoint_kind_from_pc): New function.
(ia64_gdbarch_init): Install ia64_breakpoint_kind_from_pc.
* m32r-tdep.c (m32r_memory_insert_breakpoint): Don't set
bp_tgt->placed_size.
* mem-break.c (default_memory_insert_breakpoint): Don't set
bp_tgt->placed_size. Call gdbarch_sw_breakpoint_from_kind.
(default_memory_remove_breakpoint): Call
gdbarch_sw_breakpoint_from_kind.
(memory_validate_breakpoint): Don't check bp_tgt->placed_size.
* mips-tdep.c: Add comments.
* mt-tdep.c: Likewise.
* nios2-tdep.c: Likewise.
* record-full.c (record_full_insert_breakpoint): Don't call
gdbarch_breakpoint_from_pc. Don't set bp_tgt->placed_address
and bp_tgt->placed_size.
* remote.c (remote_insert_breakpoint): Don't call
gdbarch_remote_breakpoint_from_pc. Use bp_tgt->placed_size.
Don't set bp_tgt->placed_address and bp_tgt->placed_size.
(remote_insert_hw_breakpoint): Likewise.
* score-tdep.c: Likewise.
* sh-tdep.c: Likewise.
* tic6x-tdep.c: Likewise.
* v850-tdep.c: Likewise.
* xtensa-tdep.c: Likewise.
2016-11-03 15:35:13 +01:00
|
|
|
/* Implement the sw_breakpoint_from_kind gdbarch method. */
|
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
static const gdb_byte *
|
|
|
|
score3_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
|
|
|
|
{
|
|
|
|
int index = 0;
|
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
2009-08-06 12:28:38 +02:00
|
|
|
static gdb_byte score_break_insns[6][6] = {
|
|
|
|
/* The following three instructions are big endian. */
|
|
|
|
{ 0x00, 0x20 },
|
|
|
|
{ 0x80, 0x00, 0x00, 0x06 },
|
|
|
|
{ 0x80, 0x00, 0x80, 0x00, 0x00, 0x00 },
|
|
|
|
/* The following three instructions are little endian. */
|
|
|
|
{ 0x20, 0x00 },
|
|
|
|
{ 0x00, 0x80, 0x06, 0x00 },
|
|
|
|
{ 0x00, 0x80, 0x00, 0x80, 0x00, 0x00 }};
|
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
*size = kind;
|
2009-08-06 12:28:38 +02:00
|
|
|
|
2016-11-03 15:35:13 +01:00
|
|
|
index = ((byte_order == BFD_ENDIAN_BIG) ? 0 : 3) + (kind / 2 - 1);
|
|
|
|
return score_break_insns[index];
|
2009-08-06 12:28:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static CORE_ADDR
|
|
|
|
score_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
|
|
|
|
{
|
|
|
|
CORE_ADDR adjust_pc = bpaddr;
|
|
|
|
|
|
|
|
if (target_mach == bfd_mach_score3)
|
|
|
|
score3_adjust_pc_and_fetch_inst (&adjust_pc, NULL,
|
|
|
|
gdbarch_byte_order (gdbarch));
|
|
|
|
else
|
|
|
|
adjust_pc = align_down (adjust_pc, 2);
|
|
|
|
|
|
|
|
return adjust_pc;
|
|
|
|
}
|
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
static CORE_ADDR
|
|
|
|
score_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
|
|
|
|
{
|
|
|
|
return align_down (addr, 16);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
score_xfer_register (struct regcache *regcache, int regnum, int length,
|
|
|
|
enum bfd_endian endian, gdb_byte *readbuf,
|
|
|
|
const gdb_byte *writebuf, int buf_offset)
|
|
|
|
{
|
|
|
|
int reg_offset = 0;
|
2009-08-06 12:28:38 +02:00
|
|
|
gdb_assert (regnum >= 0
|
2011-01-11 22:53:25 +01:00
|
|
|
&& regnum < ((target_mach == bfd_mach_score7)
|
|
|
|
? SCORE7_NUM_REGS : SCORE3_NUM_REGS));
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
switch (endian)
|
|
|
|
{
|
|
|
|
case BFD_ENDIAN_BIG:
|
|
|
|
reg_offset = SCORE_REGSIZE - length;
|
|
|
|
break;
|
|
|
|
case BFD_ENDIAN_LITTLE:
|
|
|
|
reg_offset = 0;
|
|
|
|
break;
|
|
|
|
case BFD_ENDIAN_UNKNOWN:
|
|
|
|
reg_offset = 0;
|
|
|
|
break;
|
|
|
|
default:
|
2011-01-10 18:14:13 +01:00
|
|
|
error (_("Error: score_xfer_register in file:%s, line:%d!"),
|
2007-05-17 05:15:42 +02:00
|
|
|
__FILE__, __LINE__);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (readbuf != NULL)
|
2018-05-30 20:54:43 +02:00
|
|
|
regcache->cooked_read_part (regnum, reg_offset, length,
|
|
|
|
readbuf + buf_offset);
|
2007-01-04 08:09:54 +01:00
|
|
|
if (writebuf != NULL)
|
2018-05-30 20:54:44 +02:00
|
|
|
regcache->cooked_write_part (regnum, reg_offset, length,
|
|
|
|
writebuf + buf_offset);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static enum return_value_convention
|
2012-05-16 16:35:09 +02:00
|
|
|
score_return_value (struct gdbarch *gdbarch, struct value *function,
|
2009-08-06 12:28:38 +02:00
|
|
|
struct type *type, struct regcache *regcache,
|
2007-01-04 08:09:54 +01:00
|
|
|
gdb_byte * readbuf, const gdb_byte * writebuf)
|
|
|
|
{
|
|
|
|
if (TYPE_CODE (type) == TYPE_CODE_STRUCT
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_UNION
|
|
|
|
|| TYPE_CODE (type) == TYPE_CODE_ARRAY)
|
|
|
|
return RETURN_VALUE_STRUCT_CONVENTION;
|
|
|
|
else
|
|
|
|
{
|
|
|
|
int offset;
|
|
|
|
int regnum;
|
|
|
|
for (offset = 0, regnum = SCORE_A0_REGNUM;
|
|
|
|
offset < TYPE_LENGTH (type);
|
|
|
|
offset += SCORE_REGSIZE, regnum++)
|
|
|
|
{
|
|
|
|
int xfer = SCORE_REGSIZE;
|
2011-01-11 22:53:25 +01:00
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
if (offset + xfer > TYPE_LENGTH (type))
|
|
|
|
xfer = TYPE_LENGTH (type) - offset;
|
2007-05-31 Markus Deuling <deuling@de.ibm.com>
* xtensa-tdep.c (XTENSA_IS_ENTRY, extract_call_winsize)
(xtensa_register_write_masked, xtensa_register_read_masked)
(xtensa_extract_return_value, xtensa_store_return_value
(xtensa_push_dummy_call, xtensa_breakpoint_from_pc): Replace
TARGET_BYTE_ORDER by gdbarch_byte_order.
* sh-tdep.c (sh_breakpoint_from_pc, gdb_print_insn_sh)
(sh_justify_value_in_reg, sh_next_flt_argreg, sh_push_dummy_call_fpu)
(sh_extract_return_value_fpu, sh_store_return_value_fpu): Likewise.
* sh64-tdep.c (sh64_breakpoint_from_pc, gdb_print_insn_sh64)
(sh64_push_dummy_call, sh64_extract_return_value)
(sh64_store_return_value, sh64_register_convert_to_virtual)
(sh64_register_convert_to_raw, sh64_pseudo_register_read)
(sh64_pseudo_register_write, sh64_do_fp_register)
(sh64_frame_prev_register): Likewise.
* score-tdep.c (score_print_insn, score_breakpoint_from_pc)
(score_return_value, score_push_dummy_call, score_fetch_inst): Likewise.
* rs6000-tdep.c (rs6000_breakpoint_from_pc, rs6000_push_dummy_call)
(e500_move_ev_register,gdb_print_insn_powerpc): Likewise.
* remote-m32r-sdi.c (m32r_resume, m32r_wait): Likewise.
* ppc-linux-nat.c (store_register): Likewise.
* nto-tdep.c (nto_find_and_open_solib)
(nto_init_solib_absolute_prefix): Likewise.
* mips-tdep.c (mips_pseudo_register_read, mips_pseudo_register_write)
(mips_convert_register_p, mips_eabi_push_dummy_call)
(mips_n32n64_push_dummy_call, mips_n32n64_return_value)
(mips_o32_push_dummy_call, mips_o32_return_value)
(mips_o64_push_dummy_call, mips_o64_return_value, mips_o64_return_value)
(mips_read_fp_register_single, mips_read_fp_register_double)
(mips_print_register, print_gp_register_row, gdb_print_insn_mips)
(mips_breakpoint_from_pc): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_sigtramp_offset): Likewise.
* mips-linux-tdep.c (mips64_supply_fpregset, mips64_fill_fpregset)
(mips_linux_o32_sigframe_init): Likewise.
* m32r-tdep.c (m32r_memory_insert_breakpoint)
(m32r_memory_remove_breakpoint, m32r_breakpoint_from_pc): Likewise.
* libunwind-frame.c (libunwind_frame_cache, libunwind_frame_sniffer)
(libunwind_sigtramp_frame_sniffer, libunwind_get_reg_special): Likewise.
* iq2000-tdep.c (iq2000_breakpoint_from_pc): Likewise.
* coffread.c (process_coff_symbol): Likewise.
* arm-tdep.c (convert_from_extended, convert_to_extended)
(gdb_print_insn_arm): Likewise.
2007-05-31 22:57:41 +02:00
|
|
|
score_xfer_register (regcache, regnum, xfer,
|
2009-08-06 12:28:38 +02:00
|
|
|
gdbarch_byte_order(gdbarch),
|
2007-01-04 08:09:54 +01:00
|
|
|
readbuf, writebuf, offset);
|
|
|
|
}
|
|
|
|
return RETURN_VALUE_REGISTER_CONVENTION;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static struct frame_id
|
2008-06-28 19:29:04 +02:00
|
|
|
score_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2011-01-11 22:53:25 +01:00
|
|
|
return frame_id_build (get_frame_register_unsigned (this_frame,
|
|
|
|
SCORE_SP_REGNUM),
|
|
|
|
get_frame_pc (this_frame));
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
score_type_needs_double_align (struct type *type)
|
|
|
|
{
|
|
|
|
enum type_code typecode = TYPE_CODE (type);
|
|
|
|
|
2007-05-17 05:15:42 +02:00
|
|
|
if ((typecode == TYPE_CODE_INT && TYPE_LENGTH (type) == 8)
|
|
|
|
|| (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8))
|
2007-01-04 08:09:54 +01:00
|
|
|
return 1;
|
|
|
|
else if (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
|
|
|
|
{
|
|
|
|
int i, n;
|
|
|
|
|
|
|
|
n = TYPE_NFIELDS (type);
|
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
if (score_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
|
|
|
|
return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static CORE_ADDR
|
|
|
|
score_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
|
|
|
|
struct regcache *regcache, CORE_ADDR bp_addr,
|
|
|
|
int nargs, struct value **args, CORE_ADDR sp,
|
2018-11-16 12:21:04 +01:00
|
|
|
function_call_return_method return_method,
|
|
|
|
CORE_ADDR struct_addr)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
* defs.h (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter.
* findvar.c (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
* gdbcore.h (read_memory_integer, safe_read_memory_integer,
read_memory_unsigned_integer, write_memory_signed_integer,
write_memory_unsigned_integer): Add BYTE_ORDER parameter.
* corefile.c (struct captured_read_memory_integer_arguments): Add
BYTE_ORDER member.
(safe_read_memory_integer): Add BYTE_ORDER parameter. Store it into
struct captured_read_memory_integer_arguments.
(do_captured_read_memory_integer): Pass it to read_memory_integer.
(read_memory_integer): Add BYTE_ORDER parameter. Pass it to
extract_signed_integer.
(read_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it to
extract_unsigned_integer.
(write_memory_signed_integer): Add BYTE_ORDER parameter. Pass it
to store_signed_integer.
(write_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it
to store_unsigned_integer.
* target.h (get_target_memory_unsigned): Add BYTE_ORDER parameter.
* target.c (get_target_memory_unsigned): Add BYTE_ORDER parameter.
Pass it to extract_unsigned_integer.
Update calls to extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer, read_memory_integer,
read_memory_unsigned_integer, safe_read_memory_integer,
write_memory_signed_integer, write_memory_unsigned_integer, and
get_target_memory_unsigned to pass byte order:
* ada-lang.c (ada_value_binop): Update.
* ada-valprint.c (char_at): Update.
* alpha-osf1-tdep.c (alpha_osf1_sigcontext_addr): Update.
* alpha-tdep.c (alpha_lds, alpha_sts, alpha_push_dummy_call,
alpha_extract_return_value, alpha_read_insn,
alpha_get_longjmp_target): Update.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Update.
* amd64obsd-tdep.c (amd64obsd_supply_uthread,
amd64obsd_collect_uthread, amd64obsd_trapframe_cache): Update.
* amd64-tdep.c (amd64_push_dummy_call, amd64_analyze_prologue,
amd64_frame_cache, amd64_sigtramp_frame_cache, fixup_riprel,
amd64_displaced_step_fixup): Update.
* arm-linux-tdep.c (arm_linux_sigreturn_init,
arm_linux_rt_sigreturn_init, arm_linux_supply_gregset): Update.
* arm-tdep.c (thumb_analyze_prologue, arm_skip_prologue,
arm_scan_prologue, arm_push_dummy_call, thumb_get_next_pc,
arm_get_next_pc, arm_extract_return_value, arm_store_return_value,
arm_return_value): Update.
* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
* auxv.c (default_auxv_parse): Update.
* avr-tdep.c (avr_address_to_pointer, avr_pointer_to_address,
avr_scan_prologue, avr_extract_return_value,
avr_frame_prev_register, avr_push_dummy_call): Update.
* bsd-uthread.c (bsd_uthread_check_magic, bsd_uthread_lookup_offset,
bsd_uthread_wait, bsd_uthread_thread_alive,
bsd_uthread_extra_thread_info): Update.
* c-lang.c (c_printstr, print_wchar): Update.
* cp-valprint.c (cp_print_class_member): Update.
* cris-tdep.c (cris_sigcontext_addr, cris_sigtramp_frame_unwind_cache,
cris_push_dummy_call, cris_scan_prologue, cris_store_return_value,
cris_extract_return_value, find_step_target, dip_prefix,
sixteen_bit_offset_branch_op, none_reg_mode_jump_op,
move_mem_to_reg_movem_op, get_data_from_address): Update.
* dwarf2expr.c (dwarf2_read_address, execute_stack_op): Update.
* dwarf2-frame.c (execute_cfa_program): Update.
* dwarf2loc.c (find_location_expression): Update.
* dwarf2read.c (dwarf2_const_value): Update.
* expprint.c (print_subexp_standard): Update.
* findvar.c (unsigned_pointer_to_address, signed_pointer_to_address,
unsigned_address_to_pointer, address_to_signed_pointer,
read_var_value): Update.
* frame.c (frame_unwind_register_signed,
frame_unwind_register_unsigned, get_frame_memory_signed,
get_frame_memory_unsigned): Update.
* frame-unwind.c (frame_unwind_got_constant): Update.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp,
frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Update.
* frv-tdep.c (frv_analyze_prologue, frv_skip_main_prologue,
frv_extract_return_value, find_func_descr,
frv_convert_from_func_ptr_addr, frv_push_dummy_call): Update.
* f-valprint.c (f_val_print): Update.
* gnu-v3-abi.c (gnuv3_decode_method_ptr, gnuv3_make_method_ptr):
Update.
* h8300-tdep.c (h8300_is_argument_spill, h8300_analyze_prologue,
h8300_push_dummy_call, h8300_extract_return_value,
h8300h_extract_return_value, h8300_store_return_value,
h8300h_store_return_value): Update.
* hppabsd-tdep.c (hppabsd_find_global_pointer): Update.
* hppa-hpux-nat.c (hppa_hpux_fetch_register, hppa_hpux_store_register):
Update.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline,
hppa64_hpux_in_solib_call_trampoline,
hppa_hpux_in_solib_return_trampoline, hppa_hpux_skip_trampoline_code,
hppa_hpux_sigtramp_frame_unwind_cache,
hppa_hpux_sigtramp_unwind_sniffer, hppa32_hpux_find_global_pointer,
hppa64_hpux_find_global_pointer, hppa_hpux_search_pattern,
hppa32_hpux_search_dummy_call_sequence,
hppa64_hpux_search_dummy_call_sequence, hppa_hpux_supply_save_state,
hppa_hpux_unwind_adjust_stub): Update.
* hppa-linux-tdep.c (insns_match_pattern,
hppa_linux_find_global_pointer): Update.
* hppa-tdep.c (hppa_in_function_epilogue_p, hppa32_push_dummy_call,
hppa64_convert_code_addr_to_fptr, hppa64_push_dummy_call,
skip_prologue_hard_way, hppa_frame_cache, hppa_fallback_frame_cache,
hppa_pseudo_register_read, hppa_frame_prev_register_helper,
hppa_match_insns): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* i386-tdep.c (i386bsd_sigcontext_addr): Update.
* i386-cygwin-tdep.c (core_process_module_section): Update.
* i386-darwin-nat.c (i386_darwin_sstep_at_sigreturn,
amd64_darwin_sstep_at_sigreturn): Update.
* i386-darwin-tdep.c (i386_darwin_sigcontext_addr,
amd64_darwin_sigcontext_addr): Likewise.
* i386-linux-nat.c (i386_linux_sigcontext_addr): Update.
* i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Update.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Update.
* i386obsd-nat.c (i386obsd_supply_pcb): Update.
* i386obsd-tdep.c (i386obsd_supply_uthread, i386obsd_collect_uthread,
i386obsd_trapframe_cache): Update.
* i386-tdep.c (i386_displaced_step_fixup, i386_follow_jump,
i386_analyze_frame_setup, i386_analyze_prologue,
i386_skip_main_prologue, i386_frame_cache, i386_sigtramp_frame_cache,
i386_get_longjmp_target, i386_push_dummy_call,
i386_pe_skip_trampoline_code, i386_svr4_sigcontext_addr,
i386_fetch_pointer_argument): Update.
* i387-tdep.c (i387_supply_fsave): Update.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Update.
* ia64-tdep.c (ia64_pseudo_register_read, ia64_pseudo_register_write,
examine_prologue, ia64_frame_cache, ia64_frame_prev_register,
ia64_sigtramp_frame_cache, ia64_sigtramp_frame_prev_register,
ia64_access_reg, ia64_access_rse_reg, ia64_libunwind_frame_this_id,
ia64_libunwind_frame_prev_register,
ia64_libunwind_sigtramp_frame_this_id,
ia64_libunwind_sigtramp_frame_prev_register, ia64_find_global_pointer,
find_extant_func_descr, find_func_descr,
ia64_convert_from_func_ptr_addr, ia64_push_dummy_call, ia64_dummy_id,
ia64_unwind_pc): Update.
* iq2000-tdep.c (iq2000_pointer_to_address, iq2000_address_to_pointer,
iq2000_scan_prologue, iq2000_extract_return_value,
iq2000_push_dummy_call): Update.
* irix5nat.c (fill_gregset): Update.
* jv-lang.c (evaluate_subexp_java): Update.
* jv-valprint.c (java_value_print): Update.
* lm32-tdep.c (lm32_analyze_prologue, lm32_push_dummy_call,
lm32_extract_return_value, lm32_store_return_value): Update.
* m32c-tdep.c (m32c_push_dummy_call, m32c_return_value,
m32c_skip_trampoline_code, m32c_m16c_address_to_pointer,
m32c_m16c_pointer_to_address): Update.
* m32r-tdep.c (m32r_store_return_value, decode_prologue,
m32r_skip_prologue, m32r_push_dummy_call, m32r_extract_return_value):
Update.
* m68hc11-tdep.c (m68hc11_pseudo_register_read,
m68hc11_pseudo_register_write, m68hc11_analyze_instruction,
m68hc11_push_dummy_call): Update.
* m68linux-tdep.c (m68k_linux_pc_in_sigtramp,
m68k_linux_get_sigtramp_info, m68k_linux_sigtramp_frame_cache):
Update.
* m68k-tdep.c (m68k_push_dummy_call, m68k_analyze_frame_setup,
m68k_analyze_register_saves, m68k_analyze_prologue, m68k_frame_cache,
m68k_get_longjmp_target): Update.
* m88k-tdep.c (m88k_fetch_instruction): Update.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_csr_write,
mep_pseudo_cr32_write, mep_get_insn, mep_push_dummy_call): Update.
* mi/mi-main.c (mi_cmd_data_write_memory): Update.
* mips-linux-tdep.c (mips_linux_get_longjmp_target, supply_32bit_reg,
mips64_linux_get_longjmp_target, mips64_fill_gregset,
mips64_fill_fpregset, mips_linux_in_dynsym_stub): Update.
* mipsnbdsd-tdep.c (mipsnbsd_get_longjmp_target): Update.
* mips-tdep.c (mips_fetch_instruction, fetch_mips_16,
mips_eabi_push_dummy_call, mips_n32n64_push_dummy_call,
mips_o32_push_dummy_call, mips_o64_push_dummy_call,
mips_single_step_through_delay, mips_skip_pic_trampoline_code,
mips_integer_to_address): Update.
* mn10300-tdep.c (mn10300_analyze_prologue, mn10300_push_dummy_call):
Update.
* monitor.c (monitor_supply_register, monitor_write_memory,
monitor_read_memory_single): Update.
* moxie-tdep.c (moxie_store_return_value, moxie_extract_return_value,
moxie_analyze_prologue): Update.
* mt-tdep.c (mt_return_value, mt_skip_prologue, mt_select_coprocessor,
mt_pseudo_register_read, mt_pseudo_register_write, mt_registers_info,
mt_push_dummy_call): Update.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class, find_implementation_from_class): Update.
* ppc64-linux-tdep.c (ppc64_desc_entry_point,
ppc64_linux_convert_from_func_ptr_addr, ppc_linux_sigtramp_cache):
Update.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_sniffer,
ppcobsd_sigtramp_frame_cache): Update.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call,
do_ppc_sysv_return_value, ppc64_sysv_abi_push_dummy_call,
ppc64_sysv_abi_return_value): Update.
* ppc-linux-nat.c (ppc_linux_auxv_parse): Update.
* procfs.c (procfs_auxv_parse): Update.
* p-valprint.c (pascal_val_print): Update.
* regcache.c (regcache_raw_read_signed, regcache_raw_read_unsigned,
regcache_raw_write_signed, regcache_raw_write_unsigned,
regcache_cooked_read_signed, regcache_cooked_read_unsigned,
regcache_cooked_write_signed, regcache_cooked_write_unsigned): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-mips.c (mips_wait, mips_fetch_registers, mips_xfer_memory):
Update.
* rs6000-aix-tdep.c (rs6000_push_dummy_call, rs6000_return_value,
rs6000_convert_from_func_ptr_addr, branch_dest,
rs6000_software_single_step): Update.
* rs6000-tdep.c (rs6000_in_function_epilogue_p,
ppc_displaced_step_fixup, ppc_deal_with_atomic_sequence,
bl_to_blrl_insn_p, rs6000_fetch_instruction, skip_prologue,
rs6000_skip_main_prologue, rs6000_skip_trampoline_code,
rs6000_frame_cache): Update.
* s390-tdep.c (s390_pseudo_register_read, s390_pseudo_register_write,
s390x_pseudo_register_read, s390x_pseudo_register_write, s390_load,
s390_backchain_frame_unwind_cache, s390_sigtramp_frame_unwind_cache,
extend_simple_arg, s390_push_dummy_call, s390_return_value): Update.
* scm-exp.c (scm_lreadr): Update.
* scm-lang.c (scm_get_field, scm_unpack): Update.
* scm-valprint.c (scm_val_print): Update.
* score-tdep.c (score_breakpoint_from_pc, score_push_dummy_call,
score_fetch_inst): Update.
* sh64-tdep.c (look_for_args_moves, sh64_skip_prologue_hard_way,
sh64_analyze_prologue, sh64_push_dummy_call, sh64_extract_return_value,
sh64_pseudo_register_read, sh64_pseudo_register_write,
sh64_frame_prev_register): Update:
* sh-tdep.c (sh_analyze_prologue, sh_push_dummy_call_fpu,
sh_push_dummy_call_nofpu, sh_extract_return_value_nofpu,
sh_store_return_value_nofpu, sh_in_function_epilogue_p): Update.
* solib-darwin.c (darwin_load_image_infos): Update.
* solib-frv.c (fetch_loadmap, lm_base, frv_current_sos, enable_break2,
find_canonical_descriptor_in_load_object): Update.
* solib-irix.c (extract_mips_address, fetch_lm_info, irix_current_sos,
irix_open_symbol_file_object): Update.
* solib-som.c (som_solib_create_inferior_hook, link_map_start,
som_current_sos, som_open_symbol_file_object): Update.
* solib-sunos.c (SOLIB_EXTRACT_ADDRESS, LM_ADDR, LM_NEXT, LM_NAME):
Update.
* solib-svr4.c (read_program_header, scan_dyntag_auxv,
solib_svr4_r_ldsomap): Update.
* sparc64-linux-tdep.c (sparc64_linux_step_trap): Update.
* sparc64obsd-tdep.c (sparc64obsd_supply_uthread,
sparc64obsd_collect_uthread): Update.
* sparc64-tdep.c (sparc64_pseudo_register_read,
sparc64_pseudo_register_write, sparc64_supply_gregset,
sparc64_collect_gregset): Update.
* sparc-linux-tdep.c (sparc32_linux_step_trap): Update.
* sparcobsd-tdep.c (sparc32obsd_supply_uthread,
sparc32obsd_collect_uthread): Update.
* sparc-tdep.c (sparc_fetch_wcookie, sparc32_push_dummy_code,
sparc32_store_arguments, sparc32_return_value, sparc_supply_rwindow,
sparc_collect_rwindow): Update.
* spu-linux-nat.c (parse_spufs_run): Update.
* spu-tdep.c (spu_pseudo_register_read_spu,
spu_pseudo_register_write_spu, spu_pointer_to_address,
spu_analyze_prologue, spu_in_function_epilogue_p,
spu_frame_unwind_cache, spu_push_dummy_call, spu_software_single_step,
spu_get_longjmp_target, spu_get_overlay_table, spu_overlay_update_osect,
info_spu_signal_command, info_spu_mailbox_list, info_spu_dma_cmdlist,
info_spu_dma_command, info_spu_proxydma_command): Update.
* stack.c (print_frame_nameless_args, frame_info): Update.
* symfile.c (read_target_long_array, simple_read_overlay_table,
simple_read_overlay_region_table): Update.
* target.c (debug_print_register): Update.
* tramp-frame.c (tramp_frame_start): Update.
* v850-tdep.c (v850_analyze_prologue, v850_push_dummy_call,
v850_extract_return_value, v850_store_return_value,
* valarith.c (value_binop, value_bit_index): Update.
* valops.c (value_cast): Update.
* valprint.c (val_print_type_code_int, val_print_string,
read_string): Update.
* value.c (unpack_long, unpack_double, unpack_field_as_long,
modify_field, pack_long): Update.
* vax-tdep.c (vax_store_arguments, vax_push_dummy_call,
vax_skip_prologue): Update.
* xstormy16-tdep.c (xstormy16_push_dummy_call,
xstormy16_analyze_prologue, xstormy16_in_function_epilogue_p,
xstormy16_resolve_jmp_table_entry, xstormy16_find_jmp_table_entry,
xstormy16_pointer_to_address, xstormy16_address_to_pointer): Update.
* xtensa-tdep.c (extract_call_winsize, xtensa_pseudo_register_read,
xtensa_pseudo_register_write, xtensa_frame_cache,
xtensa_push_dummy_call, call0_track_op, call0_frame_cache): Update.
* dfp.h (decimal_to_string, decimal_from_string, decimal_from_integral,
decimal_from_floating, decimal_to_doublest, decimal_is_zero): Add
BYTE_ORDER parameter.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
* dfp.c (match_endianness): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
(decimal_to_string, decimal_from_integral, decimal_from_floating,
decimal_to_doublest, decimal_is_zero): Add BYTE_ORDER parameter.
Pass it to match_endianness.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters. Pass them to match_endianness.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
Pass them to match_endianness.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
Pass them to match_endianness.
* valarith.c (value_args_as_decimal): Add BYTE_ORDER_X and
BYTE_ORDER_Y output parameters.
(value_binop): Update call to value_args_as_decimal.
Update calls to decimal_to_string, decimal_from_string,
decimal_from_integral, decimal_from_floating, decimal_to_doublest,
decimal_is_zero, decimal_binop, decimal_compare and decimal_convert
to pass/receive byte order:
* c-exp.y (parse_number): Update.
* printcmd.c (printf_command): Update.
* valarith.c (value_args_as_decimal, value_binop, value_logical_not,
value_equal, value_less): Update.
* valops.c (value_cast, value_one): Update.
* valprint.c (print_decimal_floating): Update.
* value.c (unpack_long, unpack_double): Update.
* python/python-value.c (valpy_nonzero): Update.
* ada-valprint.c (char_at): Add BYTE_ORDER parameter.
(printstr): Update calls to char_at.
(ada_val_print_array): Likewise.
* valprint.c (read_string): Add BYTE_ORDER parameter.
(val_print_string): Update call to read_string.
* c-lang.c (c_get_string): Likewise.
* charset.h (target_wide_charset): Add BYTE_ORDER parameter.
* charset.c (target_wide_charset): Add BYTE_ORDER parameter.
Use it instead of current_gdbarch.
* printcmd.c (printf_command): Update calls to target_wide_charset.
* c-lang.c (charset_for_string_type): Add BYTE_ORDER parameter.
Pass to target_wide_charset. Use it instead of current_gdbarch.
(classify_type): Add BYTE_ORDER parameter. Pass to
charset_for_string_type. Allow NULL encoding pointer.
(print_wchar): Add BYTE_ORDER parameter.
(c_emit_char): Update calls to classify_type and print_wchar.
(c_printchar, c_printstr): Likewise.
* gdbarch.sh (in_solib_return_trampoline): Convert to type "m".
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.h (generic_in_solib_return_trampoline): Add GDBARCH
parameter.
* arch-utils.c (generic_in_solib_return_trampoline): Likewise.
* hppa-hpux-tdep.c (hppa_hpux_in_solib_return_trampoline): Likewise.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise.
(rs6000_skip_trampoline_code): Update call.
* alpha-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
dynamic_sigtramp_offset and pc_in_sigtramp callbacks.
(alpha_read_insn): Add GDBARCH parameter.
* alpha-tdep.c (alpha_lds, alpha_sts): Add GDBARCH parameter.
(alpha_register_to_value): Pass architecture to alpha_sts.
(alpha_extract_return_value): Likewise.
(alpha_value_to_register): Pass architecture to alpha_lds.
(alpha_store_return_value): Likewise.
(alpha_read_insn): Add GDBARCH parameter.
(alpha_skip_prologue): Pass architecture to alpha_read_insn.
(alpha_heuristic_proc_start): Likewise.
(alpha_heuristic_frame_unwind_cache): Likewise.
(alpha_next_pc): Likewise.
(alpha_sigtramp_frame_this_id): Pass architecture to
tdep->dynamic_sigtramp_offset callback.
(alpha_sigtramp_frame_sniffer): Pass architecture to
tdep->pc_in_sigtramp callback.
* alphafbsd-tdep.c (alphafbsd_pc_in_sigtramp): Add GDBARCH parameter.
(alphafbsd_sigtramp_offset): Likewise.
* alpha-linux-tdep.c (alpha_linux_sigtramp_offset_1): Add GDBARCH
parameter. Pass to alpha_read_insn.
(alpha_linux_sigtramp_offset): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset_1.
(alpha_linux_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset.
(alpha_linux_sigcontext_addr): Pass architecture to alpha_read_insn
and alpha_linux_sigtramp_offset.
* alphanbsd-tdep.c (alphanbsd_sigtramp_offset): Add GDBARCH parameter.
(alphanbsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alphanbsd_sigtramp_offset.
* alphaobsd-tdep.c (alphaobsd_sigtramp_offset): Add GDBARCH parameter.
(alphaobsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_read_insn.
(alphaobsd_sigcontext_addr): Pass architecture to
alphaobsd_sigtramp_offset.
* alpha-osf1-tdep.c (alpha_osf1_pc_in_sigtramp): Add GDBARCH
parameter.
* amd64-tdep.c (amd64_analyze_prologue): Add GDBARCH parameter.
(amd64_skip_prologue): Pass architecture to amd64_analyze_prologue.
(amd64_frame_cache): Likewise.
* arm-tdep.c (SWAP_SHORT, SWAP_INT): Remove.
(thumb_analyze_prologue, arm_skip_prologue, arm_scan_prologue,
thumb_get_next_pc, arm_get_next_pc): Do not use SWAP_ macros.
* arm-wince-tdep.c: Include "frame.h".
* avr-tdep.c (EXTRACT_INSN): Remove.
(avr_scan_prologue): Add GDBARCH argument, inline EXTRACT_INSN.
(avr_skip_prologue): Pass architecture to avr_scan_prologue.
(avr_frame_unwind_cache): Likewise.
* cris-tdep.c (struct instruction_environment): Add BYTE_ORDER member.
(find_step_target): Initialize it.
(get_data_from_address): Add BYTE_ORDER parameter.
(bdap_prefix): Pass byte order to get_data_from_address.
(handle_prefix_assign_mode_for_aritm_op): Likewise.
(three_operand_add_sub_cmp_and_or_op): Likewise.
(handle_inc_and_index_mode_for_aritm_op): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp): Add GDBARCH parameter.
(frv_linux_sigcontext_reg_addr): Pass architecture to
frv_linux_pc_in_sigtramp.
(frv_linux_sigtramp_frame_sniffer): Likewise.
* h8300-tdep.c (h8300_is_argument_spill): Add GDBARCH parameter.
(h8300_analyze_prologue): Add GDBARCH parameter. Pass to
h8300_is_argument_spill.
(h8300_frame_cache, h8300_skip_prologue): Pass architecture
to h8300_analyze_prologue.
* hppa-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
in_solib_call_trampoline callback.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter.
* hppa-tdep.c (hppa64_convert_code_addr_to_fptr): Add GDBARCH
parameter.
(hppa64_push_dummy_call): Pass architecture to
hppa64_convert_code_addr_to_fptr.
(hppa_match_insns): Add GDBARCH parameter.
(hppa_match_insns_relaxed): Add GDBARCH parameter. Pass to
hppa_match_insns.
(hppa_skip_trampoline_code): Pass architecture to hppa_match_insns.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter. Pass to
hppa_match_insns_relaxed.
(hppa_stub_unwind_sniffer): Pass architecture to
tdep->in_solib_call_trampoline callback.
* hppa-hpux-tdep.c (hppa_hpux_search_pattern): Add GDBARCH parameter.
(hppa32_hpux_search_dummy_call_sequence): Pass architecture to
hppa_hpux_search_pattern.
* hppa-linux-tdep.c (insns_match_pattern): Add GDBARCH parameter.
(hppa_linux_sigtramp_find_sigcontext): Add GDBARCH parameter.
Pass to insns_match_pattern.
(hppa_linux_sigtramp_frame_unwind_cache): Pass architecture to
hppa_linux_sigtramp_find_sigcontext.
(hppa_linux_sigtramp_frame_sniffer): Likewise.
(hppa32_hpux_in_solib_call_trampoline): Add GDBARCH parameter.
(hppa64_hpux_in_solib_call_trampoline): Likewise.
* i386-tdep.c (i386_follow_jump): Add GDBARCH parameter.
(i386_analyze_frame_setup): Add GDBARCH parameter.
(i386_analyze_prologue): Add GDBARCH parameter. Pass to
i386_follow_jump and i386_analyze_frame_setup.
(i386_skip_prologue): Pass architecture to i386_analyze_prologue
and i386_follow_jump.
(i386_frame_cache): Pass architecture to i386_analyze_prologue.
(i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-tdep.h (i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-cygwin-tdep.c (i386_cygwin_skip_trampoline_code): Pass
frame to i386_pe_skip_trampoline_code.
* ia64-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter
to sigcontext_register_address callback.
* ia64-tdep.c (ia64_find_global_pointer): Add GDBARCH parameter.
(ia64_find_unwind_table): Pass architecture to
ia64_find_global_pointer.
(find_extant_func_descr): Add GDBARCH parameter.
(find_func_descr): Pass architecture to find_extant_func_descr
and ia64_find_global_pointer.
(ia64_sigtramp_frame_init_saved_regs): Pass architecture to
tdep->sigcontext_register_address callback.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Add
GDBARCH parameter.
* iq2000-tdep.c (iq2000_scan_prologue): Add GDBARCH parameter.
(iq2000_frame_cache): Pass architecture to iq2000_scan_prologue.
* lm32-tdep.c (lm32_analyze_prologue): Add GDBARCH parameter.
(lm32_skip_prologue, lm32_frame_cache): Pass architecture to
lm32_analyze_prologue.
* m32r-tdep.c (decode_prologue): Add GDBARCH parameter.
(m32r_skip_prologue): Pass architecture to decode_prologue.
* m68hc11-tdep.c (m68hc11_analyze_instruction): Add GDBARCH parameter.
(m68hc11_scan_prologue): Pass architecture to
m68hc11_analyze_instruction.
* m68k-tdep.c (m68k_analyze_frame_setup): Add GDBARCH parameter.
(m68k_analyze_prologue): Pass architecture to
m68k_analyze_frame_setup.
* m88k-tdep.c (m88k_fetch_instruction): Add BYTE_ORDER parameter.
(m88k_analyze_prologue): Add GDBARCH parameter. Pass byte order
to m88k_fetch_instruction.
(m88k_skip_prologue): Pass architecture to m88k_analyze_prologue.
(m88k_frame_cache): Likewise.
* mep-tdep.c (mep_get_insn): Add GDBARCH parameter.
(mep_analyze_prologue): Pass architecture to mep_get_insn.
* mips-tdep.c (mips_fetch_instruction): Add GDBARCH parameter.
(mips32_next_pc): Pass architecture to mips_fetch_instruction.
(deal_with_atomic_sequence): Likewise.
(unpack_mips16): Add GDBARCH parameter, pass to mips_fetch_instruction.
(mips16_scan_prologue): Likewise.
(mips32_scan_prologue): Likewise.
(mips16_in_function_epilogue_p): Likewise.
(mips32_in_function_epilogue_p): Likewise.
(mips_about_to_return): Likewise.
(mips_insn16_frame_cache): Pass architecture to mips16_scan_prologue.
(mips_insn32_frame_cache): Pass architecture to mips32_scan_prologue.
(mips_skip_prologue): Pass architecture to mips16_scan_prologue
and mips32_scan_prologue.
(mips_in_function_epilogue_p): Pass architecture to
mips16_in_function_epilogue_p and
mips32_in_function_epilogue_p.
(heuristic_proc_start): Pass architecture to mips_fetch_instruction
and mips_about_to_return.
(mips_skip_mips16_trampoline_code): Pass architecture to
mips_fetch_instruction.
(fetch_mips_16): Add GDBARCH parameter.
(mips16_next_pc): Pass architecture to fetch_mips_16.
(extended_mips16_next_pc): Pass architecture to unpack_mips16 and
fetch_mips_16.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class): Add GDBARCH parameter.
(find_implementation_from_class): Add GDBARCH parameter, pass
to read_objc_class, read_objc_methlist_nmethods, and
read_objc_methlist_method.
(find_implementation): Add GDBARCH parameter, pass to
read_objc_object and find_implementation_from_class.
(resolve_msgsend, resolve_msgsend_stret): Pass architecture
to find_implementation.
(resolve_msgsend_super, resolve_msgsend_super_stret): Pass
architecture to read_objc_super and find_implementation_from_class.
* ppc64-linux-tdep.c (ppc64_desc_entry_point): Add GDBARCH parameter.
(ppc64_standard_linkage1_target, ppc64_standard_linkage2_target,
ppc64_standard_linkage3_target): Pass architecture to
ppc64_desc_entry_point.
* rs6000-tdep.c (bl_to_blrl_insn_p): Add BYTE_ORDER parameter.
(skip_prologue): Pass byte order to bl_to_blrl_insn_p.
(rs6000_fetch_instruction): Add GDBARCH parameter.
(rs6000_skip_stack_check): Add GDBARCH parameter, pass to
rs6000_fetch_instruction.
(skip_prologue): Pass architecture to rs6000_fetch_instruction.
* remote-mips.c (mips_store_word): Return old_contents as host
integer value instead of target bytes.
* s390-tdep.c (struct s390_prologue_data): Add BYTE_ORDER member.
(s390_analyze_prologue): Initialize it.
(extend_simple_arg): Add GDBARCH parameter.
(s390_push_dummy_call): Pass architecture to extend_simple_arg.
* scm-lang.c (scm_get_field): Add BYTE_ORDER parameter.
* scm-lang.h (scm_get_field): Add BYTE_ORDER parameter.
(SCM_CAR, SCM_CDR): Pass SCM_BYTE_ORDER to scm_get_field.
* scm-valprint.c (scm_scmval_print): Likewise.
(scm_scmlist_print, scm_ipruk, scm_scmval_print): Define
SCM_BYTE_ORDER.
* sh64-tdep.c (look_for_args_moves): Add GDBARCH parameter.
(sh64_skip_prologue_hard_way): Add GDBARCH parameter, pass to
look_for_args_moves.
(sh64_skip_prologue): Pass architecture to
sh64_skip_prologue_hard_way.
* sh-tdep.c (sh_analyze_prologue): Add GDBARCH parameter.
(sh_skip_prologue): Pass architecture to sh_analyze_prologue.
(sh_frame_cache): Likewise.
* solib-irix.c (extract_mips_address): Add GDBARCH parameter.
(fetch_lm_info, irix_current_sos, irix_open_symbol_file_object):
Pass architecture to extract_mips_address.
* sparc-tdep.h (sparc_fetch_wcookie): Add GDBARCH parameter.
* sparc-tdep.c (sparc_fetch_wcookie): Add GDBARCH parameter.
(sparc_supply_rwindow, sparc_collect_rwindow): Pass architecture
to sparc_fetch_wcookie.
(sparc32_frame_prev_register): Likewise.
* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
* sparc32nbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
* spu-tdep.c (spu_analyze_prologue): Add GDBARCH parameter.
(spu_skip_prologue): Pass architecture to spu_analyze_prologue.
(spu_virtual_frame_pointer): Likewise.
(spu_frame_unwind_cache): Likewise.
(info_spu_mailbox_list): Add BYTE_ORER parameter.
(info_spu_mailbox_command): Pass byte order to info_spu_mailbox_list.
(info_spu_dma_cmdlist): Add BYTE_ORER parameter.
(info_spu_dma_command, info_spu_proxydma_command): Pass byte order
to info_spu_dma_cmdlist.
* symfile.c (read_target_long_array): Add GDBARCH parameter.
(simple_read_overlay_table, simple_read_overlay_region_table,
simple_overlay_update_1): Pass architecture to read_target_long_array.
* v850-tdep.c (v850_analyze_prologue): Add GDBARCH parameter.
(v850_frame_cache): Pass architecture to v850_analyze_prologue.
* xstormy16-tdep.c (xstormy16_analyze_prologue): Add GDBARCH
parameter.
(xstormy16_skip_prologue, xstormy16_frame_cache): Pass architecture
to xstormy16_analyze_prologue.
(xstormy16_resolve_jmp_table_entry): Add GDBARCH parameter.
(xstormy16_find_jmp_table_entry): Likewise.
(xstormy16_skip_trampoline_code): Pass architecture to
xstormy16_resolve_jmp_table_entry.
(xstormy16_pointer_to_address): Likewise.
(xstormy16_address_to_pointer): Pass architecture to
xstormy16_find_jmp_table_entry.
* xtensa-tdep.c (call0_track_op): Add GDBARCH parameter.
(call0_analyze_prologue): Add GDBARCH parameter, pass to
call0_track_op.
(call0_frame_cache): Pass architecture to call0_analyze_prologue.
(xtensa_skip_prologue): Likewise.
2009-07-02 19:25:59 +02:00
|
|
|
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
2007-01-04 08:09:54 +01:00
|
|
|
int argnum;
|
|
|
|
int argreg;
|
|
|
|
int arglen = 0;
|
|
|
|
CORE_ADDR stack_offset = 0;
|
|
|
|
CORE_ADDR addr = 0;
|
|
|
|
|
|
|
|
/* Step 1, Save RA. */
|
|
|
|
regcache_cooked_write_unsigned (regcache, SCORE_RA_REGNUM, bp_addr);
|
|
|
|
|
|
|
|
/* Step 2, Make space on the stack for the args. */
|
|
|
|
struct_addr = align_down (struct_addr, 16);
|
|
|
|
sp = align_down (sp, 16);
|
|
|
|
for (argnum = 0; argnum < nargs; argnum++)
|
|
|
|
arglen += align_up (TYPE_LENGTH (value_type (args[argnum])),
|
|
|
|
SCORE_REGSIZE);
|
|
|
|
sp -= align_up (arglen, 16);
|
|
|
|
|
|
|
|
argreg = SCORE_BEGIN_ARG_REGNUM;
|
|
|
|
|
2007-05-17 05:15:42 +02:00
|
|
|
/* Step 3, Check if struct return then save the struct address to
|
|
|
|
r4 and increase the stack_offset by 4. */
|
2018-11-16 12:21:04 +01:00
|
|
|
if (return_method == return_method_struct)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
|
|
|
|
stack_offset += SCORE_REGSIZE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Step 4, Load arguments:
|
2007-05-17 05:15:42 +02:00
|
|
|
If arg length is too long (> 4 bytes), then split the arg and
|
|
|
|
save every parts. */
|
2007-01-04 08:09:54 +01:00
|
|
|
for (argnum = 0; argnum < nargs; argnum++)
|
|
|
|
{
|
|
|
|
struct value *arg = args[argnum];
|
|
|
|
struct type *arg_type = check_typedef (value_type (arg));
|
|
|
|
enum type_code typecode = TYPE_CODE (arg_type);
|
|
|
|
const gdb_byte *val = value_contents (arg);
|
|
|
|
int downward_offset = 0;
|
2007-01-09 22:25:03 +01:00
|
|
|
int arg_last_part_p = 0;
|
2007-01-04 08:09:54 +01:00
|
|
|
|
2007-01-09 22:25:03 +01:00
|
|
|
arglen = TYPE_LENGTH (arg_type);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
/* If a arg should be aligned to 8 bytes (long long or double),
|
|
|
|
the value should be put to even register numbers. */
|
|
|
|
if (score_type_needs_double_align (arg_type))
|
|
|
|
{
|
|
|
|
if (argreg & 1)
|
|
|
|
argreg++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If sizeof a block < SCORE_REGSIZE, then Score GCC will chose
|
|
|
|
the default "downward"/"upward" method:
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
struct struc
|
|
|
|
{
|
|
|
|
char a; char b; char c;
|
|
|
|
} s = {'a', 'b', 'c'};
|
|
|
|
|
|
|
|
Big endian: s = {X, 'a', 'b', 'c'}
|
|
|
|
Little endian: s = {'a', 'b', 'c', X}
|
|
|
|
|
|
|
|
Where X is a hole. */
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
if (gdbarch_byte_order(gdbarch) == BFD_ENDIAN_BIG
|
2007-01-04 08:09:54 +01:00
|
|
|
&& (typecode == TYPE_CODE_STRUCT
|
|
|
|
|| typecode == TYPE_CODE_UNION)
|
|
|
|
&& argreg > SCORE_LAST_ARG_REGNUM
|
|
|
|
&& arglen < SCORE_REGSIZE)
|
|
|
|
downward_offset += (SCORE_REGSIZE - arglen);
|
|
|
|
|
|
|
|
while (arglen > 0)
|
|
|
|
{
|
|
|
|
int partial_len = arglen < SCORE_REGSIZE ? arglen : SCORE_REGSIZE;
|
* defs.h (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter.
* findvar.c (extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
* gdbcore.h (read_memory_integer, safe_read_memory_integer,
read_memory_unsigned_integer, write_memory_signed_integer,
write_memory_unsigned_integer): Add BYTE_ORDER parameter.
* corefile.c (struct captured_read_memory_integer_arguments): Add
BYTE_ORDER member.
(safe_read_memory_integer): Add BYTE_ORDER parameter. Store it into
struct captured_read_memory_integer_arguments.
(do_captured_read_memory_integer): Pass it to read_memory_integer.
(read_memory_integer): Add BYTE_ORDER parameter. Pass it to
extract_signed_integer.
(read_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it to
extract_unsigned_integer.
(write_memory_signed_integer): Add BYTE_ORDER parameter. Pass it
to store_signed_integer.
(write_memory_unsigned_integer): Add BYTE_ORDER parameter. Pass it
to store_unsigned_integer.
* target.h (get_target_memory_unsigned): Add BYTE_ORDER parameter.
* target.c (get_target_memory_unsigned): Add BYTE_ORDER parameter.
Pass it to extract_unsigned_integer.
Update calls to extract_signed_integer, extract_unsigned_integer,
extract_long_unsigned_integer, store_signed_integer,
store_unsigned_integer, read_memory_integer,
read_memory_unsigned_integer, safe_read_memory_integer,
write_memory_signed_integer, write_memory_unsigned_integer, and
get_target_memory_unsigned to pass byte order:
* ada-lang.c (ada_value_binop): Update.
* ada-valprint.c (char_at): Update.
* alpha-osf1-tdep.c (alpha_osf1_sigcontext_addr): Update.
* alpha-tdep.c (alpha_lds, alpha_sts, alpha_push_dummy_call,
alpha_extract_return_value, alpha_read_insn,
alpha_get_longjmp_target): Update.
* amd64-linux-tdep.c (amd64_linux_sigcontext_addr): Update.
* amd64obsd-tdep.c (amd64obsd_supply_uthread,
amd64obsd_collect_uthread, amd64obsd_trapframe_cache): Update.
* amd64-tdep.c (amd64_push_dummy_call, amd64_analyze_prologue,
amd64_frame_cache, amd64_sigtramp_frame_cache, fixup_riprel,
amd64_displaced_step_fixup): Update.
* arm-linux-tdep.c (arm_linux_sigreturn_init,
arm_linux_rt_sigreturn_init, arm_linux_supply_gregset): Update.
* arm-tdep.c (thumb_analyze_prologue, arm_skip_prologue,
arm_scan_prologue, arm_push_dummy_call, thumb_get_next_pc,
arm_get_next_pc, arm_extract_return_value, arm_store_return_value,
arm_return_value): Update.
* arm-wince-tdep.c (arm_pe_skip_trampoline_code): Update.
* auxv.c (default_auxv_parse): Update.
* avr-tdep.c (avr_address_to_pointer, avr_pointer_to_address,
avr_scan_prologue, avr_extract_return_value,
avr_frame_prev_register, avr_push_dummy_call): Update.
* bsd-uthread.c (bsd_uthread_check_magic, bsd_uthread_lookup_offset,
bsd_uthread_wait, bsd_uthread_thread_alive,
bsd_uthread_extra_thread_info): Update.
* c-lang.c (c_printstr, print_wchar): Update.
* cp-valprint.c (cp_print_class_member): Update.
* cris-tdep.c (cris_sigcontext_addr, cris_sigtramp_frame_unwind_cache,
cris_push_dummy_call, cris_scan_prologue, cris_store_return_value,
cris_extract_return_value, find_step_target, dip_prefix,
sixteen_bit_offset_branch_op, none_reg_mode_jump_op,
move_mem_to_reg_movem_op, get_data_from_address): Update.
* dwarf2expr.c (dwarf2_read_address, execute_stack_op): Update.
* dwarf2-frame.c (execute_cfa_program): Update.
* dwarf2loc.c (find_location_expression): Update.
* dwarf2read.c (dwarf2_const_value): Update.
* expprint.c (print_subexp_standard): Update.
* findvar.c (unsigned_pointer_to_address, signed_pointer_to_address,
unsigned_address_to_pointer, address_to_signed_pointer,
read_var_value): Update.
* frame.c (frame_unwind_register_signed,
frame_unwind_register_unsigned, get_frame_memory_signed,
get_frame_memory_unsigned): Update.
* frame-unwind.c (frame_unwind_got_constant): Update.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp,
frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Update.
* frv-tdep.c (frv_analyze_prologue, frv_skip_main_prologue,
frv_extract_return_value, find_func_descr,
frv_convert_from_func_ptr_addr, frv_push_dummy_call): Update.
* f-valprint.c (f_val_print): Update.
* gnu-v3-abi.c (gnuv3_decode_method_ptr, gnuv3_make_method_ptr):
Update.
* h8300-tdep.c (h8300_is_argument_spill, h8300_analyze_prologue,
h8300_push_dummy_call, h8300_extract_return_value,
h8300h_extract_return_value, h8300_store_return_value,
h8300h_store_return_value): Update.
* hppabsd-tdep.c (hppabsd_find_global_pointer): Update.
* hppa-hpux-nat.c (hppa_hpux_fetch_register, hppa_hpux_store_register):
Update.
* hppa-hpux-tdep.c (hppa32_hpux_in_solib_call_trampoline,
hppa64_hpux_in_solib_call_trampoline,
hppa_hpux_in_solib_return_trampoline, hppa_hpux_skip_trampoline_code,
hppa_hpux_sigtramp_frame_unwind_cache,
hppa_hpux_sigtramp_unwind_sniffer, hppa32_hpux_find_global_pointer,
hppa64_hpux_find_global_pointer, hppa_hpux_search_pattern,
hppa32_hpux_search_dummy_call_sequence,
hppa64_hpux_search_dummy_call_sequence, hppa_hpux_supply_save_state,
hppa_hpux_unwind_adjust_stub): Update.
* hppa-linux-tdep.c (insns_match_pattern,
hppa_linux_find_global_pointer): Update.
* hppa-tdep.c (hppa_in_function_epilogue_p, hppa32_push_dummy_call,
hppa64_convert_code_addr_to_fptr, hppa64_push_dummy_call,
skip_prologue_hard_way, hppa_frame_cache, hppa_fallback_frame_cache,
hppa_pseudo_register_read, hppa_frame_prev_register_helper,
hppa_match_insns): Update.
* hpux-thread.c (hpux_thread_fetch_registers): Update.
* i386-tdep.c (i386bsd_sigcontext_addr): Update.
* i386-cygwin-tdep.c (core_process_module_section): Update.
* i386-darwin-nat.c (i386_darwin_sstep_at_sigreturn,
amd64_darwin_sstep_at_sigreturn): Update.
* i386-darwin-tdep.c (i386_darwin_sigcontext_addr,
amd64_darwin_sigcontext_addr): Likewise.
* i386-linux-nat.c (i386_linux_sigcontext_addr): Update.
* i386nbsd-tdep.c (i386nbsd_sigtramp_cache_init): Update.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Update.
* i386obsd-nat.c (i386obsd_supply_pcb): Update.
* i386obsd-tdep.c (i386obsd_supply_uthread, i386obsd_collect_uthread,
i386obsd_trapframe_cache): Update.
* i386-tdep.c (i386_displaced_step_fixup, i386_follow_jump,
i386_analyze_frame_setup, i386_analyze_prologue,
i386_skip_main_prologue, i386_frame_cache, i386_sigtramp_frame_cache,
i386_get_longjmp_target, i386_push_dummy_call,
i386_pe_skip_trampoline_code, i386_svr4_sigcontext_addr,
i386_fetch_pointer_argument): Update.
* i387-tdep.c (i387_supply_fsave): Update.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Update.
* ia64-tdep.c (ia64_pseudo_register_read, ia64_pseudo_register_write,
examine_prologue, ia64_frame_cache, ia64_frame_prev_register,
ia64_sigtramp_frame_cache, ia64_sigtramp_frame_prev_register,
ia64_access_reg, ia64_access_rse_reg, ia64_libunwind_frame_this_id,
ia64_libunwind_frame_prev_register,
ia64_libunwind_sigtramp_frame_this_id,
ia64_libunwind_sigtramp_frame_prev_register, ia64_find_global_pointer,
find_extant_func_descr, find_func_descr,
ia64_convert_from_func_ptr_addr, ia64_push_dummy_call, ia64_dummy_id,
ia64_unwind_pc): Update.
* iq2000-tdep.c (iq2000_pointer_to_address, iq2000_address_to_pointer,
iq2000_scan_prologue, iq2000_extract_return_value,
iq2000_push_dummy_call): Update.
* irix5nat.c (fill_gregset): Update.
* jv-lang.c (evaluate_subexp_java): Update.
* jv-valprint.c (java_value_print): Update.
* lm32-tdep.c (lm32_analyze_prologue, lm32_push_dummy_call,
lm32_extract_return_value, lm32_store_return_value): Update.
* m32c-tdep.c (m32c_push_dummy_call, m32c_return_value,
m32c_skip_trampoline_code, m32c_m16c_address_to_pointer,
m32c_m16c_pointer_to_address): Update.
* m32r-tdep.c (m32r_store_return_value, decode_prologue,
m32r_skip_prologue, m32r_push_dummy_call, m32r_extract_return_value):
Update.
* m68hc11-tdep.c (m68hc11_pseudo_register_read,
m68hc11_pseudo_register_write, m68hc11_analyze_instruction,
m68hc11_push_dummy_call): Update.
* m68linux-tdep.c (m68k_linux_pc_in_sigtramp,
m68k_linux_get_sigtramp_info, m68k_linux_sigtramp_frame_cache):
Update.
* m68k-tdep.c (m68k_push_dummy_call, m68k_analyze_frame_setup,
m68k_analyze_register_saves, m68k_analyze_prologue, m68k_frame_cache,
m68k_get_longjmp_target): Update.
* m88k-tdep.c (m88k_fetch_instruction): Update.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_csr_write,
mep_pseudo_cr32_write, mep_get_insn, mep_push_dummy_call): Update.
* mi/mi-main.c (mi_cmd_data_write_memory): Update.
* mips-linux-tdep.c (mips_linux_get_longjmp_target, supply_32bit_reg,
mips64_linux_get_longjmp_target, mips64_fill_gregset,
mips64_fill_fpregset, mips_linux_in_dynsym_stub): Update.
* mipsnbdsd-tdep.c (mipsnbsd_get_longjmp_target): Update.
* mips-tdep.c (mips_fetch_instruction, fetch_mips_16,
mips_eabi_push_dummy_call, mips_n32n64_push_dummy_call,
mips_o32_push_dummy_call, mips_o64_push_dummy_call,
mips_single_step_through_delay, mips_skip_pic_trampoline_code,
mips_integer_to_address): Update.
* mn10300-tdep.c (mn10300_analyze_prologue, mn10300_push_dummy_call):
Update.
* monitor.c (monitor_supply_register, monitor_write_memory,
monitor_read_memory_single): Update.
* moxie-tdep.c (moxie_store_return_value, moxie_extract_return_value,
moxie_analyze_prologue): Update.
* mt-tdep.c (mt_return_value, mt_skip_prologue, mt_select_coprocessor,
mt_pseudo_register_read, mt_pseudo_register_write, mt_registers_info,
mt_push_dummy_call): Update.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class, find_implementation_from_class): Update.
* ppc64-linux-tdep.c (ppc64_desc_entry_point,
ppc64_linux_convert_from_func_ptr_addr, ppc_linux_sigtramp_cache):
Update.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_sniffer,
ppcobsd_sigtramp_frame_cache): Update.
* ppc-sysv-tdep.c (ppc_sysv_abi_push_dummy_call,
do_ppc_sysv_return_value, ppc64_sysv_abi_push_dummy_call,
ppc64_sysv_abi_return_value): Update.
* ppc-linux-nat.c (ppc_linux_auxv_parse): Update.
* procfs.c (procfs_auxv_parse): Update.
* p-valprint.c (pascal_val_print): Update.
* regcache.c (regcache_raw_read_signed, regcache_raw_read_unsigned,
regcache_raw_write_signed, regcache_raw_write_unsigned,
regcache_cooked_read_signed, regcache_cooked_read_unsigned,
regcache_cooked_write_signed, regcache_cooked_write_unsigned): Update.
* remote-m32r-sdi.c (m32r_fetch_register): Update.
* remote-mips.c (mips_wait, mips_fetch_registers, mips_xfer_memory):
Update.
* rs6000-aix-tdep.c (rs6000_push_dummy_call, rs6000_return_value,
rs6000_convert_from_func_ptr_addr, branch_dest,
rs6000_software_single_step): Update.
* rs6000-tdep.c (rs6000_in_function_epilogue_p,
ppc_displaced_step_fixup, ppc_deal_with_atomic_sequence,
bl_to_blrl_insn_p, rs6000_fetch_instruction, skip_prologue,
rs6000_skip_main_prologue, rs6000_skip_trampoline_code,
rs6000_frame_cache): Update.
* s390-tdep.c (s390_pseudo_register_read, s390_pseudo_register_write,
s390x_pseudo_register_read, s390x_pseudo_register_write, s390_load,
s390_backchain_frame_unwind_cache, s390_sigtramp_frame_unwind_cache,
extend_simple_arg, s390_push_dummy_call, s390_return_value): Update.
* scm-exp.c (scm_lreadr): Update.
* scm-lang.c (scm_get_field, scm_unpack): Update.
* scm-valprint.c (scm_val_print): Update.
* score-tdep.c (score_breakpoint_from_pc, score_push_dummy_call,
score_fetch_inst): Update.
* sh64-tdep.c (look_for_args_moves, sh64_skip_prologue_hard_way,
sh64_analyze_prologue, sh64_push_dummy_call, sh64_extract_return_value,
sh64_pseudo_register_read, sh64_pseudo_register_write,
sh64_frame_prev_register): Update:
* sh-tdep.c (sh_analyze_prologue, sh_push_dummy_call_fpu,
sh_push_dummy_call_nofpu, sh_extract_return_value_nofpu,
sh_store_return_value_nofpu, sh_in_function_epilogue_p): Update.
* solib-darwin.c (darwin_load_image_infos): Update.
* solib-frv.c (fetch_loadmap, lm_base, frv_current_sos, enable_break2,
find_canonical_descriptor_in_load_object): Update.
* solib-irix.c (extract_mips_address, fetch_lm_info, irix_current_sos,
irix_open_symbol_file_object): Update.
* solib-som.c (som_solib_create_inferior_hook, link_map_start,
som_current_sos, som_open_symbol_file_object): Update.
* solib-sunos.c (SOLIB_EXTRACT_ADDRESS, LM_ADDR, LM_NEXT, LM_NAME):
Update.
* solib-svr4.c (read_program_header, scan_dyntag_auxv,
solib_svr4_r_ldsomap): Update.
* sparc64-linux-tdep.c (sparc64_linux_step_trap): Update.
* sparc64obsd-tdep.c (sparc64obsd_supply_uthread,
sparc64obsd_collect_uthread): Update.
* sparc64-tdep.c (sparc64_pseudo_register_read,
sparc64_pseudo_register_write, sparc64_supply_gregset,
sparc64_collect_gregset): Update.
* sparc-linux-tdep.c (sparc32_linux_step_trap): Update.
* sparcobsd-tdep.c (sparc32obsd_supply_uthread,
sparc32obsd_collect_uthread): Update.
* sparc-tdep.c (sparc_fetch_wcookie, sparc32_push_dummy_code,
sparc32_store_arguments, sparc32_return_value, sparc_supply_rwindow,
sparc_collect_rwindow): Update.
* spu-linux-nat.c (parse_spufs_run): Update.
* spu-tdep.c (spu_pseudo_register_read_spu,
spu_pseudo_register_write_spu, spu_pointer_to_address,
spu_analyze_prologue, spu_in_function_epilogue_p,
spu_frame_unwind_cache, spu_push_dummy_call, spu_software_single_step,
spu_get_longjmp_target, spu_get_overlay_table, spu_overlay_update_osect,
info_spu_signal_command, info_spu_mailbox_list, info_spu_dma_cmdlist,
info_spu_dma_command, info_spu_proxydma_command): Update.
* stack.c (print_frame_nameless_args, frame_info): Update.
* symfile.c (read_target_long_array, simple_read_overlay_table,
simple_read_overlay_region_table): Update.
* target.c (debug_print_register): Update.
* tramp-frame.c (tramp_frame_start): Update.
* v850-tdep.c (v850_analyze_prologue, v850_push_dummy_call,
v850_extract_return_value, v850_store_return_value,
* valarith.c (value_binop, value_bit_index): Update.
* valops.c (value_cast): Update.
* valprint.c (val_print_type_code_int, val_print_string,
read_string): Update.
* value.c (unpack_long, unpack_double, unpack_field_as_long,
modify_field, pack_long): Update.
* vax-tdep.c (vax_store_arguments, vax_push_dummy_call,
vax_skip_prologue): Update.
* xstormy16-tdep.c (xstormy16_push_dummy_call,
xstormy16_analyze_prologue, xstormy16_in_function_epilogue_p,
xstormy16_resolve_jmp_table_entry, xstormy16_find_jmp_table_entry,
xstormy16_pointer_to_address, xstormy16_address_to_pointer): Update.
* xtensa-tdep.c (extract_call_winsize, xtensa_pseudo_register_read,
xtensa_pseudo_register_write, xtensa_frame_cache,
xtensa_push_dummy_call, call0_track_op, call0_frame_cache): Update.
* dfp.h (decimal_to_string, decimal_from_string, decimal_from_integral,
decimal_from_floating, decimal_to_doublest, decimal_is_zero): Add
BYTE_ORDER parameter.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
* dfp.c (match_endianness): Add BYTE_ORDER parameter. Use it
instead of current_gdbarch.
(decimal_to_string, decimal_from_integral, decimal_from_floating,
decimal_to_doublest, decimal_is_zero): Add BYTE_ORDER parameter.
Pass it to match_endianness.
(decimal_binop): Add BYTE_ORDER_X, BYTE_ORDER_Y, and BYTE_ORDER_RESULT
parameters. Pass them to match_endianness.
(decimal_compare): Add BYTE_ORDER_X and BYTE_ORDER_Y parameters.
Pass them to match_endianness.
(decimal_convert): Add BYTE_ORDER_FROM and BYTE_ORDER_TO parameters.
Pass them to match_endianness.
* valarith.c (value_args_as_decimal): Add BYTE_ORDER_X and
BYTE_ORDER_Y output parameters.
(value_binop): Update call to value_args_as_decimal.
Update calls to decimal_to_string, decimal_from_string,
decimal_from_integral, decimal_from_floating, decimal_to_doublest,
decimal_is_zero, decimal_binop, decimal_compare and decimal_convert
to pass/receive byte order:
* c-exp.y (parse_number): Update.
* printcmd.c (printf_command): Update.
* valarith.c (value_args_as_decimal, value_binop, value_logical_not,
value_equal, value_less): Update.
* valops.c (value_cast, value_one): Update.
* valprint.c (print_decimal_floating): Update.
* value.c (unpack_long, unpack_double): Update.
* python/python-value.c (valpy_nonzero): Update.
* ada-valprint.c (char_at): Add BYTE_ORDER parameter.
(printstr): Update calls to char_at.
(ada_val_print_array): Likewise.
* valprint.c (read_string): Add BYTE_ORDER parameter.
(val_print_string): Update call to read_string.
* c-lang.c (c_get_string): Likewise.
* charset.h (target_wide_charset): Add BYTE_ORDER parameter.
* charset.c (target_wide_charset): Add BYTE_ORDER parameter.
Use it instead of current_gdbarch.
* printcmd.c (printf_command): Update calls to target_wide_charset.
* c-lang.c (charset_for_string_type): Add BYTE_ORDER parameter.
Pass to target_wide_charset. Use it instead of current_gdbarch.
(classify_type): Add BYTE_ORDER parameter. Pass to
charset_for_string_type. Allow NULL encoding pointer.
(print_wchar): Add BYTE_ORDER parameter.
(c_emit_char): Update calls to classify_type and print_wchar.
(c_printchar, c_printstr): Likewise.
* gdbarch.sh (in_solib_return_trampoline): Convert to type "m".
* gdbarch.c, gdbarch.h: Regenerate.
* arch-utils.h (generic_in_solib_return_trampoline): Add GDBARCH
parameter.
* arch-utils.c (generic_in_solib_return_trampoline): Likewise.
* hppa-hpux-tdep.c (hppa_hpux_in_solib_return_trampoline): Likewise.
* rs6000-tdep.c (rs6000_in_solib_return_trampoline): Likewise.
(rs6000_skip_trampoline_code): Update call.
* alpha-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
dynamic_sigtramp_offset and pc_in_sigtramp callbacks.
(alpha_read_insn): Add GDBARCH parameter.
* alpha-tdep.c (alpha_lds, alpha_sts): Add GDBARCH parameter.
(alpha_register_to_value): Pass architecture to alpha_sts.
(alpha_extract_return_value): Likewise.
(alpha_value_to_register): Pass architecture to alpha_lds.
(alpha_store_return_value): Likewise.
(alpha_read_insn): Add GDBARCH parameter.
(alpha_skip_prologue): Pass architecture to alpha_read_insn.
(alpha_heuristic_proc_start): Likewise.
(alpha_heuristic_frame_unwind_cache): Likewise.
(alpha_next_pc): Likewise.
(alpha_sigtramp_frame_this_id): Pass architecture to
tdep->dynamic_sigtramp_offset callback.
(alpha_sigtramp_frame_sniffer): Pass architecture to
tdep->pc_in_sigtramp callback.
* alphafbsd-tdep.c (alphafbsd_pc_in_sigtramp): Add GDBARCH parameter.
(alphafbsd_sigtramp_offset): Likewise.
* alpha-linux-tdep.c (alpha_linux_sigtramp_offset_1): Add GDBARCH
parameter. Pass to alpha_read_insn.
(alpha_linux_sigtramp_offset): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset_1.
(alpha_linux_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_linux_sigtramp_offset.
(alpha_linux_sigcontext_addr): Pass architecture to alpha_read_insn
and alpha_linux_sigtramp_offset.
* alphanbsd-tdep.c (alphanbsd_sigtramp_offset): Add GDBARCH parameter.
(alphanbsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alphanbsd_sigtramp_offset.
* alphaobsd-tdep.c (alphaobsd_sigtramp_offset): Add GDBARCH parameter.
(alphaobsd_pc_in_sigtramp): Add GDBARCH parameter. Pass to
alpha_read_insn.
(alphaobsd_sigcontext_addr): Pass architecture to
alphaobsd_sigtramp_offset.
* alpha-osf1-tdep.c (alpha_osf1_pc_in_sigtramp): Add GDBARCH
parameter.
* amd64-tdep.c (amd64_analyze_prologue): Add GDBARCH parameter.
(amd64_skip_prologue): Pass architecture to amd64_analyze_prologue.
(amd64_frame_cache): Likewise.
* arm-tdep.c (SWAP_SHORT, SWAP_INT): Remove.
(thumb_analyze_prologue, arm_skip_prologue, arm_scan_prologue,
thumb_get_next_pc, arm_get_next_pc): Do not use SWAP_ macros.
* arm-wince-tdep.c: Include "frame.h".
* avr-tdep.c (EXTRACT_INSN): Remove.
(avr_scan_prologue): Add GDBARCH argument, inline EXTRACT_INSN.
(avr_skip_prologue): Pass architecture to avr_scan_prologue.
(avr_frame_unwind_cache): Likewise.
* cris-tdep.c (struct instruction_environment): Add BYTE_ORDER member.
(find_step_target): Initialize it.
(get_data_from_address): Add BYTE_ORDER parameter.
(bdap_prefix): Pass byte order to get_data_from_address.
(handle_prefix_assign_mode_for_aritm_op): Likewise.
(three_operand_add_sub_cmp_and_or_op): Likewise.
(handle_inc_and_index_mode_for_aritm_op): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp): Add GDBARCH parameter.
(frv_linux_sigcontext_reg_addr): Pass architecture to
frv_linux_pc_in_sigtramp.
(frv_linux_sigtramp_frame_sniffer): Likewise.
* h8300-tdep.c (h8300_is_argument_spill): Add GDBARCH parameter.
(h8300_analyze_prologue): Add GDBARCH parameter. Pass to
h8300_is_argument_spill.
(h8300_frame_cache, h8300_skip_prologue): Pass architecture
to h8300_analyze_prologue.
* hppa-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter to
in_solib_call_trampoline callback.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter.
* hppa-tdep.c (hppa64_convert_code_addr_to_fptr): Add GDBARCH
parameter.
(hppa64_push_dummy_call): Pass architecture to
hppa64_convert_code_addr_to_fptr.
(hppa_match_insns): Add GDBARCH parameter.
(hppa_match_insns_relaxed): Add GDBARCH parameter. Pass to
hppa_match_insns.
(hppa_skip_trampoline_code): Pass architecture to hppa_match_insns.
(hppa_in_solib_call_trampoline): Add GDBARCH parameter. Pass to
hppa_match_insns_relaxed.
(hppa_stub_unwind_sniffer): Pass architecture to
tdep->in_solib_call_trampoline callback.
* hppa-hpux-tdep.c (hppa_hpux_search_pattern): Add GDBARCH parameter.
(hppa32_hpux_search_dummy_call_sequence): Pass architecture to
hppa_hpux_search_pattern.
* hppa-linux-tdep.c (insns_match_pattern): Add GDBARCH parameter.
(hppa_linux_sigtramp_find_sigcontext): Add GDBARCH parameter.
Pass to insns_match_pattern.
(hppa_linux_sigtramp_frame_unwind_cache): Pass architecture to
hppa_linux_sigtramp_find_sigcontext.
(hppa_linux_sigtramp_frame_sniffer): Likewise.
(hppa32_hpux_in_solib_call_trampoline): Add GDBARCH parameter.
(hppa64_hpux_in_solib_call_trampoline): Likewise.
* i386-tdep.c (i386_follow_jump): Add GDBARCH parameter.
(i386_analyze_frame_setup): Add GDBARCH parameter.
(i386_analyze_prologue): Add GDBARCH parameter. Pass to
i386_follow_jump and i386_analyze_frame_setup.
(i386_skip_prologue): Pass architecture to i386_analyze_prologue
and i386_follow_jump.
(i386_frame_cache): Pass architecture to i386_analyze_prologue.
(i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-tdep.h (i386_pe_skip_trampoline_code): Add FRAME parameter.
* i386-cygwin-tdep.c (i386_cygwin_skip_trampoline_code): Pass
frame to i386_pe_skip_trampoline_code.
* ia64-tdep.h (struct gdbarch_tdep): Add GDBARCH parameter
to sigcontext_register_address callback.
* ia64-tdep.c (ia64_find_global_pointer): Add GDBARCH parameter.
(ia64_find_unwind_table): Pass architecture to
ia64_find_global_pointer.
(find_extant_func_descr): Add GDBARCH parameter.
(find_func_descr): Pass architecture to find_extant_func_descr
and ia64_find_global_pointer.
(ia64_sigtramp_frame_init_saved_regs): Pass architecture to
tdep->sigcontext_register_address callback.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Add
GDBARCH parameter.
* iq2000-tdep.c (iq2000_scan_prologue): Add GDBARCH parameter.
(iq2000_frame_cache): Pass architecture to iq2000_scan_prologue.
* lm32-tdep.c (lm32_analyze_prologue): Add GDBARCH parameter.
(lm32_skip_prologue, lm32_frame_cache): Pass architecture to
lm32_analyze_prologue.
* m32r-tdep.c (decode_prologue): Add GDBARCH parameter.
(m32r_skip_prologue): Pass architecture to decode_prologue.
* m68hc11-tdep.c (m68hc11_analyze_instruction): Add GDBARCH parameter.
(m68hc11_scan_prologue): Pass architecture to
m68hc11_analyze_instruction.
* m68k-tdep.c (m68k_analyze_frame_setup): Add GDBARCH parameter.
(m68k_analyze_prologue): Pass architecture to
m68k_analyze_frame_setup.
* m88k-tdep.c (m88k_fetch_instruction): Add BYTE_ORDER parameter.
(m88k_analyze_prologue): Add GDBARCH parameter. Pass byte order
to m88k_fetch_instruction.
(m88k_skip_prologue): Pass architecture to m88k_analyze_prologue.
(m88k_frame_cache): Likewise.
* mep-tdep.c (mep_get_insn): Add GDBARCH parameter.
(mep_analyze_prologue): Pass architecture to mep_get_insn.
* mips-tdep.c (mips_fetch_instruction): Add GDBARCH parameter.
(mips32_next_pc): Pass architecture to mips_fetch_instruction.
(deal_with_atomic_sequence): Likewise.
(unpack_mips16): Add GDBARCH parameter, pass to mips_fetch_instruction.
(mips16_scan_prologue): Likewise.
(mips32_scan_prologue): Likewise.
(mips16_in_function_epilogue_p): Likewise.
(mips32_in_function_epilogue_p): Likewise.
(mips_about_to_return): Likewise.
(mips_insn16_frame_cache): Pass architecture to mips16_scan_prologue.
(mips_insn32_frame_cache): Pass architecture to mips32_scan_prologue.
(mips_skip_prologue): Pass architecture to mips16_scan_prologue
and mips32_scan_prologue.
(mips_in_function_epilogue_p): Pass architecture to
mips16_in_function_epilogue_p and
mips32_in_function_epilogue_p.
(heuristic_proc_start): Pass architecture to mips_fetch_instruction
and mips_about_to_return.
(mips_skip_mips16_trampoline_code): Pass architecture to
mips_fetch_instruction.
(fetch_mips_16): Add GDBARCH parameter.
(mips16_next_pc): Pass architecture to fetch_mips_16.
(extended_mips16_next_pc): Pass architecture to unpack_mips16 and
fetch_mips_16.
* objc-lang.c (read_objc_method, read_objc_methlist_nmethods,
read_objc_methlist_method, read_objc_object, read_objc_super,
read_objc_class): Add GDBARCH parameter.
(find_implementation_from_class): Add GDBARCH parameter, pass
to read_objc_class, read_objc_methlist_nmethods, and
read_objc_methlist_method.
(find_implementation): Add GDBARCH parameter, pass to
read_objc_object and find_implementation_from_class.
(resolve_msgsend, resolve_msgsend_stret): Pass architecture
to find_implementation.
(resolve_msgsend_super, resolve_msgsend_super_stret): Pass
architecture to read_objc_super and find_implementation_from_class.
* ppc64-linux-tdep.c (ppc64_desc_entry_point): Add GDBARCH parameter.
(ppc64_standard_linkage1_target, ppc64_standard_linkage2_target,
ppc64_standard_linkage3_target): Pass architecture to
ppc64_desc_entry_point.
* rs6000-tdep.c (bl_to_blrl_insn_p): Add BYTE_ORDER parameter.
(skip_prologue): Pass byte order to bl_to_blrl_insn_p.
(rs6000_fetch_instruction): Add GDBARCH parameter.
(rs6000_skip_stack_check): Add GDBARCH parameter, pass to
rs6000_fetch_instruction.
(skip_prologue): Pass architecture to rs6000_fetch_instruction.
* remote-mips.c (mips_store_word): Return old_contents as host
integer value instead of target bytes.
* s390-tdep.c (struct s390_prologue_data): Add BYTE_ORDER member.
(s390_analyze_prologue): Initialize it.
(extend_simple_arg): Add GDBARCH parameter.
(s390_push_dummy_call): Pass architecture to extend_simple_arg.
* scm-lang.c (scm_get_field): Add BYTE_ORDER parameter.
* scm-lang.h (scm_get_field): Add BYTE_ORDER parameter.
(SCM_CAR, SCM_CDR): Pass SCM_BYTE_ORDER to scm_get_field.
* scm-valprint.c (scm_scmval_print): Likewise.
(scm_scmlist_print, scm_ipruk, scm_scmval_print): Define
SCM_BYTE_ORDER.
* sh64-tdep.c (look_for_args_moves): Add GDBARCH parameter.
(sh64_skip_prologue_hard_way): Add GDBARCH parameter, pass to
look_for_args_moves.
(sh64_skip_prologue): Pass architecture to
sh64_skip_prologue_hard_way.
* sh-tdep.c (sh_analyze_prologue): Add GDBARCH parameter.
(sh_skip_prologue): Pass architecture to sh_analyze_prologue.
(sh_frame_cache): Likewise.
* solib-irix.c (extract_mips_address): Add GDBARCH parameter.
(fetch_lm_info, irix_current_sos, irix_open_symbol_file_object):
Pass architecture to extract_mips_address.
* sparc-tdep.h (sparc_fetch_wcookie): Add GDBARCH parameter.
* sparc-tdep.c (sparc_fetch_wcookie): Add GDBARCH parameter.
(sparc_supply_rwindow, sparc_collect_rwindow): Pass architecture
to sparc_fetch_wcookie.
(sparc32_frame_prev_register): Likewise.
* sparc64-tdep.c (sparc64_frame_prev_register): Likewise.
* sparc32nbsd-tdep.c (sparc32nbsd_sigcontext_saved_regs): Likewise.
* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_saved_regs): Likewise.
* spu-tdep.c (spu_analyze_prologue): Add GDBARCH parameter.
(spu_skip_prologue): Pass architecture to spu_analyze_prologue.
(spu_virtual_frame_pointer): Likewise.
(spu_frame_unwind_cache): Likewise.
(info_spu_mailbox_list): Add BYTE_ORER parameter.
(info_spu_mailbox_command): Pass byte order to info_spu_mailbox_list.
(info_spu_dma_cmdlist): Add BYTE_ORER parameter.
(info_spu_dma_command, info_spu_proxydma_command): Pass byte order
to info_spu_dma_cmdlist.
* symfile.c (read_target_long_array): Add GDBARCH parameter.
(simple_read_overlay_table, simple_read_overlay_region_table,
simple_overlay_update_1): Pass architecture to read_target_long_array.
* v850-tdep.c (v850_analyze_prologue): Add GDBARCH parameter.
(v850_frame_cache): Pass architecture to v850_analyze_prologue.
* xstormy16-tdep.c (xstormy16_analyze_prologue): Add GDBARCH
parameter.
(xstormy16_skip_prologue, xstormy16_frame_cache): Pass architecture
to xstormy16_analyze_prologue.
(xstormy16_resolve_jmp_table_entry): Add GDBARCH parameter.
(xstormy16_find_jmp_table_entry): Likewise.
(xstormy16_skip_trampoline_code): Pass architecture to
xstormy16_resolve_jmp_table_entry.
(xstormy16_pointer_to_address): Likewise.
(xstormy16_address_to_pointer): Pass architecture to
xstormy16_find_jmp_table_entry.
* xtensa-tdep.c (call0_track_op): Add GDBARCH parameter.
(call0_analyze_prologue): Add GDBARCH parameter, pass to
call0_track_op.
(call0_frame_cache): Pass architecture to call0_analyze_prologue.
(xtensa_skip_prologue): Likewise.
2009-07-02 19:25:59 +02:00
|
|
|
ULONGEST regval = extract_unsigned_integer (val, partial_len,
|
2009-08-06 12:28:38 +02:00
|
|
|
byte_order);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
/* The last part of a arg should shift left when
|
2007-05-31 Markus Deuling <deuling@de.ibm.com>
* xtensa-tdep.c (XTENSA_IS_ENTRY, extract_call_winsize)
(xtensa_register_write_masked, xtensa_register_read_masked)
(xtensa_extract_return_value, xtensa_store_return_value
(xtensa_push_dummy_call, xtensa_breakpoint_from_pc): Replace
TARGET_BYTE_ORDER by gdbarch_byte_order.
* sh-tdep.c (sh_breakpoint_from_pc, gdb_print_insn_sh)
(sh_justify_value_in_reg, sh_next_flt_argreg, sh_push_dummy_call_fpu)
(sh_extract_return_value_fpu, sh_store_return_value_fpu): Likewise.
* sh64-tdep.c (sh64_breakpoint_from_pc, gdb_print_insn_sh64)
(sh64_push_dummy_call, sh64_extract_return_value)
(sh64_store_return_value, sh64_register_convert_to_virtual)
(sh64_register_convert_to_raw, sh64_pseudo_register_read)
(sh64_pseudo_register_write, sh64_do_fp_register)
(sh64_frame_prev_register): Likewise.
* score-tdep.c (score_print_insn, score_breakpoint_from_pc)
(score_return_value, score_push_dummy_call, score_fetch_inst): Likewise.
* rs6000-tdep.c (rs6000_breakpoint_from_pc, rs6000_push_dummy_call)
(e500_move_ev_register,gdb_print_insn_powerpc): Likewise.
* remote-m32r-sdi.c (m32r_resume, m32r_wait): Likewise.
* ppc-linux-nat.c (store_register): Likewise.
* nto-tdep.c (nto_find_and_open_solib)
(nto_init_solib_absolute_prefix): Likewise.
* mips-tdep.c (mips_pseudo_register_read, mips_pseudo_register_write)
(mips_convert_register_p, mips_eabi_push_dummy_call)
(mips_n32n64_push_dummy_call, mips_n32n64_return_value)
(mips_o32_push_dummy_call, mips_o32_return_value)
(mips_o64_push_dummy_call, mips_o64_return_value, mips_o64_return_value)
(mips_read_fp_register_single, mips_read_fp_register_double)
(mips_print_register, print_gp_register_row, gdb_print_insn_mips)
(mips_breakpoint_from_pc): Likewise.
* mipsnbsd-tdep.c (mipsnbsd_sigtramp_offset): Likewise.
* mips-linux-tdep.c (mips64_supply_fpregset, mips64_fill_fpregset)
(mips_linux_o32_sigframe_init): Likewise.
* m32r-tdep.c (m32r_memory_insert_breakpoint)
(m32r_memory_remove_breakpoint, m32r_breakpoint_from_pc): Likewise.
* libunwind-frame.c (libunwind_frame_cache, libunwind_frame_sniffer)
(libunwind_sigtramp_frame_sniffer, libunwind_get_reg_special): Likewise.
* iq2000-tdep.c (iq2000_breakpoint_from_pc): Likewise.
* coffread.c (process_coff_symbol): Likewise.
* arm-tdep.c (convert_from_extended, convert_to_extended)
(gdb_print_insn_arm): Likewise.
2007-05-31 22:57:41 +02:00
|
|
|
gdbarch_byte_order is BFD_ENDIAN_BIG. */
|
2009-08-06 12:28:38 +02:00
|
|
|
if (byte_order == BFD_ENDIAN_BIG
|
2007-01-04 08:09:54 +01:00
|
|
|
&& arg_last_part_p == 1
|
|
|
|
&& (typecode == TYPE_CODE_STRUCT
|
|
|
|
|| typecode == TYPE_CODE_UNION))
|
|
|
|
regval <<= ((SCORE_REGSIZE - partial_len) * TARGET_CHAR_BIT);
|
|
|
|
|
|
|
|
/* Always increase the stack_offset and save args to stack. */
|
|
|
|
addr = sp + stack_offset + downward_offset;
|
|
|
|
write_memory (addr, val, partial_len);
|
|
|
|
|
|
|
|
if (argreg <= SCORE_LAST_ARG_REGNUM)
|
|
|
|
{
|
|
|
|
regcache_cooked_write_unsigned (regcache, argreg++, regval);
|
|
|
|
if (arglen > SCORE_REGSIZE && arglen < SCORE_REGSIZE * 2)
|
|
|
|
arg_last_part_p = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
val += partial_len;
|
|
|
|
arglen -= partial_len;
|
|
|
|
stack_offset += align_up (partial_len, SCORE_REGSIZE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Step 5, Save SP. */
|
|
|
|
regcache_cooked_write_unsigned (regcache, SCORE_SP_REGNUM, sp);
|
|
|
|
|
|
|
|
return sp;
|
|
|
|
}
|
|
|
|
|
|
|
|
static CORE_ADDR
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
CORE_ADDR cpc = pc;
|
|
|
|
int iscan = 32, stack_sub = 0;
|
|
|
|
while (iscan-- > 0)
|
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
inst_t *inst = score7_fetch_inst (gdbarch, cpc, NULL);
|
2007-01-04 08:09:54 +01:00
|
|
|
if (!inst)
|
|
|
|
break;
|
2009-08-06 12:28:38 +02:00
|
|
|
if ((inst->len == 4) && !stack_sub
|
2007-01-04 08:09:54 +01:00
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x1
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x0))
|
|
|
|
{
|
|
|
|
/* addi r0, offset */
|
2009-08-06 12:28:38 +02:00
|
|
|
stack_sub = cpc + SCORE_INSTLEN;
|
|
|
|
pc = cpc + SCORE_INSTLEN;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
2009-08-06 12:28:38 +02:00
|
|
|
else if ((inst->len == 4)
|
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 24, 20) == 0x2)
|
|
|
|
&& (G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0xF)
|
|
|
|
&& (G_FLD (inst->v, 9, 0) == 0x56))
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
/* mv r2, r0 */
|
|
|
|
pc = cpc + SCORE_INSTLEN;
|
|
|
|
break;
|
|
|
|
}
|
2009-08-06 12:28:38 +02:00
|
|
|
else if ((inst->len == 2)
|
|
|
|
&& (G_FLD (inst->v, 14, 12) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 11, 8) == 0x2)
|
|
|
|
&& (G_FLD (inst->v, 7, 4) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 3, 0) == 0x3))
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
/* mv! r2, r0 */
|
|
|
|
pc = cpc + SCORE16_INSTLEN;
|
|
|
|
break;
|
|
|
|
}
|
2009-08-06 12:28:38 +02:00
|
|
|
else if ((inst->len == 2)
|
2007-01-04 08:09:54 +01:00
|
|
|
&& ((G_FLD (inst->v, 14, 12) == 3) /* j15 form */
|
|
|
|
|| (G_FLD (inst->v, 14, 12) == 4) /* b15 form */
|
|
|
|
|| (G_FLD (inst->v, 14, 12) == 0x0
|
|
|
|
&& G_FLD (inst->v, 3, 0) == 0x4))) /* br! */
|
|
|
|
break;
|
2009-08-06 12:28:38 +02:00
|
|
|
else if ((inst->len == 4)
|
2007-01-04 08:09:54 +01:00
|
|
|
&& ((G_FLD (inst->v, 29, 25) == 2) /* j32 form */
|
|
|
|
|| (G_FLD (inst->v, 29, 25) == 4) /* b32 form */
|
|
|
|
|| (G_FLD (inst->v, 29, 25) == 0x0
|
|
|
|
&& G_FLD (inst->v, 6, 1) == 0x4))) /* br */
|
|
|
|
break;
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
cpc += (inst->len == 2) ? SCORE16_INSTLEN : SCORE_INSTLEN;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
return pc;
|
|
|
|
}
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static CORE_ADDR
|
|
|
|
score3_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
CORE_ADDR cpc = pc;
|
|
|
|
int iscan = 32, stack_sub = 0;
|
|
|
|
while (iscan-- > 0)
|
|
|
|
{
|
|
|
|
inst_t *inst
|
2011-01-11 22:53:25 +01:00
|
|
|
= score3_adjust_pc_and_fetch_inst (&cpc, NULL,
|
|
|
|
gdbarch_byte_order (gdbarch));
|
2007-01-04 08:09:54 +01:00
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
if (!inst)
|
|
|
|
break;
|
|
|
|
if (inst->len == 4 && !stack_sub
|
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x1)
|
|
|
|
&& (G_FLD (inst->v, 19, 17) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 24, 20) == 0x0))
|
|
|
|
{
|
|
|
|
/* addi r0, offset */
|
|
|
|
stack_sub = cpc + inst->len;
|
|
|
|
pc = cpc + inst->len;
|
|
|
|
}
|
|
|
|
else if (inst->len == 4
|
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 24, 20) == 0x2)
|
|
|
|
&& (G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0xF)
|
|
|
|
&& (G_FLD (inst->v, 9, 0) == 0x56))
|
|
|
|
{
|
|
|
|
/* mv r2, r0 */
|
|
|
|
pc = cpc + inst->len;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else if ((inst->len == 2)
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0x10)
|
|
|
|
&& (G_FLD (inst->v, 9, 5) == 0x2)
|
|
|
|
&& (G_FLD (inst->v, 4, 0) == 0x0))
|
|
|
|
{
|
|
|
|
/* mv! r2, r0 */
|
|
|
|
pc = cpc + inst->len;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else if (inst->len == 2
|
|
|
|
&& ((G_FLD (inst->v, 14, 12) == 3) /* b15 form */
|
|
|
|
|| (G_FLD (inst->v, 14, 12) == 0x0
|
|
|
|
&& G_FLD (inst->v, 11, 5) == 0x4))) /* br! */
|
|
|
|
break;
|
|
|
|
else if (inst->len == 4
|
|
|
|
&& ((G_FLD (inst->v, 29, 25) == 2) /* j32 form */
|
|
|
|
|| (G_FLD (inst->v, 29, 25) == 4))) /* b32 form */
|
|
|
|
break;
|
|
|
|
|
|
|
|
cpc += inst->len;
|
|
|
|
}
|
|
|
|
return pc;
|
|
|
|
}
|
|
|
|
|
2015-05-26 12:59:17 +02:00
|
|
|
/* Implement the stack_frame_destroyed_p gdbarch method. */
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static int
|
2015-05-26 12:59:17 +02:00
|
|
|
score7_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
inst_t *inst = score7_fetch_inst (gdbarch, cur_pc, NULL);
|
|
|
|
|
|
|
|
if (inst->v == 0x23)
|
|
|
|
return 1; /* mv! r0, r2 */
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x2
|
|
|
|
&& G_FLD (inst->v, 3, 0) == 0xa)
|
|
|
|
return 1; /* pop! */
|
2007-01-04 08:09:54 +01:00
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x0
|
|
|
|
&& G_FLD (inst->v, 7, 0) == 0x34)
|
|
|
|
return 1; /* br! r3 */
|
|
|
|
else if (G_FLD (inst->v, 29, 15) == 0x2
|
|
|
|
&& G_FLD (inst->v, 6, 1) == 0x2b)
|
|
|
|
return 1; /* mv r0, r2 */
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x0
|
|
|
|
&& G_FLD (inst->v, 6, 1) == 0x4
|
|
|
|
&& G_FLD (inst->v, 19, 15) == 0x3)
|
|
|
|
return 1; /* br r3 */
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2015-05-26 12:59:17 +02:00
|
|
|
/* Implement the stack_frame_destroyed_p gdbarch method. */
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
static int
|
2015-05-26 12:59:17 +02:00
|
|
|
score3_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR cur_pc)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
CORE_ADDR pc = cur_pc;
|
|
|
|
inst_t *inst
|
2011-01-11 22:53:25 +01:00
|
|
|
= score3_adjust_pc_and_fetch_inst (&pc, NULL,
|
|
|
|
gdbarch_byte_order (gdbarch));
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
if (inst->len == 2
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0x10)
|
|
|
|
&& (G_FLD (inst->v, 9, 5) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 4, 0) == 0x2))
|
|
|
|
return 1; /* mv! r0, r2 */
|
|
|
|
else if (inst->len == 4
|
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 24, 20) == 0x2)
|
|
|
|
&& (G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0xF)
|
|
|
|
&& (G_FLD (inst->v, 9, 0) == 0x56))
|
|
|
|
return 1; /* mv r0, r2 */
|
|
|
|
else if (inst->len == 2
|
|
|
|
&& (G_FLD (inst->v, 14, 12) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 11, 5) == 0x2))
|
|
|
|
return 1; /* pop! */
|
|
|
|
else if (inst->len == 2
|
|
|
|
&& (G_FLD (inst->v, 14, 12) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 11, 7) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 6, 5) == 0x2))
|
|
|
|
return 1; /* rpop! */
|
|
|
|
else if (inst->len == 2
|
|
|
|
&& (G_FLD (inst->v, 14, 12) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 11, 5) == 0x4)
|
|
|
|
&& (G_FLD (inst->v, 4, 0) == 0x3))
|
|
|
|
return 1; /* br! r3 */
|
|
|
|
else if (inst->len == 4
|
|
|
|
&& (G_FLD (inst->v, 29, 25) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 24, 20) == 0x0)
|
|
|
|
&& (G_FLD (inst->v, 19, 15) == 0x3)
|
|
|
|
&& (G_FLD (inst->v, 14, 10) == 0xF)
|
|
|
|
&& (G_FLD (inst->v, 9, 0) == 0x8))
|
|
|
|
return 1; /* br r3 */
|
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
static gdb_byte *
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_malloc_and_get_memblock (CORE_ADDR addr, CORE_ADDR size)
|
|
|
|
{
|
|
|
|
int ret;
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
gdb_byte *memblock = NULL;
|
2009-08-06 12:28:38 +02:00
|
|
|
|
2016-06-11 16:38:42 +02:00
|
|
|
if (size == 0)
|
2009-08-06 12:28:38 +02:00
|
|
|
return NULL;
|
|
|
|
|
2015-09-25 20:08:06 +02:00
|
|
|
memblock = (gdb_byte *) xmalloc (size);
|
2009-08-06 12:28:38 +02:00
|
|
|
memset (memblock, 0, size);
|
|
|
|
ret = target_read_memory (addr & ~0x3, memblock, size);
|
|
|
|
if (ret)
|
|
|
|
{
|
2011-01-10 18:14:13 +01:00
|
|
|
error (_("Error: target_read_memory in file:%s, line:%d!"),
|
2009-08-06 12:28:38 +02:00
|
|
|
__FILE__, __LINE__);
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
return memblock;
|
|
|
|
}
|
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
static void
|
-Wpointer-sign: char -> gdb_byte.
-Wpointer-sign catches all these cases across the codebase that should
be using gdb_byte for raw target bytes. I think these are all
obvious, hence I've collapsed into a single patch.
gdb/
2013-04-19 Pedro Alves <palves@redhat.com>
* aarch64-tdep.c (aarch64_default_breakpoint): Change type to
gdb_byte[].
(aarch64_breakpoint_from_pc): Change return type to gdb_byte *.
* ada-lang.c (ada_value_assign): Use gdb_byte.
* alphanbsd-tdep.c (sigtramp_retcode): Change type to gdb_byte[].
(alphanbsd_sigtramp_offset): Use gdb_byte.
* arm-linux-tdep.c (arm_linux_arm_le_breakpoint)
(arm_linux_arm_be_breakpoint, eabi_linux_arm_le_breakpoint)
(eabi_linux_arm_be_breakpoint, arm_linux_thumb_be_breakpoint)
(arm_linux_thumb_le_breakpoint, arm_linux_thumb2_be_breakpoint)
(arm_linux_thumb2_le_breakpoint): Change type to gdb_byte[].
* arm-tdep.c (arm_stub_unwind_sniffer)
(arm_displaced_init_closure): Use gdb_byte.
(arm_default_arm_le_breakpoint, arm_default_arm_be_breakpoint)
(arm_default_thumb_le_breakpoint)
(arm_default_thumb_be_breakpoint): Change type to gdb_byte[].
* arm-tdep.h (struct gdbarch_tdep) <arm_breakpoint,
thumb_breakpoint, thumb2_breakpoint>: Change type to gdb_byte *.
* arm-wince-tdep.c (arm_wince_le_breakpoint)
(arm_wince_thumb_le_breakpoint): Change type to gdb_byte[].
* armnbsd-tdep.c (arm_nbsd_arm_le_breakpoint)
(arm_nbsd_arm_be_breakpoint, arm_nbsd_thumb_le_breakpoint)
(arm_nbsd_thumb_be_breakpoint): Change type to gdb_byte[].
* armobsd-tdep.c (arm_obsd_thumb_le_breakpoint)
(arm_obsd_thumb_be_breakpoint): Change type to gdb_byte[].
* cris-tdep.c (push_stack_item, cris_push_dummy_call)
(cris_store_return_value, cris_extract_return_value): Use
gdb_byte.
(constraint): Change type of parameter to char * from signed
char*. Use gdb_byte.
* dwarf2loc.c (read_pieced_value, write_pieced_value): Change type
of local buffer to gdb_byte *.
* dwarf2read.c (read_index_from_section): Use gdb_byte.
(create_dwp_hash_table): Change type of locals to gdb_byte *.
(add_address_entry): Change type of local buffer to gdb_byte[].
* frv-tdep.c (frv_adjust_breakpoint_address, find_func_descr)
(frv_push_dummy_call): Use gdb_byte.
* hppa-hpux-tdep.c (hppa_hpux_push_dummy_code)
(hppa_hpux_supply_ss_fpblock, hppa_hpux_supply_ss_wide)
(hppa_hpux_supply_save_state): Use gdb_byte.
* hppa-tdep.c (hppa32_push_dummy_call)
(hppa64_convert_code_addr_to_fptr): Use gdb_byte.
* ia64-tdep.c (extract_bit_field, replace_bit_field)
(slotN_contents, replace_slotN_contents): Change type of parameter
to gdb_byte *.
(fetch_instruction, ia64_pseudo_register_write)
(ia64_register_to_value, ia64_value_to_register)
(ia64_extract_return_value, ia64_store_return_value)
(ia64_push_dummy_call): Use gdb_byte.
* m32c-tdep.c (m32c_return_value): Remove cast.
* m68hc11-tdep.c (m68hc11_pseudo_register_write)
(m68hc11_push_dummy_call, m68hc11_store_return_value): Use
gdb_byte.
* mipsnbsd-tdep.c (mipsnbsd_get_longjmp_target): Use gdb_byte.
* mn10300-tdep.c (mn10300_store_return_value)
(mn10300_breakpoint_from_pc, mn10300_push_dummy_call): Use
gdb_byte.
* moxie-tdep.c (moxie_process_readu): Use gdb_byte.
(moxie_process_record): Remove casts.
* ppc-ravenscar-thread.c (supply_register_at_address)
(ppc_ravenscar_generic_store_registers): Use gdb_byte.
* ravenscar-thread.c (get_running_thread_id): Use gdb_byte.
* remote-m32r-sdi.c (m32r_fetch_register): Use gdb_byte.
* remote-mips.c (mips_xfer_memory): Use gdb_byte.
* remote.c (compare_sections_command): Use gdb_byte.
* score-tdep.c (score7_free_memblock): Change type of parameter to
gdb_byte *.
* sh-tdep.c (sh_justify_value_in_reg): Change return type to
gdb_byte *. Use gdb_byte.
(sh_push_dummy_call_fpu): Use gdb_byte.
(sh_extract_return_value_nofpu, sh_extract_return_value_fpu)
(sh_store_return_value_nofpu, sh_store_return_value_fpu)
(sh_register_convert_to_virtual, sh_register_convert_to_raw):
Change parameter type to 'gdb_byte *'. Use gdb_byte.
(sh_pseudo_register_read, sh_pseudo_register_write): Use gdb_byte.
* sh64-tdep.c (sh64_push_dummy_call): Use gdb_byte.
(sh64_store_return_value, sh64_register_convert_to_virtual):
Change parameter type to 'gdb_byte *'. Use gdb_byte.
(sh64_pseudo_register_write): Use gdb_byte.
* solib-darwin.c (darwin_current_sos): Add casts to 'gdb_byte *'.
* solib-irix.c (fetch_lm_info): Likewise. Use gdb_byte for byte
buffer.
(irix_current_sos): Use gdb_byte.
* solib-som.c (som_current_sos): Use gdb_byte.
* sparc-ravenscar-thread.c (supply_register_at_address)
(sparc_ravenscar_generic_store_registers): Use gdb_byte.
* spu-multiarch.c (spu_xfer_partial): Add cast to 'char *'.
* spu-tdep.c (spu_get_overlay_table): Use gdb_byte.
* tic6x-tdep.c (tic6x_breakpoint_from_pc): Change return type to
'gdb_byte *'.
* tic6x-tdep.h (struct gdbarch_tdep) <breakpoint>: Change type to
'gdb_byte *'.
* tracepoint.c (tfile_fetch_registers): Use gdb_byte.
* xstormy16-tdep.c (xstormy16_extract_return_value)
(xstormy16_store_return_value): Change parameter type to
'gdb_byte *'. Adjust.
(xstormy16_push_dummy_call): Use gdb_byte.
* xtensa-tdep.c (xtensa_scan_prologue, call0_ret)
(call0_analyze_prologue, execute_code): Use gdb_byte.
2013-04-19 17:09:46 +02:00
|
|
|
score7_free_memblock (gdb_byte *memblock)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
xfree (memblock);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
score7_adjust_memblock_ptr (gdb_byte **memblock, CORE_ADDR prev_pc,
|
2009-08-06 12:28:38 +02:00
|
|
|
CORE_ADDR cur_pc)
|
|
|
|
{
|
|
|
|
if (prev_pc == -1)
|
|
|
|
{
|
|
|
|
/* First time call this function, do nothing. */
|
|
|
|
}
|
|
|
|
else if (cur_pc - prev_pc == 2 && (cur_pc & 0x3) == 0)
|
|
|
|
{
|
|
|
|
/* First 16-bit instruction, then 32-bit instruction. */
|
|
|
|
*memblock += SCORE_INSTLEN;
|
|
|
|
}
|
|
|
|
else if (cur_pc - prev_pc == 4)
|
|
|
|
{
|
|
|
|
/* Is 32-bit instruction, increase MEMBLOCK by 4. */
|
|
|
|
*memblock += SCORE_INSTLEN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
score7_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
|
2008-06-28 19:29:04 +02:00
|
|
|
struct frame_info *this_frame,
|
2007-01-04 08:09:54 +01:00
|
|
|
struct score_frame_cache *this_cache)
|
|
|
|
{
|
2008-06-28 19:29:04 +02:00
|
|
|
struct gdbarch *gdbarch = get_frame_arch (this_frame);
|
2007-01-04 08:09:54 +01:00
|
|
|
CORE_ADDR sp;
|
2007-05-17 05:15:42 +02:00
|
|
|
CORE_ADDR fp;
|
2007-01-04 08:09:54 +01:00
|
|
|
CORE_ADDR cur_pc = startaddr;
|
|
|
|
|
|
|
|
int sp_offset = 0;
|
|
|
|
int ra_offset = 0;
|
|
|
|
int fp_offset = 0;
|
|
|
|
int ra_offset_p = 0;
|
|
|
|
int fp_offset_p = 0;
|
|
|
|
int inst_len = 0;
|
|
|
|
|
Use gdb_byte for bytes from the program being debugged.
gdb_byte should be used for bytes from the program being debugged. We
have many places using char or unsigned char instead all over the
existing ports, and more ends up added over time due to copy/paste as
new code is based on old code.
I've greped the tree for "char buf[", and fixed all I found.
Tested by building with --enable-targets=all.
2013-03-01 Pedro Alves <palves@redhat.com>
Use gdb_byte for bytes from the program being debugged.
* arm-tdep.c (arm_store_return_value, arm_get_longjmp_target):
Change type of local 'buf' to gdb_byte.
* avr-tdep.c (avr_frame_prev_register, avr_push_dummy_call): Likewise.
* bfin-tdep.c (bfin_push_dummy_call): Likewise.
* cris-tdep.c (cris_sigcontext_addr)
(cris_sigtramp_frame_unwind_cache): Likewise.
* frv-linux-tdep.c (frv_linux_pc_in_sigtramp)
(frv_linux_sigcontext_reg_addr, frv_linux_sigtramp_frame_cache):
Likewise.
* frv-tdep.c (frv_pseudo_register_write, frv_analyze_prologue): Likewise.
* hppa-hpux-tdep.c (hppa32_hpux_find_global_pointer)
(hppa32_hpux_search_dummy_call_sequence)
(hppa_hpux_supply_save_state): Likewise.
* hppa-linux-tdep.c (insns_match_pattern)
(hppa_linux_find_global_pointer): Likewise.
* hppa-tdep.c (hppa_in_function_epilogue_p)
(skip_prologue_hard_way, hppa_frame_cache): Likewise.
* i386-nto-tdep.c (i386nto_sigcontext_addr): Likewise.
* i386fbsd-tdep.c (i386fbsd_supply_uthread)
(i386fbsd_collect_uthread): Likewise.
* ia64-hpux-tdep.c (ia64_hpux_push_dummy_code): Likewise.
* ia64-linux-tdep.c (ia64_linux_sigcontext_register_address): Likewise.
* ia64-tdep.c (examine_prologue, ia64_frame_cache)
(ia64_frame_prev_register, ia64_sigtramp_frame_cache)
(ia64_sigtramp_frame_prev_register, ia64_access_reg)
(ia64_access_rse_reg, ia64_libunwind_frame_this_id)
(ia64_libunwind_frame_prev_register)
(ia64_libunwind_sigtramp_frame_this_id)
(ia64_find_global_pointer_from_dynamic_section)
(find_extant_func_descr, find_func_descr, ia64_dummy_id)
(ia64_unwind_pc): Likewise.
* iq2000-tdep.c (iq2000_store_return_value): Likewise.
* m68hc11-tdep.c (m68hc11_push_dummy_call)
(m68hc11_extract_return_value): Likewise.
* m68klinux-nat.c (fetch_register, store_register): Likewise.
* mep-tdep.c (mep_pseudo_cr32_read, mep_pseudo_cr32_write)
(mep_get_insn, mep_push_dummy_call): Likewise.
* mips-linux-tdep.c (mips_linux_get_longjmp_target)
(mips_linux_in_dynsym_stub): Likewise.
* mn10300-tdep.c (mep_pseudo_cr32_write): Likewise.
* ppc-linux-nat.c (fetch_register, store_register): Likewise.
* regcache.c (dump_endian_bytes): Change type of parameter 'buf'
to gdb_byte.
* remote-mips.c (mips_set_register): Likewise.
* remote-sim.c (gdbsim_fetch_register): Likewise.
* score-tdep.c (score7_fetch_inst): Change type of parameter
'memblock' and local 'buf' to gdb_byte.
(score7_malloc_and_get_memblock): Change return type to gdb_byte.
Change type of local 'buf' to gdb_byte. Adjust.
(score7_adjust_memblock_ptr): Change type of parameter 'memblock'
to gdb_byte**.
(score7_analyze_prologue): Change type of 'memblock' and
'memblock_ptr' locals to gdb_byte*.
* sh64-tdep.c (sh64_extract_return_value)
(sh64_store_return_value): Change type of local 'buf' to gdb_byte.
* solib-darwin.c (darwin_current_sos, darwin_read_exec_load_addr):
* solib-pa64.c (pa64_solib_create_inferior_hook)
(pa64_open_symbol_file_object): Remove local 'buf'.
* solib-som.c (som_solib_create_inferior_hook, link_map_start)
(som_open_symbol_file_object): Likewise.
* solib-spu.c (spu_current_sos): Likewise.
* spu-linux-nat.c (spu_fetch_inferior_registers): Likewise.
* spu-multiarch.c (parse_spufs_run, spu_fetch_registers)
(spu_store_registers): Likewise.
* target.c (debug_print_register): Likewise.
* tic6x-tdep.c (tic6x_get_longjmp_target): Likewise.
* xstormy16-tdep.c (xstormy16_store_return_value)
(xstormy16_push_dummy_call, xstormy16_resolve_jmp_table_entry)
(xstormy16_find_jmp_table_entry): Likewise.
2013-03-01 16:38:27 +01:00
|
|
|
gdb_byte *memblock = NULL;
|
|
|
|
gdb_byte *memblock_ptr = NULL;
|
2007-05-17 05:15:42 +02:00
|
|
|
CORE_ADDR prev_pc = -1;
|
|
|
|
|
|
|
|
/* Allocate MEMBLOCK if PC - STARTADDR > 0. */
|
|
|
|
memblock_ptr = memblock =
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_malloc_and_get_memblock (startaddr, pc - startaddr);
|
2007-05-17 05:15:42 +02:00
|
|
|
|
2008-06-28 19:29:04 +02:00
|
|
|
sp = get_frame_register_unsigned (this_frame, SCORE_SP_REGNUM);
|
|
|
|
fp = get_frame_register_unsigned (this_frame, SCORE_FP_REGNUM);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
2007-05-17 05:15:42 +02:00
|
|
|
for (; cur_pc < pc; prev_pc = cur_pc, cur_pc += inst_len)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2007-05-17 05:15:42 +02:00
|
|
|
inst_t *inst = NULL;
|
|
|
|
if (memblock != NULL)
|
|
|
|
{
|
|
|
|
/* Reading memory block from target succefully and got all
|
|
|
|
the instructions(from STARTADDR to PC) needed. */
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_adjust_memblock_ptr (&memblock, prev_pc, cur_pc);
|
|
|
|
inst = score7_fetch_inst (gdbarch, cur_pc, memblock);
|
2007-05-17 05:15:42 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Otherwise, we fetch 4 bytes from target, and GDB also
|
|
|
|
work correctly. */
|
2009-08-06 12:28:38 +02:00
|
|
|
inst = score7_fetch_inst (gdbarch, cur_pc, NULL);
|
2007-05-17 05:15:42 +02:00
|
|
|
}
|
|
|
|
|
2011-01-11 22:53:25 +01:00
|
|
|
/* FIXME: make a full-power prologue analyzer. */
|
2009-08-06 12:28:38 +02:00
|
|
|
if (inst->len == 2)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
inst_len = SCORE16_INSTLEN;
|
|
|
|
|
|
|
|
if (G_FLD (inst->v, 14, 12) == 0x2
|
|
|
|
&& G_FLD (inst->v, 3, 0) == 0xe)
|
|
|
|
{
|
|
|
|
/* push! */
|
|
|
|
sp_offset += 4;
|
|
|
|
|
|
|
|
if (G_FLD (inst->v, 11, 7) == 0x6
|
|
|
|
&& ra_offset_p == 0)
|
|
|
|
{
|
|
|
|
/* push! r3, [r0] */
|
|
|
|
ra_offset = sp_offset;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 11, 7) == 0x4
|
|
|
|
&& fp_offset_p == 0)
|
|
|
|
{
|
|
|
|
/* push! r2, [r0] */
|
|
|
|
fp_offset = sp_offset;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x2
|
|
|
|
&& G_FLD (inst->v, 3, 0) == 0xa)
|
|
|
|
{
|
|
|
|
/* pop! */
|
|
|
|
sp_offset -= 4;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 7) == 0xc1
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* subei! r0, n */
|
|
|
|
sp_offset += (int) pow (2, G_FLD (inst->v, 6, 3));
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 7) == 0xc0
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* addei! r0, n */
|
|
|
|
sp_offset -= (int) pow (2, G_FLD (inst->v, 6, 3));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
inst_len = SCORE_INSTLEN;
|
|
|
|
|
2009-08-06 12:28:38 +02:00
|
|
|
if (G_FLD(inst->v, 29, 25) == 0x3
|
|
|
|
&& G_FLD(inst->v, 2, 0) == 0x4
|
|
|
|
&& G_FLD(inst->v, 19, 15) == 0)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
/* sw rD, [r0, offset]+ */
|
|
|
|
sp_offset += SCORE_INSTLEN;
|
|
|
|
|
|
|
|
if (G_FLD(inst->v, 24, 20) == 0x3)
|
|
|
|
{
|
|
|
|
/* rD = r3 */
|
|
|
|
if (ra_offset_p == 0)
|
|
|
|
{
|
|
|
|
ra_offset = sp_offset;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (G_FLD(inst->v, 24, 20) == 0x2)
|
|
|
|
{
|
|
|
|
/* rD = r2 */
|
|
|
|
if (fp_offset_p == 0)
|
|
|
|
{
|
|
|
|
fp_offset = sp_offset;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
2009-08-06 12:28:38 +02:00
|
|
|
else if (G_FLD(inst->v, 29, 25) == 0x14
|
|
|
|
&& G_FLD(inst->v, 19,15) == 0)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2009-08-06 12:28:38 +02:00
|
|
|
/* sw rD, [r0, offset] */
|
|
|
|
if (G_FLD(inst->v, 24, 20) == 0x3)
|
|
|
|
{
|
|
|
|
/* rD = r3 */
|
|
|
|
ra_offset = sp_offset - G_FLD(inst->v, 14, 0);
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD(inst->v, 24, 20) == 0x2)
|
|
|
|
{
|
|
|
|
/* rD = r2 */
|
|
|
|
fp_offset = sp_offset - G_FLD(inst->v, 14, 0);
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 15) == 0x1c60
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* lw r3, [r0]+, 4 */
|
|
|
|
sp_offset -= SCORE_INSTLEN;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 15) == 0x1c40
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* lw r2, [r0]+, 4 */
|
|
|
|
sp_offset -= SCORE_INSTLEN;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (G_FLD (inst->v, 29, 17) == 0x100
|
|
|
|
&& G_FLD (inst->v, 0, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* addi r0, -offset */
|
|
|
|
sp_offset += 65536 - G_FLD (inst->v, 16, 1);
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 17) == 0x110
|
|
|
|
&& G_FLD (inst->v, 0, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* addi r2, offset */
|
|
|
|
if (pc - cur_pc > 4)
|
|
|
|
{
|
|
|
|
unsigned int save_v = inst->v;
|
|
|
|
inst_t *inst2 =
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_fetch_inst (gdbarch, cur_pc + SCORE_INSTLEN, NULL);
|
2007-01-04 08:09:54 +01:00
|
|
|
if (inst2->v == 0x23)
|
2007-05-17 05:15:42 +02:00
|
|
|
{
|
|
|
|
/* mv! r0, r2 */
|
|
|
|
sp_offset -= G_FLD (save_v, 16, 1);
|
|
|
|
}
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save RA. */
|
|
|
|
if (ra_offset_p == 1)
|
|
|
|
{
|
|
|
|
if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
|
|
|
|
this_cache->saved_regs[SCORE_PC_REGNUM].addr =
|
|
|
|
sp + sp_offset - ra_offset;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this_cache->saved_regs[SCORE_PC_REGNUM] =
|
|
|
|
this_cache->saved_regs[SCORE_RA_REGNUM];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save FP. */
|
|
|
|
if (fp_offset_p == 1)
|
|
|
|
{
|
|
|
|
if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
|
|
|
|
this_cache->saved_regs[SCORE_FP_REGNUM].addr =
|
|
|
|
sp + sp_offset - fp_offset;
|
|
|
|
}
|
|
|
|
|
2007-05-17 05:15:42 +02:00
|
|
|
/* Save SP and FP. */
|
|
|
|
this_cache->base = sp + sp_offset;
|
|
|
|
this_cache->fp = fp;
|
|
|
|
|
|
|
|
/* Don't forget to free MEMBLOCK if we allocated it. */
|
|
|
|
if (memblock_ptr != NULL)
|
2009-08-06 12:28:38 +02:00
|
|
|
score7_free_memblock (memblock_ptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
score3_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
|
|
|
|
struct frame_info *this_frame,
|
|
|
|
struct score_frame_cache *this_cache)
|
|
|
|
{
|
|
|
|
CORE_ADDR sp;
|
|
|
|
CORE_ADDR fp;
|
|
|
|
CORE_ADDR cur_pc = startaddr;
|
2011-01-11 22:53:25 +01:00
|
|
|
enum bfd_endian byte_order
|
|
|
|
= gdbarch_byte_order (get_frame_arch (this_frame));
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
int sp_offset = 0;
|
|
|
|
int ra_offset = 0;
|
|
|
|
int fp_offset = 0;
|
|
|
|
int ra_offset_p = 0;
|
|
|
|
int fp_offset_p = 0;
|
|
|
|
int inst_len = 0;
|
|
|
|
|
|
|
|
sp = get_frame_register_unsigned (this_frame, SCORE_SP_REGNUM);
|
|
|
|
fp = get_frame_register_unsigned (this_frame, SCORE_FP_REGNUM);
|
|
|
|
|
2016-04-18 19:16:27 +02:00
|
|
|
for (; cur_pc < pc; cur_pc += inst_len)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
|
|
|
inst_t *inst = NULL;
|
|
|
|
|
|
|
|
inst = score3_adjust_pc_and_fetch_inst (&cur_pc, &inst_len, byte_order);
|
|
|
|
|
2011-01-11 22:53:25 +01:00
|
|
|
/* FIXME: make a full-power prologue analyzer. */
|
2009-08-06 12:28:38 +02:00
|
|
|
if (inst->len == 2)
|
|
|
|
{
|
|
|
|
if (G_FLD (inst->v, 14, 12) == 0x0
|
|
|
|
&& G_FLD (inst->v, 11, 7) == 0x0
|
|
|
|
&& G_FLD (inst->v, 6, 5) == 0x3)
|
|
|
|
{
|
|
|
|
/* push! */
|
|
|
|
sp_offset += 4;
|
|
|
|
|
|
|
|
if (G_FLD (inst->v, 4, 0) == 0x3
|
|
|
|
&& ra_offset_p == 0)
|
|
|
|
{
|
|
|
|
/* push! r3, [r0] */
|
|
|
|
ra_offset = sp_offset;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 4, 0) == 0x2
|
|
|
|
&& fp_offset_p == 0)
|
|
|
|
{
|
|
|
|
/* push! r2, [r0] */
|
|
|
|
fp_offset = sp_offset;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x6
|
|
|
|
&& G_FLD (inst->v, 11, 10) == 0x3)
|
|
|
|
{
|
|
|
|
/* rpush! */
|
|
|
|
int start_r = G_FLD (inst->v, 9, 5);
|
|
|
|
int cnt = G_FLD (inst->v, 4, 0);
|
|
|
|
|
|
|
|
if ((ra_offset_p == 0)
|
|
|
|
&& (start_r <= SCORE_RA_REGNUM)
|
|
|
|
&& (SCORE_RA_REGNUM < start_r + cnt))
|
|
|
|
{
|
|
|
|
/* rpush! contains r3 */
|
|
|
|
ra_offset_p = 1;
|
|
|
|
ra_offset = sp_offset + 4 * (SCORE_RA_REGNUM - start_r) + 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((fp_offset_p == 0)
|
|
|
|
&& (start_r <= SCORE_FP_REGNUM)
|
|
|
|
&& (SCORE_FP_REGNUM < start_r + cnt))
|
|
|
|
{
|
|
|
|
/* rpush! contains r2 */
|
|
|
|
fp_offset_p = 1;
|
|
|
|
fp_offset = sp_offset + 4 * (SCORE_FP_REGNUM - start_r) + 4;
|
|
|
|
}
|
|
|
|
|
|
|
|
sp_offset += 4 * cnt;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x0
|
|
|
|
&& G_FLD (inst->v, 11, 7) == 0x0
|
|
|
|
&& G_FLD (inst->v, 6, 5) == 0x2)
|
|
|
|
{
|
|
|
|
/* pop! */
|
|
|
|
sp_offset -= 4;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x6
|
|
|
|
&& G_FLD (inst->v, 11, 10) == 0x2)
|
|
|
|
{
|
|
|
|
/* rpop! */
|
|
|
|
sp_offset -= 4 * G_FLD (inst->v, 4, 0);
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x5
|
|
|
|
&& G_FLD (inst->v, 11, 10) == 0x3
|
|
|
|
&& G_FLD (inst->v, 9, 6) == 0x0)
|
|
|
|
{
|
|
|
|
/* addi! r0, -offset */
|
|
|
|
int imm = G_FLD (inst->v, 5, 0);
|
|
|
|
if (imm >> 5)
|
|
|
|
imm = -(0x3F - imm + 1);
|
|
|
|
sp_offset -= imm;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 14, 12) == 0x5
|
|
|
|
&& G_FLD (inst->v, 11, 10) == 0x3
|
|
|
|
&& G_FLD (inst->v, 9, 6) == 0x2)
|
|
|
|
{
|
|
|
|
/* addi! r2, offset */
|
|
|
|
if (pc - cur_pc >= 2)
|
|
|
|
{
|
|
|
|
inst_t *inst2;
|
|
|
|
|
|
|
|
cur_pc += inst->len;
|
2011-01-11 22:53:25 +01:00
|
|
|
inst2 = score3_adjust_pc_and_fetch_inst (&cur_pc, NULL,
|
|
|
|
byte_order);
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
if (inst2->len == 2
|
|
|
|
&& G_FLD (inst2->v, 14, 10) == 0x10
|
|
|
|
&& G_FLD (inst2->v, 9, 5) == 0x0
|
|
|
|
&& G_FLD (inst2->v, 4, 0) == 0x2)
|
|
|
|
{
|
|
|
|
/* mv! r0, r2 */
|
|
|
|
int imm = G_FLD (inst->v, 5, 0);
|
|
|
|
if (imm >> 5)
|
|
|
|
imm = -(0x3F - imm + 1);
|
|
|
|
sp_offset -= imm;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (inst->len == 4)
|
|
|
|
{
|
|
|
|
if (G_FLD (inst->v, 29, 25) == 0x3
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x4
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x3
|
|
|
|
&& G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
{
|
|
|
|
/* sw r3, [r0, offset]+ */
|
|
|
|
sp_offset += inst->len;
|
|
|
|
if (ra_offset_p == 0)
|
|
|
|
{
|
|
|
|
ra_offset = sp_offset;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x3
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x4
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x2
|
|
|
|
&& G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
{
|
|
|
|
/* sw r2, [r0, offset]+ */
|
|
|
|
sp_offset += inst->len;
|
|
|
|
if (fp_offset_p == 0)
|
|
|
|
{
|
|
|
|
fp_offset = sp_offset;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x7
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x3
|
|
|
|
&& G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
{
|
|
|
|
/* lw r3, [r0]+, 4 */
|
|
|
|
sp_offset -= inst->len;
|
|
|
|
ra_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x7
|
|
|
|
&& G_FLD (inst->v, 2, 0) == 0x0
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x2
|
|
|
|
&& G_FLD (inst->v, 19, 15) == 0x0)
|
|
|
|
{
|
|
|
|
/* lw r2, [r0]+, 4 */
|
|
|
|
sp_offset -= inst->len;
|
|
|
|
fp_offset_p = 1;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x1
|
|
|
|
&& G_FLD (inst->v, 19, 17) == 0x0
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x0
|
|
|
|
&& G_FLD (inst->v, 0, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* addi r0, -offset */
|
|
|
|
int imm = G_FLD (inst->v, 16, 1);
|
|
|
|
if (imm >> 15)
|
|
|
|
imm = -(0xFFFF - imm + 1);
|
|
|
|
sp_offset -= imm;
|
|
|
|
}
|
|
|
|
else if (G_FLD (inst->v, 29, 25) == 0x1
|
|
|
|
&& G_FLD (inst->v, 19, 17) == 0x0
|
|
|
|
&& G_FLD (inst->v, 24, 20) == 0x2
|
|
|
|
&& G_FLD (inst->v, 0, 0) == 0x0)
|
|
|
|
{
|
|
|
|
/* addi r2, offset */
|
|
|
|
if (pc - cur_pc >= 2)
|
|
|
|
{
|
|
|
|
inst_t *inst2;
|
|
|
|
|
|
|
|
cur_pc += inst->len;
|
2011-01-11 22:53:25 +01:00
|
|
|
inst2 = score3_adjust_pc_and_fetch_inst (&cur_pc, NULL,
|
|
|
|
byte_order);
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
if (inst2->len == 2
|
|
|
|
&& G_FLD (inst2->v, 14, 10) == 0x10
|
|
|
|
&& G_FLD (inst2->v, 9, 5) == 0x0
|
|
|
|
&& G_FLD (inst2->v, 4, 0) == 0x2)
|
|
|
|
{
|
|
|
|
/* mv! r0, r2 */
|
|
|
|
int imm = G_FLD (inst->v, 16, 1);
|
|
|
|
if (imm >> 15)
|
|
|
|
imm = -(0xFFFF - imm + 1);
|
|
|
|
sp_offset -= imm;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save RA. */
|
|
|
|
if (ra_offset_p == 1)
|
|
|
|
{
|
|
|
|
if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
|
|
|
|
this_cache->saved_regs[SCORE_PC_REGNUM].addr =
|
|
|
|
sp + sp_offset - ra_offset;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this_cache->saved_regs[SCORE_PC_REGNUM] =
|
|
|
|
this_cache->saved_regs[SCORE_RA_REGNUM];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save FP. */
|
|
|
|
if (fp_offset_p == 1)
|
|
|
|
{
|
|
|
|
if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
|
|
|
|
this_cache->saved_regs[SCORE_FP_REGNUM].addr =
|
|
|
|
sp + sp_offset - fp_offset;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Save SP and FP. */
|
|
|
|
this_cache->base = sp + sp_offset;
|
|
|
|
this_cache->fp = fp;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static struct score_frame_cache *
|
2008-06-28 19:29:04 +02:00
|
|
|
score_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
struct score_frame_cache *cache;
|
|
|
|
|
|
|
|
if ((*this_cache) != NULL)
|
2015-09-25 20:08:07 +02:00
|
|
|
return (struct score_frame_cache *) (*this_cache);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
cache = FRAME_OBSTACK_ZALLOC (struct score_frame_cache);
|
|
|
|
(*this_cache) = cache;
|
2008-06-28 19:29:04 +02:00
|
|
|
cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
/* Analyze the prologue. */
|
|
|
|
{
|
2008-06-28 19:29:04 +02:00
|
|
|
const CORE_ADDR pc = get_frame_pc (this_frame);
|
2007-01-04 08:09:54 +01:00
|
|
|
CORE_ADDR start_addr;
|
|
|
|
|
|
|
|
find_pc_partial_function (pc, NULL, &start_addr, NULL);
|
|
|
|
if (start_addr == 0)
|
|
|
|
return cache;
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
if (target_mach == bfd_mach_score3)
|
2015-09-25 20:08:07 +02:00
|
|
|
score3_analyze_prologue (start_addr, pc, this_frame,
|
|
|
|
(struct score_frame_cache *) *this_cache);
|
2009-08-06 12:28:38 +02:00
|
|
|
else
|
2015-09-25 20:08:07 +02:00
|
|
|
score7_analyze_prologue (start_addr, pc, this_frame,
|
|
|
|
(struct score_frame_cache *) *this_cache);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Save SP. */
|
|
|
|
trad_frame_set_value (cache->saved_regs, SCORE_SP_REGNUM, cache->base);
|
|
|
|
|
2015-09-25 20:08:07 +02:00
|
|
|
return (struct score_frame_cache *) (*this_cache);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2008-06-28 19:29:04 +02:00
|
|
|
score_prologue_this_id (struct frame_info *this_frame, void **this_cache,
|
2007-01-04 08:09:54 +01:00
|
|
|
struct frame_id *this_id)
|
|
|
|
{
|
2008-06-28 19:29:04 +02:00
|
|
|
struct score_frame_cache *info = score_make_prologue_cache (this_frame,
|
2007-01-04 08:09:54 +01:00
|
|
|
this_cache);
|
2008-06-28 19:29:04 +02:00
|
|
|
(*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
2008-06-28 19:29:04 +02:00
|
|
|
static struct value *
|
|
|
|
score_prologue_prev_register (struct frame_info *this_frame,
|
|
|
|
void **this_cache, int regnum)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
2008-06-28 19:29:04 +02:00
|
|
|
struct score_frame_cache *info = score_make_prologue_cache (this_frame,
|
2007-01-04 08:09:54 +01:00
|
|
|
this_cache);
|
2008-06-28 19:29:04 +02:00
|
|
|
return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static const struct frame_unwind score_prologue_unwind =
|
|
|
|
{
|
|
|
|
NORMAL_FRAME,
|
gdb/
* frame.c (frame_unwind_register): Throw an error if unwinding the
register failed.
* get_prev_frame_1 (get_prev_frame_1): Ask the unwinder if there's
an unwind stop reason.
(frame_stop_reason_string): Handle UNWIND_UNAVAILABLE.
* frame.h (enum unwind_stop_reason) <UNWIND_OUTERMOST,
UNWIND_UNAVAILABLE>: New.
* inline-frame.c (inline_frame_unwind): Install
default_frame_unwind_stop_reason.
* frame-unwind.c: Include "exceptions.h".
(frame_unwind_find_by_frame): Swallow NOT_AVAILABLE_ERROR errors.
(default_frame_unwind_stop_reason): New.
* frame-unwind.h (frame_unwind_stop_reason_ftype): New typedef.
(default_frame_unwind_stop_reason): Declare.
(struct frame_unwind) <stop_reason>: New function pointer.
* dummy-frame.c: Install default_frame_unwind_stop_reason.
* dwarf2-frame.c: Include exceptions.h.
(struct dwarf2_frame_cache) <unavailable_retaddr>: New field.
(dwarf2_frame_cache): Swallow NOT_AVAILABLE_ERROR errors when
computing the CFA. If such an error was thrown, set
unavailable_retaddr.
(dwarf2_frame_unwind_stop_reason): New.
(dwarf2_frame_this_id): Don't build a frame id if the CFA was
unavailable.
(dwarf2_frame_unwind): Install dwarf2_frame_unwind_stop_reason.
(dwarf2_signal_frame_unwind): Ditto.
* amd64-tdep.c: Include "exceptions.h".
(struct amd64_frame_cache): New field "base_p".
(amd64_init_frame_cache): Clear it.
(amd64_frame_cache_1): New, factored out from amd64_frame_cache.
Avoid reading registers with functions that throw if the register
is not necessary to compute the frame base.
(amd64_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
swallowing NOT_AVAILABLE_ERROR.
(amd64_frame_unwind_stop_reason): New.
(amd64_frame_this_id): Don't build a frame id if the frame base
was unavailable.
(amd64_frame_unwind): Install amd64_frame_unwind_stop_reason.
(amd64_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
base_p if the frame base was computable.
(amd64_sigtramp_frame_unwind_stop_reason): New.
(amd64_sigtramp_frame_this_id): Don't build a frame id if the
frame base was unavailable.
(amd64_sigtramp_frame_unwind): Install
amd64_sigtramp_frame_unwind_stop_reason.
(amd64_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
base_p if the frame base was computable.
(amd64_epilogue_frame_unwind_stop_reason): New.
(amd64_epilogue_frame_this_id): Don't build a frame id if the
frame base was unavailable.
(amd64_epilogue_frame_unwind): Install
amd64_epilogue_frame_unwind_stop_reason.
* i386-tdep.c: Include "exceptions.h".
(struct i386_frame_cache): New field "base_p".
(i386_init_frame_cache): Clear it.
(i386_frame_cache_1): New, factored out from amd64_frame_cache.
Avoid reading registers with functions that throw if the register
is not necessary to compute the frame base.
(i386_frame_cache): Reimplement wrapping amd64_frame_cache_1, and
swallowing NOT_AVAILABLE_ERROR.
(i386_frame_unwind_stop_reason): New.
(i386_frame_this_id): Don't build a frame id if the frame base was
unavailable.
(i386_frame_prev_register): Handle unavailable SP.
(i386_frame_unwind): Install i386_frame_unwind_stop_reason.
(i386_epilogue_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
base_p if the frame base was computable.
(i386_epilogue_frame_unwind_stop_reason): New.
(i386_epilogue_frame_this_id): Don't build a frame id if the frame
base was unavailable.
(i386_epilogue_frame_unwind): Install
i386_epilogue_frame_unwind_stop_reason.
(i386_sigtramp_frame_cache): Swallow NOT_AVAILABLE_ERROR, and set
base_p if the frame base was computable.
(i386_sigtramp_frame_unwind_stop_reason): New.
(i386_sigtramp_frame_this_id): Don't build a frame id if the frame
base was unavailable.
(i386_sigtramp_frame_unwind): Install
i386_sigtramp_frame_unwind_stop_reason.
* sentinel-frame.c (sentinel_frame_prev_register): Use the value
type's size, not the register's.
(sentinel_frame_unwind): Install default_frame_unwind_stop_reason.
* alpha-mdebug-tdep.c (alpha_mdebug_frame_unwind): Install
default_frame_unwind_stop_reason.
* alpha-tdep.c (alpha_sigtramp_frame_unwind)
(alpha_heuristic_frame_unwind): Ditto.
* amd64obsd-tdep.c (amd64obsd_trapframe_unwind): Ditto.
* arm-tdep.c (arm_prologue_unwind, arm_stub_unwind): Ditto.
* avr-tdep.c (avr_frame_unwind): Ditto.
* cris-tdep.c (cris_sigtramp_frame_unwind, cris_frame_unwind):
Ditto.
* frv-linux-tdep.c (frv_linux_sigtramp_frame_unwind): Ditto.
* frv-tdep.c (frv_frame_unwind): Ditto.
* h8300-tdep.c (h8300_frame_unwind): Ditto.
* hppa-hpux-tdep.c (hppa_hpux_sigtramp_frame_unwind): Ditto.
* hppa-linux-tdep.c (hppa_linux_sigtramp_frame_unwind): Ditto.
* hppa-tdep.c (hppa_frame_unwind, hppa_fallback_frame_unwind)
(hppa_stub_frame_unwind): Ditto.
* i386obsd-tdep.c (i386obsd_trapframe_unwind): Ditto.
* ia64-tdep.c (ia64_frame_unwind, ia64_sigtramp_frame_unwind)
(ia64_libunwind_frame_unwind)
(ia64_libunwind_sigtramp_frame_unwind): Ditto.
* iq2000-tdep.c (iq2000_frame_unwind): Ditto.
* lm32-tdep.c (lm32_frame_unwind): Ditto.
* m32c-tdep.c (m32c_unwind): Ditto.
* m32r-linux-tdep.c (m32r_linux_sigtramp_frame_unwind): Ditto.
* m32r-tdep.c (m32r_frame_unwind): Ditto.
* m68hc11-tdep.c (m68hc11_frame_unwind): Ditto.
* m68k-tdep.c (m68k_frame_unwind): Ditto.
* m68klinux-tdep.c (m68k_linux_sigtramp_frame_unwind): Ditto.
* m88k-tdep.c (m88k_frame_unwind): Ditto.
* mep-tdep.c (mep_frame_unwind): Ditto.
* microblaze-tdep.c (microblaze_frame_unwind): Ditto.
* mips-tdep.c (mips_insn16_frame_unwind, mips_insn32_frame_unwind)
(mips_stub_frame_unwind): Ditto.
* mn10300-tdep.c (mn10300_frame_unwind): Ditto.
* moxie-tdep.c (moxie_frame_unwind): Ditto.
* mt-tdep.c (mt_frame_unwind): Ditto.
* ppc-linux-tdep.c (ppu2spu_unwind): Ditto.
* ppcobsd-tdep.c (ppcobsd_sigtramp_frame_unwind): Ditto.
* rs6000-tdep.c (rs6000_frame_unwind): Ditto.
* s390-tdep.c (s390_frame_unwind, s390_stub_frame_unwind)
(s390_sigtramp_frame_unwind): Ditto.
* score-tdep.c (score_prologue_unwind): Ditto.
* sh-tdep.c (sh_frame_unwind): Ditto.
* sh64-tdep.c (sh64_frame_unwind): Ditto.
* sparc-sol2-tdep.c (sparc32_sol2_sigtramp_frame_unwind): Ditto.
* sparc-tdep.c (sparc32_frame_unwind): Ditto.
* sparc64-sol2-tdep.c (sparc64_sol2_sigtramp_frame_unwind): Ditto.
* sparc64-tdep.c (sparc64_frame_unwind): Ditto.
* sparc64fbsd-tdep.c (sparc64fbsd_sigtramp_frame_unwind): Ditto.
* sparc64nbsd-tdep.c (sparc64nbsd_sigcontext_frame_unwind): Ditto.
* sparc64obsd-tdep.c (sparc64obsd_frame_unwind)
(sparc64obsd_trapframe_unwind): Ditto.
* sparcnbsd-tdep.c (sparc32nbsd_sigcontext_frame_unwind): Ditto.
* sparcobsd-tdep.c (sparc32obsd_sigtramp_frame_unwind): Ditto.
* spu-tdep.c (spu_frame_unwind, spu2ppu_unwind): Ditto.
* v850-tdep.c (v850_frame_unwind): Ditto.
* vax-tdep.c (vax_frame_unwind): Ditto.
* vaxobsd-tdep.c (vaxobsd_sigtramp_frame_unwind): Ditto.
* xstormy16-tdep.c (frame_unwind xstormy16_frame_unwind): Ditto.
* xtensa-tdep.c (xtensa_unwind): Ditto.
2011-03-18 19:52:32 +01:00
|
|
|
default_frame_unwind_stop_reason,
|
2007-01-04 08:09:54 +01:00
|
|
|
score_prologue_this_id,
|
2008-06-28 19:29:04 +02:00
|
|
|
score_prologue_prev_register,
|
|
|
|
NULL,
|
2009-08-06 12:28:38 +02:00
|
|
|
default_frame_sniffer,
|
|
|
|
NULL
|
2007-01-04 08:09:54 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
static CORE_ADDR
|
2008-06-28 19:29:04 +02:00
|
|
|
score_prologue_frame_base_address (struct frame_info *this_frame,
|
2007-01-04 08:09:54 +01:00
|
|
|
void **this_cache)
|
|
|
|
{
|
|
|
|
struct score_frame_cache *info =
|
2008-06-28 19:29:04 +02:00
|
|
|
score_make_prologue_cache (this_frame, this_cache);
|
2007-05-17 05:15:42 +02:00
|
|
|
return info->fp;
|
2007-01-04 08:09:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static const struct frame_base score_prologue_frame_base =
|
|
|
|
{
|
|
|
|
&score_prologue_unwind,
|
|
|
|
score_prologue_frame_base_address,
|
|
|
|
score_prologue_frame_base_address,
|
|
|
|
score_prologue_frame_base_address,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct frame_base *
|
2008-06-28 19:29:04 +02:00
|
|
|
score_prologue_frame_base_sniffer (struct frame_info *this_frame)
|
2007-01-04 08:09:54 +01:00
|
|
|
{
|
|
|
|
return &score_prologue_frame_base;
|
|
|
|
}
|
|
|
|
|
2014-07-21 17:33:45 +02:00
|
|
|
/* Core file support. */
|
|
|
|
|
|
|
|
static const struct regcache_map_entry score7_linux_gregmap[] =
|
|
|
|
{
|
|
|
|
/* FIXME: According to the current Linux kernel, r0 is preceded by
|
|
|
|
9 rather than 7 words. */
|
|
|
|
{ 7, REGCACHE_MAP_SKIP, 4 },
|
|
|
|
{ 32, 0, 4 }, /* r0 ... r31 */
|
|
|
|
{ 1, 55, 4 }, /* CEL */
|
|
|
|
{ 1, 54, 4 }, /* CEH */
|
|
|
|
{ 1, 53, 4 }, /* sr0, i.e. cnt or COUNTER */
|
|
|
|
{ 1, 52, 4 }, /* sr1, i.e. lcr or LDCR */
|
|
|
|
{ 1, 51, 4 }, /* sr2, i.e. scr or STCR */
|
|
|
|
{ 1, 49, 4 }, /* PC (same slot as EPC) */
|
|
|
|
{ 1, 38, 4 }, /* EMA */
|
|
|
|
{ 1, 32, 4 }, /* PSR */
|
|
|
|
{ 1, 34, 4 }, /* ECR */
|
|
|
|
{ 1, 33, 4 }, /* COND */
|
|
|
|
{ 0 }
|
|
|
|
};
|
|
|
|
|
|
|
|
#define SCORE7_LINUX_EPC_OFFSET (44 * 4)
|
|
|
|
#define SCORE7_LINUX_SIZEOF_GREGSET (49 * 4)
|
2009-08-06 12:28:38 +02:00
|
|
|
|
|
|
|
static void
|
|
|
|
score7_linux_supply_gregset(const struct regset *regset,
|
2014-07-21 17:33:45 +02:00
|
|
|
struct regcache *regcache,
|
|
|
|
int regnum, const void *buf,
|
|
|
|
size_t size)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
2014-07-21 17:33:45 +02:00
|
|
|
regcache_supply_regset (regset, regcache, regnum, buf, size);
|
|
|
|
|
|
|
|
/* Supply the EPC from the same slot as the PC. Note that the
|
|
|
|
collect function will store the PC in that slot. */
|
|
|
|
if ((regnum == -1 || regnum == SCORE_EPC_REGNUM)
|
|
|
|
&& size >= SCORE7_LINUX_EPC_OFFSET + 4)
|
2018-05-30 20:54:45 +02:00
|
|
|
regcache->raw_supply
|
|
|
|
(SCORE_EPC_REGNUM, (const gdb_byte *) buf + SCORE7_LINUX_EPC_OFFSET);
|
2009-08-06 12:28:38 +02:00
|
|
|
}
|
|
|
|
|
2014-03-31 11:07:42 +02:00
|
|
|
static const struct regset score7_linux_gregset =
|
|
|
|
{
|
2014-07-21 17:33:45 +02:00
|
|
|
score7_linux_gregmap,
|
|
|
|
score7_linux_supply_gregset,
|
|
|
|
regcache_collect_regset
|
2014-03-31 11:07:42 +02:00
|
|
|
};
|
|
|
|
|
2014-09-02 16:34:34 +02:00
|
|
|
/* Iterate over core file register note sections. */
|
2009-08-06 12:28:38 +02:00
|
|
|
|
2014-09-02 16:34:34 +02:00
|
|
|
static void
|
|
|
|
score7_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
|
|
|
iterate_over_regset_sections_cb *cb,
|
|
|
|
void *cb_data,
|
|
|
|
const struct regcache *regcache)
|
2009-08-06 12:28:38 +02:00
|
|
|
{
|
2018-08-13 11:04:11 +02:00
|
|
|
cb (".reg", SCORE7_LINUX_SIZEOF_GREGSET, SCORE7_LINUX_SIZEOF_GREGSET,
|
|
|
|
&score7_linux_gregset, NULL, cb_data);
|
2009-08-06 12:28:38 +02:00
|
|
|
}
|
|
|
|
|
2007-01-04 08:09:54 +01:00
|
|
|
static struct gdbarch *
|
|
|
|
score_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|
|
|
{
|
|
|
|
struct gdbarch *gdbarch;
|
2009-08-06 12:28:38 +02:00
|
|
|
target_mach = info.bfd_arch_info->mach;
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
arches = gdbarch_list_lookup_by_info (arches, &info);
|
|
|
|
if (arches != NULL)
|
|
|
|
{
|
|
|
|
return (arches->gdbarch);
|
|
|
|
}
|
2014-03-31 11:07:42 +02:00
|
|
|
gdbarch = gdbarch_alloc (&info, NULL);
|
2007-01-04 08:09:54 +01:00
|
|
|
|
|
|
|
set_gdbarch_short_bit (gdbarch, 16);
|
|
|
|
set_gdbarch_int_bit (gdbarch, 32);
|
|
|
|
set_gdbarch_float_bit (gdbarch, 32);
|
|
|
|
set_gdbarch_double_bit (gdbarch, 64);
|
|
|
|
set_gdbarch_long_double_bit (gdbarch, 64);
|
2009-08-06 12:28:38 +02:00
|
|
|
#if WITH_SIM
|
2007-01-04 08:09:54 +01:00
|
|
|
set_gdbarch_register_sim_regno (gdbarch, score_register_sim_regno);
|
2009-08-06 12:28:38 +02:00
|
|
|
#endif
|
2007-01-04 08:09:54 +01:00
|
|
|
set_gdbarch_pc_regnum (gdbarch, SCORE_PC_REGNUM);
|
|
|
|
set_gdbarch_sp_regnum (gdbarch, SCORE_SP_REGNUM);
|
2011-01-11 22:53:25 +01:00
|
|
|
set_gdbarch_adjust_breakpoint_address (gdbarch,
|
|
|
|
score_adjust_breakpoint_address);
|
2007-01-04 08:09:54 +01:00
|
|
|
set_gdbarch_register_type (gdbarch, score_register_type);
|
|
|
|
set_gdbarch_frame_align (gdbarch, score_frame_align);
|
|
|
|
set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
|
2007-05-14 17:17:00 +02:00
|
|
|
set_gdbarch_unwind_sp (gdbarch, score_unwind_sp);
|
2009-08-06 12:28:38 +02:00
|
|
|
set_gdbarch_unwind_pc (gdbarch, score_unwind_pc);
|
|
|
|
|
|
|
|
switch (target_mach)
|
|
|
|
{
|
|
|
|
case bfd_mach_score7:
|
2016-11-03 15:35:14 +01:00
|
|
|
set_gdbarch_breakpoint_kind_from_pc (gdbarch,
|
|
|
|
score7_breakpoint_kind_from_pc);
|
|
|
|
set_gdbarch_sw_breakpoint_from_kind (gdbarch,
|
|
|
|
score7_sw_breakpoint_from_kind);
|
2009-08-06 12:28:38 +02:00
|
|
|
set_gdbarch_skip_prologue (gdbarch, score7_skip_prologue);
|
2015-05-26 12:59:17 +02:00
|
|
|
set_gdbarch_stack_frame_destroyed_p (gdbarch,
|
|
|
|
score7_stack_frame_destroyed_p);
|
2009-08-06 12:28:38 +02:00
|
|
|
set_gdbarch_register_name (gdbarch, score7_register_name);
|
|
|
|
set_gdbarch_num_regs (gdbarch, SCORE7_NUM_REGS);
|
2011-01-11 22:53:25 +01:00
|
|
|
/* Core file support. */
|
2014-09-02 16:34:34 +02:00
|
|
|
set_gdbarch_iterate_over_regset_sections
|
|
|
|
(gdbarch, score7_linux_iterate_over_regset_sections);
|
2009-08-06 12:28:38 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case bfd_mach_score3:
|
2016-11-03 15:35:14 +01:00
|
|
|
set_gdbarch_breakpoint_kind_from_pc (gdbarch,
|
|
|
|
score3_breakpoint_kind_from_pc);
|
|
|
|
set_gdbarch_sw_breakpoint_from_kind (gdbarch,
|
|
|
|
score3_sw_breakpoint_from_kind);
|
2009-08-06 12:28:38 +02:00
|
|
|
set_gdbarch_skip_prologue (gdbarch, score3_skip_prologue);
|
2015-05-26 12:59:17 +02:00
|
|
|
set_gdbarch_stack_frame_destroyed_p (gdbarch,
|
|
|
|
score3_stack_frame_destroyed_p);
|
2009-08-06 12:28:38 +02:00
|
|
|
set_gdbarch_register_name (gdbarch, score3_register_name);
|
|
|
|
set_gdbarch_num_regs (gdbarch, SCORE3_NUM_REGS);
|
|
|
|
break;
|
|
|
|
}
|
2007-05-17 05:15:42 +02:00
|
|
|
|
|
|
|
/* Watchpoint hooks. */
|
|
|
|
set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
|
|
|
|
|
|
|
|
/* Dummy frame hooks. */
|
2007-01-04 08:09:54 +01:00
|
|
|
set_gdbarch_return_value (gdbarch, score_return_value);
|
2007-05-17 05:15:42 +02:00
|
|
|
set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
|
2008-06-28 19:29:04 +02:00
|
|
|
set_gdbarch_dummy_id (gdbarch, score_dummy_id);
|
2007-01-04 08:09:54 +01:00
|
|
|
set_gdbarch_push_dummy_call (gdbarch, score_push_dummy_call);
|
|
|
|
|
2007-05-17 05:15:42 +02:00
|
|
|
/* Normal frame hooks. */
|
2008-06-28 19:29:04 +02:00
|
|
|
dwarf2_append_unwinders (gdbarch);
|
2007-01-04 08:09:54 +01:00
|
|
|
frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
|
2008-06-28 19:29:04 +02:00
|
|
|
frame_unwind_append_unwinder (gdbarch, &score_prologue_unwind);
|
2007-01-04 08:09:54 +01:00
|
|
|
frame_base_append_sniffer (gdbarch, score_prologue_frame_base_sniffer);
|
|
|
|
|
|
|
|
return gdbarch;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_initialize_score_tdep (void)
|
|
|
|
{
|
|
|
|
gdbarch_register (bfd_arch_score, score_gdbarch_init, NULL);
|
|
|
|
}
|