GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
tic6x-tdep.c File Reference
#include "defs.h"
#include "frame.h"
#include "frame-unwind.h"
#include "frame-base.h"
#include "trad-frame.h"
#include "dwarf2/frame.h"
#include "symtab.h"
#include "inferior.h"
#include "gdbtypes.h"
#include "gdbcore.h"
#include "gdbcmd.h"
#include "target.h"
#include "dis-asm.h"
#include "regcache.h"
#include "value.h"
#include "symfile.h"
#include "arch-utils.h"
#include "glibc-tdep.h"
#include "infcall.h"
#include "regset.h"
#include "tramp-frame.h"
#include "linux-tdep.h"
#include "solib.h"
#include "objfiles.h"
#include "osabi.h"
#include "tic6x-tdep.h"
#include "language.h"
#include "target-descriptions.h"
#include <algorithm>

Go to the source code of this file.

Classes

struct  tic6x_unwind_cache
 

Macros

#define TIC6X_OPCODE_SIZE   4
 
#define TIC6X_FETCH_PACKET_SIZE   32
 
#define INST_S_BIT(INST)   ((INST >> 1) & 1)
 
#define INST_X_BIT(INST)   ((INST >> 12) & 1)
 

Functions

static const char * tic6x_register_name (struct gdbarch *gdbarch, int regno)
 
static struct typetic6x_register_type (struct gdbarch *gdbarch, int regno)
 
static void tic6x_setup_default (struct tic6x_unwind_cache *cache)
 
static unsigned long tic6x_fetch_instruction (struct gdbarch *, CORE_ADDR)
 
static int tic6x_register_number (int reg, int side, int crosspath)
 
static CORE_ADDR tic6x_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc, const CORE_ADDR current_pc, struct tic6x_unwind_cache *cache, frame_info_ptr this_frame)
 
static CORE_ADDR tic6x_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
 
static int tic6x_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
 
static const gdb_byte * tic6x_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
 
static void tic6x_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, struct dwarf2_frame_state_reg *reg, frame_info_ptr this_frame)
 
static CORE_ADDR tic6x_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 
static struct tic6x_unwind_cachetic6x_frame_unwind_cache (frame_info_ptr this_frame, void **this_prologue_cache)
 
