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 "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 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 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 1593 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 1360 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 392 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 1439 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(), gdbarch::info(), 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_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_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(), 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 91 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 102 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_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 490 of file loongarch-tdep.c.

Referenced by loongarch_push_dummy_call().

Variable Documentation

◆ loongarch_default_breakpoint

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

Definition at line 1370 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:179
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 443 of file loongarch-tdep.c.

Referenced by loongarch_gdbarch_init().