GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Enumerations | Functions | Variables
z80-tdep.c File Reference
#include "defs.h"
#include "arch-utils.h"
#include "dis-asm.h"
#include "frame.h"
#include "frame-unwind.h"
#include "frame-base.h"
#include "trad-frame.h"
#include "gdbcmd.h"
#include "gdbcore.h"
#include "gdbtypes.h"
#include "inferior.h"
#include "objfiles.h"
#include "symfile.h"
#include "gdbarch.h"
#include "z80-tdep.h"
#include "features/z80.c"

Go to the source code of this file.

Classes

struct  z80_gdbarch_tdep
 
struct  z80_unwind_cache
 
struct  z80_insn_info
 

Enumerations

enum  z80_instruction_type {
  insn_default , insn_z80 , insn_adl , insn_z80_ed ,
  insn_adl_ed , insn_z80_ddfd , insn_adl_ddfd , insn_djnz_d ,
  insn_jr_d , insn_jr_cc_d , insn_jp_nn , insn_jp_rr ,
  insn_jp_cc_nn , insn_call_nn , insn_call_cc_nn , insn_rst_n ,
  insn_ret , insn_ret_cc , insn_push_rr , insn_pop_rr ,
  insn_dec_sp , insn_inc_sp , insn_ld_sp_nn , insn_ld_sp_6nn9 ,
  insn_ld_sp_rr , insn_force_nop
}
 
enum  z80_ovly_index { Z80_VMA , Z80_OSIZE , Z80_MAPPED_TO_LMA }
 

Functions

static const struct z80_insn_infoz80_get_insn_info (struct gdbarch *gdbarch, const gdb_byte *buf, int *size)
 
static const char * z80_register_name (struct gdbarch *gdbarch, int regnum)
 
static struct typez80_register_type (struct gdbarch *gdbarch, int reg_nr)
 
static int z80_is_pop_rr (const gdb_byte buf[], int *size)
 
static int z80_is_push_rr (const gdb_byte buf[], int *size)
 
static int z80_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end, struct z80_unwind_cache *info)
 
