GDB (xrefs)
Loading...
Searching...
No Matches
Functions | Variables
loongarch-tdep.c File Reference
#include "defs.h"
#include "arch-utils.h"
#include "dwarf2/frame.h"
#include "elf-bfd.h"
#include "frame-unwind.h"
#include "gdbcore.h"
#include "loongarch-tdep.h"
#include "reggroups.h"
#include "target.h"
#include "target-descriptions.h"
#include "trad-frame.h"
#include "user-regs.h"

Go to the source code of this file.

Functions

static insn_t loongarch_fetch_instruction (CORE_ADDR pc)
 
static bool loongarch_insn_is_uncond_branch (insn_t insn)
 
static bool loongarch_insn_is_cond_branch (insn_t insn)
 
static bool loongarch_insn_is_branch (insn_t insn)
 
static bool loongarch_insn_is_ll (insn_t insn)
 
static bool loongarch_insn_is_sc (insn_t insn)
 
static CORE_ADDR loongarch_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR limit_pc, frame_info_ptr this_frame, struct trad_frame_cache *this_cache)
 
static CORE_ADDR loongarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
 
static CORE_ADDR loongarch_next_pc (struct regcache *regcache, CORE_ADDR cur_pc)
 
static std::vector< CORE_ADDR > loongarch_deal_with_atomic_sequence (struct regcache *regcache, CORE_ADDR cur_pc)
 
static std::vector< CORE_ADDR > loongarch_software_single_step (struct regcache *regcache)
 
static struct valuevalue_of_loongarch_user_reg (frame_info_ptr frame, const void *baton)
 
static CORE_ADDR loongarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
 
static struct trad_frame_cacheloongarch_frame_cache (frame_info_ptr this_frame, void **this_cache)
 
static void loongarch_frame_this_id (frame_info_ptr this_frame, void **prologue_cache, struct frame_id *this_id)
 
static struct valueloongarch_frame_prev_register (frame_info_ptr this_frame, void **prologue_cache, int regnum)
 
static void pass_in_gar (struct regcache *regcache, unsigned int gar, const gdb_byte *val)
 
static void pass_in_far (struct regcache *regcache, unsigned int far, const gdb_byte *val)
 
static void pass_on_stack (struct regcache *regcache, const gdb_byte *val, size_t len, int align, gdb_byte **addr)
 
static void compute_struct_member (struct type *type, unsigned int *fixed_point_members, unsigned int *floating_point_members, bool *first_member_is_fixed_point)
 
static CORE_ADDR loongarch_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 loongarch_xfer_reg (struct regcache *regcache, int regnum, int len, gdb_byte *readbuf, const gdb_byte *writebuf, size_t offset)
 
static enum return_value_convention loongarch_return_value (struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
 
static int loongarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int regnum)
 
typedef BP_MANIPULATION (loongarch_default_breakpoint)
 
static const struct target_descloongarch_find_default_target_description (const struct gdbarch_info info)
 
static int loongarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, const struct reggroup *group)
 
static struct gdbarchloongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 
void _initialize_loongarch_tdep ()
 

Variables

static const struct frame_unwind loongarch_frame_unwind
 
static constexpr gdb_byte loongarch_default_breakpoint [] = {0x05, 0x00, 0x2a, 0x00}
 

Function Documentation

◆ _initialize_loongarch_tdep()

void _initialize_loongarch_tdep ( )

Definition at line 1659 of file loongarch-tdep.c.

References gdbarch_register(), and loongarch_gdbarch_init().

◆ BP_MANIPULATION()

typedef BP_MANIPULATION ( loongarch_default_breakpoint )

◆ compute_struct_member()

static void compute_struct_member ( struct type * type,
unsigned int * fixed_point_members,
unsigned int * floating_point_members,
bool * first_member_is_fixed_point )
static

◆ loongarch_deal_with_atomic_sequence()

static std::vector< CORE_ADDR > loongarch_deal_with_atomic_sequence ( struct regcache * regcache,
CORE_ADDR cur_pc )
static

◆ loongarch_dwarf2_reg_to_regnum()

static int loongarch_dwarf2_reg_to_regnum ( struct gdbarch * gdbarch,
int regnum )
static

Definition at line 1373 of file loongarch-tdep.c.

References LOONGARCH_FIRST_FP_REGNUM, and regnum.

Referenced by loongarch_gdbarch_init().

◆ loongarch_fetch_instruction()

static insn_t loongarch_fetch_instruction ( CORE_ADDR pc)
static

◆ loongarch_find_default_target_description()

static const struct target_desc * loongarch_find_default_target_description ( const struct gdbarch_info info)
static

◆ loongarch_frame_align()

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

Definition at line 401 of file loongarch-tdep.c.

Referenced by loongarch_gdbarch_init().

◆ loongarch_frame_cache()

static struct trad_frame_cache * loongarch_frame_cache ( frame_info_ptr this_frame,
void ** this_cache )
static

◆ loongarch_frame_prev_register()

static struct value * loongarch_frame_prev_register ( frame_info_ptr this_frame,
void ** prologue_cache,
int regnum )
static

◆ loongarch_frame_this_id()

static void loongarch_frame_this_id ( frame_info_ptr this_frame,
void ** prologue_cache,
struct frame_id * this_id )
static

◆ loongarch_gdbarch_init()

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

