GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Enumerations | Functions | Variables
avr-tdep.c File Reference
#include "defs.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 "symfile.h"
#include "arch-utils.h"
#include "regcache.h"
#include "dis-asm.h"
#include "objfiles.h"
#include <algorithm>
#include "gdbarch.h"

Go to the source code of this file.

Classes

struct  avr_unwind_cache
 
struct  avr_gdbarch_tdep
 
struct  avr_stack_item
 

Macros

#define AVR_TYPE_ADDRESS_CLASS_FLASH   TYPE_ADDRESS_CLASS_1
 
#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH    TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1
 

Enumerations

enum  {
  AVR_REG_W = 24 , AVR_REG_X = 26 , AVR_REG_Y = 28 , AVR_FP_REGNUM = 28 ,
  AVR_REG_Z = 30 , AVR_SREG_REGNUM = 32 , AVR_SP_REGNUM = 33 , AVR_PC_REGNUM = 34 ,
  AVR_NUM_REGS = 32 + 1 + 1 + 1 , AVR_NUM_REG_BYTES = 32 + 1 + 2 + 4 , AVR_PSEUDO_PC_REGNUM = 35 , AVR_NUM_PSEUDO_REGS = 1 ,
  AVR_PC_REG_INDEX = 35 , AVR_MAX_PROLOGUE_SIZE = 64 , AVR_MAX_PUSHES = 18 , AVR_LAST_PUSHED_REGNUM = 17 ,
  AVR_ARG1_REGNUM = 24 , AVR_ARGN_REGNUM = 25 , AVR_LAST_ARG_REGNUM = 8 , AVR_RET1_REGNUM = 24 ,
  AVR_RETN_REGNUM = 25 , AVR_IMEM_START = 0x00000000 , AVR_SMEM_START = 0x00800000 , AVR_MEM_MASK = 0x00f00000
}
 
enum  {
  AVR_PROLOGUE_NONE , AVR_PROLOGUE_NORMAL , AVR_PROLOGUE_CALL , AVR_PROLOGUE_MAIN ,
  AVR_PROLOGUE_INTR , AVR_PROLOGUE_SIG
}
 

Functions

static const char * avr_register_name (struct gdbarch *gdbarch, int regnum)
 
static struct typeavr_register_type (struct gdbarch *gdbarch, int reg_nr)
 
static CORE_ADDR avr_make_iaddr (CORE_ADDR x)
 
static CORE_ADDR avr_convert_iaddr_to_raw (CORE_ADDR x)
 
static CORE_ADDR avr_make_saddr (CORE_ADDR x)
 
static CORE_ADDR avr_convert_saddr_to_raw (CORE_ADDR x)
 
static void avr_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr)
 
static CORE_ADDR avr_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
 
static CORE_ADDR avr_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf)
 
static CORE_ADDR avr_read_pc (readable_regcache *regcache)
 
static void avr_write_pc (struct regcache *regcache, CORE_ADDR val)
 
static enum register_status avr_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache, int regnum, gdb_byte *buf)
 
static void avr_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf)
 
static CORE_ADDR avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end, struct avr_unwind_cache *info)
 
static CORE_ADDR avr_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
typedef BP_MANIPULATION (avr_break_insn)
 
static struct avr_unwind_cacheavr_frame_unwind_cache (frame_info_ptr this_frame, void **this_prologue_cache)
 
