33 #include "floatformat.h"
56 #include "elf/common.h"
76 #define XML_SYSCALL_FILENAME_S390 "syscalls/s390-linux.xml"
77 #define XML_SYSCALL_FILENAME_S390X "syscalls/s390x-linux.xml"
186 -1, -1, -1, -1, -1, -1, -1, -1,
187 -1, -1, -1, -1, -1, -1, -1, -1,
308 static const char *full_name[] = {
309 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
310 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15"
317 static const char *full_name[] = {
318 "v0",
"v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
319 "v8",
"v9",
"v10",
"v11",
"v12",
"v13",
"v14",
"v15"
378 val = (val >> 12) & 3;
380 val = (val >> 44) & 3;
399 val |= val_upper << 32;
436 val = (psw & 0x80000000) | (val & 0x7fffffff);
447 val = (psw & ~((
ULONGEST)3 << 12)) | ((val & 3) << 12);
449 val = (psw & ~((
ULONGEST)3 << 44)) | ((val & 3) << 44);
480 static struct value *
600 int regnum,
const void *regs,
size_t len)
608 if (ret !=
REG_VALID || (tdw >> 56) != 1)
624 static const struct regset s390_upper_regset = {
630 const struct regset s390_last_break_regset = {
636 const struct regset s390x_last_break_regset = {
642 const struct regset s390_system_call_regset = {
654 const struct regset s390_vxrs_low_regset = {
660 const struct regset s390_vxrs_high_regset = {
678 cb (
".reg", gregset_size, &s390_gregset, NULL, cb_data);
682 cb (
".reg-s390-high-gprs", 16 * 4, &s390_upper_regset,
683 "s390 GPR upper halves", cb_data);
686 cb (
".reg-s390-last-break", 8,
688 ? &s390_last_break_regset : &s390x_last_break_regset),
689 "s930 last-break address", cb_data);
692 cb (
".reg-s390-system-call", 4, &s390_system_call_regset,
693 "s390 system-call", cb_data);
703 "s390 TDB", cb_data);
707 cb (
".reg-s390-vxrs-low", 16 * 8, &s390_vxrs_low_regset,
708 "s390 vector registers 0-15 lower half", cb_data);
709 cb (
".reg-s390-vxrs-high", 16 * 16, &s390_vxrs_high_regset,
710 "s390 vector registers 16-31", cb_data);
718 asection *section = bfd_get_section_by_name (abfd,
".reg");
720 int high_gprs, v1, v2, te, vx;
726 high_gprs = (bfd_get_section_by_name (abfd,
".reg-s390-high-gprs")
728 v1 = (bfd_get_section_by_name (abfd,
".reg-s390-last-break") != NULL);
729 v2 = (bfd_get_section_by_name (abfd,
".reg-s390-system-call") != NULL);
733 switch (bfd_section_size (abfd, section))
835 #define S390_MAX_INSTR_SIZE 6
839 static int s390_instrlen[] = { 2, 4, 4, 6 };
844 instrlen = s390_instrlen[instr[0] >> 6];
868 is_ri (bfd_byte *insn,
int op1,
int op2,
unsigned int *r1,
int *i2)
870 if (insn[0] == op1 && (insn[1] & 0xf) == op2)
872 *r1 = (insn[1] >> 4) & 0xf;
874 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
883 is_ril (bfd_byte *insn,
int op1,
int op2,
884 unsigned int *r1,
int *i2)
886 if (insn[0] == op1 && (insn[1] & 0xf) == op2)
888 *r1 = (insn[1] >> 4) & 0xf;
892 *i2 = (((insn[2] << 24)
895 | (insn[5])) ^ 0x80000000) - 0x80000000;
904 is_rr (bfd_byte *insn,
int op,
unsigned int *r1,
unsigned int *r2)
908 *r1 = (insn[1] >> 4) & 0xf;
918 is_rre (bfd_byte *insn,
int op,
unsigned int *r1,
unsigned int *r2)
920 if (((insn[0] << 8) | insn[1]) == op)
923 *r1 = (insn[3] >> 4) & 0xf;
934 unsigned int *r1,
unsigned int *r3,
int *d2,
unsigned int *b2)
938 *r1 = (insn[1] >> 4) & 0xf;
940 *b2 = (insn[2] >> 4) & 0xf;
941 *d2 = ((insn[2] & 0xf) << 8) | insn[3];
950 is_rsy (bfd_byte *insn,
int op1,
int op2,
951 unsigned int *r1,
unsigned int *r3,
int *d2,
unsigned int *b2)
956 *r1 = (insn[1] >> 4) & 0xf;
958 *b2 = (insn[2] >> 4) & 0xf;
960 *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12))
961 ^ 0x80000) - 0x80000;
971 unsigned int *r1,
unsigned int *r3,
int *i2)
975 *r1 = (insn[1] >> 4) & 0xf;
978 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
987 is_rie (bfd_byte *insn,
int op1,
int op2,
988 unsigned int *r1,
unsigned int *r3,
int *i2)
993 *r1 = (insn[1] >> 4) & 0xf;
996 *i2 = (((insn[2] << 8) | insn[3]) ^ 0x8000) - 0x8000;
1006 unsigned int *r1,
int *d2,
unsigned int *x2,
unsigned int *b2)
1010 *r1 = (insn[1] >> 4) & 0xf;
1011 *x2 = insn[1] & 0xf;
1012 *b2 = (insn[2] >> 4) & 0xf;
1013 *d2 = ((insn[2] & 0xf) << 8) | insn[3];
1023 unsigned int *r1,
int *d2,
unsigned int *x2,
unsigned int *b2)
1028 *r1 = (insn[1] >> 4) & 0xf;
1029 *x2 = insn[1] & 0xf;
1030 *b2 = (insn[2] >> 4) & 0xf;
1032 *d2 = ((((insn[2] & 0xf) << 8) | insn[3] | (insn[4] << 12))
1033 ^ 0x80000) - 0x80000;
1043 #define S390_NUM_GPRS 16
1044 #define S390_NUM_FPRS 16
1084 int d2,
unsigned int x2,
unsigned int b2)
1090 result =
pv_add (result, data->
gpr[x2]);
1092 result =
pv_add (result, data->
gpr[b2]);
1177 offset = 16 * data->
gpr_size + 32 - addr.
k;
1260 for (pc = start_pc; pc > 0 && pc < current_pc; pc = next_pc)
1266 bfd_byte *insn32 = word_size == 4 ? insn :
dummy;
1267 bfd_byte *insn64 = word_size == 8 ? insn :
dummy;
1270 unsigned int b2, r1, r2, x2, r3;
1275 pv_t pre_insn_sp, pre_insn_fp;
1277 int pre_insn_back_chain_saved_p;
1286 next_pc = pc + insn_len;
1305 data->
gpr[r1] = data->
gpr[r2];
1310 else if (
is_rx (insn32,
op_l, &r1, &d2, &x2, &b2)
1318 else if (
is_rx (insn32,
op_st, &r1, &d2, &x2, &b2)
1324 else if (
is_rx (insn,
op_std, &r1, &d2, &x2, &b2))
1331 else if (
is_rs (insn32,
op_stm, &r1, &r3, &d2, &b2)
1335 for (; r1 <= r3; r1++, d2 += data->
gpr_size)
1365 else if (
is_rx (insn32,
op_a, &r1, &d2, &x2, &b2)
1387 else if (
is_rx (insn32,
op_s, &r1, &d2, &x2, &b2)
1395 else if (
is_rx (insn,
op_la, &r1, &d2, &x2, &b2)
1413 next_pc = pc + i2 * 2;
1482 if (post_prologue_pc != 0)
1483 return max (pc, post_prologue_pc);
1487 return skip_pc ? skip_pc : pc;
1516 unsigned int r1, r3, b2;
1553 static int s390_instrlen[] = { 2, 4, 4, 6 };
1554 int insnlen = s390_instrlen[insn[0] >> 6];
1557 unsigned int b2, r1, r2, x2, r3;
1567 amode &= 0x80000000;
1572 "displaced: (s390) fixup (%s, %s) pc %s len %d amode 0x%x\n",
1574 paddress (gdbarch, pc), insnlen, (
int) amode);
1582 amode | (from + insnlen));
1598 if (pc == to + insnlen)
1610 amode | (from + insnlen));
1634 amode | (from + i2 * 2));
1638 else if (insn[0] == 0x0 && insn[1] == 0x1)
1647 "displaced: (s390) pc is now %s\n",
1654 static struct value *
1710 static struct value *
1837 && (next_frame == NULL
1844 memset (&data, 0,
sizeof (data));
1855 cfa = prev_sp + 16*word_size + 32;
1870 for (i = 0; i < 16; i++)
1875 for (i = 0; i < 16; i++)
1908 info->
frame_base = prev_sp + 16*word_size + 32;
1946 word_size, byte_order, &sp)
1961 info->
frame_base = backchain + 16*word_size + 32;
1970 void **this_prologue_cache)
1974 if (*this_prologue_cache)
1975 return *this_prologue_cache;
1978 *this_prologue_cache = info;
2003 void **this_prologue_cache,
2015 static struct value *
2017 void **this_prologue_cache,
int regnum)
2048 void **this_prologue_cache)
2055 if (*this_prologue_cache)
2056 return *this_prologue_cache;
2059 *this_prologue_cache = info;
2074 void **this_prologue_cache,
2082 static struct value *
2084 void **this_prologue_cache,
int regnum)
2094 void **this_prologue_cache)
2128 void **this_prologue_cache)
2136 CORE_ADDR next_ra, next_cfa, sigreg_ptr, sigreg_high_off;
2139 if (*this_prologue_cache)
2140 return *this_prologue_cache;
2143 *this_prologue_cache = info;
2148 next_cfa = this_sp + 16*word_size + 32;
2154 if (next_ra == next_cfa)
2156 sigreg_ptr = next_cfa + 8 + 128 +
align_up (5*word_size, 8);
2159 sigreg_high_off = 8;
2168 word_size, byte_order);
2171 sigreg_high_off = 4;
2185 sigreg_ptr += word_size;
2187 sigreg_ptr += word_size;
2190 for (i = 0; i < 16; i++)
2193 sigreg_ptr += word_size;
2197 for (i = 0; i < 16; i++)
2208 for (i = 0; i < 16; i++)
2215 sigreg_ptr += sigreg_high_off;
2217 for (i = 0; i < 16; i++)
2226 word_size, byte_order);
2229 info->
frame_base = prev_sp + 16*word_size + 32;
2236 void **this_prologue_cache,
2244 static struct value *
2246 void **this_prologue_cache,
int regnum)
2256 void **this_prologue_cache)
2259 bfd_byte sigreturn[2];
2264 if (sigreturn[0] !=
op_svc)
2267 if (sigreturn[1] != 119
2268 && sigreturn[1] != 173 )
2307 if (svc_number == 0)
2336 s390_local_base_address
2359 static struct value *
2413 static struct type *
2467 return n && ((n & (n - 1)) == 0);
2519 enum bfd_endian byte_order,
int is_unnamed)
2523 int write_mode = as->
regcache != NULL;
2554 static const char use_vr[] = {24, 26, 28, 30, 25, 27, 29, 31};
2556 if (!is_unnamed && as->
vr < ARRAY_SIZE (use_vr))
2587 length, byte_order);
2603 as->
argp += word_size;
2653 byte_order, as->
copy);
2654 as->
argp += word_size;
2692 arg_prep.
gr = struct_return ? 3 : 2;
2699 arg_state = arg_prep;
2703 for (i = 0; i < nargs; i++)
2711 new_sp = param_area_start - (16 * word_size + 32);
2718 error (
_(
"Stack overflow"));
2725 arg_state = arg_prep;
2726 arg_state.
argp = param_area_start;
2730 for (i = 0; i < nargs; i++)
2739 bp_addr = (bp_addr & 0x7fffffff) | (pswa & 0x80000000);
2748 return param_area_start;
2808 else if (length <= word_size)
2813 word_size - length, length, out);
2823 else if (length == 2 * word_size)
2874 if (in != NULL || out != NULL)
2878 else if (in != NULL)
2879 error (
_(
"Cannot set function return value."));
2881 error (
_(
"Function return value unknown."));
2896 *lenptr =
sizeof (breakpoint);
2906 return addr & 0x7fffffff;
2930 int *type_flags_ptr)
2932 if (strcmp (name,
"mode32") == 0)
2967 return ((isdigit (*s) && s[1] ==
'(' && s[2] ==
'%')
2975 static struct gdbarch *
2980 struct gdbarch *gdbarch;
2989 int first_pseudo_reg, last_pseudo_reg;
2990 static const char *
const stap_register_prefixes[] = {
"%", NULL };
2991 static const char *
const stap_register_indirection_prefixes[] = {
"(",
2993 static const char *
const stap_register_indirection_suffixes[] = {
")",
2999 case bfd_mach_s390_31:
3003 case bfd_mach_s390_64:
3023 static const char *
const gprs[] = {
3024 "r0",
"r1",
"r2",
"r3",
"r4",
"r5",
"r6",
"r7",
3025 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15"
3027 static const char *
const fprs[] = {
3028 "f0",
"f1",
"f2",
"f3",
"f4",
"f5",
"f6",
"f7",
3029 "f8",
"f9",
"f10",
"f11",
"f12",
"f13",
"f14",
"f15"
3031 static const char *
const acrs[] = {
3032 "acr0",
"acr1",
"acr2",
"acr3",
"acr4",
"acr5",
"acr6",
"acr7",
3033 "acr8",
"acr9",
"acr10",
"acr11",
"acr12",
"acr13",
"acr14",
"acr15"
3035 static const char *
const gprs_lower[] = {
3036 "r0l",
"r1l",
"r2l",
"r3l",
"r4l",
"r5l",
"r6l",
"r7l",
3037 "r8l",
"r9l",
"r10l",
"r11l",
"r12l",
"r13l",
"r14l",
"r15l"
3039 static const char *
const gprs_upper[] = {
3040 "r0h",
"r1h",
"r2h",
"r3h",
"r4h",
"r5h",
"r6h",
"r7h",
3041 "r8h",
"r9h",
"r10h",
"r11h",
"r12h",
"r13h",
"r14h",
"r15h"
3043 static const char *
const tdb_regs[] = {
3044 "tdb0",
"tac",
"tct",
"atia",
3045 "tr0",
"tr1",
"tr2",
"tr3",
"tr4",
"tr5",
"tr6",
"tr7",
3046 "tr8",
"tr9",
"tr10",
"tr11",
"tr12",
"tr13",
"tr14",
"tr15"
3048 static const char *
const vxrs_low[] = {
3049 "v0l",
"v1l",
"v2l",
"v3l",
"v4l",
"v5l",
"v6l",
"v7l",
"v8l",
3050 "v9l",
"v10l",
"v11l",
"v12l",
"v13l",
"v14l",
"v15l",
3052 static const char *
const vxrs_high[] = {
3053 "v16",
"v17",
"v18",
"v19",
"v20",
"v21",
"v22",
"v23",
"v24",
3054 "v25",
"v26",
"v27",
"v28",
"v29",
"v30",
"v31",
3060 if (feature == NULL)
3072 for (i = 0; i < 16; i++)
3080 for (i = 0; i < 16; i++)
3084 for (i = 0; i < 16; i++)
3091 if (feature == NULL)
3099 for (i = 0; i < 16; i++)
3104 if (feature == NULL)
3110 for (i = 0; i < 16; i++)
3129 if (have_linux_v2 > have_linux_v1)
3137 for (i = 0; i < ARRAY_SIZE (tdb_regs); i++)
3148 for (i = 0; i < 16; i++)
3152 for (i = 0; i < 16; i++)
3170 && info.
abfd != NULL
3171 && info.
abfd->format == bfd_object
3172 && bfd_get_flavour (info.
abfd) == bfd_target_elf_flavour
3173 && bfd_elf_get_obj_attr_int (info.
abfd, OBJ_ATTR_GNU,
3174 Tag_GNU_S390_ABI_Vector) == 2)
3186 if (tdep->
abi != tdep_abi)
3192 if (tdesc_data != NULL)
3199 tdep->
abi = tdep_abi;
3247 last_pseudo_reg = first_pseudo_reg;
3252 last_pseudo_reg += 16;
3258 last_pseudo_reg += 16;
3336 stap_register_indirection_prefixes);
3338 stap_register_indirection_suffixes);
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
#define S390_V15_LOWER_REGNUM
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
static void s390_dwarf2_frame_init_reg(struct gdbarch *gdbarch, int regnum, struct dwarf2_frame_state_reg *reg, struct frame_info *this_frame)
static void s390_supply_tdb_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *regs, size_t len)
ULONGEST extract_unsigned_integer(const gdb_byte *, int, enum bfd_endian)
void set_gdbarch_address_class_type_flags_to_name(struct gdbarch *gdbarch, gdbarch_address_class_type_flags_to_name_ftype address_class_type_flags_to_name)
static int is_power_of_two(unsigned int n)
static const struct regcache_map_entry s390_regmap_vxrs_high[]
void set_gdbarch_gcc_target_options(struct gdbarch *gdbarch, gdbarch_gcc_target_options_ftype gcc_target_options)
static int is_rie(bfd_byte *insn, int op1, int op2, unsigned int *r1, unsigned int *r3, int *i2)
struct target_desc * tdesc_s390_vx_linux64
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
CORE_ADDR get_frame_address_in_block(struct frame_info *this_frame)
struct type * builtin_func_ptr
void set_tdesc_pseudo_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *pseudo_name)
static int s390_function_arg_float(struct type *type)
void set_gdbarch_displaced_step_fixup(struct gdbarch *gdbarch, gdbarch_displaced_step_fixup_ftype displaced_step_fixup)
#define S390_SYSTEM_CALL_REGNUM
CORE_ADDR get_frame_pc(struct frame_info *frame)
static void s390_displaced_step_fixup(struct gdbarch *gdbarch, struct displaced_step_closure *closure, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
struct target_desc * tdesc_s390_te_linux64
void set_gdbarch_fp0_regnum(struct gdbarch *gdbarch, int fp0_regnum)
struct target_desc * tdesc_s390_linux32v1
void set_gdbarch_fetch_tls_load_module_address(struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype fetch_tls_load_module_address)
struct link_map_offsets * svr4_lp64_fetch_link_map_offsets(void)
static void initialize_tdesc_s390_linux64v2(void)
pv_t pv_add_constant(pv_t v, CORE_ADDR k)
struct regcache * get_thread_regcache(ptid_t ptid)
struct value * trad_frame_get_prev_register(struct frame_info *this_frame, struct trad_frame_saved_reg this_saved_regs[], int regnum)
static int s390_address_class_type_flags(int byte_size, int dwarf2_addr_class)
int trad_frame_addr_p(struct trad_frame_saved_reg this_saved_regs[], int regnum)
static int s390_stub_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
static const struct regcache_map_entry s390_regmap_upper[]
struct gdbarch * get_regcache_arch(const struct regcache *regcache)
LONGEST value_as_long(struct value *val)
void write_memory_unsigned_integer(CORE_ADDR addr, int len, enum bfd_endian byte_order, ULONGEST value)
static int is_rsy(bfd_byte *insn, int op1, int op2, unsigned int *r1, unsigned int *r3, int *d2, unsigned int *b2)
void set_tdesc_pseudo_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype *pseudo_type)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
struct target_desc * tdesc_s390x_tevx_linux64
void set_gdbarch_stab_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype stab_reg_to_regnum)
void set_gdbarch_write_pc(struct gdbarch *gdbarch, gdbarch_write_pc_ftype write_pc)
static int s390_pseudo_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
void set_gdbarch_addr_bits_remove(struct gdbarch *gdbarch, gdbarch_addr_bits_remove_ftype addr_bits_remove)
void set_gdbarch_displaced_step_location(struct gdbarch *gdbarch, gdbarch_displaced_step_location_ftype displaced_step_location)
static void initialize_tdesc_s390x_linux64(void)
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
static void s390_store(struct s390_prologue_data *data, int d2, unsigned int x2, unsigned int b2, CORE_ADDR size, pv_t value)
ULONGEST align_down(ULONGEST v, int n)
void set_gdbarch_stap_register_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_prefixes)
ULONGEST frame_unwind_register_unsigned(struct frame_info *frame, int regnum)
void regcache_cooked_write_signed(struct regcache *regcache, int regnum, LONGEST val)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
static CORE_ADDR s390_analyze_prologue(struct gdbarch *gdbarch, CORE_ADDR start_pc, CORE_ADDR current_pc, struct s390_prologue_data *data)
static int s390_register_call_saved(struct gdbarch *gdbarch, int regnum)
int pv_is_register(pv_t a, int r)
void internal_error(const char *file, int line, const char *fmt,...)
static const struct regcache_map_entry s390x_regmap_last_break[]
const char * tdesc_register_name(struct gdbarch *gdbarch, int regno)
static int s390_function_arg_vector(struct type *type)
void regcache_supply_regset(const struct regset *regset, struct regcache *regcache, int regnum, const void *buf, size_t size)
static void s390_write_pc(struct regcache *regcache, CORE_ADDR pc)
static void initialize_tdesc_s390_linux32v2(void)
void linux_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
static int s390_dwarf_reg_to_regnum(struct gdbarch *gdbarch, int reg)
int safe_read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order, LONGEST *return_value)
struct displaced_step_closure * simple_displaced_step_copy_insn(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
union dwarf2_frame_state_reg::@51 loc
static CORE_ADDR s390_frame_base_address(struct frame_info *this_frame, void **this_cache)
static const char * s390_register_name(struct gdbarch *gdbarch, int regnum)
enum prologue_value_kind kind
void regcache_cooked_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
static void initialize_tdesc_s390x_tevx_linux64(void)
struct link_map_offsets * svr4_ilp32_fetch_link_map_offsets(void)
const struct floatformat * floatformats_ia64_quad[BFD_ENDIAN_UNKNOWN]
struct gdbarch_list * gdbarch_list_lookup_by_info(struct gdbarch_list *arches, const struct gdbarch_info *info)
CORE_ADDR skip_prologue_using_sal(struct gdbarch *gdbarch, CORE_ADDR func_addr)
struct target_desc * tdesc_s390_linux64v2
struct target_desc * tdesc_s390_linux32v2
struct gdbarch_list * next
struct reggroup *const restore_reggroup
static const struct regcache_map_entry s390_regmap_system_call[]
static LONGEST s390_linux_get_syscall_number(struct gdbarch *gdbarch, ptid_t ptid)
#define S390_FRAME_REGNUM
int gdbarch_num_regs(struct gdbarch *gdbarch)
static const short s390_dwarf_regmap[]
static void s390_stub_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
#define S390_TDB_ATIA_REGNUM
static const struct regcache_map_entry s390_regmap_last_break[]
const struct bfd_arch_info * bfd_arch_info
static void s390_check_for_saved(void *data_untyped, pv_t addr, CORE_ADDR size, pv_t value)
#define XML_SYSCALL_FILENAME_S390X
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
struct target_desc * tdesc_s390_tevx_linux64
static int s390_function_arg_integer(struct type *type)
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
void regcache_write_pc(struct regcache *regcache, CORE_ADDR pc)
void set_gdbarch_gnu_triplet_regexp(struct gdbarch *gdbarch, gdbarch_gnu_triplet_regexp_ftype gnu_triplet_regexp)
void tdesc_data_cleanup(void *data_untyped)
#define TYPE_FIELD_TYPE(thistype, n)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
pv_t pv_constant(CORE_ADDR k)
static CORE_ADDR s390_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
#define FRAME_OBSTACK_ZALLOC(TYPE)
void store_unsigned_integer(gdb_byte *, int, enum bfd_endian, ULONGEST)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
static void initialize_tdesc_s390_linux32v1(void)
void set_gdbarch_stap_register_indirection_suffixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_suffixes)
#define S390_TDB_DWORD0_REGNUM
enum powerpc_vector_abi vector_abi
static const char * s390_address_class_type_flags_to_name(struct gdbarch *gdbarch, int type_flags)
int fpr_slot[S390_NUM_FPRS]
struct regcache * regcache
static CORE_ADDR s390_local_base_address(struct frame_info *this_frame, void **this_cache)
#define S390_RETADDR_REGNUM
static CORE_ADDR s390_push_dummy_call(struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr)
CORE_ADDR svr4_fetch_objfile_link_map(struct objfile *objfile)
static void s390_backchain_frame_unwind_cache(struct frame_info *this_frame, struct s390_unwind_cache *info)
int pv_is_identical(pv_t a, pv_t b)
static struct type * s390_effective_inner_type(struct type *type, unsigned int min_size)
static struct s390_sigtramp_unwind_cache * s390_sigtramp_frame_unwind_cache(struct frame_info *this_frame, void **this_prologue_cache)
static CORE_ADDR s390_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
int tdesc_numbered_register(const struct tdesc_feature *feature, struct tdesc_arch_data *data, int regno, const char *name)
void frame_base_set_default(struct gdbarch *gdbarch, const struct frame_base *default_base)
static CORE_ADDR s390_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
#define S390_TDB_R0_REGNUM
enum frame_type get_frame_type(struct frame_info *frame)
void set_gdbarch_pseudo_register_write(struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype pseudo_register_write)
static struct value * s390_dwarf2_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
#define s390x_sizeof_gregset
static int is_rre(bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
#define s390_sizeof_gregset
struct type * check_typedef(struct type *type)
const struct frame_base * dwarf2_frame_base_sniffer(struct frame_info *this_frame)
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
static int s390_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
static struct value * s390_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
const gdb_byte * value_contents(struct value *value)
#define CATCH(EXCEPTION, MASK)
struct reggroup *const general_reggroup
#define XML_SYSCALL_FILENAME_S390
static pv_t s390_addr(struct s390_prologue_data *data, int d2, unsigned int x2, unsigned int b2)
void dwarf2_frame_set_init_reg(struct gdbarch *gdbarch, void(*init_reg)(struct gdbarch *, int, struct dwarf2_frame_state_reg *, struct frame_info *))
struct target_ops current_target
CORE_ADDR gdbarch_addr_bits_remove(struct gdbarch *gdbarch, CORE_ADDR addr)
void initialize_file_ftype(void)
CORE_ADDR find_solib_trampoline_target(struct frame_info *frame, CORE_ADDR pc)
void set_gdbarch_stack_frame_destroyed_p(struct gdbarch *gdbarch, gdbarch_stack_frame_destroyed_p_ftype stack_frame_destroyed_p)
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
static const char * s390_pseudo_register_name(struct gdbarch *gdbarch, int regnum)
pv_t pv_area_fetch(struct pv_area *area, pv_t addr, CORE_ADDR size)
void set_gdbarch_sp_regnum(struct gdbarch *gdbarch, int sp_regnum)
void set_gdbarch_decr_pc_after_break(struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break)
struct type * register_type(struct gdbarch *gdbarch, int regnum)
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
mach_port_t mach_port_t name mach_port_t mach_port_t name error_t int status
int target_auxv_search(struct target_ops *ops, CORE_ADDR match, CORE_ADDR *valp)
void set_gdbarch_believe_pcc_promotion(struct gdbarch *gdbarch, int believe_pcc_promotion)
#define S390_TDB_ABORT_CODE_REGNUM
static char * s390_gcc_target_options(struct gdbarch *gdbarch)
static struct type * s390_pseudo_register_type(struct gdbarch *gdbarch, int regnum)
int gpr_slot[S390_NUM_GPRS]
struct trad_frame_saved_reg * saved_regs
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
int pv_is_register_k(pv_t a, int r, CORE_ADDR k)
#define S390_R0_UPPER_REGNUM
void set_gdbarch_cannot_store_register(struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype cannot_store_register)
void set_solib_svr4_fetch_link_map_offsets(struct gdbarch *gdbarch, struct link_map_offsets *(*flmo)(void))
void set_gdbarch_stap_register_indirection_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_prefixes)
#define S390_LAST_BREAK_REGNUM
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
void regcache_collect_regset(const struct regset *regset, const struct regcache *regcache, int regnum, void *buf, size_t size)
static void initialize_tdesc_s390_linux32(void)
static const gdb_byte * s390_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
static const struct target_desc * s390_core_read_description(struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd)
struct trad_frame_saved_reg * saved_regs
void set_gdbarch_value_from_register(struct gdbarch *gdbarch, gdbarch_value_from_register_ftype value_from_register)
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
static void initialize_tdesc_s390_linux64v1(void)
void set_gdbarch_breakpoint_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype breakpoint_from_pc)
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
void pv_area_store(struct pv_area *area, pv_t addr, CORE_ADDR size, pv_t value)
struct type * tdesc_find_type(struct gdbarch *gdbarch, const char *id)
static CORE_ADDR s390_frame_align(struct gdbarch *gdbarch, CORE_ADDR addr)
int pv_area_store_would_trash(struct pv_area *area, pv_t addr)
static int s390_stap_is_single_operand(struct gdbarch *gdbarch, const char *s)
struct target_desc * tdesc_s390_linux64v1
struct value * value_from_longest(struct type *type, LONGEST num)
static int s390_cannot_store_register(struct gdbarch *gdbarch, int regnum)
static struct s390_stub_unwind_cache * s390_stub_frame_unwind_cache(struct frame_info *this_frame, void **this_prologue_cache)
#define S390_TDB_CONFLICT_TOKEN_REGNUM
static CORE_ADDR s390_unwind_sp(struct gdbarch *gdbarch, struct frame_info *next_frame)
static const struct frame_unwind s390_frame_unwind
void set_value_offset(struct value *value, int offset)
struct value * value_cast(struct type *type, struct value *arg2)
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
static int is_rr(bfd_byte *insn, int op, unsigned int *r1, unsigned int *r2)
int gdbarch_addr_bit(struct gdbarch *gdbarch)
void set_gdbarch_unwind_sp(struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype unwind_sp)
struct target_desc * tdesc_s390x_vx_linux64
static void initialize_tdesc_s390x_linux64v2(void)
static struct frame_id s390_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
void set_xml_syscall_file_name(struct gdbarch *gdbarch, const char *name)
static void s390_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
static void s390_register_return_value(struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, gdb_byte *out, const gdb_byte *in)
struct value * frame_unwind_register_value(struct frame_info *frame, int regnum)
void( iterate_over_regset_sections_cb)(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
static const struct regcache_map_entry s390_gregmap[]
struct bfd_section * the_bfd_section
struct reggroup *const vector_reggroup
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
struct ui_file * gdb_stdlog
CORE_ADDR linux_displaced_step_location(struct gdbarch *gdbarch)
void pv_area_scan(struct pv_area *area, void(*func)(void *closure, pv_t addr, CORE_ADDR size, pv_t value), void *closure)
static int is_rxy(bfd_byte *insn, int op1, int op2, unsigned int *r1, int *d2, unsigned int *x2, unsigned int *b2)
static struct gdbarch * s390_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
void set_gdbarch_long_long_bit(struct gdbarch *gdbarch, int long_long_bit)
static void s390_handle_arg(struct s390_arg_state *as, struct value *arg, struct gdbarch_tdep *tdep, int word_size, enum bfd_endian byte_order, int is_unnamed)
static void initialize_tdesc_s390_linux64(void)
static int s390_sigtramp_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
const struct target_desc * target_desc
static struct value * s390_sigtramp_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
struct trad_frame_saved_reg * saved_regs
initialize_file_ftype _initialize_s390_tdep
#define S390_ORIG_R2_REGNUM
#define s390_sizeof_fpregset
static struct s390_unwind_cache * s390_frame_unwind_cache(struct frame_info *this_frame, void **this_prologue_cache)
struct pv_area * make_pv_area(int base_reg, int addr_bit)
static const char * s390_gnu_triplet_regexp(struct gdbarch *gdbarch)
struct trad_frame_saved_reg * trad_frame_alloc_saved_regs(struct frame_info *this_frame)
void throw_exception(struct gdb_exception exception)
static void initialize_tdesc_s390_tevx_linux64(void)
void tdesc_use_registers(struct gdbarch *gdbarch, const struct target_desc *target_desc, struct tdesc_arch_data *early_data)
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
struct frame_info * get_next_frame(struct frame_info *this_frame)
static void initialize_tdesc_s390_vx_linux64(void)
struct value * value_from_pointer(struct type *type, CORE_ADDR addr)
static struct value * s390_unwind_pseudo_register(struct frame_info *this_frame, int regnum)
void set_gdbarch_displaced_step_copy_insn(struct gdbarch *gdbarch, gdbarch_displaced_step_copy_insn_ftype displaced_step_copy_insn)
void set_gdbarch_pseudo_register_read(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype pseudo_register_read)
ULONGEST align_up(ULONGEST v, int n)
void set_gdbarch_char_signed(struct gdbarch *gdbarch, int char_signed)
int value_optimized_out(struct value *value)
#define TYPE_TARGET_TYPE(thistype)
static int is_ril(bfd_byte *insn, int op1, int op2, unsigned int *r1, int *i2)
static void initialize_tdesc_s390_te_linux64(void)
void set_gdbarch_address_class_type_flags(struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype address_class_type_flags)
struct target_desc * tdesc_s390x_linux64v2
enum register_status regcache_register_status(const struct regcache *regcache, int regnum)
static int is_rsi(bfd_byte *insn, int op, unsigned int *r1, unsigned int *r3, int *i2)
void set_gdbarch_address_class_name_to_type_flags(struct gdbarch *gdbarch, gdbarch_address_class_name_to_type_flags_ftype address_class_name_to_type_flags)
static int regnum_is_gpr_full(struct gdbarch_tdep *tdep, int regnum)
static int s390_address_class_name_to_type_flags(struct gdbarch *gdbarch, const char *name, int *type_flags_ptr)
#define TYPE_CODE(thistype)
enum register_status regcache_raw_read(struct regcache *regcache, int regnum, gdb_byte *buf)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
static int s390_readinstruction(bfd_byte instr[], CORE_ADDR at)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static void initialize_tdesc_s390x_vx_linux64(void)
static int regnum_is_vxr_full(struct gdbarch_tdep *tdep, int regnum)
struct target_desc * tdesc_s390x_linux64v1
CORE_ADDR regcache_read_pc(struct regcache *regcache)
static int in_plt_section(CORE_ADDR pc)
void set_gdbarch_stap_is_single_operand(struct gdbarch *gdbarch, gdbarch_stap_is_single_operand_ftype stap_is_single_operand)
static void initialize_tdesc_s390x_linux64v1(void)
static const struct regcache_map_entry s390_fpregmap[]
void set_gdbarch_get_syscall_number(struct gdbarch *gdbarch, gdbarch_get_syscall_number_ftype get_syscall_number)
static void s390_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
#define TYPE_NFIELDS(thistype)
struct target_section * target_section_by_addr(struct target_ops *target, CORE_ADDR addr)
struct value * default_value_from_register(struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_id frame_id)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
struct target_desc * tdesc_s390_linux32
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
enum register_status regcache_cooked_read(struct regcache *regcache, int regnum, gdb_byte *buf)
static pv_t s390_load(struct s390_prologue_data *data, int d2, unsigned int x2, unsigned int b2, CORE_ADDR size)
static struct value * s390_value_from_register(struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_id frame_id)
static int is_rs(bfd_byte *insn, int op, unsigned int *r1, unsigned int *r3, int *d2, unsigned int *b2)
enum bfd_endian byte_order
static int is_ri(bfd_byte *insn, int op1, int op2, unsigned int *r1, int *i2)
static int is_rx(bfd_byte *insn, int op, unsigned int *r1, int *d2, unsigned int *x2, unsigned int *b2)
struct target_desc * tdesc_s390x_linux64
struct tdesc_arch_data * tdesc_data_alloc(void)
void frame_base_append_sniffer(struct gdbarch *gdbarch, frame_base_sniffer_ftype *sniffer)
unsigned long long ULONGEST
enum unwind_stop_reason default_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
void trad_frame_set_unknown(struct trad_frame_saved_reg this_saved_regs[], int regnum)
const struct tdesc_feature * tdesc_find_feature(const struct target_desc *target_desc, const char *name)
int register_size(struct gdbarch *gdbarch, int regnum)
void set_gdbarch_long_double_bit(struct gdbarch *gdbarch, int long_double_bit)
struct type * value_type(const struct value *value)
void set_gdbarch_long_bit(struct gdbarch *gdbarch, int long_bit)
static struct value * s390_trad_frame_prev_register(struct frame_info *this_frame, struct trad_frame_saved_reg saved_regs[], int regnum)
enum register_status regcache_cooked_read_part(struct regcache *regcache, int regnum, int offset, int len, gdb_byte *buf)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
#define S390_V0_LOWER_REGNUM
void set_gdbarch_displaced_step_free_closure(struct gdbarch *gdbarch, gdbarch_displaced_step_free_closure_ftype displaced_step_free_closure)
void set_tdesc_pseudo_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *pseudo_reggroup_p)
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
#define S390_MAX_INSTR_SIZE
int default_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
struct reggroup *const save_reggroup
#define TYPE_LENGTH(thistype)
void set_gdbarch_ptr_bit(struct gdbarch *gdbarch, int ptr_bit)
pv_t pv_subtract(pv_t a, pv_t b)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
CORE_ADDR get_pc_function_start(CORE_ADDR pc)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
struct type * builtin_uint64
struct value * allocate_optimized_out_value(struct type *type)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype iterate_over_regset_sections)
struct target_desc * tdesc_s390x_te_linux64
void register_gdbarch_init(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init)
static int s390_adjust_frame_regnum(struct gdbarch *gdbarch, int num, int eh_frame_p)
LONGEST extract_signed_integer(const gdb_byte *, int, enum bfd_endian)
void write_memory(CORE_ADDR memaddr, const bfd_byte *myaddr, ssize_t len)
void set_gdbarch_skip_prologue(struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype skip_prologue)
static struct gdbarch_data * tdesc_data
static const struct regcache_map_entry s390_regmap_tdb[]
struct target_desc * tdesc_s390_linux64
#define s390_sizeof_tdbregset
static void s390_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf)
enum bfd_endian byte_order
void set_gdbarch_pc_regnum(struct gdbarch *gdbarch, int pc_regnum)
void set_gdbarch_max_insn_length(struct gdbarch *gdbarch, ULONGEST max_insn_length)
void set_gdbarch_core_read_description(struct gdbarch *gdbarch, gdbarch_core_read_description_ftype core_read_description)
pv_t pv_add(pv_t a, pv_t b)
int tdesc_has_registers(const struct target_desc *target_desc)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
int pv_is_constant(pv_t a)
CORE_ADDR get_frame_func(struct frame_info *this_frame)
void free_pv_area(struct pv_area *area)
enum dwarf2_frame_reg_rule how
void error(const char *fmt,...)
pv_t pv_register(int reg, CORE_ADDR k)
struct gdbarch * gdbarch_alloc(const struct gdbarch_info *info, struct gdbarch_tdep *tdep)
void set_gdbarch_inner_than(struct gdbarch *gdbarch, gdbarch_inner_than_ftype inner_than)
static void initialize_tdesc_s390x_te_linux64(void)
static int s390_prologue_frame_unwind_cache(struct frame_info *this_frame, struct s390_unwind_cache *info)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
static void s390_sigtramp_frame_this_id(struct frame_info *this_frame, void **this_prologue_cache, struct frame_id *this_id)
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
static enum register_status s390_pseudo_register_read(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, gdb_byte *buf)
int tdesc_unnumbered_register(const struct tdesc_feature *feature, const char *name)
void set_gdbarch_print_insn(struct gdbarch *gdbarch, gdbarch_print_insn_ftype print_insn)
struct value *(* fn)(struct frame_info *this_frame, void **this_cache, int regnum)
static const struct regcache_map_entry s390_regmap_vxrs_low[]
static enum return_value_convention s390_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *out, const gdb_byte *in)
static struct value * s390_stub_frame_prev_register(struct frame_info *this_frame, void **this_prologue_cache, int regnum)
void dwarf2_frame_set_adjust_regnum(struct gdbarch *gdbarch, int(*adjust_regnum)(struct gdbarch *, int, int))
struct type * builtin_int
void regcache_raw_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
const ULONGEST const LONGEST len
void simple_displaced_step_free_closure(struct gdbarch *gdbarch, struct displaced_step_closure *closure)