GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
m68k-tdep.c File Reference
#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 typem68881_ext_type (struct gdbarch *gdbarch)
 
static struct typem68k_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_cachem68k_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 valuem68k_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 gdbarchm68k_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
 

Macro Definition Documentation

◆ BPT_VECTOR

#define BPT_VECTOR   0xf

Definition at line 61 of file m68k-tdep.c.

◆ P_ADDAL_SP

#define P_ADDAL_SP   0xdffc

Definition at line 48 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_ADDAW_SP

#define P_ADDAW_SP   0xdefc

Definition at line 47 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_FMOVEMX_SP

#define P_FMOVEMX_SP   0xf227

Definition at line 53 of file m68k-tdep.c.

Referenced by m68k_analyze_register_saves().

◆ P_LEA_PC_A5

#define P_LEA_PC_A5   0x4bfb0170

Definition at line 52 of file m68k-tdep.c.

Referenced by m68k_analyze_prologue().

◆ P_LEA_SP_SP

#define P_LEA_SP_SP   0x4fef

Definition at line 51 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_LINKL_FP

#define P_LINKL_FP   0x480e

Definition at line 43 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_LINKW_FP

#define P_LINKW_FP   0x4e56

Definition at line 44 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_MOVEAL_SP_FP

#define P_MOVEAL_SP_FP   0x2c4f

Definition at line 46 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_MOVEL_SP

#define P_MOVEL_SP   0x2f00

Definition at line 54 of file m68k-tdep.c.

Referenced by m68k_analyze_register_saves().

◆ P_MOVEML_SP

#define P_MOVEML_SP   0x48e7

Definition at line 55 of file m68k-tdep.c.

Referenced by m68k_analyze_register_saves().

◆ P_PEA_FP

#define P_PEA_FP   0x4856

Definition at line 45 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_SUBQL_SP

#define P_SUBQL_SP   0x518f

Definition at line 50 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ P_SUBQW_SP

#define P_SUBQW_SP   0x514f

Definition at line 49 of file m68k-tdep.c.

Referenced by m68k_analyze_frame_setup().

◆ SP_ARG0

#define SP_ARG0   (1 * 4)

Definition at line 58 of file m68k-tdep.c.

Referenced by m68k_get_longjmp_target().

Function Documentation

◆ _initialize_m68k_tdep()

void _initialize_m68k_tdep ( )

◆ BP_MANIPULATION()

typedef BP_MANIPULATION ( m68k_break_insn )

◆ m68881_ext_type()

static struct type * m68881_ext_type ( struct gdbarch * gdbarch)
static

◆ m68k_alloc_frame_cache()

static struct m68k_frame_cache * m68k_alloc_frame_cache ( void )
static

◆ m68k_analyze_frame_setup()

static CORE_ADDR m68k_analyze_frame_setup ( struct gdbarch * gdbarch,
CORE_ADDR pc,
CORE_ADDR current_pc,
struct m68k_frame_cache * cache )
static

◆ m68k_analyze_prologue()

static CORE_ADDR m68k_analyze_prologue ( struct gdbarch * gdbarch,
CORE_ADDR pc,
CORE_ADDR current_pc,
struct m68k_frame_cache * cache )
static

◆ m68k_analyze_register_saves()

static CORE_ADDR m68k_analyze_register_saves ( struct gdbarch * gdbarch,
CORE_ADDR pc,
CORE_ADDR current_pc,
struct m68k_frame_cache * cache )
static

◆ m68k_convert_register_p()

static int m68k_convert_register_p ( struct gdbarch * gdbarch,
int regnum,
struct type * type )
static

◆ m68k_dummy_id()

static struct frame_id m68k_dummy_id ( struct gdbarch * gdbarch,
frame_info_ptr this_frame )
static

◆ m68k_dump_tdep()

static void m68k_dump_tdep ( struct gdbarch * gdbarch,
struct ui_file * file )
static

Definition at line 1338 of file m68k-tdep.c.

Referenced by _initialize_m68k_tdep().

◆ m68k_dwarf_reg_to_regnum()

static int m68k_dwarf_reg_to_regnum ( struct gdbarch * gdbarch,
int num )
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().

◆ m68k_embedded_init_abi()

static void m68k_embedded_init_abi ( struct gdbarch_info info,
struct gdbarch * gdbarch )
static

◆ m68k_extract_return_value()

static void m68k_extract_return_value ( struct type * type,
struct regcache * regcache,
gdb_byte * valbuf )
static

◆ m68k_frame_align()

static CORE_ADDR m68k_frame_align ( struct gdbarch * gdbarch,
CORE_ADDR sp )
static

Definition at line 529 of file m68k-tdep.c.

Referenced by m68k_gdbarch_init().

◆ m68k_frame_base_address()

