26#include "elf/common.h"
61#define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml"
62#define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml"
187 int regnum,
const void *regs,
size_t len)
190 enum register_status ret;
194 if (ret != REG_VALID || (tdw >> 56) != 1)
276 cb (
".reg", gregset_size, gregset_size, &
s390_gregset, NULL, cb_data);
282 "s390 GPR upper halves", cb_data);
285 cb (
".reg-s390-last-break", 8, 8,
288 "s390 last-break address", cb_data);
292 "s390 system-call", cb_data);
307 "s390 vector registers 0-15 lower half", cb_data);
309 "s390 vector registers 16-31", cb_data);
319 "s390 guarded-storage registers", cb_data);
324 "s390 guarded-storage broadcast control", cb_data);
334 asection *section = bfd_get_section_by_name (abfd,
".reg");
337 bool high_gprs, v1, v2, te, vx, gs;
342 high_gprs = (bfd_get_section_by_name (abfd,
".reg-s390-high-gprs")
344 v1 = (bfd_get_section_by_name (abfd,
".reg-s390-last-break") != NULL);
345 v2 = (bfd_get_section_by_name (abfd,
".reg-s390-system-call") != NULL);
350 switch (bfd_section_size (section))
391 void **this_prologue_cache)
398 ULONGEST this_sp, prev_sp;
399 CORE_ADDR next_ra, next_cfa, sigreg_ptr, sigreg_high_off;
402 if (*this_prologue_cache)
406 *this_prologue_cache = info;
411 next_cfa = this_sp + 16*word_size + 32;
417 if (next_ra == next_cfa)
419 sigreg_ptr = next_cfa + 8 + 128 + align_up (5*word_size, 8);
431 word_size, byte_order);
448 sigreg_ptr += word_size;
450 sigreg_ptr += word_size;
453 for (i = 0; i < 16; i++)
456 sigreg_ptr += word_size;
460 for (i = 0; i < 16; i++)
471 for (i = 0; i < 16; i++)
478 sigreg_ptr += sigreg_high_off;
480 for (i = 0; i < 16; i++)
489 word_size, byte_order);
492 info->frame_base = prev_sp + 16*word_size + 32;
501 void **this_prologue_cache,
513 void **this_prologue_cache,
int regnum)
525 void **this_prologue_cache)
528 bfd_byte sigreturn[2];
533 if (sigreturn[0] !=
op_svc)
536 if (sigreturn[1] != 119
537 && sigreturn[1] != 173 )
546 "s390 linux sigtramp",
568 ULONGEST svc_number = -1;
601 for (i = 0; i < 16; i++)
814 if (syscall_native == 0)
822 _(
"Process record and replay target doesn't "
823 "support syscall number %s\n"),
824 plongest (syscall_native));
857 enum gdb_signal signal)
863 160 + 8 + 128 + 1024 : 96 + 8 + 128 + 1000);
867 for (i = 0; i < 16; i++)
883 sp -= sizeof_rt_sigframe;
gdb::optional< gdb::byte_vector > target_read_auxv_raw(target_ops *ops)
enum register_status get_register_status(int regnum) const override
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
enum unwind_stop_reason default_frame_unwind_stop_reason(frame_info_ptr this_frame, void **this_cache)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
ULONGEST get_frame_register_unsigned(frame_info_ptr frame, int regnum)
CORE_ADDR get_frame_pc(frame_info_ptr frame)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
#define FRAME_OBSTACK_ZALLOC(TYPE)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void set_gdbarch_core_read_description(struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description)
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code)
void set_gdbarch_get_syscall_number(struct gdbarch *gdbarch, gdbarch_get_syscall_number_ftype *get_syscall_number)
void set_gdbarch_process_record_signal(struct gdbarch *gdbarch, gdbarch_process_record_signal_ftype *process_record_signal)
void set_gdbarch_fetch_tls_load_module_address(struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address)
void set_gdbarch_cannot_store_register(struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype *cannot_store_register)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype *iterate_over_regset_sections)
void iterate_over_regset_sections_cb(const char *sect_name, int supply_size, int collect_size, const struct regset *regset, const char *human_name, void *cb_data)
int record_linux_system_call(enum gdb_syscall syscall, struct regcache *regcache, struct linux_record_tdep *tdep)
@ gdb_sys_restart_syscall
@ gdb_sys_sched_getaffinity
@ gdb_sys_set_tid_address
@ gdb_sys_remap_file_pages
@ gdb_sys_sched_setaffinity
link_map_offsets * linux_lp64_fetch_link_map_offsets()
link_map_offsets * linux_ilp32_fetch_link_map_offsets()
void linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch, int num_disp_step_buffers)
CORE_ADDR linux_get_hwcap()
CORE_ADDR find_solib_trampoline_target(frame_info_ptr frame, CORE_ADDR pc)
void gdbarch_register_osabi(enum bfd_architecture arch, unsigned long machine, enum gdb_osabi osabi, void(*init_osabi)(struct gdbarch_info, struct gdbarch *))
int record_full_arch_list_add_reg(struct regcache *regcache, int regnum)
int record_full_arch_list_add_mem(CORE_ADDR addr, int len)
int record_full_arch_list_add_end(void)
enum register_status regcache_raw_read_signed(struct regcache *regcache, int regnum, LONGEST *val)
void regcache_collect_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
int register_size(struct gdbarch *gdbarch, int regnum)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
struct regcache * get_thread_regcache(process_stratum_target *target, ptid_t ptid)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
void regcache_supply_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
static void initialize_tdesc_s390_gs_linux64(void)
const struct target_desc * tdesc_s390_gs_linux64
#define XML_SYSCALL_FILENAME_S390X
static const struct regcache_map_entry s390_fpregmap[]
static const struct regcache_map_entry s390_regmap_gs[]
static int s390_sigtramp_frame_sniffer(const struct frame_unwind *self, frame_info_ptr this_frame, void **this_prologue_cache)
const struct regset s390_gs_regset
static void s390_supply_tdb_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *regs, size_t len)
static void s390_init_linux_record_tdep(struct linux_record_tdep *record_tdep, enum s390_abi_kind abi)
static const struct regcache_map_entry s390_regmap_vxrs_high[]
static void s390_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
static const struct regcache_map_entry s390_regmap_last_break[]
static const struct regcache_map_entry s390_regmap_system_call[]
const struct regset s390_last_break_regset
static const struct regcache_map_entry s390_regmap_upper[]
const struct regset s390_tdb_regset
static int s390_linux_syscall_record(struct regcache *regcache, LONGEST syscall_native)
const struct regset s390x_last_break_regset
static const struct regset s390_upper_regset
static int s390_linux_record_signal(struct gdbarch *gdbarch, struct regcache *regcache, enum gdb_signal signal)
const struct regset s390_vxrs_high_regset
static const struct target_desc * s390_core_read_description(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
static int s390_cannot_store_register(struct gdbarch *gdbarch, int regnum)
const struct regset s390_system_call_regset
static void s390_sigtramp_frame_this_id(frame_info_ptr this_frame, void **this_prologue_cache, struct frame_id *this_id)
const struct regset s390_gsbc_regset
static void s390_linux_init_abi_any(struct gdbarch_info info, struct gdbarch *gdbarch)
static struct linux_record_tdep s390_linux_record_tdep
#define XML_SYSCALL_FILENAME_S390
static int s390_all_but_pc_registers_record(struct regcache *regcache)
static const struct regcache_map_entry s390_gregmap[]
static LONGEST s390_linux_get_syscall_number(struct gdbarch *gdbarch, thread_info *thread)
static void s390_linux_init_abi_64(struct gdbarch_info info, struct gdbarch *gdbarch)
static struct linux_record_tdep s390x_linux_record_tdep
static const struct regcache_map_entry s390_regmap_vxrs_low[]
void _initialize_s390_linux_tdep()
static enum gdb_syscall s390_canonicalize_syscall(int syscall, enum s390_abi_kind abi)
static const struct regcache_map_entry s390x_regmap_last_break[]
static struct s390_sigtramp_unwind_cache * s390_sigtramp_frame_unwind_cache(frame_info_ptr this_frame, void **this_prologue_cache)
static const struct regcache_map_entry s390_regmap_tdb[]
const struct regset s390_vxrs_low_regset
const struct regset s390_fpregset
static const struct frame_unwind s390_sigtramp_frame_unwind
static const struct regcache_map_entry s390_regmap_gsbc[]
const struct regset s390_gregset
static void s390_write_pc(struct regcache *regcache, CORE_ADDR pc)
static void s390_linux_init_abi_31(struct gdbarch_info info, struct gdbarch *gdbarch)
static struct value * s390_sigtramp_frame_prev_register(frame_info_ptr this_frame, void **this_prologue_cache, int regnum)
#define s390_sizeof_fpregset
#define s390x_sizeof_gregset
#define s390_sizeof_tdbregset
#define s390_sizeof_gregset
const struct target_desc * tdesc_s390_linux32
static void initialize_tdesc_s390_linux32v1(void)
const struct target_desc * tdesc_s390_linux32v1
const struct target_desc * tdesc_s390_linux32v2
static void initialize_tdesc_s390_linux32v2(void)
const struct target_desc * tdesc_s390_linux64
static void initialize_tdesc_s390_linux64(void)
const struct target_desc * tdesc_s390_linux64v1
static void initialize_tdesc_s390_linux64v1(void)
const struct target_desc * tdesc_s390_linux64v2
static void initialize_tdesc_s390_linux64v2(void)
struct value * s390_trad_frame_prev_register(frame_info_ptr this_frame, trad_frame_saved_reg saved_regs[], int regnum)
#define S390_BC_GSD_REGNUM
#define S390_LAST_BREAK_REGNUM
#define S390_R0_UPPER_REGNUM
#define S390_GSEPLA_REGNUM
#define S390_BC_GSSM_REGNUM
#define S390_TDB_CONFLICT_TOKEN_REGNUM
#define S390_TDB_ABORT_CODE_REGNUM
#define S390_TDB_R0_REGNUM
#define S390_BC_GSEPLA_REGNUM
#define S390_SYSTEM_CALL_REGNUM
#define S390_V0_LOWER_REGNUM
#define S390_TDB_ATIA_REGNUM
#define S390_ORIG_R2_REGNUM
#define S390_TDB_DWORD0_REGNUM
static void initialize_tdesc_s390_te_linux64(void)
const struct target_desc * tdesc_s390_te_linux64
const struct target_desc * tdesc_s390_tevx_linux64
static void initialize_tdesc_s390_tevx_linux64(void)
static void initialize_tdesc_s390_vx_linux64(void)
const struct target_desc * tdesc_s390_vx_linux64
static void initialize_tdesc_s390x_gs_linux64(void)
const struct target_desc * tdesc_s390x_gs_linux64
const struct target_desc * tdesc_s390x_linux64
static void initialize_tdesc_s390x_linux64v1(void)
const struct target_desc * tdesc_s390x_linux64v1
static void initialize_tdesc_s390x_linux64v2(void)
const struct target_desc * tdesc_s390x_linux64v2
const struct target_desc * tdesc_s390x_te_linux64
static void initialize_tdesc_s390x_te_linux64(void)
static void initialize_tdesc_s390x_tevx_linux64(void)
const struct target_desc * tdesc_s390x_tevx_linux64
const struct target_desc * tdesc_s390x_vx_linux64
static void initialize_tdesc_s390x_vx_linux64(void)
void set_solib_svr4_fetch_link_map_offsets(struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
CORE_ADDR svr4_fetch_objfile_link_map(struct objfile *objfile)
ULONGEST ioctl_TIOCGLCKTRMIOS
ULONGEST ioctl_TIOCMIWAIT
ULONGEST ioctl_TIOCGICOUNT
ULONGEST ioctl_TIOCSERGSTRUCT
ULONGEST ioctl_TIOCSERGETMULTI
ULONGEST ioctl_TIOCSERCONFIG
ULONGEST ioctl_TIOCSSOFTCAR
ULONGEST ioctl_TIOCSWINSZ
ULONGEST ioctl_TIOCSERSETMULTI
ULONGEST ioctl_TIOCSSERIAL
int size_serial_icounter_struct
ULONGEST ioctl_TIOCSPTLCK
ULONGEST ioctl_TIOCGSOFTCAR
ULONGEST ioctl_TIOCGSERIAL
ULONGEST ioctl_TIOCSERGETLSR
ULONGEST ioctl_TIOCGWINSZ
ULONGEST ioctl_TIOCSERGWILD
ULONGEST ioctl_TIOCSLCKTRMIOS
ULONGEST ioctl_TIOCSERSWILD
int size__old_kernel_stat
int(* s390_syscall_record)(struct regcache *regcache, LONGEST svc_number)
trad_frame_saved_reg * saved_regs
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct gdbarch *gdbarch)
void gdb_printf(struct ui_file *stream, const char *format,...)
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)