GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
bfin-tdep.c File Reference
#include "defs.h"
#include "inferior.h"
#include "gdbcore.h"
#include "arch-utils.h"
#include "regcache.h"
#include "frame.h"
#include "frame-unwind.h"
#include "frame-base.h"
#include "trad-frame.h"
#include "dis-asm.h"
#include "sim-regno.h"
#include "sim/sim-bfin.h"
#include "dwarf2/frame.h"
#include "symtab.h"
#include "elf-bfd.h"
#include "elf/bfin.h"
#include "osabi.h"
#include "infcall.h"
#include "xml-syscall.h"
#include "bfin-tdep.h"

Go to the source code of this file.

Classes

struct  bfin_frame_cache
 

Macros

#define P_LINKAGE   0xE800
 
#define P_MINUS_SP1   0x0140
 
#define P_MINUS_SP2   0x05C0
 
#define P_MINUS_SP3   0x0540
 
#define P_MINUS_SP4   0x04C0
 
#define P_SP_PLUS   0x6C06
 
#define P_P2_LOW   0xE10A
 
#define P_P2_HIGH   0XE14A
 
#define P_SP_EQ_SP_PLUS_P2   0X5BB2
 
#define P_SP_EQ_P2_PLUS_SP   0x5B96
 
#define P_MINUS_MINUS_SP_EQ_RETS   0x0167
 
#define P_16_BIT_INSR_MAX   0xBFFF
 
#define P_32_BIT_INSR_MIN   0xC000
 
#define P_32_BIT_INSR_MAX   0xE801
 
#define P_JUMP_PREG_MIN   0x0050
 
#define P_JUMP_PREG_MAX   0x0057
 
#define P_JUMP_PC_PLUS_PREG_MIN   0x0080
 
#define P_JUMP_PC_PLUS_PREG_MAX   0x0087
 
#define P_JUMP_S_MIN   0x2000
 
#define P_JUMP_S_MAX   0x2FFF
 
#define P_JUMP_L_MIN   0xE200
 
#define P_JUMP_L_MAX   0xE2FF
 
#define P_IF_CC_JUMP_MIN   0x1800
 
#define P_IF_CC_JUMP_MAX   0x1BFF
 
#define P_IF_CC_JUMP_BP_MIN   0x1C00
 
#define P_IF_CC_JUMP_BP_MAX   0x1FFF
 
#define P_IF_NOT_CC_JUMP_MIN   0x1000
 
#define P_IF_NOT_CC_JUMP_MAX   0x13FF
 
#define P_IF_NOT_CC_JUMP_BP_MIN   0x1400
 
#define P_IF_NOT_CC_JUMP_BP_MAX   0x17FF
 
#define P_CALL_PREG_MIN   0x0060
 
#define P_CALL_PREG_MAX   0x0067
 
#define P_CALL_PC_PLUS_PREG_MIN   0x0070
 
#define P_CALL_PC_PLUS_PREG_MAX   0x0077
 
#define P_CALL_MIN   0xE300
 
#define P_CALL_MAX   0xE3FF
 
#define P_RTS   0x0010
 
#define P_MNOP   0xC803
 
#define P_EXCPT_MIN   0x00A0
 
#define P_EXCPT_MAX   0x00AF
 
#define P_BIT_MULTI_INS_1   0xC000
 
#define P_BIT_MULTI_INS_2   0x0800
 
#define UPPER_LIMIT   40
 
#define ASTAT_CC_POS   5
 
#define ASTAT_CC   (1 << ASTAT_CC_POS)
 
#define NUM_BFIN_REGNAMES   ARRAY_SIZE (bfin_register_name_strings)
 
#define BFIN_MAX_REGISTER_SIZE   4
 

Functions

static struct bfin_frame_cachebfin_alloc_frame_cache (void)
 
static struct bfin_frame_cache * bfin_frame_cache (frame_info_ptr this_frame, void **this_cache)
 
static void bfin_frame_this_id (frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
 
static struct valuebfin_frame_prev_register (frame_info_ptr this_frame, void **this_cache, int regnum)
 
static int is_minus_minus_sp (int op)
 
static CORE_ADDR bfin_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static struct typebfin_register_type (struct gdbarch *gdbarch, int regnum)
 
static CORE_ADDR bfin_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 bfin_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 
static int bfin_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
 
static const gdb_byte * bfin_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 
static void bfin_extract_return_value (struct type *type, struct regcache *regs, gdb_byte *dst)
 
static void bfin_store_return_value (struct type *type, struct regcache *regs, const gdb_byte *src)
 
static enum return_value_convention bfin_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 
static const char * bfin_register_name (struct gdbarch *gdbarch, int i)
 
static enum register_status bfin_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache, int regnum, gdb_byte *buffer)
 