static CORE_ADDR z80_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static enum return_value_convention z80_return_value (struct gdbarch *gdbarch, struct value *function, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 
static struct z80_unwind_cachez80_frame_unwind_cache (frame_info_ptr this_frame, void **this_prologue_cache)
 
static void z80_frame_this_id (frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
 
static struct valuez80_frame_prev_register (frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
 
static int z80_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
 
static const gdb_byte * z80_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 
static std::vector< CORE_ADDR > z80_software_single_step (struct regcache *regcache)
 
static void z80_free_overlay_region_table (void)
 
static void read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr, int len, int size, enum bfd_endian byte_order)
 
static int z80_read_overlay_region_table ()
 
static int z80_overlay_update_1 (struct obj_section *osect)
 
static void z80_overlay_update (struct obj_section *osect)
 
static int z80_insn_is_call (struct gdbarch *gdbarch, CORE_ADDR addr)
 
static int z80_insn_is_ret (struct gdbarch *gdbarch, CORE_ADDR addr)
 
static int z80_insn_is_jump (struct gdbarch *gdbarch, CORE_ADDR addr)
 
static struct gdbarchz80_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 

Variables

static const char * z80_reg_names []
 
static unsigned(* cache_ovly_region_table )[3] = 0
 
static unsigned cache_novly_regions
 
static CORE_ADDR cache_ovly_region_table_base = 0
 
static const struct frame_unwind z80_frame_unwind
 
static const struct z80_insn_info ez80_main_insn_table []
 
static const struct z80_insn_info ez80_adl_main_insn_table []
 
static const struct z80_insn_info ez80_ed_insn_table []
 
static const struct z80_insn_info ez80_adl_ed_insn_table []
 
static const struct z80_insn_info ez80_ddfd_insn_table []
 
static const struct z80_insn_info ez80_adl_ddfd_insn_table []
 
initialize_file_ftype _initialize_z80_tdep
 

Enumeration Type Documentation

◆ z80_instruction_type

Enumerator
insn_default 
insn_z80 
insn_adl 
insn_z80_ed 
insn_adl_ed 
insn_z80_ddfd 
insn_adl_ddfd 
insn_djnz_d 
insn_jr_d 
insn_jr_cc_d 
insn_jp_nn 
insn_jp_rr 
insn_jp_cc_nn 
insn_call_nn 
insn_call_cc_nn 
insn_rst_n 
insn_ret 
insn_ret_cc 
insn_push_rr 
insn_pop_rr 
insn_dec_sp 
insn_inc_sp 
insn_ld_sp_nn 
insn_ld_sp_6nn9 
insn_ld_sp_rr 
insn_force_nop 

Definition at line 112 of file z80-tdep.c.

◆ z80_ovly_index

Enumerator
Z80_VMA 
Z80_OSIZE 
Z80_MAPPED_TO_LMA 

Definition at line 863 of file z80-tdep.c.

Function Documentation

◆ read_target_long_array()

static void read_target_long_array ( CORE_ADDR memaddr,
unsigned int * myaddr,
int len,
int size,
enum bfd_endian byte_order )
static

Definition at line 882 of file z80-tdep.c.

References extract_unsigned_integer(), read_memory(), and size.

Referenced by z80_read_overlay_region_table().

◆ z80_breakpoint_kind_from_pc()

static int z80_breakpoint_kind_from_pc ( struct gdbarch * gdbarch,
CORE_ADDR * pcptr )
static

◆ z80_frame_prev_register()

static struct value * z80_frame_prev_register ( frame_info_ptr this_frame,
void ** this_prologue_cache,
int regnum )
static

◆ z80_frame_this_id()

static void z80_frame_this_id ( frame_info_ptr this_frame,
void ** this_cache,
struct frame_id * this_id )
static

Definition at line 661 of file z80-tdep.c.

References frame_id_build(), func, get_frame_func(), and z80_frame_unwind_cache().

◆ z80_frame_unwind_cache()

static struct z80_unwind_cache * z80_frame_unwind_cache ( frame_info_ptr this_frame,
void ** this_prologue_cache )
static

◆ z80_free_overlay_region_table()

static void z80_free_overlay_region_table ( void )
static

◆ z80_gdbarch_init()

static struct gdbarch * z80_gdbarch_init ( struct gdbarch_info info,
struct gdbarch_list * arches )
static

Definition at line 1082 of file z80-tdep.c.

References z80_gdbarch_tdep::addr_length, arches, core_addr_lessthan(), EZ80_NUM_REGS, floatformats_ieee_single, frame_unwind_append_unwinder(), z80_gdbarch_tdep::func_void_type, gdbarch_list::gdbarch, gdbarch_alloc(), gdbarch_bfd_arch_info(), gdbarch_list_lookup_by_info(), registry< T >::get(), init_pointer_type(), make_function_type(), type_allocator::new_type(), gdbarch_list::next, z80_gdbarch_tdep::pc_type, set_gdbarch_addr_bit(), set_gdbarch_breakpoint_kind_from_pc(), set_gdbarch_double_bit(), set_gdbarch_double_format(), set_gdbarch_float_bit(), set_gdbarch_float_format(), set_gdbarch_inner_than(), set_gdbarch_insn_is_call(), set_gdbarch_insn_is_jump(), set_gdbarch_insn_is_ret(), set_gdbarch_int_bit(), set_gdbarch_long_bit(), set_gdbarch_long_double_bit(), set_gdbarch_long_double_format(), set_gdbarch_max_insn_length(), set_gdbarch_num_regs(), set_gdbarch_overlay_update(), set_gdbarch_pc_regnum(), set_gdbarch_ptr_bit(), set_gdbarch_register_name(), set_gdbarch_register_type(), set_gdbarch_return_value(), set_gdbarch_short_bit(), set_gdbarch_skip_prologue(), set_gdbarch_software_single_step(), set_gdbarch_sp_regnum(), set_gdbarch_sw_breakpoint_from_kind(), tdesc_data, tdesc_data_alloc(), tdesc_find_feature(), tdesc_has_registers(), tdesc_numbered_register(), tdesc_use_registers(), tdesc_z80, z80_gdbarch_tdep::void_type, z80_breakpoint_kind_from_pc(), z80_frame_unwind, z80_insn_is_call(), z80_insn_is_jump(), z80_insn_is_ret(), Z80_NUM_REGS, z80_overlay_update(), Z80_PC_REGNUM, z80_reg_names, z80_register_name(), z80_register_type(), z80_return_value(), z80_skip_prologue(), z80_software_single_step(), Z80_SP_REGNUM, and z80_sw_breakpoint_from_kind().

◆ z80_get_insn_info()

static const struct z80_insn_info * z80_get_insn_info ( struct gdbarch * gdbarch,
const gdb_byte * buf,
int * size )
static

◆ z80_insn_is_call()

static int z80_insn_is_call ( struct gdbarch * gdbarch,
CORE_ADDR addr )
static

Definition at line 1006 of file z80-tdep.c.

References insn_call_cc_nn, insn_call_nn, insn_rst_n, read_memory(), size, and z80_get_insn_info().

Referenced by z80_gdbarch_init().

◆ z80_insn_is_jump()

static int z80_insn_is_jump ( struct gdbarch * gdbarch,
CORE_ADDR addr )
static

◆ z80_insn_is_ret()

static int z80_insn_is_ret ( struct gdbarch * gdbarch,
CORE_ADDR addr )
static

Definition at line 1026 of file z80-tdep.c.

References insn_ret, insn_ret_cc, read_memory(), size, and z80_get_insn_info().

Referenced by z80_gdbarch_init().

◆ z80_is_pop_rr()

static int z80_is_pop_rr ( const gdb_byte buf[],
int * size )
static

Definition at line 188 of file z80-tdep.c.

References size, Z80_AF_REGNUM, Z80_BC_REGNUM, Z80_DE_REGNUM, Z80_HL_REGNUM, Z80_IX_REGNUM, and Z80_IY_REGNUM.

Referenced by z80_scan_prologue().

◆ z80_is_push_rr()

static int z80_is_push_rr ( const gdb_byte buf[],
int * size )
static

Definition at line 216 of file z80-tdep.c.

References size, Z80_AF_REGNUM, Z80_BC_REGNUM, Z80_DE_REGNUM, Z80_HL_REGNUM, Z80_IX_REGNUM, and Z80_IY_REGNUM.

Referenced by z80_scan_prologue().

◆ z80_overlay_update()

static void z80_overlay_update ( struct obj_section * osect)
static

◆ z80_overlay_update_1()

static int z80_overlay_update_1 ( struct obj_section * osect)
static

◆ z80_read_overlay_region_table()

static int z80_read_overlay_region_table ( )
static

◆ z80_register_name()

static const char * z80_register_name ( struct gdbarch * gdbarch,
int regnum )
static

Definition at line 168 of file z80-tdep.c.

References regnum, and z80_reg_names.

Referenced by z80_gdbarch_init().

◆ z80_register_type()

static struct type * z80_register_type ( struct gdbarch * gdbarch,
int reg_nr )
static

Definition at line 180 of file z80-tdep.c.

References builtin_type::builtin_data_ptr, and builtin_type().

Referenced by z80_gdbarch_init().

◆ z80_return_value()

static enum return_value_convention z80_return_value ( struct gdbarch * gdbarch,
struct value * function,
struct type * valtype,
struct regcache * regcache,
gdb_byte * readbuf,
const gdb_byte * writebuf )
static

◆ z80_scan_prologue()

static int z80_scan_prologue ( struct gdbarch * gdbarch,
CORE_ADDR pc_beg,
CORE_ADDR pc_end,
struct z80_unwind_cache * info )
static

◆ z80_skip_prologue()

static CORE_ADDR z80_skip_prologue ( struct gdbarch * gdbarch,
CORE_ADDR pc )
static

◆ z80_software_single_step()

static std::vector< CORE_ADDR > z80_software_single_step ( struct regcache * regcache)
static

◆ z80_sw_breakpoint_from_kind()

static const gdb_byte * z80_sw_breakpoint_from_kind ( struct gdbarch * gdbarch,
int kind,
int * size )
static

Definition at line 742 of file z80-tdep.c.

References z80_gdbarch_tdep::addr_length, and size.

Referenced by z80_gdbarch_init().

Variable Documentation

◆ _initialize_z80_tdep

void _initialize_z80_tdep
extern

Definition at line 1462 of file z80-tdep.c.

◆ cache_novly_regions

unsigned cache_novly_regions
static

◆ cache_ovly_region_table

unsigned(* cache_ovly_region_table)[3] = 0
static

◆ cache_ovly_region_table_base

CORE_ADDR cache_ovly_region_table_base = 0
static

Definition at line 862 of file z80-tdep.c.

Referenced by z80_free_overlay_region_table(), and z80_read_overlay_region_table().

◆ ez80_adl_ddfd_insn_table

const struct z80_insn_info ez80_adl_ddfd_insn_table[]
static
Initial value:
=
{
{ 0007, 0307, 2, insn_default },
{ 0061, 0377, 2, insn_default },
{ 0011, 0367, 1, insn_default },
{ 0041, 0377, 4, insn_default },
{ 0042, 0367, 4, insn_default },
{ 0043, 0367, 1, insn_default },
{ 0044, 0366, 1, insn_default },
{ 0046, 0367, 2, insn_default },
{ 0064, 0376, 2, insn_default },
{ 0066, 0377, 3, insn_default },
{ 0166, 0377, 0, insn_default },
{ 0160, 0370, 2, insn_default },
{ 0104, 0306, 1, insn_default },
{ 0106, 0307, 2, insn_default },
{ 0140, 0360, 1, insn_default },
{ 0204, 0306, 1, insn_default },
{ 0206, 0307, 2, insn_default },
{ 0313, 0377, 3, insn_default },
{ 0335, 0337, 0, insn_force_nop},
{ 0341, 0373, 1, insn_default },
{ 0343, 0377, 1, insn_default },
{ 0351, 0377, 1, insn_jp_rr },
{ 0371, 0377, 1, insn_ld_sp_rr},
{ 0000, 0000, 0, insn_default }
}
@ insn_default
Definition z80-tdep.c:114
@ insn_force_nop
Definition z80-tdep.c:139
@ insn_jp_rr
Definition z80-tdep.c:125
@ insn_ld_sp_rr
Definition z80-tdep.c:138

Definition at line 1360 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ ez80_adl_ed_insn_table

const struct z80_insn_info ez80_adl_ed_insn_table[]
static
Initial value:
=
{
{ 0002, 0366, 2, insn_default },
{ 0124, 0376, 2, insn_default },
{ 0145, 0377, 2, insn_default },
{ 0146, 0377, 2, insn_default },
{ 0164, 0377, 2, insn_default },
{ 0060, 0376, 1, insn_default },
{ 0000, 0306, 2, insn_default },
{ 0144, 0377, 2, insn_default },
{ 0173, 0377, 4, insn_ld_sp_6nn9 },
{ 0103, 0307, 4, insn_default },
{ 0105, 0317, 1, insn_ret },
{ 0000, 0000, 1, insn_default }
}
@ insn_ld_sp_6nn9
Definition z80-tdep.c:137
@ insn_ret
Definition z80-tdep.c:130

Definition at line 1311 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ ez80_adl_main_insn_table

const struct z80_insn_info ez80_adl_main_insn_table[]
static

Definition at line 1242 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ ez80_ddfd_insn_table

const struct z80_insn_info ez80_ddfd_insn_table[]
static
Initial value:
=
{
{ 0007, 0307, 2, insn_default },
{ 0061, 0377, 2, insn_default },
{ 0011, 0367, 2, insn_default },
{ 0041, 0377, 3, insn_default },
{ 0042, 0367, 3, insn_default },
{ 0043, 0367, 1, insn_default },
{ 0044, 0366, 1, insn_default },
{ 0046, 0367, 2, insn_default },
{ 0064, 0376, 2, insn_default },
{ 0066, 0377, 2, insn_default },
{ 0166, 0377, 0, insn_default },
{ 0160, 0370, 2, insn_default },
{ 0104, 0306, 1, insn_default },
{ 0106, 0307, 2, insn_default },
{ 0140, 0360, 1, insn_default },
{ 0204, 0306, 1, insn_default },
{ 0206, 0307, 2, insn_default },
{ 0313, 0377, 3, insn_default },
{ 0335, 0337, 0, insn_force_nop},
{ 0341, 0373, 1, insn_default },
{ 0343, 0377, 1, insn_default },
{ 0351, 0377, 1, insn_jp_rr },
{ 0371, 0377, 1, insn_ld_sp_rr},
{ 0000, 0000, 0, insn_default }
}

Definition at line 1329 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ ez80_ed_insn_table

const struct z80_insn_info ez80_ed_insn_table[]
static
Initial value:
=
{
{ 0002, 0366, 2, insn_default },
{ 0124, 0376, 2, insn_default },
{ 0145, 0377, 2, insn_default },
{ 0146, 0377, 2, insn_default },
{ 0164, 0377, 2, insn_default },
{ 0060, 0376, 1, insn_default },
{ 0000, 0306, 2, insn_default },
{ 0144, 0377, 2, insn_default },
{ 0173, 0377, 3, insn_ld_sp_6nn9 },
{ 0103, 0307, 3, insn_default },
{ 0105, 0317, 1, insn_ret },
{ 0000, 0000, 1, insn_default }
}

Definition at line 1291 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ ez80_main_insn_table

const struct z80_insn_info ez80_main_insn_table[]
static

Definition at line 1195 of file z80-tdep.c.

Referenced by z80_get_insn_info().

◆ z80_frame_unwind

const struct frame_unwind z80_frame_unwind
static
Initial value:
=
{
"z80",
NULL,
}
int default_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
enum unwind_stop_reason default_frame_unwind_stop_reason(frame_info_ptr this_frame, void **this_cache)
@ NORMAL_FRAME
Definition frame.h:187
static void z80_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
Definition z80-tdep.c:661
static struct value * z80_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
Definition z80-tdep.c:685

Definition at line 1067 of file z80-tdep.c.

Referenced by z80_gdbarch_init().

◆ z80_reg_names

const char* z80_reg_names[]
static
Initial value:
=
{
"af", "bc", "de", "hl",
"sp", "pc", "ix", "iy",
"af'", "bc'", "de'", "hl'",
"ir",
"sps"
}

Definition at line 155 of file z80-tdep.c.

Referenced by z80_gdbarch_init(), and z80_register_name().