GDB (xrefs)
Loading...
Searching...
No Matches
Classes | Macros | Functions | Variables
alpha-tdep.c File Reference
#include "defs.h"
#include "frame.h"
#include "frame-unwind.h"
#include "frame-base.h"
#include "dwarf2/frame.h"
#include "inferior.h"
#include "symtab.h"
#include "value.h"
#include "gdbcmd.h"
#include "gdbcore.h"
#include "dis-asm.h"
#include "symfile.h"
#include "objfiles.h"
#include "linespec.h"
#include "regcache.h"
#include "reggroups.h"
#include "arch-utils.h"
#include "osabi.h"
#include "infcall.h"
#include "trad-frame.h"
#include "elf-bfd.h"
#include "alpha-tdep.h"
#include <algorithm>

Go to the source code of this file.

Classes

struct  alpha_sigtramp_unwind_cache
 
struct  alpha_heuristic_unwind_cache
 

Macros

#define INSN_OPCODE(insn)   ((insn & 0xfc000000) >> 26)
 
#define MEM_RA(insn)   ((insn & 0x03e00000) >> 21)
 
#define MEM_RB(insn)   ((insn & 0x001f0000) >> 16)
 
#define MEM_DISP(insn)    (((insn & 0x8000) == 0) ? (insn & 0xffff) : -((-insn) & 0xffff))
 
#define BR_RA(insn)   MEM_RA(insn)
 
#define OPR_FUNCTION(insn)   ((insn & 0xfe0) >> 5)
 
#define OPR_HAS_IMMEDIATE(insn)   ((insn & 0x1000) == 0x1000)
 
#define OPR_RA(insn)   MEM_RA(insn)
 
#define OPR_RC(insn)   ((insn & 0x1f))
 
#define OPR_LIT(insn)   ((insn & 0x1fe000) >> 13)
 

Functions

static const char * alpha_register_name (struct gdbarch *gdbarch, int regno)
 
static int alpha_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
 
static int alpha_cannot_store_register (struct gdbarch *gdbarch, int regno)
 
static struct typealpha_register_type (struct gdbarch *gdbarch, int regno)
 
static int alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum, const struct reggroup *group)
 
static void alpha_lds (struct gdbarch *gdbarch, void *out, const void *in)
 
static void alpha_sts (struct gdbarch *gdbarch, void *out, const void *in)
 
static int alpha_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
 
static int alpha_register_to_value (frame_info_ptr frame, int regnum, struct type *valtype, gdb_byte *out, int *optimizedp, int *unavailablep)
 
static void alpha_value_to_register (frame_info_ptr frame, int regnum, struct type *valtype, const gdb_byte *in)
 
static CORE_ADDR alpha_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 void alpha_extract_return_value (struct type *valtype, struct regcache *regcache, gdb_byte *valbuf)
 
static void alpha_store_return_value (struct type *valtype, struct regcache *regcache, const gdb_byte *valbuf)
 
static enum return_value_convention alpha_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 
static int alpha_return_in_memory_always (struct type *type)
 
typedef BP_MANIPULATION (alpha_break_insn)
 
unsigned int alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static CORE_ADDR alpha_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static std::vector< CORE_ADDR > alpha_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static int alpha_get_longjmp_target (frame_info_ptr frame, CORE_ADDR *pc)
 
static struct alpha_sigtramp_unwind_cachealpha_sigtramp_frame_unwind_cache (frame_info_ptr this_frame, void **this_prologue_cache)
 
static CORE_ADDR alpha_sigtramp_register_address (struct gdbarch *gdbarch, CORE_ADDR sigcontext_addr, int regnum)
 
