GDB (xrefs)
|
#include "defs.h"
#include "frame.h"
#include "gdbcore.h"
#include "inferior.h"
#include "language.h"
#include "regcache.h"
#include "target-float.h"
#include "value.h"
#include "i386-tdep.h"
#include "i387-tdep.h"
#include "gdbsupport/x86-xstate.h"
Go to the source code of this file.
Macros | |
#define | FSAVE_ADDR(tdep, fsave, regnum) (fsave + fsave_offset[regnum - I387_ST0_REGNUM (tdep)]) |
#define | FXSAVE_ADDR(tdep, fxsave, regnum) (fxsave + fxsave_offset[regnum - I387_ST0_REGNUM (tdep)]) |
#define | FXSAVE_MXCSR_ADDR(fxsave) (fxsave + 24) |
#define | XSAVE_XSTATE_BV_ADDR(xsave) (xsave + 512) |
#define | XSAVE_AVXH_ADDR(tdep, xsave, regnum) |
#define | XSAVE_YMM_AVX512_ADDR(tdep, xsave, regnum) |
#define | XSAVE_XMM_AVX512_ADDR(tdep, xsave, regnum) |
#define | XSAVE_BNDREGS_ADDR(tdep, xsave, regnum) |
#define | XSAVE_BNDCFG_ADDR(tdep, xsave, regnum) |
#define | XSAVE_AVX512_K_ADDR(tdep, xsave, regnum) |
#define | XSAVE_AVX512_ZMM0_H_ADDR(tdep, xsave, regnum) |
#define | XSAVE_AVX512_ZMM16_H_ADDR(tdep, xsave, regnum) |
#define | XSAVE_PKEYS_ADDR(tdep, xsave, regnum) |
Functions | |
static void | print_i387_value (struct gdbarch *gdbarch, const gdb_byte *raw, struct ui_file *file) |
static void | print_i387_ext (struct gdbarch *gdbarch, const gdb_byte *raw, struct ui_file *file) |
static void | print_i387_status_word (int status_p, unsigned int status, struct ui_file *file) |
static void | print_i387_control_word (int control_p, unsigned int control, struct ui_file *file) |
void | i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, frame_info_ptr frame, const char *args) |
int | i387_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type) |
int | i387_register_to_value (frame_info_ptr frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep) |
void | i387_value_to_register (frame_info_ptr frame, int regnum, struct type *type, const gdb_byte *from) |
void | i387_supply_fsave (struct regcache *regcache, int regnum, const void *fsave) |
void | i387_collect_fsave (const struct regcache *regcache, int regnum, void *fsave) |
static int | i387_tag (const gdb_byte *raw) |
void | i387_supply_fxsave (struct regcache *regcache, int regnum, const void *fxsave) |
void | i387_collect_fxsave (const struct regcache *regcache, int regnum, void *fxsave) |
bool | i387_guess_xsave_layout (uint64_t xcr0, size_t xsave_size, x86_xsave_layout &layout) |
x86_xsave_layout | i387_fallback_xsave_layout (uint64_t xcr0) |
ULONGEST | i387_xsave_get_clear_bv (struct gdbarch *gdbarch, const void *xsave) |
void | i387_supply_xsave (struct regcache *regcache, int regnum, const void *xsave) |
void | i387_collect_xsave (const struct regcache *regcache, int regnum, void *xsave, int gcore) |
void | i387_return_value (struct gdbarch *gdbarch, struct regcache *regcache) |
void | i387_reset_bnd_regs (struct gdbarch *gdbarch, struct regcache *regcache) |
Variables | |
static int | fsave_offset [] |
static int | fxsave_offset [] |
static int | xsave_avxh_offset [] |
static int | xsave_ymm_avx512_offset [] |
static int | xsave_xmm_avx512_offset [] |
static int | xsave_bndregs_offset [] |
static int | xsave_bndcfg_offset [] |
static int | xsave_avx512_k_offset [] |
static int | xsave_avx512_zmm0_h_offset [] |
static int | xsave_avx512_zmm16_h_offset [] |
static int | xsave_pkeys_offset [] |
#define FSAVE_ADDR | ( | tdep, | |
fsave, | |||
regnum ) (fsave + fsave_offset[regnum - I387_ST0_REGNUM (tdep)]) |
Definition at line 431 of file i387-tdep.c.
Referenced by i387_collect_fsave(), and i387_supply_fsave().
#define FXSAVE_ADDR | ( | tdep, | |
fxsave, | |||
regnum ) (fxsave + fxsave_offset[regnum - I387_ST0_REGNUM (tdep)]) |
Definition at line 571 of file i387-tdep.c.
Referenced by i387_collect_fxsave(), i387_collect_xsave(), i387_supply_fxsave(), and i387_supply_xsave().
#define FXSAVE_MXCSR_ADDR | ( | fxsave | ) | (fxsave + 24) |
Definition at line 579 of file i387-tdep.c.
Referenced by i387_collect_fxsave(), i387_collect_xsave(), i387_supply_fxsave(), and i387_supply_xsave().
#define XSAVE_AVX512_K_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 859 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_AVX512_ZMM0_H_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 888 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_AVX512_ZMM16_H_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 916 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_AVXH_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 759 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_BNDCFG_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 839 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_BNDREGS_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 830 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_PKEYS_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 930 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_XMM_AVX512_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 815 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
#define XSAVE_XSTATE_BV_ADDR | ( | xsave | ) | (xsave + 512) |
Definition at line 733 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_xsave_get_clear_bv().
#define XSAVE_YMM_AVX512_ADDR | ( | tdep, | |
xsave, | |||
regnum ) |
Definition at line 787 of file i387-tdep.c.
Referenced by i387_collect_xsave(), and i387_supply_xsave().
void i387_collect_fsave | ( | const struct regcache * | regcache, |
int | regnum, | ||
void * | fsave ) |
Definition at line 495 of file i387-tdep.c.
References reg_buffer::arch(), FSAVE_ADDR, I386_ST0_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_ST0_REGNUM, I387_XMM0_REGNUM, reg_buffer::raw_collect(), regnum, and i386_gdbarch_tdep::st0_regnum.
Referenced by fill_fpregset(), i386_collect_fpregset(), i386bsd_store_inferior_registers(), i386nto_regset_fill(), store_fpregs(), store_register(), go32_nat_target::store_registers(), and i386_fbsd_nat_target::store_registers().
void i387_collect_fxsave | ( | const struct regcache * | regcache, |
int | regnum, | ||
void * | fxsave ) |
Definition at line 673 of file i387-tdep.c.
References reg_buffer::arch(), FXSAVE_ADDR, FXSAVE_MXCSR_ADDR, I386_ST0_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_FTAG_REGNUM, I387_MXCSR_REGNUM, I387_ST0_REGNUM, I387_XMM0_REGNUM, i386_gdbarch_tdep::num_xmm_regs, reg_buffer::raw_collect(), regnum, and i386_gdbarch_tdep::st0_regnum.
Referenced by amd64_collect_fxsave(), i386_collect_fpregset(), i386bsd_store_inferior_registers(), i386nto_regset_fill(), i386_darwin_nat_target::store_registers(), and i386_fbsd_nat_target::store_registers().
void i387_collect_xsave | ( | const struct regcache * | regcache, |
int | regnum, | ||
void * | xsave, | ||
int | gcore ) |
Definition at line 1508 of file i387-tdep.c.
References all, reg_buffer::arch(), extract_unsigned_integer(), FXSAVE_ADDR, FXSAVE_MXCSR_ADDR, gdbarch_byte_order(), I386_MAX_REGISTER_SIZE, I386_ST0_REGNUM, I387_BND0R_REGNUM, I387_BNDCFGU_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_FTAG_REGNUM, I387_K0_REGNUM, I387_KEND_REGNUM, I387_MPXEND_REGNUM, I387_MXCSR_REGNUM, I387_PKEYSEND_REGNUM, I387_PKRU_REGNUM, I387_ST0_REGNUM, I387_XMM0_REGNUM, I387_XMM16_REGNUM, I387_XMM_AVX512_END_REGNUM, I387_YMM0H_REGNUM, I387_YMM16H_REGNUM, I387_YMMENDH_REGNUM, I387_YMMH_AVX512_END_REGNUM, I387_ZMM0H_REGNUM, I387_ZMM16H_REGNUM, I387_ZMMENDH_REGNUM, i386_gdbarch_tdep::num_xmm_regs, i386_gdbarch_tdep::num_zmm_regs, reg_buffer::raw_collect(), regcache_register_size(), regnum, i386_gdbarch_tdep::st0_regnum, store_unsigned_integer(), i386_gdbarch_tdep::xcr0, XSAVE_AVX512_K_ADDR, XSAVE_AVX512_ZMM0_H_ADDR, XSAVE_AVX512_ZMM16_H_ADDR, XSAVE_AVXH_ADDR, XSAVE_BNDCFG_ADDR, XSAVE_BNDREGS_ADDR, i386_gdbarch_tdep::xsave_layout, XSAVE_PKEYS_ADDR, i386_gdbarch_tdep::xsave_xcr0_offset, XSAVE_XMM_AVX512_ADDR, XSAVE_XSTATE_BV_ADDR, and XSAVE_YMM_AVX512_ADDR.
Referenced by amd64_collect_xsave(), i386_linux_collect_xstateregset(), i386fbsd_collect_xstateregset(), i386_fbsd_nat_target::store_registers(), and store_xstateregs().
Definition at line 327 of file i387-tdep.c.
References type::code(), i386_fp_regnum_p(), i387_ext_type(), and regnum.
Referenced by amd64_init_abi(), and i386_convert_register_p().
x86_xsave_layout i387_fallback_xsave_layout | ( | uint64_t | xcr0 | ) |
Definition at line 993 of file i387-tdep.c.
Referenced by i386_gdbarch_init().
bool i387_guess_xsave_layout | ( | uint64_t | xcr0, |
size_t | xsave_size, | ||
x86_xsave_layout & | layout ) |
Definition at line 938 of file i387-tdep.c.
Referenced by i386_fbsd_core_read_xsave_info(), and i386_linux_core_read_xsave_info().
void i387_print_float_info | ( | struct gdbarch * | gdbarch, |
struct ui_file * | file, | ||
frame_info_ptr | frame, | ||
const char * | args ) |
Definition at line 204 of file i387-tdep.c.
References value::contents(), value::entirely_available(), gdb_printf(), gdb_puts(), get_frame_arch(), get_frame_register_value(), I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FISEG_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_FOSEG_REGNUM, I387_FSTAT_REGNUM, I387_FTAG_REGNUM, I387_ST0_REGNUM, print_i387_control_word(), print_i387_ext(), print_i387_status_word(), read_frame_register_unsigned(), and regnum.
Referenced by i386_gdbarch_init().
int i387_register_to_value | ( | frame_info_ptr | frame, |
int | regnum, | ||
struct type * | type, | ||
gdb_byte * | to, | ||
int * | optimizedp, | ||
int * | unavailablep ) |
Definition at line 348 of file i387-tdep.c.
References type::code(), get_frame_arch(), get_frame_register_bytes(), i386_fp_regnum_p(), I386_MAX_REGISTER_SIZE, i387_ext_type(), register_size(), regnum, and target_float_convert().
Referenced by amd64_init_abi(), and i386_register_to_value().
Definition at line 2147 of file i387-tdep.c.
References I387_BND0R_REGNUM, I387_NUM_BND_REGS, and regcache::raw_write().
Referenced by amd64_push_dummy_call(), and i386_thiscall_push_dummy_call().
Definition at line 2124 of file i387-tdep.c.
References I387_FSTAT_REGNUM, I387_FTAG_REGNUM, regcache_raw_read_unsigned(), and regcache_raw_write_unsigned().
Referenced by amd64_return_value().
void i387_supply_fsave | ( | struct regcache * | regcache, |
int | regnum, | ||
const void * | fsave ) |
Definition at line 440 of file i387-tdep.c.
References reg_buffer::arch(), FSAVE_ADDR, gdbarch_byte_order(), I386_ST0_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_MXCSR_REGNUM, I387_ST0_REGNUM, I387_XMM0_REGNUM, reg_buffer::raw_supply(), regnum, i386_gdbarch_tdep::st0_regnum, and store_unsigned_integer().
Referenced by fetch_fpregs(), fetch_register(), go32_nat_target::fetch_registers(), i386_fbsd_nat_target::fetch_registers(), i386_supply_fpregset(), i386bsd_fetch_inferior_registers(), i386nto_supply_fpregset(), and supply_fpregset().
void i387_supply_fxsave | ( | struct regcache * | regcache, |
int | regnum, | ||
const void * | fxsave ) |
Definition at line 589 of file i387-tdep.c.
References reg_buffer::arch(), FXSAVE_ADDR, FXSAVE_MXCSR_ADDR, I386_ST0_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_FSTAT_REGNUM, I387_FTAG_REGNUM, I387_MXCSR_REGNUM, I387_ST0_REGNUM, i387_tag(), I387_XMM0_REGNUM, i386_gdbarch_tdep::num_xmm_regs, reg_buffer::raw_supply(), regnum, and i386_gdbarch_tdep::st0_regnum.
Referenced by amd64_supply_fxsave(), i386_darwin_nat_target::fetch_registers(), i386_fbsd_nat_target::fetch_registers(), i386_supply_fpregset(), i386bsd_fetch_inferior_registers(), and i386nto_supply_fpregset().
void i387_supply_xsave | ( | struct regcache * | regcache, |
int | regnum, | ||
const void * | xsave ) |
Definition at line 1061 of file i387-tdep.c.
References all, reg_buffer::arch(), FXSAVE_ADDR, FXSAVE_MXCSR_ADDR, gdbarch_byte_order(), I386_MAX_REGISTER_SIZE, I386_ST0_REGNUM, I387_BND0R_REGNUM, I387_BNDCFGU_REGNUM, I387_FCTRL_REGNUM, I387_FIOFF_REGNUM, I387_FOOFF_REGNUM, I387_FOP_REGNUM, I387_FSTAT_REGNUM, I387_FTAG_REGNUM, I387_K0_REGNUM, I387_KEND_REGNUM, I387_MPXEND_REGNUM, I387_MXCSR_REGNUM, I387_PKEYSEND_REGNUM, I387_PKRU_REGNUM, I387_ST0_REGNUM, i387_tag(), I387_XMM0_REGNUM, I387_XMM16_REGNUM, I387_XMM_AVX512_END_REGNUM, i387_xsave_get_clear_bv(), I387_YMM0H_REGNUM, I387_YMM16H_REGNUM, I387_YMMENDH_REGNUM, I387_YMMH_AVX512_END_REGNUM, I387_ZMM0H_REGNUM, I387_ZMM16H_REGNUM, I387_ZMMENDH_REGNUM, i386_gdbarch_tdep::num_xmm_regs, i386_gdbarch_tdep::num_zmm_regs, reg_buffer::raw_supply(), regnum, i386_gdbarch_tdep::st0_regnum, store_unsigned_integer(), i386_gdbarch_tdep::xcr0, XSAVE_AVX512_K_ADDR, XSAVE_AVX512_ZMM0_H_ADDR, XSAVE_AVX512_ZMM16_H_ADDR, XSAVE_AVXH_ADDR, XSAVE_BNDCFG_ADDR, XSAVE_BNDREGS_ADDR, XSAVE_PKEYS_ADDR, XSAVE_XMM_AVX512_ADDR, and XSAVE_YMM_AVX512_ADDR.
Referenced by amd64_supply_xsave(), i386_fbsd_nat_target::fetch_registers(), fetch_xstateregs(), i386_linux_supply_xstateregset(), and i386fbsd_supply_xstateregset().
|
static |
Definition at line 2076 of file i387-tdep.c.
Referenced by i387_supply_fxsave(), and i387_supply_xsave().
void i387_value_to_register | ( | frame_info_ptr | frame, |
int | regnum, | ||
struct type * | type, | ||
const gdb_byte * | from ) |
Definition at line 383 of file i387-tdep.c.
References type::code(), get_frame_arch(), i386_fp_regnum_p(), I386_MAX_REGISTER_SIZE, i387_ext_type(), put_frame_register(), regnum, and target_float_convert().
Referenced by amd64_init_abi(), and i386_value_to_register().
ULONGEST i387_xsave_get_clear_bv | ( | struct gdbarch * | gdbarch, |
const void * | xsave ) |
Definition at line 1042 of file i387-tdep.c.
References extract_unsigned_integer(), gdbarch_byte_order(), i386_gdbarch_tdep::xcr0, and XSAVE_XSTATE_BV_ADDR.
Referenced by amd64_supply_xsave(), and i387_supply_xsave().
|
static |
Definition at line 143 of file i387-tdep.c.
References gdb_printf(), and gdb_puts().
Referenced by i387_print_float_info().
|
static |
Definition at line 51 of file i387-tdep.c.
References gdb_printf(), gdb_puts(), and print_i387_value().
Referenced by i387_print_float_info().
|
static |
Definition at line 105 of file i387-tdep.c.
References gdb_printf(), gdb_puts(), and status.
Referenced by i387_print_float_info().
|
static |
Definition at line 36 of file i387-tdep.c.
References gdb_printf(), i387_ext_type(), and target_float_to_string().
Referenced by print_i387_ext().
|
static |
Definition at line 411 of file i387-tdep.c.
|
static |
Definition at line 535 of file i387-tdep.c.
|
static |
Definition at line 847 of file i387-tdep.c.
|
static |
Definition at line 868 of file i387-tdep.c.
|
static |
Definition at line 896 of file i387-tdep.c.
|
static |
Definition at line 739 of file i387-tdep.c.
|
static |
Definition at line 834 of file i387-tdep.c.
|
static |
Definition at line 823 of file i387-tdep.c.
|
static |
Definition at line 924 of file i387-tdep.c.
|
static |
Definition at line 795 of file i387-tdep.c.
|
static |
Definition at line 767 of file i387-tdep.c.