static void tic6x_frame_this_id (frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
 
static struct valuetic6x_frame_prev_register (frame_info_ptr this_frame, void **this_cache, int regnum)
 
static CORE_ADDR tic6x_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 
static struct tic6x_unwind_cachetic6x_make_stub_cache (frame_info_ptr this_frame)
 
static void tic6x_stub_this_id (frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
 
static int tic6x_stub_unwind_sniffer (const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
 
static int tic6x_condition_true (struct regcache *regcache, unsigned long inst)
 
static int tic6x_extract_signed_field (int value, int low_bit, int bits)
 
static CORE_ADDR tic6x_get_next_pc (struct regcache *regcache, CORE_ADDR pc)
 
static std::vector< CORE_ADDR > tic6x_software_single_step (struct regcache *regcache)
 
static CORE_ADDR tic6x_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
 
static void tic6x_extract_return_value (struct type *valtype, struct regcache *regcache, enum bfd_endian byte_order, gdb_byte *valbuf)
 
static void tic6x_store_return_value (struct type *valtype, struct regcache *regcache, enum bfd_endian byte_order, const gdb_byte *valbuf)
 
static enum return_value_convention tic6x_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 
static int tic6x_arg_type_alignment (struct type *type)
 
static CORE_ADDR tic6x_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 tic6x_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static int tic6x_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 
static int tic6x_return_in_first_hidden_param_p (struct gdbarch *gdbarch, struct type *type)
 
static struct gdbarchtic6x_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
void _initialize_tic6x_tdep ()
 

Variables

const gdb_byte tic6x_bkpt_illegal_opcode_be [] = { 0x56, 0x45, 0x43, 0x14 }
 
const gdb_byte tic6x_bkpt_illegal_opcode_le [] = { 0x14, 0x43, 0x45, 0x56 }
 
static const char *const tic6x_register_names []
 
static const int arg_regs [] = { 4, 20, 6, 22, 8, 24, 10, 26, 12, 28 }
 
static const struct frame_unwind tic6x_frame_unwind
 
static const struct frame_base tic6x_frame_base
 
static const struct frame_unwind tic6x_stub_unwind
 

Macro Definition Documentation

◆ INST_S_BIT

#define INST_S_BIT ( INST)    ((INST >> 1) & 1)

◆ INST_X_BIT

#define INST_X_BIT ( INST)    ((INST >> 12) & 1)

Definition at line 56 of file tic6x-tdep.c.

Referenced by tic6x_get_next_pc(), and tic6x_stack_frame_destroyed_p().

◆ TIC6X_FETCH_PACKET_SIZE

#define TIC6X_FETCH_PACKET_SIZE   32

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

Referenced by tic6x_get_next_pc().

◆ TIC6X_OPCODE_SIZE

#define TIC6X_OPCODE_SIZE   4

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

Referenced by tic6x_fetch_instruction(), and tic6x_get_next_pc().

Function Documentation

◆ _initialize_tic6x_tdep()

void _initialize_tic6x_tdep ( )

Definition at line 1298 of file tic6x-tdep.c.

References gdbarch_register(), and tic6x_gdbarch_init().

◆ tic6x_analyze_prologue()

static CORE_ADDR tic6x_analyze_prologue ( struct gdbarch * gdbarch,
const CORE_ADDR start_pc,
const CORE_ADDR current_pc,
struct tic6x_unwind_cache * cache,
frame_info_ptr this_frame )
static

◆ tic6x_arg_type_alignment()

static int tic6x_arg_type_alignment ( struct type * type)
static

Definition at line 808 of file tic6x-tdep.c.

References check_typedef(), type::code(), and type::length().

Referenced by tic6x_push_dummy_call().

◆ tic6x_breakpoint_kind_from_pc()

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

Definition at line 315 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().

◆ tic6x_condition_true()

static int tic6x_condition_true ( struct regcache * regcache,
unsigned long inst )
static

Definition at line 542 of file tic6x-tdep.c.

References regcache_raw_get_signed().

Referenced by tic6x_get_next_pc().

◆ tic6x_dwarf2_frame_init_reg()

static void tic6x_dwarf2_frame_init_reg ( struct gdbarch * gdbarch,
int regnum,
struct dwarf2_frame_state_reg * reg,
frame_info_ptr this_frame )
static

◆ tic6x_extract_return_value()

static void tic6x_extract_return_value ( struct type * valtype,
struct regcache * regcache,
enum bfd_endian byte_order,
gdb_byte * valbuf )
static

◆ tic6x_extract_signed_field()

static int tic6x_extract_signed_field ( int value,
int low_bit,
int bits )
static

Definition at line 571 of file tic6x-tdep.c.

References bits.

Referenced by tic6x_get_next_pc().

◆ tic6x_fetch_instruction()

static unsigned long tic6x_fetch_instruction ( struct gdbarch * gdbarch,
CORE_ADDR pc )
static

◆ tic6x_frame_align()

static CORE_ADDR tic6x_frame_align ( struct gdbarch * gdbarch,
CORE_ADDR addr )
static

Definition at line 690 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().

◆ tic6x_frame_base_address()

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

Definition at line 448 of file tic6x-tdep.c.

References tic6x_frame_unwind_cache().

◆ tic6x_frame_prev_register()

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

◆ tic6x_frame_this_id()

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

◆ tic6x_frame_unwind_cache()

static struct tic6x_unwind_cache * tic6x_frame_unwind_cache ( frame_info_ptr this_frame,
void ** this_prologue_cache )
static

◆ tic6x_gdbarch_init()

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

Definition at line 1137 of file tic6x-tdep.c.

References arches, tic6x_gdbarch_tdep::breakpoint, core_addr_lessthan(), dwarf2_append_unwinders(), dwarf2_frame_set_init_reg(), floatformats_ieee_double, floatformats_ieee_single, frame_base_set_default(), frame_unwind_append_unwinder(), gdbarch_alloc(), gdbarch_init_osabi(), gdbarch_list_lookup_by_info(), registry< T >::get(), tic6x_gdbarch_tdep::has_gp, 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_frame_align(), set_gdbarch_get_longjmp_target(), set_gdbarch_inner_than(), set_gdbarch_int_bit(), set_gdbarch_long_bit(), set_gdbarch_long_long_bit(), set_gdbarch_num_regs(), set_gdbarch_pc_regnum(), set_gdbarch_ptr_bit(), set_gdbarch_push_dummy_call(), set_gdbarch_register_name(), set_gdbarch_register_type(), set_gdbarch_return_in_first_hidden_param_p(), set_gdbarch_return_value(), set_gdbarch_short_bit(), set_gdbarch_skip_prologue(), set_gdbarch_software_single_step(), set_gdbarch_sp_regnum(), set_gdbarch_stack_frame_destroyed_p(), set_gdbarch_sw_breakpoint_from_kind(), set_gdbarch_unwind_pc(), tdesc_data, tdesc_data_alloc(), tdesc_find_feature(), tdesc_has_registers(), tdesc_numbered_register(), tdesc_use_registers(), tic6x_breakpoint_kind_from_pc(), TIC6X_CSR_REGNUM, tic6x_dwarf2_frame_init_reg(), tic6x_frame_align(), tic6x_frame_base, tic6x_frame_unwind, tic6x_get_longjmp_target(), TIC6X_NUM_REGS, TIC6X_PC_REGNUM, tic6x_push_dummy_call(), tic6x_register_name(), tic6x_register_names, tic6x_register_type(), tic6x_return_in_first_hidden_param_p(), tic6x_return_value(), tic6x_skip_prologue(), tic6x_software_single_step(), TIC6X_SP_REGNUM, tic6x_stack_frame_destroyed_p(), tic6x_stub_unwind, tic6x_sw_breakpoint_from_kind(), and tic6x_unwind_pc().

Referenced by _initialize_tic6x_tdep().

◆ tic6x_get_longjmp_target()

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

◆ tic6x_get_next_pc()

static CORE_ADDR tic6x_get_next_pc ( struct regcache * regcache,
CORE_ADDR pc )
static

◆ tic6x_make_stub_cache()

static struct tic6x_unwind_cache * tic6x_make_stub_cache ( frame_info_ptr this_frame)
static

◆ tic6x_push_dummy_call()

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

◆ tic6x_register_name()

static const char * tic6x_register_name ( struct gdbarch * gdbarch,
int regno )
static

◆ tic6x_register_number()

static int tic6x_register_number ( int reg,
int side,
int crosspath )
static

◆ tic6x_register_type()

static struct type * tic6x_register_type ( struct gdbarch * gdbarch,
int regno )
static

◆ tic6x_return_in_first_hidden_param_p()

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

Definition at line 1130 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().

◆ tic6x_return_value()

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

◆ tic6x_setup_default()

static void tic6x_setup_default ( struct tic6x_unwind_cache * cache)
static

◆ tic6x_skip_prologue()

static CORE_ADDR tic6x_skip_prologue ( struct gdbarch * gdbarch,
CORE_ADDR start_pc )
static

◆ tic6x_software_single_step()

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

Definition at line 680 of file tic6x-tdep.c.

References regcache_read_pc(), and tic6x_get_next_pc().

Referenced by tic6x_gdbarch_init().

◆ tic6x_stack_frame_destroyed_p()

static int tic6x_stack_frame_destroyed_p ( struct gdbarch * gdbarch,
CORE_ADDR pc )
static

◆ tic6x_store_return_value()

static void tic6x_store_return_value ( struct type * valtype,
struct regcache * regcache,
enum bfd_endian byte_order,
const gdb_byte * valbuf )
static

◆ tic6x_stub_this_id()

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

◆ tic6x_stub_unwind_sniffer()

static int tic6x_stub_unwind_sniffer ( const struct frame_unwind * self,
frame_info_ptr this_frame,
void ** this_prologue_cache )
static

Definition at line 505 of file tic6x-tdep.c.

References get_frame_address_in_block(), and in_plt_section().

◆ tic6x_sw_breakpoint_from_kind()

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

◆ tic6x_unwind_pc()

static CORE_ADDR tic6x_unwind_pc ( struct gdbarch * gdbarch,
frame_info_ptr next_frame )
static

Definition at line 368 of file tic6x-tdep.c.

References extract_typed_address(), frame_unwind_register(), and TIC6X_PC_REGNUM.

Referenced by tic6x_gdbarch_init().

Variable Documentation

◆ arg_regs

const int arg_regs[] = { 4, 20, 6, 22, 8, 24, 10, 26, 12, 28 }
static

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

Referenced by tic6x_push_dummy_call().

◆ tic6x_bkpt_illegal_opcode_be

const gdb_byte tic6x_bkpt_illegal_opcode_be[] = { 0x56, 0x45, 0x43, 0x14 }

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

Referenced by tic6x_sw_breakpoint_from_kind(), and tic6x_uclinux_init_abi().

◆ tic6x_bkpt_illegal_opcode_le

const gdb_byte tic6x_bkpt_illegal_opcode_le[] = { 0x14, 0x43, 0x45, 0x56 }

Definition at line 59 of file tic6x-tdep.c.

Referenced by tic6x_sw_breakpoint_from_kind(), and tic6x_uclinux_init_abi().

◆ tic6x_frame_base

const struct frame_base tic6x_frame_base
static
Initial value:
=
{
}
static const struct frame_unwind tic6x_frame_unwind
Definition tic6x-tdep.c:455
static CORE_ADDR tic6x_frame_base_address(frame_info_ptr this_frame, void **this_cache)
Definition tic6x-tdep.c:448

Definition at line 466 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().

◆ tic6x_frame_unwind

const struct frame_unwind tic6x_frame_unwind
static
Initial value:
=
{
"tic6x 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 struct value * tic6x_frame_prev_register(frame_info_ptr this_frame, void **this_cache, int regnum)
Definition tic6x-tdep.c:421
static void tic6x_frame_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
Definition tic6x-tdep.c:407

Definition at line 455 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().

◆ tic6x_register_names

const char* const tic6x_register_names[]
static
Initial value:
=
{
"A0", "A1", "A2", "A3",
"A4", "A5", "A6", "A7",
"A8", "A9", "A10", "A11",
"A12", "A13", "A14", "A15",
"B0", "B1", "B2", "B3",
"B4", "B5", "B6", "B7",
"B8", "B9", "B10", "B11",
"B12", "B13", "B14", "B15",
"CSR", "PC",
}

Definition at line 83 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init(), and tic6x_register_name().

◆ tic6x_stub_unwind

const struct frame_unwind tic6x_stub_unwind
static
Initial value:
=
{
"tic6x stub",
NULL,
}
static void tic6x_stub_this_id(frame_info_ptr this_frame, void **this_cache, struct frame_id *this_id)
Definition tic6x-tdep.c:492
static int tic6x_stub_unwind_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
Definition tic6x-tdep.c:505

Definition at line 518 of file tic6x-tdep.c.

Referenced by tic6x_gdbarch_init().