static void bfin_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buffer)
 
static CORE_ADDR bfin_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 
static CORE_ADDR bfin_frame_local_address (frame_info_ptr this_frame, void **this_cache)
 
static CORE_ADDR bfin_frame_args_address (frame_info_ptr this_frame, void **this_cache)
 
static CORE_ADDR bfin_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
 
enum bfin_abi bfin_abi (struct gdbarch *gdbarch)
 
static struct gdbarchbfin_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
void _initialize_bfin_tdep ()
 

Variables

static const char *const bfin_register_name_strings []
 
static const int map_gcc_gdb []
 
static const struct frame_unwind bfin_frame_unwind
 
static const struct frame_base bfin_frame_base
 

Macro Definition Documentation

◆ ASTAT_CC

#define ASTAT_CC   (1 << ASTAT_CC_POS)

Definition at line 125 of file bfin-tdep.c.

Referenced by bfin_pseudo_register_read().

◆ ASTAT_CC_POS

#define ASTAT_CC_POS   5

Definition at line 124 of file bfin-tdep.c.

Referenced by bfin_pseudo_register_write().

◆ BFIN_MAX_REGISTER_SIZE

#define BFIN_MAX_REGISTER_SIZE   4

Definition at line 245 of file bfin-tdep.c.

Referenced by bfin_pseudo_register_read(), and bfin_pseudo_register_write().

◆ NUM_BFIN_REGNAMES

#define NUM_BFIN_REGNAMES   ARRAY_SIZE (bfin_register_name_strings)

Definition at line 141 of file bfin-tdep.c.

◆ P_16_BIT_INSR_MAX

#define P_16_BIT_INSR_MAX   0xBFFF

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

◆ P_32_BIT_INSR_MAX

#define P_32_BIT_INSR_MAX   0xE801

Definition at line 62 of file bfin-tdep.c.

◆ P_32_BIT_INSR_MIN

#define P_32_BIT_INSR_MIN   0xC000

Definition at line 60 of file bfin-tdep.c.

◆ P_BIT_MULTI_INS_1

#define P_BIT_MULTI_INS_1   0xC000

Definition at line 116 of file bfin-tdep.c.

◆ P_BIT_MULTI_INS_2

#define P_BIT_MULTI_INS_2   0x0800

Definition at line 118 of file bfin-tdep.c.

◆ P_CALL_MAX

#define P_CALL_MAX   0xE3FF

Definition at line 106 of file bfin-tdep.c.

◆ P_CALL_MIN

#define P_CALL_MIN   0xE300

Definition at line 104 of file bfin-tdep.c.

◆ P_CALL_PC_PLUS_PREG_MAX

#define P_CALL_PC_PLUS_PREG_MAX   0x0077

Definition at line 102 of file bfin-tdep.c.

◆ P_CALL_PC_PLUS_PREG_MIN

#define P_CALL_PC_PLUS_PREG_MIN   0x0070

Definition at line 100 of file bfin-tdep.c.

◆ P_CALL_PREG_MAX

#define P_CALL_PREG_MAX   0x0067

Definition at line 98 of file bfin-tdep.c.

◆ P_CALL_PREG_MIN

#define P_CALL_PREG_MIN   0x0060

Definition at line 96 of file bfin-tdep.c.

◆ P_EXCPT_MAX

#define P_EXCPT_MAX   0x00AF

Definition at line 114 of file bfin-tdep.c.

◆ P_EXCPT_MIN

#define P_EXCPT_MIN   0x00A0

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

◆ P_IF_CC_JUMP_BP_MAX

#define P_IF_CC_JUMP_BP_MAX   0x1FFF

Definition at line 86 of file bfin-tdep.c.

◆ P_IF_CC_JUMP_BP_MIN

#define P_IF_CC_JUMP_BP_MIN   0x1C00

Definition at line 84 of file bfin-tdep.c.

◆ P_IF_CC_JUMP_MAX

#define P_IF_CC_JUMP_MAX   0x1BFF

Definition at line 82 of file bfin-tdep.c.

◆ P_IF_CC_JUMP_MIN

#define P_IF_CC_JUMP_MIN   0x1800

Definition at line 80 of file bfin-tdep.c.

◆ P_IF_NOT_CC_JUMP_BP_MAX

#define P_IF_NOT_CC_JUMP_BP_MAX   0x17FF