Definition at line 1489 of file loongarch-tdep.c.

References loongarch_gdbarch_tdep::abi_features, arches, core_addr_lessthan(), DOUBLE_FLOAT, dwarf2_append_unwinders(), floatformats_ieee_quad, loongarch_gdbarch_features::fputype, frame_unwind_append_unwinder(), gdbarch_alloc(), gdbarch_init_osabi(), gdbarch_list_lookup_by_info(), registry< T >::get(), loongarch_dwarf2_reg_to_regnum(), loongarch_find_default_target_description(), LOONGARCH_FIRST_FP_REGNUM, loongarch_frame_align(), loongarch_frame_unwind, LOONGARCH_LINUX_NUM_FCC, LOONGARCH_LINUX_NUM_FPREGSET, LOONGARCH_PC_REGNUM, loongarch_push_dummy_call(), loongarch_register_reggroup_p(), loongarch_return_value(), loongarch_skip_prologue(), loongarch_software_single_step(), LOONGARCH_SP_REGNUM, regnum, set_gdbarch_breakpoint_kind_from_pc(), set_gdbarch_char_signed(), set_gdbarch_double_bit(), set_gdbarch_dwarf2_reg_to_regnum(), set_gdbarch_float_bit(), set_gdbarch_frame_align(), set_gdbarch_inner_than(), set_gdbarch_int_bit(), set_gdbarch_long_bit(), set_gdbarch_long_double_bit(), set_gdbarch_long_double_format(), 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_reggroup_p(), set_gdbarch_return_value(), set_gdbarch_short_bit(), set_gdbarch_skip_prologue(), set_gdbarch_software_single_step(), set_gdbarch_sp_regnum(), set_gdbarch_sw_breakpoint_from_kind(), tdesc_data, tdesc_data_alloc(), tdesc_find_feature(), tdesc_has_registers(), tdesc_numbered_register(), tdesc_register_bitsize(), tdesc_use_registers(), user_reg_add(), value_of_loongarch_user_reg(), and loongarch_gdbarch_features::xlen.

Referenced by _initialize_loongarch_tdep().

◆ loongarch_insn_is_branch()

static bool loongarch_insn_is_branch ( insn_t insn)
static

◆ loongarch_insn_is_cond_branch()

static bool loongarch_insn_is_cond_branch ( insn_t insn)
static

◆ loongarch_insn_is_ll()

static bool loongarch_insn_is_ll ( insn_t insn)
static

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

Referenced by loongarch_deal_with_atomic_sequence().

◆ loongarch_insn_is_sc()

static bool loongarch_insn_is_sc ( insn_t insn)
static

Definition at line 103 of file loongarch-tdep.c.

Referenced by loongarch_deal_with_atomic_sequence().

◆ loongarch_insn_is_uncond_branch()

static bool loongarch_insn_is_uncond_branch ( insn_t insn)
static

◆ loongarch_next_pc()

static CORE_ADDR loongarch_next_pc ( struct regcache * regcache,
CORE_ADDR cur_pc )
static

◆ loongarch_push_dummy_call()

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

◆ loongarch_register_reggroup_p()

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

◆ loongarch_return_value()

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

◆ loongarch_scan_prologue()

static CORE_ADDR loongarch_scan_prologue ( struct gdbarch * gdbarch,
CORE_ADDR start_pc,
CORE_ADDR limit_pc,
frame_info_ptr this_frame,
struct trad_frame_cache * this_cache )
static

◆ loongarch_skip_prologue()

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

◆ loongarch_software_single_step()

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

◆ loongarch_xfer_reg()

static void loongarch_xfer_reg ( struct regcache * regcache,
int regnum,
int len,
gdb_byte * readbuf,
const gdb_byte * writebuf,
size_t offset )
static

◆ pass_in_far()

static void pass_in_far ( struct regcache * regcache,
unsigned int far,
const gdb_byte * val )
static

◆ pass_in_gar()

static void pass_in_gar ( struct regcache * regcache,
unsigned int gar,
const gdb_byte * val )
static

◆ pass_on_stack()

static void pass_on_stack ( struct regcache * regcache,
const gdb_byte * val,
size_t len,
int align,
gdb_byte ** addr )
static

Definition at line 499 of file loongarch-tdep.c.

Referenced by loongarch_push_dummy_call().

◆ value_of_loongarch_user_reg()

static struct value * value_of_loongarch_user_reg ( frame_info_ptr frame,
const void * baton )
static

Definition at line 393 of file loongarch-tdep.c.

References value_of_register().

Referenced by loongarch_gdbarch_init().

Variable Documentation

◆ loongarch_default_breakpoint

constexpr gdb_byte loongarch_default_breakpoint[] = {0x05, 0x00, 0x2a, 0x00}
staticconstexpr

Definition at line 1383 of file loongarch-tdep.c.

◆ loongarch_frame_unwind

const struct frame_unwind loongarch_frame_unwind
static
Initial value:
= {
"loongarch prologue",
nullptr,
nullptr,
nullptr,
}
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 loongarch_frame_this_id(frame_info_ptr this_frame, void **prologue_cache, struct frame_id *this_id)
static struct value * loongarch_frame_prev_register(frame_info_ptr this_frame, void **prologue_cache, int regnum)

Definition at line 452 of file loongarch-tdep.c.

Referenced by loongarch_gdbarch_init().