GDB (xrefs)
|
#include "defs.h"
#include "dwarf2/frame.h"
#include "frame.h"
#include "frame-base.h"
#include "frame-unwind.h"
#include "gdbtypes.h"
#include "symtab.h"
#include "gdbcore.h"
#include "value.h"
#include "inferior.h"
#include "regcache.h"
#include "arch-utils.h"
#include "osabi.h"
#include "dis-asm.h"
#include "target-descriptions.h"
#include "floatformat.h"
#include "target-float.h"
#include "elf-bfd.h"
#include "elf/m68k.h"
#include "m68k-tdep.h"
Go to the source code of this file.
Classes | |
struct | m68k_frame_cache |
Macros | |
#define | P_LINKL_FP 0x480e |
#define | P_LINKW_FP 0x4e56 |
#define | P_PEA_FP 0x4856 |
#define | P_MOVEAL_SP_FP 0x2c4f |
#define | P_ADDAW_SP 0xdefc |
#define | P_ADDAL_SP 0xdffc |
#define | P_SUBQW_SP 0x514f |
#define | P_SUBQL_SP 0x518f |
#define | P_LEA_SP_SP 0x4fef |
#define | P_LEA_PC_A5 0x4bfb0170 |
#define | P_FMOVEMX_SP 0xf227 |
#define | P_MOVEL_SP 0x2f00 |
#define | P_MOVEML_SP 0x48e7 |
#define | SP_ARG0 (1 * 4) |
#define | BPT_VECTOR 0xf |
Functions | |
typedef | BP_MANIPULATION (m68k_break_insn) |
static struct type * | m68881_ext_type (struct gdbarch *gdbarch) |
static struct type * | m68k_register_type (struct gdbarch *gdbarch, int regnum) |
static const char * | m68k_register_name (struct gdbarch *gdbarch, int regnum) |
static int | m68k_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type) |
static int | m68k_register_to_value (frame_info_ptr frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep) |
static void | m68k_value_to_register (frame_info_ptr frame, int regnum, struct type *type, const gdb_byte *from) |
static void | m68k_extract_return_value (struct type *type, struct regcache *regcache, gdb_byte *valbuf) |
static void | m68k_svr4_extract_return_value (struct type *type, struct regcache *regcache, gdb_byte *valbuf) |
static void | m68k_store_return_value (struct type *type, struct regcache *regcache, const gdb_byte *valbuf) |
static void | m68k_svr4_store_return_value (struct type *type, struct regcache *regcache, const gdb_byte *valbuf) |
static int | m68k_reg_struct_return_p (struct gdbarch *gdbarch, struct type *type) |
static enum return_value_convention | m68k_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) |
static enum return_value_convention | m68k_svr4_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf) |
static CORE_ADDR | m68k_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp) |
static CORE_ADDR | m68k_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, function_call_return_method return_method, CORE_ADDR struct_addr) |
static int | m68k_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int num) |
static struct m68k_frame_cache * | m68k_alloc_frame_cache (void) |
static CORE_ADDR | m68k_analyze_frame_setup (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) |
static CORE_ADDR | m68k_analyze_register_saves (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) |
static CORE_ADDR | m68k_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct m68k_frame_cache *cache) |
static CORE_ADDR | m68k_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) |
static CORE_ADDR | m68k_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame) |
static struct m68k_frame_cache * | m68k_frame_cache (frame_info_ptr this_frame, void **this_cache) |
static void | m68k_frame_this_id (frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id) |
static struct value * | m68k_frame_prev_register (frame_info_ptr this_frame, void **this_cache, int regnum) |
static CORE_ADDR | m68k_frame_base_address (frame_info_ptr this_frame, void **this_cache) |
static struct frame_id | m68k_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame) |
static int | m68k_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc) |
static int | m68k_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *type) |
void | m68k_svr4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) |
static void | m68k_embedded_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) |
static struct gdbarch * | m68k_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) |
static void | m68k_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file) |
static enum gdb_osabi | m68k_osabi_sniffer (bfd *abfd) |
void | _initialize_m68k_tdep () |
Variables | |
constexpr gdb_byte | m68k_break_insn [] = {0x4e, (0x40 | BPT_VECTOR)} |
static const char *const | m68k_register_names [] |
static const struct frame_unwind | m68k_frame_unwind |
static const struct frame_base | m68k_frame_base |
#define BPT_VECTOR 0xf |
Definition at line 61 of file m68k-tdep.c.
#define P_ADDAL_SP 0xdffc |
Definition at line 48 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_ADDAW_SP 0xdefc |
Definition at line 47 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_FMOVEMX_SP 0xf227 |
Definition at line 53 of file m68k-tdep.c.
Referenced by m68k_analyze_register_saves().
#define P_LEA_PC_A5 0x4bfb0170 |
Definition at line 52 of file m68k-tdep.c.
Referenced by m68k_analyze_prologue().
#define P_LEA_SP_SP 0x4fef |
Definition at line 51 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_LINKL_FP 0x480e |
Definition at line 43 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_LINKW_FP 0x4e56 |
Definition at line 44 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_MOVEAL_SP_FP 0x2c4f |
Definition at line 46 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_MOVEL_SP 0x2f00 |
Definition at line 54 of file m68k-tdep.c.
Referenced by m68k_analyze_register_saves().
#define P_MOVEML_SP 0x48e7 |
Definition at line 55 of file m68k-tdep.c.
Referenced by m68k_analyze_register_saves().
#define P_PEA_FP 0x4856 |
Definition at line 45 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_SUBQL_SP 0x518f |
Definition at line 50 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define P_SUBQW_SP 0x514f |
Definition at line 49 of file m68k-tdep.c.
Referenced by m68k_analyze_frame_setup().
#define SP_ARG0 (1 * 4) |
Definition at line 58 of file m68k-tdep.c.
Referenced by m68k_get_longjmp_target().
void _initialize_m68k_tdep | ( | ) |
Definition at line 1361 of file m68k-tdep.c.
References GDB_OSABI_SVR4, gdbarch_register(), gdbarch_register_osabi(), gdbarch_register_osabi_sniffer(), m68k_dump_tdep(), m68k_embedded_init_abi(), m68k_gdbarch_init(), and m68k_osabi_sniffer().
typedef BP_MANIPULATION | ( | m68k_break_insn | ) |
Definition at line 66 of file m68k-tdep.c.
References append_flags_type_flag(), arch_flags_type(), m68k_gdbarch_tdep::m68k_ps_type, and type.
Definition at line 100 of file m68k-tdep.c.
References floatformats_m68881_ext, init_float_type(), and m68k_gdbarch_tdep::m68881_ext_type.
Referenced by m68k_register_type().
|
static |
Definition at line 634 of file m68k-tdep.c.
References m68k_frame_cache::base, FRAME_OBSTACK_ZALLOC, m68k_frame_cache::locals, M68K_NUM_REGS, m68k_frame_cache::pc, m68k_frame_cache::saved_regs, and m68k_frame_cache::sp_offset.
Referenced by m68k_frame_cache().
|
static |
Definition at line 664 of file m68k-tdep.c.
References gdbarch_byte_order(), m68k_frame_cache::locals, M68K_FP_REGNUM, P_ADDAL_SP, P_ADDAW_SP, P_LEA_SP_SP, P_LINKL_FP, P_LINKW_FP, P_MOVEAL_SP_FP, P_PEA_FP, P_SUBQL_SP, P_SUBQW_SP, m68k_frame_cache::pc, read_memory_integer(), read_memory_unsigned_integer(), m68k_frame_cache::saved_regs, and m68k_frame_cache::sp_offset.
Referenced by m68k_analyze_prologue().
|
static |
Definition at line 864 of file m68k-tdep.c.
References gdbarch_byte_order(), m68k_analyze_frame_setup(), m68k_analyze_register_saves(), P_LEA_PC_A5, m68k_frame_cache::pc, and read_memory_unsigned_integer().
Referenced by m68k_frame_cache(), and m68k_skip_prologue().
|
static |
Definition at line 762 of file m68k-tdep.c.
References m68k_gdbarch_tdep::fpregs_present, gdbarch_byte_order(), m68k_frame_cache::locals, M68K_FP0_REGNUM, P_FMOVEMX_SP, P_MOVEL_SP, P_MOVEML_SP, m68k_frame_cache::pc, read_memory_unsigned_integer(), and m68k_frame_cache::saved_regs.
Referenced by m68k_analyze_prologue().
|
static |
Definition at line 191 of file m68k-tdep.c.
References type::code(), m68k_gdbarch_tdep::fpregs_present, M68K_FP0_REGNUM, register_type(), and regnum.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1037 of file m68k-tdep.c.
References frame_id_build(), get_frame_pc(), get_frame_register_unsigned(), and M68K_FP_REGNUM.
Referenced by m68k_gdbarch_init().
Definition at line 1338 of file m68k-tdep.c.
Referenced by _initialize_m68k_tdep().
|
static |
Definition at line 595 of file m68k-tdep.c.
References M68K_A0_REGNUM, M68K_D0_REGNUM, M68K_FP0_REGNUM, and M68K_PC_REGNUM.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1120 of file m68k-tdep.c.
References gdbarch::info(), M68K_D0_REGNUM, m68k_svr4_init_abi(), and m68k_gdbarch_tdep::pointer_result_regnum.
Referenced by _initialize_m68k_tdep().
|
static |
Definition at line 294 of file m68k-tdep.c.
References reg_buffer::arch(), type::code(), type::length(), M68K_D0_REGNUM, M68K_D1_REGNUM, M68K_MAX_REGISTER_SIZE, m68k_gdbarch_tdep::pointer_result_regnum, and readable_regcache::raw_read().
Referenced by m68k_return_value(), and m68k_svr4_extract_return_value().
|
static |
Definition at line 529 of file m68k-tdep.c.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1021 of file m68k-tdep.c.
References m68k_frame_cache::base, and m68k_frame_cache().
|
static |
Definition at line 913 of file m68k-tdep.c.
References m68k_frame_cache::base, extract_unsigned_integer(), gdbarch_byte_order(), get_frame_arch(), get_frame_func(), get_frame_pc(), get_frame_register(), m68k_frame_cache::locals, m68k_alloc_frame_cache(), m68k_analyze_prologue(), M68K_FP_REGNUM, M68K_NUM_REGS, M68K_PC_REGNUM, M68K_SP_REGNUM, m68k_frame_cache::pc, m68k_frame_cache::saved_regs, m68k_frame_cache::saved_sp, and m68k_frame_cache::sp_offset.
Referenced by m68k_frame_base_address(), m68k_frame_prev_register(), and m68k_frame_this_id().
|
static |
Definition at line 992 of file m68k-tdep.c.
References frame_unwind_got_constant(), frame_unwind_got_memory(), frame_unwind_got_register(), m68k_frame_cache(), M68K_SP_REGNUM, regnum, m68k_frame_cache::saved_regs, and m68k_frame_cache::saved_sp.
|
static |
Definition at line 978 of file m68k-tdep.c.
References m68k_frame_cache::base, frame_id_build(), m68k_frame_cache(), and m68k_frame_cache::pc.
|
static |
Definition at line 1135 of file m68k-tdep.c.
References arches, core_addr_lessthan(), dwarf2_append_unwinders(), m68k_gdbarch_tdep::float_return, floatformats_ieee_double, floatformats_m68881_ext, m68k_gdbarch_tdep::fpregs_present, frame_base_set_default(), frame_unwind_append_unwinder(), gdbarch_list::gdbarch, gdbarch_alloc(), gdbarch_init_osabi(), gdbarch_list_lookup_by_info(), registry< T >::get(), m68k_gdbarch_tdep::jb_elt_size, m68k_gdbarch_tdep::jb_pc, M68K_A1_REGNUM, m68k_coldfire_flavour, m68k_convert_register_p(), M68K_D0_REGNUM, m68k_dummy_id(), m68k_dwarf_reg_to_regnum(), m68k_fido_flavour, M68K_FP0_REGNUM, M68K_FPI_REGNUM, m68k_frame_align(), m68k_frame_base, m68k_frame_unwind, m68k_get_longjmp_target(), m68k_no_flavour, M68K_NUM_REGS, M68K_PC_REGNUM, M68K_PS_REGNUM, m68k_push_dummy_call(), m68k_register_name(), m68k_register_names, m68k_register_to_value(), m68k_register_type(), m68k_return_in_first_hidden_param_p(), m68k_return_value(), m68k_skip_prologue(), M68K_SP_REGNUM, m68k_unwind_pc(), m68k_value_to_register(), gdbarch_list::next, m68k_gdbarch_tdep::pointer_result_regnum, reg_struct_return, set_gdbarch_believe_pcc_promotion(), set_gdbarch_breakpoint_kind_from_pc(), set_gdbarch_convert_register_p(), set_gdbarch_decr_pc_after_break(), set_gdbarch_dummy_id(), set_gdbarch_dwarf2_reg_to_regnum(), set_gdbarch_fp0_regnum(), set_gdbarch_frame_align(), set_gdbarch_frame_args_skip(), set_gdbarch_get_longjmp_target(), set_gdbarch_inner_than(), set_gdbarch_long_double_bit(), set_gdbarch_long_double_format(), set_gdbarch_num_regs(), set_gdbarch_pc_regnum(), set_gdbarch_ps_regnum(), set_gdbarch_push_dummy_call(), set_gdbarch_register_name(), set_gdbarch_register_to_value(), set_gdbarch_register_type(), set_gdbarch_return_in_first_hidden_param_p(), set_gdbarch_return_value(), set_gdbarch_skip_prologue(), set_gdbarch_sp_regnum(), set_gdbarch_sw_breakpoint_from_kind(), set_gdbarch_unwind_pc(), set_gdbarch_value_to_register(), m68k_gdbarch_tdep::struct_value_regnum, tdesc_data, tdesc_data_alloc(), tdesc_find_feature(), tdesc_has_registers(), tdesc_numbered_register(), and tdesc_use_registers().
Referenced by _initialize_m68k_tdep().
|
static |
Definition at line 1054 of file m68k-tdep.c.
References extract_unsigned_integer(), gdbarch_byte_order(), gdbarch_ptr_bit(), gdbarch_sp_regnum(), get_frame_arch(), get_frame_register_unsigned(), m68k_gdbarch_tdep::jb_elt_size, m68k_gdbarch_tdep::jb_pc, SP_ARG0, and target_read_memory().
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1349 of file m68k-tdep.c.
References GDB_OSABI_SVR4, and GDB_OSABI_UNKNOWN.
Referenced by _initialize_m68k_tdep().
|
static |
Definition at line 536 of file m68k-tdep.c.
References type::code(), regcache::cooked_write(), gdbarch_byte_order(), type::length(), M68K_FP_REGNUM, M68K_SP_REGNUM, return_method_struct, store_unsigned_integer(), m68k_gdbarch_tdep::struct_value_regnum, and write_memory().
Referenced by m68k_gdbarch_init().
Definition at line 390 of file m68k-tdep.c.
References check_typedef(), code, type::code(), type::is_vector(), type::length(), pcc_struct_return, type::target_type(), and type_align().
Referenced by m68k_return_value(), and m68k_svr4_return_value().
|
static |
Definition at line 175 of file m68k-tdep.c.
References m68k_gdbarch_tdep::fpregs_present, gdb_static_assert(), M68K_FP0_REGNUM, M68K_FPI_REGNUM, M68K_NUM_REGS, m68k_register_names, and regnum.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 208 of file m68k-tdep.c.
References type::code(), get_frame_arch(), get_frame_register_bytes(), M68K_FP0_REGNUM, M68K_MAX_REGISTER_SIZE, register_size(), register_type(), regnum, and target_float_convert().
Referenced by m68k_gdbarch_init().
Definition at line 124 of file m68k-tdep.c.
References builtin_type::builtin_data_ptr, builtin_type::builtin_double, builtin_type::builtin_func_ptr, builtin_type::builtin_int0, builtin_type::builtin_int32, builtin_type(), m68k_gdbarch_tdep::fpregs_present, gdbarch_fp0_regnum(), gdbarch_pc_regnum(), m68881_ext_type(), M68K_A0_REGNUM, m68k_coldfire_flavour, M68K_FP0_REGNUM, M68K_FPC_REGNUM, M68K_FPI_REGNUM, M68K_FPS_REGNUM, M68K_PS_REGNUM, and regnum.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1093 of file m68k-tdep.c.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 429 of file m68k-tdep.c.
References code, type::code(), type::length(), M68K_D0_REGNUM, m68k_extract_return_value(), m68k_reg_struct_return_p(), m68k_store_return_value(), read_memory(), regcache_raw_read_unsigned(), RETURN_VALUE_ABI_RETURNS_ADDRESS, and RETURN_VALUE_REGISTER_CONVENTION.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 889 of file m68k-tdep.c.
References m68k_frame_cache::locals, m68k_analyze_prologue(), and m68k_frame_cache::pc.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 342 of file m68k-tdep.c.
References reg_buffer::arch(), type::code(), type::length(), M68K_D0_REGNUM, M68K_D1_REGNUM, m68k_gdbarch_tdep::pointer_result_regnum, regcache::raw_write(), and regcache::raw_write_part().
Referenced by m68k_return_value(), and m68k_svr4_store_return_value().
|
static |
Definition at line 322 of file m68k-tdep.c.
References reg_buffer::arch(), type::code(), m68k_gdbarch_tdep::float_return, m68k_extract_return_value(), M68K_FP0_REGNUM, M68K_MAX_REGISTER_SIZE, readable_regcache::raw_read(), register_type(), and target_float_convert().
Referenced by m68k_svr4_return_value().
void m68k_svr4_init_abi | ( | struct gdbarch_info | info, |
struct gdbarch * | gdbarch ) |
Definition at line 1102 of file m68k-tdep.c.
References M68K_A0_REGNUM, m68k_svr4_return_value(), m68k_gdbarch_tdep::pointer_result_regnum, set_gdbarch_return_value(), and m68k_gdbarch_tdep::struct_value_regnum.
Referenced by m68k_embedded_init_abi(), m68k_linux_init_abi(), and m68kbsd_init_abi().
|
static |
Definition at line 465 of file m68k-tdep.c.
References check_typedef(), code, type::code(), type::field(), m68k_gdbarch_tdep::float_return, type::length(), m68k_reg_struct_return_p(), m68k_svr4_extract_return_value(), m68k_svr4_return_value(), m68k_svr4_store_return_value(), type::num_fields(), m68k_gdbarch_tdep::pointer_result_regnum, read_memory(), regcache_raw_read_unsigned(), RETURN_VALUE_ABI_RETURNS_ADDRESS, RETURN_VALUE_REGISTER_CONVENTION, and field::type().
Referenced by m68k_svr4_init_abi(), and m68k_svr4_return_value().
|
static |
Definition at line 368 of file m68k-tdep.c.
References reg_buffer::arch(), type::code(), m68k_gdbarch_tdep::float_return, M68K_FP0_REGNUM, M68K_MAX_REGISTER_SIZE, m68k_store_return_value(), regcache::raw_write(), register_type(), and target_float_convert().
Referenced by m68k_svr4_return_value().
|
static |
Definition at line 902 of file m68k-tdep.c.
References extract_typed_address(), frame_unwind_register(), and gdbarch_pc_regnum().
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 235 of file m68k-tdep.c.
References type::code(), get_frame_arch(), M68K_FP0_REGNUM, M68K_MAX_REGISTER_SIZE, put_frame_register(), register_type(), regnum, and target_float_convert().
Referenced by m68k_gdbarch_init().
|
constexpr |
Definition at line 64 of file m68k-tdep.c.
|
static |
Definition at line 1028 of file m68k-tdep.c.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 1009 of file m68k-tdep.c.
Referenced by m68k_gdbarch_init().
|
static |
Definition at line 163 of file m68k-tdep.c.
Referenced by m68k_gdbarch_init(), and m68k_register_name().