Definition at line 94 of file bfin-tdep.c.

◆ P_IF_NOT_CC_JUMP_BP_MIN

#define P_IF_NOT_CC_JUMP_BP_MIN   0x1400

Definition at line 92 of file bfin-tdep.c.

◆ P_IF_NOT_CC_JUMP_MAX

#define P_IF_NOT_CC_JUMP_MAX   0x13FF

Definition at line 90 of file bfin-tdep.c.

◆ P_IF_NOT_CC_JUMP_MIN

#define P_IF_NOT_CC_JUMP_MIN   0x1000

Definition at line 88 of file bfin-tdep.c.

◆ P_JUMP_L_MAX

#define P_JUMP_L_MAX   0xE2FF

Definition at line 78 of file bfin-tdep.c.

◆ P_JUMP_L_MIN

#define P_JUMP_L_MIN   0xE200

Definition at line 76 of file bfin-tdep.c.

◆ P_JUMP_PC_PLUS_PREG_MAX

#define P_JUMP_PC_PLUS_PREG_MAX   0x0087

Definition at line 70 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_JUMP_PC_PLUS_PREG_MIN

#define P_JUMP_PC_PLUS_PREG_MIN   0x0080

Definition at line 68 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_JUMP_PREG_MAX

#define P_JUMP_PREG_MAX   0x0057

Definition at line 66 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_JUMP_PREG_MIN

#define P_JUMP_PREG_MIN   0x0050

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

Referenced by bfin_skip_prologue().

◆ P_JUMP_S_MAX

#define P_JUMP_S_MAX   0x2FFF

Definition at line 74 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_JUMP_S_MIN

#define P_JUMP_S_MIN   0x2000

Definition at line 72 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_LINKAGE

#define P_LINKAGE   0xE800

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

Referenced by bfin_skip_prologue().

◆ P_MINUS_MINUS_SP_EQ_RETS

#define P_MINUS_MINUS_SP_EQ_RETS   0x0167

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

Referenced by bfin_skip_prologue().

◆ P_MINUS_SP1

#define P_MINUS_SP1   0x0140

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

Referenced by is_minus_minus_sp().

◆ P_MINUS_SP2

#define P_MINUS_SP2   0x05C0

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

Referenced by is_minus_minus_sp().

◆ P_MINUS_SP3

#define P_MINUS_SP3   0x0540

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

Referenced by is_minus_minus_sp().

◆ P_MINUS_SP4

#define P_MINUS_SP4   0x04C0

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

Referenced by is_minus_minus_sp().

◆ P_MNOP

#define P_MNOP   0xC803

Definition at line 110 of file bfin-tdep.c.

◆ P_P2_HIGH

#define P_P2_HIGH   0XE14A

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

◆ P_P2_LOW

#define P_P2_LOW   0xE10A

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

◆ P_RTS

#define P_RTS   0x0010

Definition at line 108 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

◆ P_SP_EQ_P2_PLUS_SP

#define P_SP_EQ_P2_PLUS_SP   0x5B96

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

◆ P_SP_EQ_SP_PLUS_P2

#define P_SP_EQ_SP_PLUS_P2   0X5BB2

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

◆ P_SP_PLUS

#define P_SP_PLUS   0x6C06

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

◆ UPPER_LIMIT

#define UPPER_LIMIT   40

Definition at line 121 of file bfin-tdep.c.

Referenced by bfin_skip_prologue().

Function Documentation

◆ _initialize_bfin_tdep()

void _initialize_bfin_tdep ( )

Definition at line 841 of file bfin-tdep.c.

References bfin_gdbarch_init(), and gdbarch_register().

◆ bfin_abi()

enum bfin_abi bfin_abi ( struct gdbarch * gdbarch)

Definition at line 765 of file bfin-tdep.c.

◆ bfin_alloc_frame_cache()

static struct bfin_frame_cache * bfin_alloc_frame_cache ( void )
static

◆ bfin_breakpoint_kind_from_pc()

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

Definition at line 577 of file bfin-tdep.c.

References gdbarch_byte_order(), and read_memory_unsigned_integer().

Referenced by bfin_gdbarch_init().

◆ bfin_extract_return_value()

static void bfin_extract_return_value ( struct type * type,
struct regcache * regs,
gdb_byte * dst )
static

◆ bfin_frame_align()

static CORE_ADDR bfin_frame_align ( struct gdbarch * gdbarch,
CORE_ADDR address )
static

Definition at line 759 of file bfin-tdep.c.

Referenced by bfin_gdbarch_init().

◆ bfin_frame_args_address()

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