static CORE_ADDR m68k_frame_base_address ( frame_info_ptr this_frame,
void ** this_cache )
static

Definition at line 1021 of file m68k-tdep.c.

References m68k_frame_cache::base, and m68k_frame_cache().

◆ m68k_frame_cache()

static struct m68k_frame_cache * m68k_frame_cache ( frame_info_ptr this_frame,
void ** this_cache )
static

◆ m68k_frame_prev_register()

static struct value * m68k_frame_prev_register ( frame_info_ptr this_frame,
void ** this_cache,
int regnum )
static

◆ m68k_frame_this_id()

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

◆ m68k_gdbarch_init()

static struct gdbarch * m68k_gdbarch_init ( struct gdbarch_info info,
struct gdbarch_list * arches )
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().

◆ m68k_get_longjmp_target()

static int m68k_get_longjmp_target ( frame_info_ptr frame,
CORE_ADDR * pc )
static

◆ m68k_osabi_sniffer()

static enum gdb_osabi m68k_osabi_sniffer ( bfd * abfd)
static

Definition at line 1349 of file m68k-tdep.c.

References GDB_OSABI_SVR4, and GDB_OSABI_UNKNOWN.

Referenced by _initialize_m68k_tdep().

◆ m68k_push_dummy_call()

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

◆ m68k_reg_struct_return_p()

static int m68k_reg_struct_return_p ( struct gdbarch * gdbarch,
struct type * type )
static

◆ m68k_register_name()

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

◆ m68k_register_to_value()

static int m68k_register_to_value ( frame_info_ptr frame,
int regnum,
struct type * type,
gdb_byte * to,
int * optimizedp,
int * unavailablep )
static

◆ m68k_register_type()

static struct type * m68k_register_type ( struct gdbarch * gdbarch,
int regnum )
static

◆ m68k_return_in_first_hidden_param_p()

static int m68k_return_in_first_hidden_param_p ( struct gdbarch * gdbarch,
struct type * type )
static

Definition at line 1093 of file m68k-tdep.c.

Referenced by m68k_gdbarch_init().

◆ m68k_return_value()

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

◆ m68k_skip_prologue()

static CORE_ADDR m68k_skip_prologue ( struct gdbarch * gdbarch,
CORE_ADDR start_pc )
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().

◆ m68k_store_return_value()

static void m68k_store_return_value ( struct type * type,
struct regcache * regcache,
const gdb_byte * valbuf )
static

◆ m68k_svr4_extract_return_value()

static void m68k_svr4_extract_return_value ( struct type * type,
struct regcache * regcache,
gdb_byte * valbuf )
static

◆ m68k_svr4_init_abi()

void m68k_svr4_init_abi ( struct gdbarch_info info,
struct gdbarch * gdbarch )

◆ m68k_svr4_return_value()

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

◆ m68k_svr4_store_return_value()

static void m68k_svr4_store_return_value ( struct type * type,
struct regcache * regcache,
const gdb_byte * valbuf )
static

◆ m68k_unwind_pc()

static CORE_ADDR m68k_unwind_pc ( struct gdbarch * gdbarch,
frame_info_ptr next_frame )
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().

◆ m68k_value_to_register()

static void m68k_value_to_register ( frame_info_ptr frame,
int regnum,
struct type * type,
const gdb_byte * from )
static

Variable Documentation

◆ m68k_break_insn

constexpr gdb_byte m68k_break_insn[] = {0x4e, (0x40 | BPT_VECTOR)}
constexpr

Definition at line 64 of file m68k-tdep.c.

◆ m68k_frame_base

const struct frame_base m68k_frame_base
static
Initial value:
=
{
}
static const struct frame_unwind m68k_frame_unwind
Definition m68k-tdep.c:1009
static CORE_ADDR m68k_frame_base_address(frame_info_ptr this_frame, void **this_cache)
Definition m68k-tdep.c:1021

Definition at line 1028 of file m68k-tdep.c.

Referenced by m68k_gdbarch_init().

◆ m68k_frame_unwind

const struct frame_unwind m68k_frame_unwind
static
Initial value:
=
{
"m68k prologue",
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 m68k_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
Definition m68k-tdep.c:978
static struct value * m68k_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
Definition m68k-tdep.c:992

Definition at line 1009 of file m68k-tdep.c.

Referenced by m68k_gdbarch_init().

◆ m68k_register_names

const char* const m68k_register_names[]
static
Initial value:
= {
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
"a0", "a1", "a2", "a3", "a4", "a5", "fp", "sp",
"ps", "pc",
"fp0", "fp1", "fp2", "fp3", "fp4", "fp5", "fp6", "fp7",
"fpcontrol", "fpstatus", "fpiaddr"
}

Definition at line 163 of file m68k-tdep.c.

Referenced by m68k_gdbarch_init(), and m68k_register_name().