static CORE_ADDR avr_unwind_pc (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 
static CORE_ADDR avr_unwind_sp (struct gdbarch *gdbarch, frame_info_ptr next_frame)
 
static void avr_frame_this_id (frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
 
static struct valueavr_frame_prev_register (frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
 
static CORE_ADDR avr_frame_base_address (frame_info_ptr this_frame, void **this_cache)
 
static struct frame_id avr_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame)
 
static struct avr_stack_itempush_stack_item (struct avr_stack_item *prev, const bfd_byte *contents, int len)
 
static struct avr_stack_itempop_stack_item (struct avr_stack_item *si)
 
static CORE_ADDR avr_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 avr_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 
static type_instance_flags avr_address_class_type_flags (int byte_size, int dwarf2_addr_class)
 
static const char * avr_address_class_type_flags_to_name (struct gdbarch *gdbarch, type_instance_flags type_flags)
 
static bool avr_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, type_instance_flags *type_flags_ptr)
 
static struct gdbarchavr_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
static void avr_io_reg_read_command (const char *args, int from_tty)
 
void _initialize_avr_tdep ()
 

Variables

constexpr gdb_byte avr_break_insn [] = { 0x98, 0x95 }
 
static const struct frame_unwind avr_frame_unwind
 
static const struct frame_base avr_frame_base
 

Macro Definition Documentation

◆ AVR_TYPE_ADDRESS_CLASS_FLASH

#define AVR_TYPE_ADDRESS_CLASS_FLASH   TYPE_ADDRESS_CLASS_1

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

Referenced by avr_address_to_pointer(), and avr_pointer_to_address().

◆ AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH

#define AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH    TYPE_INSTANCE_FLAG_ADDRESS_CLASS_1

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
AVR_REG_W 
AVR_REG_X 
AVR_REG_Y 
AVR_FP_REGNUM 
AVR_REG_Z 
AVR_SREG_REGNUM 
AVR_SP_REGNUM 
AVR_PC_REGNUM 
AVR_NUM_REGS 
AVR_NUM_REG_BYTES 
AVR_PSEUDO_PC_REGNUM 
AVR_NUM_PSEUDO_REGS 
AVR_PC_REG_INDEX 
AVR_MAX_PROLOGUE_SIZE 
AVR_MAX_PUSHES 
AVR_LAST_PUSHED_REGNUM 
AVR_ARG1_REGNUM 
AVR_ARGN_REGNUM 
AVR_LAST_ARG_REGNUM 
AVR_RET1_REGNUM 
AVR_RETN_REGNUM 
AVR_IMEM_START 
AVR_SMEM_START 
AVR_MEM_MASK 

Definition at line 85 of file avr-tdep.c.

◆ anonymous enum

anonymous enum
Enumerator
AVR_PROLOGUE_NONE 
AVR_PROLOGUE_NORMAL 
AVR_PROLOGUE_CALL 
AVR_PROLOGUE_MAIN 
AVR_PROLOGUE_INTR 
AVR_PROLOGUE_SIG 

Definition at line 159 of file avr-tdep.c.

Function Documentation

◆ _initialize_avr_tdep()

void _initialize_avr_tdep ( )

◆ avr_address_class_name_to_type_flags()

static bool avr_address_class_name_to_type_flags ( struct gdbarch * gdbarch,
const char * name,
type_instance_flags * type_flags_ptr )
static

Definition at line 1411 of file avr-tdep.c.

References AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH, and name.

Referenced by avr_gdbarch_init().

◆ avr_address_class_type_flags()

static type_instance_flags avr_address_class_type_flags ( int byte_size,
int dwarf2_addr_class )
static

Definition at line 1381 of file avr-tdep.c.

References AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH.

Referenced by avr_gdbarch_init().

◆ avr_address_class_type_flags_to_name()

static const char * avr_address_class_type_flags_to_name ( struct gdbarch * gdbarch,
type_instance_flags type_flags )
static

Definition at line 1397 of file avr-tdep.c.

References AVR_TYPE_INSTANCE_FLAG_ADDRESS_CLASS_FLASH.

Referenced by avr_gdbarch_init().

◆ avr_address_to_pointer()

static void avr_address_to_pointer ( struct gdbarch * gdbarch,
struct type * type,
gdb_byte * buf,
CORE_ADDR addr )
static

◆ avr_convert_iaddr_to_raw()

static CORE_ADDR avr_convert_iaddr_to_raw ( CORE_ADDR x)
static

Definition at line 257 of file avr-tdep.c.

Referenced by avr_address_to_pointer(), avr_push_dummy_call(), and avr_write_pc().

◆ avr_convert_saddr_to_raw()

static CORE_ADDR avr_convert_saddr_to_raw ( CORE_ADDR x)
static

Definition at line 275 of file avr-tdep.c.

Referenced by avr_address_to_pointer(), and avr_push_dummy_call().

◆ avr_dummy_id()

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

◆ avr_dwarf_reg_to_regnum()

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

Definition at line 1366 of file avr-tdep.c.

References AVR_SP_REGNUM.

Referenced by avr_gdbarch_init().

◆ avr_frame_base_address()

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

Definition at line 1169 of file avr-tdep.c.

References avr_frame_unwind_cache().

◆ avr_frame_prev_register()

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

◆ avr_frame_this_id()

static void avr_frame_this_id ( frame_info_ptr this_frame,
void ** this_prologue_cache,
struct frame_id * this_id )
static

◆ avr_frame_unwind_cache()

static struct avr_unwind_cache * avr_frame_unwind_cache ( frame_info_ptr this_frame,
void ** this_prologue_cache )
static

◆ avr_gdbarch_init()

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

Definition at line 1427 of file avr-tdep.c.

References arches, avr_address_class_name_to_type_flags(), avr_address_class_type_flags(), avr_address_class_type_flags_to_name(), avr_address_to_pointer(), avr_dummy_id(), avr_dwarf_reg_to_regnum(), avr_frame_base, avr_frame_unwind, avr_integer_to_address(), AVR_NUM_PSEUDO_REGS, AVR_NUM_REGS, AVR_PC_REGNUM, avr_pointer_to_address(), avr_pseudo_register_read(), avr_pseudo_register_write(), avr_push_dummy_call(), avr_read_pc(), avr_register_name(), avr_register_type(), avr_skip_prologue(), AVR_SP_REGNUM, avr_unwind_pc(), avr_unwind_sp(), avr_write_pc(), avr_gdbarch_tdep::call_length, core_addr_lessthan(), floatformats_ieee_single, frame_base_set_default(), frame_unwind_append_unwinder(), avr_gdbarch_tdep::func_void_type, gdbarch_list::gdbarch, gdbarch_alloc(), gdbarch_list_lookup_by_info(), init_pointer_type(), make_function_type(), type_allocator::new_type(), gdbarch_list::next, avr_gdbarch_tdep::pc_type, set_gdbarch_addr_bit(), set_gdbarch_address_class_name_to_type_flags(), set_gdbarch_address_class_type_flags(), set_gdbarch_address_class_type_flags_to_name(), set_gdbarch_address_to_pointer(), set_gdbarch_breakpoint_kind_from_pc(), set_gdbarch_double_bit(), set_gdbarch_double_format(), set_gdbarch_dummy_id(), set_gdbarch_dwarf2_reg_to_regnum(), set_gdbarch_float_bit(), set_gdbarch_float_format(), set_gdbarch_inner_than(), set_gdbarch_int_bit(), set_gdbarch_integer_to_address(), set_gdbarch_long_bit(), set_gdbarch_long_double_bit(), set_gdbarch_long_double_format(), set_gdbarch_long_long_bit(), set_gdbarch_num_pseudo_regs(), set_gdbarch_num_regs(), set_gdbarch_pc_regnum(), set_gdbarch_pointer_to_address(), set_gdbarch_pseudo_register_read(), set_gdbarch_pseudo_register_write(), set_gdbarch_ptr_bit(), set_gdbarch_push_dummy_call(), set_gdbarch_read_pc(), set_gdbarch_register_name(), set_gdbarch_register_type(), set_gdbarch_return_value(), set_gdbarch_short_bit(), set_gdbarch_skip_prologue(), set_gdbarch_sp_regnum(), set_gdbarch_sw_breakpoint_from_kind(), set_gdbarch_unwind_pc(), set_gdbarch_unwind_sp(), set_gdbarch_wchar_bit(), set_gdbarch_wchar_signed(), set_gdbarch_write_pc(), and avr_gdbarch_tdep::void_type.

Referenced by _initialize_avr_tdep().

◆ avr_integer_to_address()

static CORE_ADDR avr_integer_to_address ( struct gdbarch * gdbarch,
struct type * type,
const gdb_byte * buf )
static

Definition at line 364 of file avr-tdep.c.

References avr_make_iaddr(), avr_make_saddr(), TYPE_DATA_SPACE, and unpack_long().

Referenced by avr_gdbarch_init().

◆ avr_io_reg_read_command()

static void avr_io_reg_read_command ( const char * args,
int from_tty )
static

◆ avr_make_iaddr()

static CORE_ADDR avr_make_iaddr ( CORE_ADDR x)
static

Definition at line 246 of file avr-tdep.c.

References AVR_IMEM_START.

Referenced by avr_integer_to_address(), avr_pointer_to_address(), avr_read_pc(), and avr_unwind_pc().

◆ avr_make_saddr()

static CORE_ADDR avr_make_saddr ( CORE_ADDR x)
static

◆ avr_pointer_to_address()

static CORE_ADDR avr_pointer_to_address ( struct gdbarch * gdbarch,
struct type * type,
const gdb_byte * buf )
static

◆ avr_pseudo_register_read()

static enum register_status avr_pseudo_register_read ( struct gdbarch * gdbarch,
readable_regcache * regcache,
int regnum,
gdb_byte * buf )
static

◆ avr_pseudo_register_write()

static void avr_pseudo_register_write ( struct gdbarch * gdbarch,
struct regcache * regcache,
int regnum,
const gdb_byte * buf )
static

◆ avr_push_dummy_call()

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

◆ avr_read_pc()

static CORE_ADDR avr_read_pc ( readable_regcache * regcache)
static

Definition at line 376 of file avr-tdep.c.

References avr_make_iaddr(), AVR_PC_REGNUM, and readable_regcache::cooked_read().

Referenced by avr_gdbarch_init().

◆ avr_register_name()

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

Definition at line 209 of file avr-tdep.c.

References AVR_NUM_PSEUDO_REGS, AVR_NUM_REGS, gdb_static_assert(), and regnum.

Referenced by avr_gdbarch_init().

◆ avr_register_type()

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

◆ avr_scan_prologue()

static CORE_ADDR avr_scan_prologue ( struct gdbarch * gdbarch,
CORE_ADDR pc_beg,
CORE_ADDR pc_end,
struct avr_unwind_cache * info )
static

◆ avr_skip_prologue()

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

◆ avr_unwind_pc()

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

Definition at line 1062 of file avr-tdep.c.

References avr_make_iaddr(), AVR_PC_REGNUM, and frame_unwind_register_unsigned().

Referenced by avr_gdbarch_init().

◆ avr_unwind_sp()

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

Definition at line 1072 of file avr-tdep.c.

References avr_make_saddr(), AVR_SP_REGNUM, and frame_unwind_register_unsigned().

Referenced by avr_gdbarch_init().

◆ avr_write_pc()

static void avr_write_pc ( struct regcache * regcache,
CORE_ADDR val )
static

Definition at line 385 of file avr-tdep.c.

References avr_convert_iaddr_to_raw(), AVR_PC_REGNUM, and regcache_cooked_write_unsigned().

Referenced by avr_gdbarch_init().

◆ BP_MANIPULATION()

typedef BP_MANIPULATION ( avr_break_insn )

◆ pop_stack_item()

static struct avr_stack_item * pop_stack_item ( struct avr_stack_item * si)
static

Definition at line 1221 of file avr-tdep.c.

References avr_stack_item::data, avr_stack_item::prev, and xfree().

Referenced by avr_push_dummy_call().

◆ push_stack_item()

static struct avr_stack_item * push_stack_item ( struct avr_stack_item * prev,
const bfd_byte * contents,
int len )
static

Definition at line 1208 of file avr-tdep.c.

References avr_stack_item::data, avr_stack_item::len, avr_stack_item::prev, and xmalloc().

Referenced by avr_push_dummy_call().

Variable Documentation

◆ avr_break_insn

constexpr gdb_byte avr_break_insn[] = { 0x98, 0x95 }
constexpr

Definition at line 923 of file avr-tdep.c.

◆ avr_frame_base

const struct frame_base avr_frame_base
static
Initial value:
= {
}
static const struct frame_unwind avr_frame_unwind
Definition avr-tdep.c:1158
static CORE_ADDR avr_frame_base_address(frame_info_ptr this_frame, void **this_cache)
Definition avr-tdep.c:1169

Definition at line 1177 of file avr-tdep.c.

Referenced by avr_gdbarch_init().

◆ avr_frame_unwind

const struct frame_unwind avr_frame_unwind
static
Initial value:
= {
"avr prologue",
NULL,
}
static void avr_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
Definition avr-tdep.c:1085
static struct value * avr_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
Definition avr-tdep.c:1110
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 1158 of file avr-tdep.c.

Referenced by avr_gdbarch_init().