Definition at line 743 of file bfin-tdep.c.

References bfin_frame_cache::base, and bfin_frame_cache().

◆ bfin_frame_base_address()

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

Definition at line 727 of file bfin-tdep.c.

References bfin_frame_cache::base, and bfin_frame_cache().

◆ bfin_frame_cache()

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

◆ bfin_frame_local_address()

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

Definition at line 735 of file bfin-tdep.c.

References bfin_frame_cache::base, and bfin_frame_cache().

◆ bfin_frame_prev_register()

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

◆ bfin_frame_this_id()

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

◆ bfin_gdbarch_init()

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

◆ bfin_pseudo_register_read()

static enum register_status bfin_pseudo_register_read ( struct gdbarch * gdbarch,
readable_regcache * regcache,
int regnum,
gdb_byte * buffer )
static

◆ bfin_pseudo_register_write()

static void bfin_pseudo_register_write ( struct gdbarch * gdbarch,
struct regcache * regcache,
int regnum,
const gdb_byte * buffer )
static

◆ bfin_push_dummy_call()

static CORE_ADDR bfin_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

◆ bfin_reg_to_regnum()

static int bfin_reg_to_regnum ( struct gdbarch * gdbarch,
int reg )
static

Definition at line 566 of file bfin-tdep.c.

References map_gcc_gdb.

Referenced by bfin_gdbarch_init().

◆ bfin_register_name()

static const char * bfin_register_name ( struct gdbarch * gdbarch,
int i )
static

Definition at line 686 of file bfin-tdep.c.

References bfin_register_name_strings.

Referenced by bfin_gdbarch_init().

◆ bfin_register_type()

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

◆ bfin_return_value()

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

◆ bfin_skip_prologue()

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

◆ bfin_store_return_value()

static void bfin_store_return_value ( struct type * type,
struct regcache * regs,
const gdb_byte * src )
static

Definition at line 634 of file bfin-tdep.c.

References BFIN_R0_REGNUM, regcache::cooked_write(), and type::length().

Referenced by bfin_return_value().

◆ bfin_sw_breakpoint_from_kind()

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

Definition at line 594 of file bfin-tdep.c.

References size, and target_shortname().

Referenced by bfin_gdbarch_init().

◆ is_minus_minus_sp()

static int is_minus_minus_sp ( int op)
static

Definition at line 390 of file bfin-tdep.c.

References P_MINUS_SP1, P_MINUS_SP2, P_MINUS_SP3, and P_MINUS_SP4.

Referenced by bfin_skip_prologue().

Variable Documentation

◆ bfin_frame_base

const struct frame_base bfin_frame_base
static
Initial value:
=
{
}
static CORE_ADDR bfin_frame_local_address(frame_info_ptr this_frame, void **this_cache)
Definition bfin-tdep.c:735
static CORE_ADDR bfin_frame_args_address(frame_info_ptr this_frame, void **this_cache)
Definition bfin-tdep.c:743
static CORE_ADDR bfin_frame_base_address(frame_info_ptr this_frame, void **this_cache)
Definition bfin-tdep.c:727
static const struct frame_unwind bfin_frame_unwind
Definition bfin-tdep.c:375

Definition at line 750 of file bfin-tdep.c.

Referenced by bfin_gdbarch_init().

◆ bfin_frame_unwind

const struct frame_unwind bfin_frame_unwind
static
Initial value:
=
{
"bfin prologue",
NULL,
}
static void bfin_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
Definition bfin-tdep.c:343
static struct value * bfin_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
Definition bfin-tdep.c:358
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

Definition at line 375 of file bfin-tdep.c.

Referenced by bfin_gdbarch_init().

◆ bfin_register_name_strings

const char* const bfin_register_name_strings[]
static
Initial value:
=
{
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
"p0", "p1", "p2", "p3", "p4", "p5", "sp", "fp",
"i0", "i1", "i2", "i3", "m0", "m1", "m2", "m3",
"b0", "b1", "b2", "b3", "l0", "l1", "l2", "l3",
"a0x", "a0w", "a1x", "a1w", "astat", "rets",
"lc0", "lt0", "lb0", "lc1", "lt1", "lb1", "cycles", "cycles2",
"usp", "seqstat", "syscfg", "reti", "retx", "retn", "rete",
"pc", "cc",
}

Definition at line 129 of file bfin-tdep.c.

Referenced by bfin_register_name().

◆ map_gcc_gdb

const int map_gcc_gdb[]
static

Definition at line 191 of file bfin-tdep.c.

Referenced by bfin_reg_to_regnum().