static void alpha_sigtramp_frame_this_id (frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
 
static struct valuealpha_sigtramp_frame_prev_register (frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
 
static int alpha_sigtramp_frame_sniffer (const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
 
static CORE_ADDR alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static void alpha_heuristic_analyze_probing_loop (struct gdbarch *gdbarch, CORE_ADDR *pc, int *frame_size)
 
static struct alpha_heuristic_unwind_cachealpha_heuristic_frame_unwind_cache (frame_info_ptr this_frame, void **this_prologue_cache, CORE_ADDR start_pc)
 
static void alpha_heuristic_frame_this_id (frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
 
static struct valuealpha_heuristic_frame_prev_register (frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
 
static CORE_ADDR alpha_heuristic_frame_base_address (frame_info_ptr this_frame, void **this_prologue_cache)
 
static void reinit_frame_cache_sfunc (const char *args, int from_tty, struct cmd_list_element *c)
 
void alpha_supply_int_regs (struct regcache *regcache, int regno, const void *r0_r30, const void *pc, const void *unique)
 
void alpha_fill_int_regs (const struct regcache *regcache, int regno, void *r0_r30, void *pc, void *unique)
 
void alpha_supply_fp_regs (struct regcache *regcache, int regno, const void *f0_f30, const void *fpcr)
 
void alpha_fill_fp_regs (const struct regcache *regcache, int regno, void *f0_f30, void *fpcr)
 
static int fp_register_zero_p (LONGEST reg)
 
static int fp_register_sign_bit (LONGEST reg)
 
static CORE_ADDR alpha_next_pc (struct regcache *regcache, CORE_ADDR pc)
 
std::vector< CORE_ADDR > alpha_software_single_step (struct regcache *regcache)
 
static struct gdbarchalpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
void alpha_dwarf2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
void _initialize_alpha_tdep ()
 

Variables

static const int lda_opcode = 0x08
 
static const int stq_opcode = 0x2d
 
static const int br_opcode = 0x30
 
static const int bne_opcode = 0x3d
 
static const int subq_opcode = 0x10
 
static const int subq_function = 0x29
 
constexpr gdb_byte alpha_break_insn [] = { 0x80, 0, 0, 0 }
 
static const int ldl_l_opcode = 0x2a
 
static const int ldq_l_opcode = 0x2b
 
static const int stl_c_opcode = 0x2e
 
static const int stq_c_opcode = 0x2f
 
static const struct frame_unwind alpha_sigtramp_frame_unwind
 
static int heuristic_fence_post = 0
 
static const struct frame_unwind alpha_heuristic_frame_unwind
 
static const struct frame_base alpha_heuristic_frame_base
 

Macro Definition Documentation

◆ BR_RA

#define BR_RA ( insn)    MEM_RA(insn)

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

◆ INSN_OPCODE

#define INSN_OPCODE ( insn)    ((insn & 0xfc000000) >> 26)

◆ MEM_DISP

#define MEM_DISP ( insn)     (((insn & 0x8000) == 0) ? (insn & 0xffff) : -((-insn) & 0xffff))

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ MEM_RA

#define MEM_RA ( insn)    ((insn & 0x03e00000) >> 21)

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ MEM_RB

#define MEM_RB ( insn)    ((insn & 0x001f0000) >> 16)

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ OPR_FUNCTION

#define OPR_FUNCTION ( insn)    ((insn & 0xfe0) >> 5)

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ OPR_HAS_IMMEDIATE

#define OPR_HAS_IMMEDIATE ( insn)    ((insn & 0x1000) == 0x1000)

Definition at line 69 of file alpha-tdep.c.

Referenced by alpha_heuristic_analyze_probing_loop().

◆ OPR_LIT

#define OPR_LIT ( insn)    ((insn & 0x1fe000) >> 13)

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ OPR_RA

#define OPR_RA ( insn)    MEM_RA(insn)

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ OPR_RC

#define OPR_RC ( insn)    ((insn & 0x1f))

Definition at line 71 of file alpha-tdep.c.

Referenced by alpha_heuristic_analyze_probing_loop().

Function Documentation

◆ _initialize_alpha_tdep()

void _initialize_alpha_tdep ( )

◆ alpha_cannot_fetch_register()

static int alpha_cannot_fetch_register ( struct gdbarch * gdbarch,
int regno )
static

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

References alpha_register_name().

Referenced by alpha_gdbarch_init().

◆ alpha_cannot_store_register()

static int alpha_cannot_store_register ( struct gdbarch * gdbarch,
int regno )
static

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

References alpha_register_name(), and ALPHA_ZERO_REGNUM.

Referenced by alpha_gdbarch_init().

◆ alpha_convert_register_p()

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

Definition at line 228 of file alpha-tdep.c.

References ALPHA_FP0_REGNUM, and type::length().

Referenced by alpha_gdbarch_init().

◆ alpha_deal_with_atomic_sequence()

static std::vector< CORE_ADDR > alpha_deal_with_atomic_sequence ( struct gdbarch * gdbarch,
CORE_ADDR pc )
static

◆ alpha_dwarf2_init_abi()

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

◆ alpha_extract_return_value()

static void alpha_extract_return_value ( struct type * valtype,
struct regcache * regcache,
gdb_byte * valbuf )
static

◆ alpha_fill_fp_regs()

void alpha_fill_fp_regs ( const struct regcache * regcache,
int regno,
void * f0_f30,
void * fpcr )

◆ alpha_fill_int_regs()

void alpha_fill_int_regs ( const struct regcache * regcache,
int regno,
void * r0_r30,
void * pc,
void * unique )

◆ alpha_gdbarch_init()

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

Definition at line 1719 of file alpha-tdep.c.

References alpha_cannot_fetch_register(), alpha_cannot_store_register(), alpha_convert_register_p(), ALPHA_FP0_REGNUM, alpha_get_longjmp_target(), alpha_heuristic_frame_base, alpha_heuristic_frame_unwind, ALPHA_INSN_SIZE, ALPHA_NUM_REGS, ALPHA_PC_REGNUM, alpha_push_dummy_call(), alpha_register_name(), alpha_register_reggroup_p(), alpha_register_to_value(), alpha_register_type(), alpha_return_in_memory_always(), alpha_return_value(), alpha_sigtramp_frame_unwind, alpha_skip_prologue(), alpha_software_single_step(), ALPHA_SP_REGNUM, alpha_value_to_register(), arches, core_addr_lessthan(), alpha_gdbarch_tdep::dynamic_sigtramp_offset, find_solib_trampoline_target(), frame_base_set_default(), frame_unwind_append_unwinder(), gdbarch_alloc(), gdbarch_init_osabi(), gdbarch_list_lookup_by_info(), gdbarch::info(), alpha_gdbarch_tdep::jb_pc, alpha_gdbarch_tdep::return_in_memory, alpha_gdbarch_tdep::sc_fpregs_offset, alpha_gdbarch_tdep::sc_pc_offset, alpha_gdbarch_tdep::sc_regs_offset, set_gdbarch_breakpoint_kind_from_pc(), set_gdbarch_cannot_fetch_register(), set_gdbarch_cannot_step_breakpoint(), set_gdbarch_cannot_store_register(), set_gdbarch_convert_register_p(), set_gdbarch_decr_pc_after_break(), set_gdbarch_double_bit(), set_gdbarch_float_bit(), set_gdbarch_fp0_regnum(), set_gdbarch_get_longjmp_target(), set_gdbarch_inner_than(), set_gdbarch_int_bit(), set_gdbarch_long_bit(), set_gdbarch_long_double_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_reggroup_p(), set_gdbarch_register_to_value(), set_gdbarch_register_type(), set_gdbarch_return_value(), set_gdbarch_short_bit(), set_gdbarch_skip_prologue(), set_gdbarch_skip_trampoline_code(), set_gdbarch_software_single_step(), set_gdbarch_sp_regnum(), set_gdbarch_sw_breakpoint_from_kind(), set_gdbarch_value_to_register(), set_gdbarch_wchar_bit(), set_gdbarch_wchar_signed(), alpha_gdbarch_tdep::sigcontext_addr, and alpha_gdbarch_tdep::vm_min_address.

Referenced by _initialize_alpha_tdep().

◆ alpha_get_longjmp_target()

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

◆ alpha_heuristic_analyze_probing_loop()

static void alpha_heuristic_analyze_probing_loop ( struct gdbarch * gdbarch,
CORE_ADDR * pc,
int * frame_size )
static

◆ alpha_heuristic_frame_base_address()

static CORE_ADDR alpha_heuristic_frame_base_address ( frame_info_ptr this_frame,
void ** this_prologue_cache )
static

Definition at line 1440 of file alpha-tdep.c.

References alpha_heuristic_frame_unwind_cache().

◆ alpha_heuristic_frame_prev_register()

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

◆ alpha_heuristic_frame_this_id()

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

Definition at line 1400 of file alpha-tdep.c.

References alpha_heuristic_frame_unwind_cache(), and frame_id_build().

◆ alpha_heuristic_frame_unwind_cache()

static struct alpha_heuristic_unwind_cache * alpha_heuristic_frame_unwind_cache ( frame_info_ptr this_frame,
void ** this_prologue_cache,
CORE_ADDR start_pc )
static

◆ alpha_heuristic_proc_start()

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

◆ alpha_lds()

static void alpha_lds ( struct gdbarch * gdbarch,
void * out,
const void * in )
static

◆ alpha_next_pc()

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

◆ alpha_push_dummy_call()

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

◆ alpha_read_insn()

unsigned int alpha_read_insn ( struct gdbarch * gdbarch,
CORE_ADDR pc )

◆ alpha_register_name()

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

◆ alpha_register_reggroup_p()

static int alpha_register_reggroup_p ( struct gdbarch * gdbarch,
int regnum,
const struct reggroup * group )
static

◆ alpha_register_to_value()

static int alpha_register_to_value ( frame_info_ptr frame,
int regnum,
struct type * valtype,
gdb_byte * out,
int * optimizedp,
int * unavailablep )
static

◆ alpha_register_type()

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

◆ alpha_return_in_memory_always()

static int alpha_return_in_memory_always ( struct type * type)
static

Definition at line 635 of file alpha-tdep.c.

Referenced by alpha_gdbarch_init().

◆ alpha_return_value()

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

◆ alpha_sigtramp_frame_prev_register()

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

◆ alpha_sigtramp_frame_sniffer()

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

◆ alpha_sigtramp_frame_this_id()

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

◆ alpha_sigtramp_frame_unwind_cache()

static struct alpha_sigtramp_unwind_cache * alpha_sigtramp_frame_unwind_cache ( frame_info_ptr this_frame,
void ** this_prologue_cache )
static

◆ alpha_sigtramp_register_address()

static CORE_ADDR alpha_sigtramp_register_address ( struct gdbarch * gdbarch,
CORE_ADDR sigcontext_addr,
int regnum )
static

◆ alpha_skip_prologue()

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

◆ alpha_software_single_step()

std::vector< CORE_ADDR > alpha_software_single_step ( struct regcache * regcache)

◆ alpha_store_return_value()

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

◆ alpha_sts()

static void alpha_sts ( struct gdbarch * gdbarch,
void * out,
const void * in )
static

◆ alpha_supply_fp_regs()

void alpha_supply_fp_regs ( struct regcache * regcache,
int regno,
const void * f0_f30,
const void * fpcr )

◆ alpha_supply_int_regs()

void alpha_supply_int_regs ( struct regcache * regcache,
int regno,
const void * r0_r30,
const void * pc,
const void * unique )

◆ alpha_value_to_register()

static void alpha_value_to_register ( frame_info_ptr frame,
int regnum,
struct type * valtype,
const gdb_byte * in )
static

◆ BP_MANIPULATION()

typedef BP_MANIPULATION ( alpha_break_insn )

◆ fp_register_sign_bit()

static int fp_register_sign_bit ( LONGEST reg)
static

Definition at line 1561 of file alpha-tdep.c.

Referenced by alpha_next_pc().

◆ fp_register_zero_p()

static int fp_register_zero_p ( LONGEST reg)
static

Definition at line 1549 of file alpha-tdep.c.

Referenced by alpha_next_pc().

◆ reinit_frame_cache_sfunc()

static void reinit_frame_cache_sfunc ( const char * args,
int from_tty,
struct cmd_list_element * c )
static

Definition at line 1460 of file alpha-tdep.c.

References reinit_frame_cache().

Referenced by _initialize_alpha_tdep().

Variable Documentation

◆ alpha_break_insn

constexpr gdb_byte alpha_break_insn[] = { 0x80, 0, 0, 0 }
constexpr

Definition at line 641 of file alpha-tdep.c.

◆ alpha_heuristic_frame_base

const struct frame_base alpha_heuristic_frame_base
static
Initial value:
= {
}
static CORE_ADDR alpha_heuristic_frame_base_address(frame_info_ptr this_frame, void **this_prologue_cache)
static const struct frame_unwind alpha_heuristic_frame_unwind

Definition at line 1449 of file alpha-tdep.c.

Referenced by alpha_gdbarch_init().

◆ alpha_heuristic_frame_unwind

const struct frame_unwind alpha_heuristic_frame_unwind
static
Initial value:
=
{
"alpha prologue",
NULL,
}
static struct value * alpha_heuristic_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
static void alpha_heuristic_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
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 1428 of file alpha-tdep.c.

Referenced by alpha_gdbarch_init().

◆ alpha_sigtramp_frame_unwind

const struct frame_unwind alpha_sigtramp_frame_unwind
static
Initial value:
=
{
"alpha sigtramp",
NULL,
}
static int alpha_sigtramp_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
Definition alpha-tdep.c:980
static struct value * alpha_sigtramp_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
Definition alpha-tdep.c:956
static void alpha_sigtramp_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
Definition alpha-tdep.c:914
@ SIGTRAMP_FRAME
Definition frame.h:198

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

Referenced by alpha_gdbarch_init().

◆ bne_opcode

const int bne_opcode = 0x3d
static

Definition at line 65 of file alpha-tdep.c.

Referenced by alpha_heuristic_analyze_probing_loop().

◆ br_opcode

const int br_opcode = 0x30
static

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

Referenced by alpha_deal_with_atomic_sequence().

◆ heuristic_fence_post

int heuristic_fence_post = 0
static

Definition at line 1025 of file alpha-tdep.c.

Referenced by _initialize_alpha_tdep(), and alpha_heuristic_proc_start().

◆ lda_opcode

const int lda_opcode = 0x08
static

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ ldl_l_opcode

const int ldl_l_opcode = 0x2a
static

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

Referenced by alpha_deal_with_atomic_sequence().

◆ ldq_l_opcode

const int ldq_l_opcode = 0x2b
static

Definition at line 751 of file alpha-tdep.c.

Referenced by alpha_deal_with_atomic_sequence().

◆ stl_c_opcode

const int stl_c_opcode = 0x2e
static

Definition at line 752 of file alpha-tdep.c.

Referenced by alpha_deal_with_atomic_sequence().

◆ stq_c_opcode

const int stq_c_opcode = 0x2f
static

Definition at line 753 of file alpha-tdep.c.

Referenced by alpha_deal_with_atomic_sequence().

◆ stq_opcode

const int stq_opcode = 0x2d
static

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

Referenced by alpha_heuristic_analyze_probing_loop().

◆ subq_function

const int subq_function = 0x29
static

Definition at line 75 of file alpha-tdep.c.

Referenced by alpha_heuristic_analyze_probing_loop().

◆ subq_opcode

const int subq_opcode = 0x10
static

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

Referenced by alpha_heuristic_analyze_probing_loop().