21 #include "opcode/i386.h" 71 "eax",
"ecx",
"edx",
"ebx",
72 "esp",
"ebp",
"esi",
"edi",
73 "eip",
"eflags",
"cs",
"ss",
74 "ds",
"es",
"fs",
"gs",
75 "st0",
"st1",
"st2",
"st3",
76 "st4",
"st5",
"st6",
"st7",
77 "fctrl",
"fstat",
"ftag",
"fiseg",
78 "fioff",
"foseg",
"fooff",
"fop",
79 "xmm0",
"xmm1",
"xmm2",
"xmm3",
80 "xmm4",
"xmm5",
"xmm6",
"xmm7",
86 "zmm0",
"zmm1",
"zmm2",
"zmm3",
87 "zmm4",
"zmm5",
"zmm6",
"zmm7" 92 "zmm0h",
"zmm1h",
"zmm2h",
"zmm3h",
93 "zmm4h",
"zmm5h",
"zmm6h",
"zmm7h" 98 "k0",
"k1",
"k2",
"k3",
99 "k4",
"k5",
"k6",
"k7" 104 "ymm0",
"ymm1",
"ymm2",
"ymm3",
105 "ymm4",
"ymm5",
"ymm6",
"ymm7",
110 "ymm0h",
"ymm1h",
"ymm2h",
"ymm3h",
111 "ymm4h",
"ymm5h",
"ymm6h",
"ymm7h",
116 "bnd0raw",
"bnd1raw",
"bnd2raw",
"bnd3raw",
"bndcfgu",
"bndstatus" 128 "bnd0",
"bnd1",
"bnd2",
"bnd3" 135 "mm0",
"mm1",
"mm2",
"mm3",
136 "mm4",
"mm5",
"mm6",
"mm7" 143 "al",
"cl",
"dl",
"bl",
144 "ah",
"ch",
"dh",
"bh" 151 "ax",
"cx",
"dx",
"bx",
497 else if (
reg >= 12 &&
reg <= 19)
502 else if (
reg >= 21 &&
reg <= 28)
513 else if (
reg >= 29 &&
reg <= 36)
541 else if (
reg >= 11 &&
reg <= 18)
546 else if (
reg >= 21 &&
reg <= 36)
621 i386_skip_prefixes (
gdb_byte *insn,
size_t max_len)
629 case DATA_PREFIX_OPCODE:
630 case ADDR_PREFIX_OPCODE:
631 case CS_PREFIX_OPCODE:
632 case DS_PREFIX_OPCODE:
633 case ES_PREFIX_OPCODE:
634 case FS_PREFIX_OPCODE:
635 case GS_PREFIX_OPCODE:
636 case SS_PREFIX_OPCODE:
637 case LOCK_PREFIX_OPCODE:
638 case REPE_PREFIX_OPCODE:
639 case REPNE_PREFIX_OPCODE:
660 if ((insn[1] & 0x38) == 0x20)
664 if ((insn[1] & 0x38) == 0x28)
697 if ((insn[1] & 0x38) == 0x10)
701 if ((insn[1] & 0x38) == 0x18)
745 if ((insn[0] == 0xcd && insn[1] == 0x80)
747 || (insn[0] == 0x0f && insn[1] == 0x34)
749 || (insn[0] == 0x0f && insn[1] == 0x05))
817 insn = i386_skip_prefixes (buf, len);
819 insn[syscall_length] = NOP_OPCODE;
859 "displaced: fixup (%s, %s), " 860 "insn = 0x%02x 0x%02x ...\n",
875 gdb_byte *opcode = i386_skip_prefixes (insn, max_insn_len);
911 && orig_eip != to + (insn - insn_start) + insn_len
916 && orig_eip != to + (insn - insn_start) + insn_len + 1)
920 "displaced: syscall changed %%eip; " 925 ULONGEST eip = (orig_eip - insn_offset) & 0xffffffffUL;
936 "relocated %%eip from %s to %s\n",
958 retaddr = (retaddr - insn_offset) & 0xffffffffUL;
963 "displaced: relocated return addr at %s to %s\n",
982 int offset = 0, rel32, newrel;
1000 unsigned int ret_addr;
1003 ret_addr = oldloc + insn_length;
1014 newrel = (oldloc - *to) + rel32;
1019 "Adjusted insn rel32=%s at %s to" 1020 " rel32=%s at %s\n",
1031 if (insn[0] == 0xe9)
1034 else if (insn[0] == 0x0f && (insn[1] & 0xf0) == 0x80)
1040 newrel = (oldloc - *to) + rel32;
1044 "Adjusted insn rel32=%s at %s to" 1045 " rel32=%s at %s\n",
1056 #ifdef I386_REGNO_TO_SYMMETRY 1057 #error "The Sequent Symmetry is no longer supported." 1066 #define I386_NUM_SAVED_REGS I386_NUM_GREGS 1161 delta += data16 + 2;
1188 static gdb_byte proto1[3] = { 0x87, 0x04, 0x24 };
1189 static gdb_byte proto2[4] = { 0x87, 0x44, 0x24, 0x00 };
1193 if (current_pc <=
pc)
1205 if (memcmp (buf, proto1, 3) != 0 && memcmp (buf, proto2, 4) != 0)
1208 if (current_pc ==
pc)
1214 if (current_pc ==
pc + 1)
1220 if (buf[1] == proto1[1])
1246 if (op == 0x68 || op == 0x6a)
1260 if (buf[0] == 0xe8 && buf[6] == 0xc4 && buf[7] == 0x4)
1261 pc += delta +
sizeof (buf);
1302 static int regnums[8] = {
1318 if (buf[0] == 0x8d && buf[2] == 0x24 && buf[3] == 0x4)
1321 if ((buf[1] & 0xc7) != 0x44)
1325 reg = (buf[1] >> 3) & 7;
1332 if ((buf[0] & 0xf8) != 0x50)
1339 if (buf[1] != 0x8d || buf[3] != 0x24 || buf[4] != 0x8)
1343 if ((buf[2] & 0xc7) != 0x44)
1348 if (
reg != ((buf[2] >> 3) & 7))
1355 if (
reg == 4 ||
reg == 5)
1359 if (buf[
offset + 1] != 0xe4
1369 || buf[
offset + 2] != 0xfc
1370 || (buf[
offset + 1] & 0xf8) != 0x70)
1378 if (current_pc >
pc + offset_and)
1381 return std::min (
pc +
offset + 3, current_pc);
1385 #define I386_MAX_MATCHED_INSN_LEN 6 1405 if ((op & pattern.
mask[0]) == pattern.
insn[0])
1408 int insn_matched = 1;
1417 for (i = 1; i < pattern.
len; i++)
1419 if ((buf[i - 1] & pattern.
mask[i]) != pattern.
insn[i])
1422 return insn_matched;
1436 for (pattern = insn_patterns; pattern->
len > 0; pattern++)
1460 ix =
insn - insn_patterns;
1461 for (i = ix - 1; i >= 0; i--)
1463 current_pc -= insn_patterns[i].
len;
1469 current_pc = pc +
insn->len;
1470 for (
insn = insn_patterns + ix + 1;
insn->len > 0;
insn++)
1475 current_pc +=
insn->len;
1495 { 2, { 0xb0, 0x00 }, { 0xfa, 0x00 } },
1497 { 2, { 0xb2, 0x00 }, { 0xfb, 0x00 } },
1499 { 5, { 0xb8 }, { 0xfe } },
1501 { 5, { 0xba }, { 0xff } },
1510 { 5, { 0xa1 }, { 0xff } },
1512 { 6, { 0x89, 0x05 }, {0xff, 0xf7 } },
1514 { 6, { 0x89, 0x15 }, {0xff, 0xff } },
1522 { 2, { 0x29, 0xc0 }, { 0xfd, 0xff } },
1524 { 2, { 0x29, 0xc9 }, { 0xfd, 0xff } },
1526 { 2, { 0x29, 0xd2 }, { 0xfd, 0xff } },
1528 { 2, { 0x31, 0xc0 }, { 0xfd, 0xff } },
1530 { 2, { 0x31, 0xc9 }, { 0xfd, 0xff } },
1532 { 2, { 0x31, 0xd2 }, { 0xfd, 0xff } },
1569 else if (op == 0x8b)
1628 while (pc + skip < limit)
1638 if (limit <= pc + skip)
1715 else if (op == 0x81)
1726 else if (op == 0x8d)
1741 else if (op == 0xc8)
1765 for (i = 0; i < 8 && pc < current_pc; i++)
1769 if (op < 0x50 || op > 0x57)
1848 if (post_prologue_pc
1852 return std::max (start_pc, post_prologue_pc);
1875 for (i = 0; i < 6; i++)
1880 if (pic_pat[i] != op)
1896 else if (op == 0x9d)
1906 if (delta > 0 && op == 0x81
1946 call_dest = call_dest & 0xffffffffU;
1994 if (cache->
base == 0)
2024 cache->
base = ((cache->
saved_sp - 4) & 0xfffffff0) - 4;
2030 else if (cache->
pc != 0
2082 *this_cache = cache;
2106 else if (cache->
base == 0)
2124 return UNWIND_UNAVAILABLE;
2127 if (cache->
base == 0)
2128 return UNWIND_OUTERMOST;
2130 return UNWIND_NO_REASON;
2133 static struct value *
2233 void **this_prologue_cache)
2252 *this_cache = cache;
2286 return UNWIND_UNAVAILABLE;
2288 return UNWIND_NO_REASON;
2305 static struct value *
2307 void **this_cache,
int regnum)
2338 { 5, { 0xb8 }, { 0xfe } },
2341 { 5, { 0xe9 }, { 0xff } },
2351 { 5, { 0x68 }, { 0xff } },
2354 { 5, { 0xe9 }, { 0xff } },
2471 *this_cache = cache;
2483 return UNWIND_UNAVAILABLE;
2485 return UNWIND_NO_REASON;
2504 static struct value *
2506 void **this_cache,
int regnum)
2517 void **this_prologue_cache)
2609 if (jb_pc_offset == -1)
2693 for (write_pass = 0; write_pass < 2; write_pass++)
2695 int args_space_used = 0;
2704 args_space_used += 4;
2710 for (i = 0; i < nargs; i++)
2717 args_space_used =
align_up (args_space_used, 16);
2728 args_space_used +=
align_up (len, 4);
2733 args_space =
align_up (args_space, 16);
2777 #define LOW_RETURN_REGNUM I386_EAX_REGNUM 2778 #define HIGH_RETURN_REGNUM I386_EDX_REGNUM 2795 warning (
_(
"Cannot find floating-point return value."));
2812 if (len <= low_size)
2815 memcpy (valbuf, buf, len);
2817 else if (len <= (low_size + high_size))
2820 memcpy (valbuf, buf, low_size);
2822 memcpy (valbuf + low_size, buf, len - low_size);
2826 _(
"Cannot extract return value of %d bytes long."),
2848 warning (
_(
"Cannot set floating-point return value."));
2881 if (len <= low_size)
2883 else if (len <= (low_size + high_size))
2887 len - low_size, valbuf + low_size);
2891 _(
"Cannot store return value of %d bytes long."), len);
2936 return (len == 4 || len == 8 || len == 12);
2939 return (len == 1 || len == 2 || len == 4 || len == 8);
3034 static struct type *
3060 TYPE_NAME (t) =
"builtin_type_bound128";
3070 static struct type *
3081 union __gdb_builtin_type_vec512i
3083 int128_t uint128[4];
3084 int64_t v4_int64[8];
3085 int32_t v8_int32[16];
3086 int16_t v16_int16[32];
3087 int8_t v32_int8[64];
3088 double v4_double[8];
3123 static struct type *
3134 union __gdb_builtin_type_vec256i
3136 int128_t uint128[2];
3137 int64_t v2_int64[4];
3138 int32_t v4_int32[8];
3139 int16_t v8_int16[16];
3140 int8_t v16_int8[32];
3141 double v2_double[4];
3174 static struct type *
3185 union __gdb_builtin_type_vec64i
3188 int32_t v2_int32[2];
3189 int16_t v4_int16[4];
3260 tos = (fstat >> 11) & 0x7;
3261 fpreg = (mmxreg + tos) % 8;
3274 struct value *result_value)
3315 memcpy (buf, &lower,
size);
3330 memcpy (buf, raw_buf, 8);
3345 memcpy (buf, raw_buf, 16);
3354 memcpy (buf + 16, raw_buf, 16);
3366 memcpy (buf, raw_buf, 16);
3376 memcpy (buf + 16, raw_buf, 16);
3386 memcpy (buf + 32, raw_buf, 32);
3399 memcpy (buf, raw_buf, 16);
3407 memcpy (buf + 16, raw_buf, 16);
3419 memcpy (buf, raw_buf, 16);
3427 memcpy (buf + 16, raw_buf, 16);
3439 memcpy (buf, raw_buf, 2);
3451 else if (gpnum >= 4)
3452 memcpy (buf, raw_buf + 1, 1);
3454 memcpy (buf, raw_buf, 1);
3461 static struct value *
3466 struct value *result;
3517 memcpy (raw_buf, &lower, 8);
3518 memcpy (raw_buf + 8, &upper, 8);
3599 memcpy (raw_buf, buf, 2);
3611 memcpy (raw_buf + 1, buf, 1);
3613 memcpy (raw_buf, buf, 1);
3637 for (i = 0; i < 8; i++)
3717 static int next_regnum[] =
3728 if (
regnum >= 0 &&
regnum <
sizeof (next_regnum) /
sizeof (next_regnum[0]))
3729 return next_regnum[
regnum];
3748 if (len > 4 && len % 4 == 0)
3750 int last_regnum =
regnum;
3758 if (last_regnum != -1)
3771 int *optimizedp,
int *unavailablep)
3778 optimizedp, unavailablep);
3791 to, optimizedp, unavailablep))
3799 *optimizedp = *unavailablep = 0;
3840 int regnum,
const void *gregs,
size_t len)
3865 int regnum,
void *gregs,
size_t len)
3888 int regnum,
const void *fpregs,
size_t len)
3911 int regnum,
void *fpregs,
size_t len)
3966 unsigned long indirect =
3994 return (
name && strcmp (
"_sigtramp",
name) == 0);
4031 return (
name && (strcmp (
"_sigreturn",
name) == 0
4032 || strcmp (
"sigvechandler",
name) == 0));
4061 || (isdigit (*s) && s[1] ==
'(' && s[2] ==
'%')
4062 || (*s ==
'(' && s[1] ==
'%')
4063 || (*s ==
'%' && isalpha (s[1])));
4078 const char *s = p->
arg;
4080 if (isdigit (*s) || *s ==
'-' || *s ==
'+')
4084 long displacements[3];
4100 if (!isdigit ((
unsigned char) *s))
4103 displacements[0] = strtol (s, &endp, 10);
4106 if (*s !=
'+' && *s !=
'-')
4121 if (!isdigit ((
unsigned char) *s))
4124 displacements[1] = strtol (s, &endp, 10);
4127 if (*s !=
'+' && *s !=
'-')
4142 if (!isdigit ((
unsigned char) *s))
4145 displacements[2] = strtol (s, &endp, 10);
4148 if (*s !=
'(' || s[1] !=
'%')
4154 while (isalnum (*s))
4160 len = s - start - 1;
4161 regname = (
char *) alloca (len + 1);
4163 strncpy (regname, start, len);
4164 regname[len] =
'\0';
4167 error (
_(
"Invalid register name `%s' on expression `%s'."),
4170 for (i = 0; i < 3; i++)
4224 const char *s = p->
arg;
4226 if (isdigit (*s) || *s ==
'(' || *s ==
'-' || *s ==
'+')
4228 int offset_minus = 0;
4237 struct stoken base_token, index_token;
4247 if (offset_minus && !isdigit (*s))
4254 offset = strtol (s, &endp, 10);
4258 if (*s !=
'(' || s[1] !=
'%')
4264 while (isalnum (*s))
4267 if (*s !=
',' || s[1] !=
'%')
4270 len_base = s - start;
4271 base = (
char *) alloca (len_base + 1);
4272 strncpy (base, start, len_base);
4273 base[len_base] =
'\0';
4276 error (
_(
"Invalid register name `%s' on expression `%s'."),
4282 while (isalnum (*s))
4285 len_index = s - start;
4286 index = (
char *) alloca (len_index + 1);
4287 strncpy (index, start, len_index);
4288 index[len_index] =
'\0';
4291 error (
_(
"Invalid register name `%s' on expression `%s'."),
4294 if (*s !=
',' && *s !=
')')
4310 size = strtol (s, &endp, 10);
4331 base_token.
ptr = base;
4332 base_token.
length = len_base;
4340 index_token.
ptr = index;
4341 index_token.
length = len_index;
4386 THREE_ARG_DISPLACEMENT,
4391 current_state = TRIPLET;
4401 while (current_state != DONE)
4403 switch (current_state)
4410 case THREE_ARG_DISPLACEMENT:
4431 return "(x86_64|i.86)";
4441 static const char *
const stap_integer_prefixes[] = {
"$", NULL };
4442 static const char *
const stap_register_prefixes[] = {
"%", NULL };
4443 static const char *
const stap_register_indirection_prefixes[] = {
"(",
4445 static const char *
const stap_register_indirection_suffixes[] = {
")",
4455 stap_register_indirection_prefixes);
4457 stap_register_indirection_suffixes);
4519 int fp_regnum_p, mmx_regnum_p, xmm_regnum_p, mxcsr_regnum_p,
4520 ymm_regnum_p, ymmh_regnum_p, ymm_avx512_regnum_p, ymmh_avx512_regnum_p,
4521 bndr_regnum_p, bnd_regnum_p, zmm_regnum_p, zmmh_regnum_p,
4522 mpx_ctrl_regnum_p, xmm_avx512_regnum_p,
4523 avx512_p, avx_p, sse_p, pkru_regnum_p;
4538 return mmx_regnum_p;
4545 return xmm_regnum_p || xmm_avx512_regnum_p || mxcsr_regnum_p;
4559 return (mmx_regnum_p
4560 || (zmm_regnum_p && avx512_p)
4561 || ((ymm_regnum_p || ymm_avx512_regnum_p) && avx_p)
4562 || ((xmm_regnum_p || xmm_avx512_regnum_p) && sse_p)
4576 && (((xmm_regnum_p || xmm_avx512_regnum_p) && !sse_p)
4577 || ((ymm_regnum_p || ymm_avx512_regnum_p) && !avx_p)
4579 || ymmh_avx512_regnum_p
4586 return bnd_regnum_p;
4596 return mpx_ctrl_regnum_p;
4599 return (!fp_regnum_p
4603 && !xmm_avx512_regnum_p
4606 && !ymm_avx512_regnum_p
4607 && !ymmh_avx512_regnum_p
4610 && !mpx_ctrl_regnum_p
4631 #define PREFIX_REPZ 0x01 4632 #define PREFIX_REPNZ 0x02 4633 #define PREFIX_LOCK 0x04 4634 #define PREFIX_DATA 0x08 4635 #define PREFIX_ADDR 0x10 4717 uint8_t base = irp->
rm;
4725 scale = (byte >> 6) & 3;
4726 index = ((byte >> 3) & 7) | irp->
rex_x;
4734 if ((base & 7) == 5)
4749 *addr = (int8_t) buf[0];
4767 if (irp->
aflag == 2)
4772 *addr = (uint32_t) (offset64 + *addr);
4774 if (havesib && (index != 4 || scale != 0))
4778 if (irp->
aflag == 2)
4779 *addr += offset64 << scale;
4781 *addr = (uint32_t) (*addr + (offset64 << scale));
4788 *addr = (uint32_t) *addr;
4811 *addr = (int8_t) buf[0];
4827 *addr = (uint32_t) (*addr + offset64);
4831 *addr = (uint32_t) (*addr + offset64);
4837 *addr = (uint32_t) (*addr + offset64);
4841 *addr = (uint32_t) (*addr + offset64);
4847 *addr = (uint32_t) (*addr + offset64);
4851 *addr = (uint32_t) (*addr + offset64);
4857 *addr = (uint32_t) (*addr + offset64);
4861 *addr = (uint32_t) (*addr + offset64);
4867 *addr = (uint32_t) (*addr + offset64);
4873 *addr = (uint32_t) (*addr + offset64);
4879 *addr = (uint32_t) (*addr + offset64);
4885 *addr = (uint32_t) (*addr + offset64);
4910 Process record ignores the memory change of instruction at address %s\n\ 4911 because it can't get the value of the segment register.\n\ 4912 Do you want to stop the program?"),
4951 #define I386_SAVE_FPU_REGS 0xfffd 4952 #define I386_SAVE_FPU_ENV 0xfffe 4953 #define I386_SAVE_FPU_ENV_REG_STACK 0xffff 5021 #define I386_RECORD_FULL_ARCH_LIST_ADD_REG(regnum) \ 5022 record_full_arch_list_add_reg (ir.regcache, ir.regmap[(regnum)]) 5042 ir.
addr = input_addr;
5064 case REPE_PREFIX_OPCODE:
5067 case REPNE_PREFIX_OPCODE:
5070 case LOCK_PREFIX_OPCODE:
5073 case CS_PREFIX_OPCODE:
5076 case SS_PREFIX_OPCODE:
5079 case DS_PREFIX_OPCODE:
5082 case ES_PREFIX_OPCODE:
5085 case FS_PREFIX_OPCODE:
5088 case GS_PREFIX_OPCODE:
5091 case DATA_PREFIX_OPCODE:
5094 case ADDR_PREFIX_OPCODE:
5116 rex_w = (opcode8 >> 3) & 1;
5117 rex_r = (opcode8 & 0x4) << 1;
5118 ir.
rex_x = (opcode8 & 0x2) << 2;
5119 ir.
rex_b = (opcode8 & 0x1) << 3;
5145 opcode = (uint32_t) opcode8;
5153 opcode = (uint32_t) opcode8 | 0x0f00;
5205 if (((opcode >> 3) & 7) !=
OP_CMPL)
5207 if ((opcode & 1) == 0)
5212 switch ((opcode >> 1) & 3)
5255 if ((opcode & 1) == 0)
5299 if ((opcode & 1) == 0)
5306 if (ir.
mod != 3 && ir.
reg == 0)
5342 opcode = opcode << 8 | ir.
modrm;
5352 if (ir.
reg >= 2 && opcode == 0xfe)
5355 opcode = opcode << 8 | ir.
modrm;
5362 if ((opcode & 1) == 0)
5405 opcode = opcode << 8 | ir.
modrm;
5435 else if (opcode == 0x6b)
5446 if ((opcode & 1) == 0)
5475 if ((opcode & 1) == 0)
5506 if (ir.
reg == 6 || ir.
reg == 7)
5525 opcode = opcode << 8 | ir.
modrm;
5690 if ((opcode & 1) == 0)
5700 if (opcode == 0xc6 || opcode == 0xc7)
5707 if (opcode == 0xc6 || opcode == 0xc7)
5717 if ((opcode & 1) == 0)
5735 opcode = opcode << 8 | ir.
modrm;
5771 opcode = opcode << 8 | ir.
modrm;
5794 opcode = opcode << 8 | ir.
modrm;
5818 Process record ignores the memory change of instruction at address %s\n\ 5819 because it can't get the value of the segment register.\n\ 5820 Do you want to stop the program?"),
5827 if ((opcode & 1) == 0)
5866 ? ((opcode & 0x7) | ir.
rex_b)
5867 : ((opcode & 0x7) & 0x3));
5894 if ((opcode & 1) == 0)
5937 opcode = opcode << 8 | ir.
modrm;
5969 if ((opcode & 1) == 0)
5975 if (ir.
mod != 3 && (opcode == 0xd2 || opcode == 0xd3))
6018 ir.
reg |= ((opcode & 7) << 3);
6098 switch (ir.
reg >> 4)
6117 switch (ir.
reg >> 4)
6122 if (3 == (ir.
reg & 7))
6133 if ((3 == (ir.
reg & 7))
6134 || (5 == (ir.
reg & 7))
6135 || (7 == (ir.
reg & 7)))
6146 if (3 == (ir.
reg & 7))
6155 if ((3 <= (ir.
reg & 7)) && (6 <= (ir.
reg & 7)))
6242 opcode = opcode << 8 | ir.
modrm;
6257 if (0x0c == (ir.
modrm >> 4))
6259 if ((ir.
modrm & 0x0f) <= 7)
6272 if ((ir.
modrm & 0x0f) - 0x08)
6276 ((ir.
modrm & 0x0f) - 0x08)))
6329 if (0xe9 == ir.
modrm)
6334 else if ((0x0c == ir.
modrm >> 4) || (0x0d == ir.
modrm >> 4))
6339 if (((ir.
modrm & 0x0f) > 0) && ((ir.
modrm & 0x0f) <= 7))
6346 else if ((ir.
modrm & 0x0f) - 0x08)
6350 ((ir.
modrm & 0x0f) - 0x08)))
6356 if (0xe3 == ir.
modrm)
6361 else if ((0x0c == ir.
modrm >> 4) || (0x0d == ir.
modrm >> 4))
6366 if (((ir.
modrm & 0x0f) > 0) && ((ir.
modrm & 0x0f) <= 7))
6373 else if ((ir.
modrm & 0x0f) - 0x08)
6377 ((ir.
modrm & 0x0f) - 0x08)))
6383 if ((0x0c == ir.
modrm >> 4)
6384 || (0x0d == ir.
modrm >> 4)
6385 || (0x0f == ir.
modrm >> 4))
6387 if ((ir.
modrm & 0x0f) <= 7)
6398 ((ir.
modrm & 0x0f) - 0x08)))
6404 if (0x0c == ir.
modrm >> 4)
6410 else if ((0x0d == ir.
modrm >> 4) || (0x0e == ir.
modrm >> 4))
6412 if ((ir.
modrm & 0x0f) <= 7)
6428 if ((0x0c == ir.
modrm >> 4)
6429 || (0x0e == ir.
modrm >> 4)
6430 || (0x0f == ir.
modrm >> 4)
6431 || (0xd9 == ir.
modrm))
6438 if (0xe0 == ir.
modrm)
6444 else if ((0x0f == ir.
modrm >> 4) || (0x0e == ir.
modrm >> 4))
6467 if ((opcode & 1) == 0)
6481 if (ir.
aflag && (es != ds))
6487 Process record ignores the memory change of instruction at address %s\n\ 6488 because it can't get the value of the segment register.\n\ 6489 Do you want to stop the program?"),
6502 if (opcode == 0xa4 || opcode == 0xa5)
6728 opcode = opcode << 8 | ir.
modrm;
6767 addr64 += ((int16_t) addr >> 4) << 4;
6770 addr64 += ((int32_t) addr >> 5) << 5;
6773 addr64 += ((int64_t) addr >> 6) << 6;
6818 opcode = (uint32_t) opcode8;
6839 if (interrupt != 0x80
6843 "instruction int 0x%02x.\n"),
6857 "instruction into.\n"));
6868 "instruction bound.\n"));
6904 "instruction wrmsr.\n"));
6911 "instruction rdmsr.\n"));
6932 "instruction sysenter.\n"));
6944 "instruction sysexit.\n"));
6955 "instruction syscall.\n"));
6967 "instruction sysret.\n"));
6981 "instruction hlt.\n"));
7011 opcode = opcode << 8 | ir.
modrm;
7029 opcode = opcode << 8 | ir.
modrm;
7037 Process record ignores the memory change of instruction at address %s\n\ 7038 because it can't get the value of the segment register.\n\ 7039 Do you want to stop the program?"),
7076 opcode = opcode << 8 | ir.
modrm;
7089 Process record ignores the memory change of instruction at address %s\n\ 7090 because it can't get the value of the segment register.\n\ 7091 Do you want to stop the program?"),
7129 else if (ir.
rm == 1)
7136 opcode = opcode << 8 | ir.
modrm;
7165 opcode = opcode << 8 | ir.
modrm;
7174 opcode = opcode << 8 | ir.
modrm;
7190 ? (ir.
reg | rex_r) : ir.
rm);
7213 if (ir.
mod == 3 && ir.
reg == 3)
7216 opcode = opcode << 8 | ir.
modrm;
7235 if ((ir.
modrm & 0xc0) != 0xc0)
7238 opcode = opcode << 8 | ir.
modrm;
7255 opcode = opcode << 8 | ir.
modrm;
7265 if ((ir.
modrm & 0xc0) != 0xc0 || ir.
reg == 4
7266 || ir.
reg == 5 || ir.
reg >= 8)
7269 opcode = opcode << 8 | ir.
modrm;
7327 goto no_support_3dnow_data;
7332 no_support_3dnow_data:
7333 opcode = (opcode << 8) | opcode8;
7414 opcode = (opcode << 8) | ir.
modrm;
7559 reswitch_prefix_add:
7570 opcode = (uint32_t) opcode8 | opcode << 8;
7571 goto reswitch_prefix_add;
7780 if ((opcode & 0xfffffffc) == 0x660f3a60)
7804 if (opcode == 0x0f13 || opcode == 0x660f13
7805 || opcode == 0x0f17 || opcode == 0x660f17)
7845 if (opcode == 0x0fe7)
8099 "at address %s.\n"),
8100 (
unsigned int) (opcode),
8109 0, 0, 0, 0, 0, 0, 0, 0,
8140 else if (jumplen == 0)
8159 *msg =
xstrprintf (
_(
"; instruction is only %d bytes long, " 8160 "need at least %d bytes for the jump"),
8176 const struct floatformat **
8178 const char *
name,
int len)
8180 if (len == 128 &&
name)
8181 if (strcmp (
name,
"__float128") == 0
8182 || strcmp (
name,
"_Float128") == 0
8183 || strcmp (
name,
"complex _Float128") == 0)
8196 const struct tdesc_feature *feature_sse, *feature_avx, *feature_mpx,
8197 *feature_avx512, *feature_pkeys;
8198 int i, num_regs, valid_p;
8205 if (feature_core == NULL)
8274 if (!feature_avx512)
8290 else if (feature_sse)
8299 for (i = 0; i < num_regs; i++)
8307 for (; i < num_regs; i++)
8548 tdep->
tdesc = tdesc;
8627 tdesc = tdep->
tdesc;
8648 mm0_regnum = ymm0_regnum;
8676 bnd0_regnum = mm0_regnum;
8689 tdep-> bnd0_regnum = -1;
8717 [2][2][2][2][2] = {};
8732 #define MPX_BASE_MASK (~(ULONGEST) 0xfff) 8736 static unsigned long 8750 error (
_(
"BNDCFGU register invalid, read status %d."), regstatus);
8764 #define MPX_BD_MASK 0xfffffff00000ULL 8765 #define MPX_BT_MASK 0x0000000ffff8 8766 #define MPX_BD_MASK_32 0xfffff000 8767 #define MPX_BT_MASK_32 0x00000ffc 8777 CORE_ADDR mpx_bd_mask, bd_ptr_r_shift, bd_ptr_l_shift;
8778 CORE_ADDR bt_mask, bt_select_r_shift, bt_select_l_shift;
8789 bd_ptr_r_shift = 20;
8791 bt_select_r_shift = 3;
8792 bt_select_l_shift = 5;
8796 error (
_(
"bound table examination not supported\ 8797 for 64-bit process with 32-bit GDB"));
8802 bd_ptr_r_shift = 12;
8804 bt_select_r_shift = 2;
8805 bt_select_l_shift = 4;
8809 offset1 = ((ptr & mpx_bd_mask) >> bd_ptr_r_shift) << bd_ptr_l_shift;
8810 bd_entry_addr = bd_base +
offset1;
8813 if ((bd_entry & 0x1) == 0)
8814 error (
_(
"Invalid bounds directory entry at %s."),
8819 bt_addr = bd_entry & ~bt_select_r_shift;
8820 offset2 = ((ptr & bt_mask) >> bt_select_r_shift) << bt_select_l_shift;
8822 return bt_addr + offset2;
8834 int bounds_in_map = ((~bt_entry[1] == 0 && bt_entry[0] == onecompl) ? 1 : 0);
8836 if (bounds_in_map == 1)
8838 uiout->
text (
"Null bounds on map:");
8839 uiout->
text (
" pointer value = ");
8846 uiout->
text (
"{lbound = ");
8848 uiout->
text (
", ubound = ");
8852 uiout->
text (
"}: pointer value = ");
8856 size = ( (~(int64_t) bt_entry[1]) - (int64_t) bt_entry[0]);
8858 size = ( ~((int32_t) bt_entry[1]) - (int32_t) bt_entry[0]);
8865 uiout->
text (
", size = ");
8868 uiout->
text (
", metadata = ");
8891 "supported on this target.\n"));
8906 memset (bt_entry, 0,
sizeof (bt_entry));
8908 for (i = 0; i < 4; i++)
8925 const char *input = args;
8933 error (
_(
"Intel Memory Protection Extensions not supported\ 8937 error (
_(
"Pointer value expected."));
8941 if (input[0] ==
',')
8943 if (input[0] ==
'\0')
8944 error (
_(
"wrong number of arguments: missing lower and upper bound."));
8947 if (input[0] ==
',')
8949 if (input[0] ==
'\0')
8950 error (
_(
"Wrong number of arguments; Missing upper bound."));
8955 for (i = 0; i < 2; i++)
8959 bt_entry[0] = (uint64_t) lower;
8960 bt_entry[1] = ~(uint64_t) upper;
8962 for (i = 0; i < 2; i++)
8995 Set the disassembly flavor."),
_(
"\ 8996 Show the disassembly flavor."),
_(
"\ 8997 The valid values are \"att\" and \"intel\", and the default value is \"att\"."),
9006 Set the convention for returning small structs."),
_(
"\ 9007 Show the convention for returning small structs."),
_(
"\ 9008 Valid values are \"default\", \"pcc\" and \"reg\", and the default value\n\ 9017 Set Intel Memory Protection Extensions specific variables."),
9024 Show Intel Memory Protection Extensions specific variables."),
9031 "Show the memory bounds for a given array/pointer storage\ 9032 in the bound table.",
9038 "Set the memory bounds for a given array/pointer storage\ 9039 in the bound table.",
9063 {
"i386/i386-avx-mpx-avx512-pku.xml",
9067 for (
auto &a : xml_masks)
9071 selftests::record_xml_tdesc (a.xml, tdesc);
int i386_zmm_regnum_p(struct gdbarch *gdbarch, int regnum)
void reggroup_add(struct gdbarch *gdbarch, struct reggroup *group)
int i386_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
struct gdbarch * target_gdbarch(void)
void set_gdbarch_num_regs(struct gdbarch *gdbarch, int num_regs)
void set_gdbarch_frame_align(struct gdbarch *gdbarch, gdbarch_frame_align_ftype frame_align)
#define X86_XSTATE_AVX_MASK
void i387_collect_fsave(const struct regcache *regcache, int regnum, void *fsave)
void set_gdbarch_value_to_register(struct gdbarch *gdbarch, gdbarch_value_to_register_ftype value_to_register)
static int i386_record_lea_modrm(struct i386_record_s *irp)
void i386_supply_gregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs, size_t len)
static CORE_ADDR i386_unwind_pc(struct gdbarch *gdbarch, struct frame_info *next_frame)
char * hex_string(LONGEST num)
static const struct frame_unwind i386_stack_tramp_frame_unwind
static void i386_store_return_value(struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const gdb_byte *valbuf)
void set_gdbarch_ps_regnum(struct gdbarch *gdbarch, int ps_regnum)
static void i386_mpx_info_bounds(const char *args, int from_tty)
static struct i386_frame_cache * i386_frame_cache(struct frame_info *this_frame, void **this_cache)
struct frame_id frame_id_build(CORE_ADDR stack_addr, CORE_ADDR code_addr)
#define I387_FOP_REGNUM(tdep)
CORE_ADDR extract_typed_address(const gdb_byte *buf, struct type *type)
void set_gdbarch_get_longjmp_target(struct gdbarch *gdbarch, gdbarch_get_longjmp_target_ftype get_longjmp_target)
gdbarch_register_reggroup_p_ftype * register_reggroup_p
static struct i386_insn * i386_match_insn(CORE_ADDR pc, struct i386_insn *insn_patterns)
struct type * i386_bnd_type
#define target_get_min_fast_tracepoint_insn_len()
void set_tdesc_pseudo_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype *pseudo_name)
static void i386_mpx_set_bounds(const char *args, int from_tty)
void field_core_addr(const char *fldname, struct gdbarch *gdbarch, CORE_ADDR address)
static int i386_ymmh_regnum_p(struct gdbarch *gdbarch, int regnum)
CORE_ADDR get_frame_pc(struct frame_info *frame)
#define I387_NUM_MPX_CTRL_REGS
CORE_ADDR saved_regs[I386_NUM_SAVED_REGS]
static const char *const valid_conventions[]
void set_gdbarch_fp0_regnum(struct gdbarch *gdbarch, int fp0_regnum)
#define MSYMBOL_LINKAGE_NAME(symbol)
#define X86_XSTATE_SSE_MASK
int i386_k_regnum_p(struct gdbarch *gdbarch, int regnum)
const char ** mpx_register_names
static int i386_stap_parse_special_token_three_arg_disp(struct gdbarch *gdbarch, struct stap_parse_info *p)
void gdbarch_init_osabi(struct gdbarch_info info, struct gdbarch *gdbarch)
void displaced_step_dump_bytes(struct ui_file *file, const gdb_byte *buf, size_t len)
#define I386_NUM_SAVED_REGS
static const char att_flavor[]
int target_write_memory(CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
struct reggroup * reggroup_new(const char *name, enum reggroup_type type)
int i386_process_record(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR input_addr)
struct type * i386_pseudo_register_type(struct gdbarch *gdbarch, int regnum)
static struct i386_frame_cache * i386_alloc_frame_cache(void)
void ax_reg_mask(struct agent_expr *ax, int reg)
#define I387_BND0R_REGNUM(tdep)
void set_gdbarch_stap_parse_special_token(struct gdbarch *gdbarch, gdbarch_stap_parse_special_token_ftype stap_parse_special_token)
static int i386_syscall_p(const gdb_byte *insn, int *lengthp)
int i386_dword_regnum_p(struct gdbarch *gdbarch, int regnum)
static const char default_struct_convention[]
const char ** ymm16h_register_names
int(* i386_intx80_record)(struct regcache *regcache)
static int i386_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
const struct floatformat ** default_floatformat_for_type(struct gdbarch *gdbarch, const char *name, int len)
int i386_zmmh_regnum_p(struct gdbarch *gdbarch, int regnum)
int record_full_arch_list_add_reg(struct regcache *regcache, int regnum)
#define X86_XSTATE_MPX_MASK
struct value * frame_unwind_got_memory(struct frame_info *frame, int regnum, CORE_ADDR addr)
void write_memory_unsigned_integer(CORE_ADDR addr, int len, enum bfd_endian byte_order, ULONGEST value)
void set_tdesc_pseudo_register_type(struct gdbarch *gdbarch, gdbarch_register_type_ftype *pseudo_type)
void() iterate_over_regset_sections_cb(const char *sect_name, int size, const struct regset *regset, const char *human_name, void *cb_data)
void set_gdbarch_skip_trampoline_code(struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype skip_trampoline_code)
static int i386_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
void set_gdbarch_relocate_instruction(struct gdbarch *gdbarch, gdbarch_relocate_instruction_ftype relocate_instruction)
void warning(const char *fmt,...)
static const char * i386_zmmh_names[]
void set_gdbarch_gen_return_address(struct gdbarch *gdbarch, gdbarch_gen_return_address_ftype gen_return_address)
gdb_byte mask[I386_MAX_MATCHED_INSN_LEN]
void i387_supply_fxsave(struct regcache *regcache, int regnum, const void *fxsave)
void set_gdbarch_stab_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype stab_reg_to_regnum)
#define TYPE_NAME(thistype)
static void i386_extract_return_value(struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, gdb_byte *valbuf)
static const char * i386_zmm_names[]
int gdbarch_ptr_bit(struct gdbarch *gdbarch)
struct type * value_enclosing_type(const struct value *value)
void set_gdbarch_sdb_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_sdb_reg_to_regnum_ftype sdb_reg_to_regnum)
char * plongest(LONGEST l)
void set_gdbarch_stap_register_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_prefixes)
void register_remote_support_xml(const char *xml)
int gdb_insn_length(struct gdbarch *gdbarch, CORE_ADDR addr)
static const char * i386_word_names[]
static int i386_svr4_sigtramp_p(struct frame_info *this_frame)
static unsigned long i386_mpx_bd_base(void)
const struct builtin_type * builtin_type(struct gdbarch *gdbarch)
void mark_value_bytes_unavailable(struct value *value, LONGEST offset, LONGEST length)
const struct regset i386_fpregset
struct frame_id frame_id_build_unavailable_stack(CORE_ADDR code_addr)
int(* i386_syscall_record)(struct regcache *regcache)
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
void frame_unwind_register(struct frame_info *frame, int regnum, gdb_byte *buf)
struct displaced_step_closure * i386_displaced_step_copy_insn(struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
void set_gdbarch_ax_pseudo_register_collect(struct gdbarch *gdbarch, gdbarch_ax_pseudo_register_collect_ftype ax_pseudo_register_collect)
const char * tdesc_register_name(struct gdbarch *gdbarch, int regno)
unsigned int record_debug
static struct reggroup * i386_sse_reggroup
int i386_sigtramp_p(struct frame_info *this_frame)
#define I387_NUM_MPX_REGS
static CORE_ADDR i386_skip_noop(CORE_ADDR pc)
void add_setshow_enum_cmd(const char *name, enum command_class theclass, const char *const *enumlist, const char **var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
int i386_stap_parse_special_token(struct gdbarch *gdbarch, struct stap_parse_info *p)
void set_gdbarch_register_reggroup_p(struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype register_reggroup_p)
int i386_xmm_avx512_regnum_p(struct gdbarch *gdbarch, int regnum)
void target_float_convert(const gdb_byte *from, const struct type *from_type, gdb_byte *to, const struct type *to_type)
static int i386_print_insn(bfd_vma pc, struct disassemble_info *info)
#define I387_NUM_XMM_REGS(tdep)
int i386_mpx_enabled(void)
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
static int i386_svr4_dwarf_reg_to_regnum(struct gdbarch *gdbarch, int reg)
#define I387_NUM_BND_REGS
#define I386_MAX_MATCHED_INSN_LEN
CORE_ADDR(* sigcontext_addr)(struct frame_info *)
static const char pcc_struct_convention[]
static struct type * i386_ymm_type(struct gdbarch *gdbarch)
static const char * i386_pkeys_names[]
int i386_fp_regnum_p(struct gdbarch *gdbarch, int regnum)
int yquery(const char *ctlstr,...)
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)
static struct value * i386_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
struct reggroup *const restore_reggroup
void i387_supply_fsave(struct regcache *regcache, int regnum, const void *fsave)
void ax_reg(struct agent_expr *x, int reg)
int gdbarch_num_regs(struct gdbarch *gdbarch)
static void i386_value_to_register(struct frame_info *frame, int regnum, struct type *type, const gdb_byte *from)
#define I387_ST0_REGNUM(tdep)
struct reggroup *const all_reggroup
static struct i386_frame_cache * i386_epilogue_frame_cache(struct frame_info *this_frame, void **this_cache)
static int i386_mpx_ctrl_regnum_p(struct gdbarch *gdbarch, int regnum)
void gdbarch_free(struct gdbarch *arch)
void i387_reset_bnd_regs(struct gdbarch *gdbarch, struct regcache *regcache)
void set_gdbarch_dwarf2_reg_to_regnum(struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype dwarf2_reg_to_regnum)
struct gdbarch_tdep * gdbarch_tdep(struct gdbarch *gdbarch)
void set_gdbarch_long_long_align_bit(struct gdbarch *gdbarch, int long_long_align_bit)
static void i386_add_reggroups(struct gdbarch *gdbarch)
void set_gdbarch_gnu_triplet_regexp(struct gdbarch *gdbarch, gdbarch_gnu_triplet_regexp_ftype gnu_triplet_regexp)
static int i386_ret_p(const gdb_byte *insn)
void tdesc_data_cleanup(void *data_untyped)
static void i386_init_reggroups(void)
#define TYPE_FIELD_TYPE(thistype, n)
struct value * allocate_value(struct type *type)
void frame_unwind_append_unwinder(struct gdbarch *gdbarch, const struct frame_unwind *unwinder)
void text(const char *string)
struct regcache * get_current_regcache(void)
struct type * builtin_int32
int i386_fpc_regnum_p(struct gdbarch *gdbarch, int regnum)
static const char * i386_k_names[]
#define I386_MAX_INSN_LEN
static enum unwind_stop_reason i386_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
static void i386_relocate_instruction(struct gdbarch *gdbarch, CORE_ADDR *to, CORE_ADDR oldloc)
#define FRAME_OBSTACK_ZALLOC(TYPE)
static int i386_mmx_regnum_p(struct gdbarch *gdbarch, int regnum)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)
static CORE_ADDR i386_analyze_struct_return(CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache)
void set_gdbarch_stap_register_indirection_suffixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_suffixes)
struct i386_insn i386_frame_setup_skip_insns[]
struct value * frame_unwind_got_constant(struct frame_info *frame, int regnum, ULONGEST val)
int i386_xmm_regnum_p(struct gdbarch *gdbarch, int regnum)
const struct floatformat ** i386_floatformat_for_type(struct gdbarch *gdbarch, const char *name, int len)
void i387_value_to_register(struct frame_info *frame, int regnum, struct type *type, const gdb_byte *from)
ULONGEST read_code_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
static struct i386_frame_cache * i386_sigtramp_frame_cache(struct frame_info *this_frame, void **this_cache)
struct cmd_list_element * add_prefix_cmd(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc, struct cmd_list_element **prefixlist, const char *prefixname, int allow_unknown, struct cmd_list_element **list)
struct compunit_symtab * find_pc_compunit_symtab(CORE_ADDR pc)
int target_read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static int i386_match_pattern(CORE_ADDR pc, struct i386_insn pattern)
void set_gdbarch_floatformat_for_type(struct gdbarch *gdbarch, gdbarch_floatformat_for_type_ftype floatformat_for_type)
int i386_byte_regnum_p(struct gdbarch *gdbarch, int regnum)
int i386_ymm_regnum_p(struct gdbarch *gdbarch, int regnum)
int gdbarch_num_pseudo_regs(struct gdbarch *gdbarch)
void set_gdbarch_stap_integer_prefixes(struct gdbarch *gdbarch, const char *const *stap_integer_prefixes)
struct type * i386_zmm_type
int(* i386_sysenter_record)(struct regcache *regcache)
static int i386_absolute_call_p(const gdb_byte *insn)
struct parser_state pstate
struct reggroup *const float_reggroup
static const char * disassembly_flavor
static const char * i386_ymmh_names[]
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 int i386_16_byte_align_p(struct type *type)
static const char * i386_mmx_names[]
struct cmd_list_element * setlist
static const char *const valid_flavors[]
static const char * i386_register_name(struct gdbarch *gdbarch, int regnum)
struct type * builtin_int128
void write_exp_elt_longcst(struct parser_state *ps, LONGEST expelt)
void set_gdbarch_pseudo_register_write(struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype pseudo_register_write)
void append_composite_type_field(struct type *t, const char *name, struct type *field)
void set_gdbarch_pseudo_register_read_value(struct gdbarch *gdbarch, gdbarch_pseudo_register_read_value_ftype pseudo_register_read_value)
struct type * check_typedef(struct type *type)
LONGEST read_memory_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
ULONGEST gdbarch_max_insn_length(struct gdbarch *gdbarch)
int gdbarch_iterate_over_regset_sections_p(struct gdbarch *gdbarch)
static CORE_ADDR i386_skip_prologue(struct gdbarch *gdbarch, CORE_ADDR start_pc)
#define CATCH(EXCEPTION, MASK)
struct reggroup *const general_reggroup
void i387_collect_fxsave(const struct regcache *regcache, int regnum, void *fxsave)
#define I387_FSTAT_REGNUM(tdep)
#define X86_XSTATE_AVX_AVX512_MASK
static int i386_jmp_p(const gdb_byte *insn)
void i386_svr4_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
static int i386_bndr_regnum_p(struct gdbarch *gdbarch, int regnum)
static int i386_insn_is_jump(struct gdbarch *gdbarch, CORE_ADDR addr)
static const char reg_struct_convention[]
enum struct_return struct_return
int record_read_memory(struct gdbarch *gdbarch, CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
void set_gdbarch_insn_is_ret(struct gdbarch *gdbarch, gdbarch_insn_is_ret_ftype insn_is_ret)
static const struct frame_base i386_frame_base
CORE_ADDR i386_skip_main_prologue(struct gdbarch *gdbarch, CORE_ADDR pc)
static int i386_epilogue_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
CORE_ADDR find_solib_trampoline_target(struct frame_info *frame, CORE_ADDR pc)
struct i386_insn i386_tramp_chain_on_stack_insns[]
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
static CORE_ADDR i386_push_dummy_code(struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache)
static struct cmd_list_element * mpx_set_cmdlist
enum register_status regcache_cooked_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
const char ** ymmh_register_names
struct reggroup *const system_reggroup
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)
static CORE_ADDR i386_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)
struct type * register_type(struct gdbarch *gdbarch, int regnum)
void set_gdbarch_dummy_id(struct gdbarch *gdbarch, gdbarch_dummy_id_ftype dummy_id)
struct type * i387_ext_type
void fprintf_unfiltered(struct ui_file *stream, const char *format,...)
#define I387_XMM0_REGNUM(tdep)
struct cmd_list_element * showlist
const gdb_byte * value_contents_all(struct value *value)
struct type * builtin_int16
struct type * i387_ext_type(struct gdbarch *gdbarch)
int default_print_insn(bfd_vma memaddr, disassemble_info *info)
typedef BP_MANIPULATION(i386_break_insn)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
buf_displaced_step_closure i386_displaced_step_closure
#define I386_SAVE_FPU_ENV_REG_STACK
target_desc * i386_create_target_description(uint64_t xcr0, bool is_linux)
static const char * i386_gnu_triplet_regexp(struct gdbarch *gdbarch)
constexpr gdb_byte i386_break_insn[]
static CORE_ADDR i386_analyze_prologue(struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache)
const char ** pkeys_register_names
void set_gdbarch_stap_register_indirection_prefixes(struct gdbarch *gdbarch, const char *const *stap_register_indirection_prefixes)
struct i386_insn i386_tramp_chain_in_reg_insns[]
static int i386_record_modrm(struct i386_record_s *irp)
#define I387_PKRU_REGNUM(tdep)
static void i386_mpx_print_bounds(const CORE_ADDR bt_entry[4])
static void show_mpx_cmd(const char *args, int from_tty)
static struct type * i386_bnd_type(struct gdbarch *gdbarch)
int find_pc_partial_function(CORE_ADDR pc, const char **name, CORE_ADDR *address, CORE_ADDR *endaddr)
#define VALUE_REGNUM(val)
struct type * init_vector_type(struct type *elt_type, int n)
static void i386_sigtramp_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
static int i386_dbx_reg_to_regnum(struct gdbarch *gdbarch, int reg)
static const char * i386_bnd_names[]
static int i386_absolute_jmp_p(const gdb_byte *insn)
static CORE_ADDR i386_follow_jump(struct gdbarch *gdbarch, CORE_ADDR pc)
void set_gdbarch_register_to_value(struct gdbarch *gdbarch, gdbarch_register_to_value_ftype register_to_value)
static struct reggroup * i386_mmx_reggroup
void read_code(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
#define I387_FTAG_REGNUM(tdep)
void set_gdbarch_unwind_pc(struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype unwind_pc)
struct gdbarch * get_current_arch(void)
int default_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
#define COMPUNIT_PRODUCER(cust)
struct type * tdesc_find_type(struct gdbarch *gdbarch, const char *id)
#define I387_YMM0_REGNUM(tdep)
static const char * i386_register_names[]
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int status
void ax_simple(struct agent_expr *x, enum agent_op op)
#define HIGH_RETURN_REGNUM
static int startswith(const char *string, const char *pattern)
const struct regset i386_gregset
void _initialize_i386_tdep(void)
const char ** zmmh_register_names
#define LOW_RETURN_REGNUM
static const char * struct_convention
void i386_displaced_step_fixup(struct gdbarch *gdbarch, struct displaced_step_closure *closure_, CORE_ADDR from, CORE_ADDR to, struct regcache *regs)
static int i386_sigtramp_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_prologue_cache)
char * xstrprintf(const char *format,...)
#define I387_YMM16H_REGNUM(tdep)
static int i386_stack_tramp_frame_sniffer(const struct frame_unwind *self, struct frame_info *this_frame, void **this_cache)
#define I387_XMM16_REGNUM(tdep)
void printf_unfiltered(const char *format,...)
void read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static enum unwind_stop_reason i386_sigtramp_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
void set_gdbarch_insn_is_jump(struct gdbarch *gdbarch, gdbarch_insn_is_jump_ftype insn_is_jump)
int i386_word_regnum_p(struct gdbarch *gdbarch, int regnum)
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
static int i386_call_p(const gdb_byte *insn)
struct reggroup *const vector_reggroup
static const char * i386_ymm_names[]
ULONGEST get_frame_register_unsigned(struct frame_info *frame, int regnum)
static int i386_stap_parse_special_token_triplet(struct gdbarch *gdbarch, struct stap_parse_info *p)
void gdbarch_register_osabi(enum bfd_architecture arch, unsigned long machine, enum gdb_osabi osabi, void(*init_osabi)(struct gdbarch_info, struct gdbarch *))
int i387_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
int record_full_memory_query
void set_gdbarch_breakpoint_kind_from_pc(struct gdbarch *gdbarch, gdbarch_breakpoint_kind_from_pc_ftype breakpoint_kind_from_pc)
void set_gdbarch_frame_args_skip(struct gdbarch *gdbarch, CORE_ADDR frame_args_skip)
const char ** xmm_avx512_register_names
int i386_ax_pseudo_register_collect(struct gdbarch *gdbarch, struct agent_expr *ax, int regnum)
void cmd_show_list(struct cmd_list_element *list, int from_tty, const char *prefix)
static int i386_get_longjmp_target(struct frame_info *frame, CORE_ADDR *pc)
LONGEST read_code_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
static void i386_epilogue_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
void put_frame_register(struct frame_info *frame, int regnum, const gdb_byte *buf)
int record_full_arch_list_add_mem(CORE_ADDR addr, int len)
#define I386_PKEYS_NUM_REGS
static const struct frame_unwind i386_frame_unwind
const struct target_desc * target_desc
const char ** register_names
struct value * parse_to_comma_and_eval(const char **expp)
#define I387_SIZEOF_FXSAVE
static CORE_ADDR i386_svr4_sigcontext_addr(struct frame_info *this_frame)
void set_gdbarch_push_dummy_code(struct gdbarch *gdbarch, gdbarch_push_dummy_code_ftype push_dummy_code)
#define I387_MM0_REGNUM(tdep)
static struct value * i386_pseudo_register_read_value(struct gdbarch *gdbarch, struct regcache *regcache, int regnum)
void write_exp_elt_opcode(struct parser_state *ps, enum exp_opcode expelt)
void regcache_raw_write_part(struct regcache *regcache, int regnum, int offset, int len, const gdb_byte *buf)
#define X86_XSTATE_X87_MASK
static void i386_frame_this_id(struct frame_info *this_frame, void **this_cache, struct frame_id *this_id)
const char * i386_pseudo_register_name(struct gdbarch *gdbarch, int regnum)
static int i386_reg_struct_return_p(struct gdbarch *gdbarch, struct type *type)
static void append_insns(CORE_ADDR *to, ULONGEST len, const gdb_byte *buf)
struct regcache * regcache
static int i386_ymmh_avx512_regnum_p(struct gdbarch *gdbarch, int regnum)
void throw_exception(struct gdb_exception exception)
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)
#define I386_SAVE_FPU_REGS
static const struct frame_unwind i386_sigtramp_frame_unwind
static int i386_mmx_regnum_to_fp_regnum(struct regcache *regcache, int regnum)
static struct type * i386_zmm_type(struct gdbarch *gdbarch)
void help_list(struct cmd_list_element *list, const char *cmdtype, enum command_class theclass, struct ui_file *stream)
const struct floatformat * floatformats_i387_ext[BFD_ENDIAN_UNKNOWN]
int(* sigtramp_p)(struct frame_info *)
ULONGEST align_up(ULONGEST v, int n)
gdb_byte insn[I386_MAX_MATCHED_INSN_LEN]
int i386_svr4_reg_to_regnum(struct gdbarch *gdbarch, int reg)
#define TYPE_TARGET_TYPE(thistype)
struct type * i386_ymm_type
struct type * builtin_double
struct bound_minimal_symbol lookup_minimal_symbol_by_pc(CORE_ADDR pc)
static void i386_collect_gregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *gregs, size_t len)
void set_gdbarch_convert_register_p(struct gdbarch *gdbarch, gdbarch_convert_register_p_ftype convert_register_p)
static const struct frame_unwind i386_epilogue_frame_unwind
int deprecated_frame_register_read(struct frame_info *frame, int regnum, gdb_byte *myaddr)
static struct value * i386_sigtramp_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
int frame_relative_level(struct frame_info *fi)
static void check(BOOL ok, const char *file, int line)
CORE_ADDR parse_and_eval_address(const char *exp)
#define TYPE_CODE(thistype)
static void i386_collect_fpregset(const struct regset *regset, const struct regcache *regcache, int regnum, void *fpregs, size_t len)
enum register_status regcache_raw_read(struct regcache *regcache, int regnum, gdb_byte *buf)
struct type * i386_mmx_type
const int * record_regmap
struct value * frame_unwind_got_register(struct frame_info *frame, int regnum, int new_regnum)
void regcache_cooked_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
#define X86_XSTATE_AVX512
static CORE_ADDR i386_mpx_get_bt_entry(CORE_ADDR ptr, CORE_ADDR bd_base)
void set_gdbarch_fast_tracepoint_valid_at(struct gdbarch *gdbarch, gdbarch_fast_tracepoint_valid_at_ftype fast_tracepoint_valid_at)
int target_read_memory(CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
static struct cmd_list_element * mpx_show_cmdlist
static int i386_insn_is_ret(struct gdbarch *gdbarch, CORE_ADDR addr)
struct type * builtin_data_ptr
struct minimal_symbol * minsym
int i386_stap_is_single_operand(struct gdbarch *gdbarch, const char *s)
void set_gdbarch_stap_is_single_operand(struct gdbarch *gdbarch, gdbarch_stap_is_single_operand_ftype stap_is_single_operand)
static CORE_ADDR i386_analyze_frame_setup(struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR limit, struct i386_frame_cache *cache)
static void i386_supply_fpregset(const struct regset *regset, struct regcache *regcache, int regnum, const void *fpregs, size_t len)
static int i386_validate_tdesc_p(struct gdbarch_tdep *tdep, struct tdesc_arch_data *tdesc_data)
void i386_elf_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
static int i386_match_insn_block(CORE_ADDR pc, struct i386_insn *insn_patterns)
void regcache_raw_write_unsigned(struct regcache *regcache, int regnum, ULONGEST val)
#define I387_BNDCFGU_REGNUM(tdep)
void set_gdbarch_print_float_info(struct gdbarch *gdbarch, gdbarch_print_float_info_ftype print_float_info)
static const char * i386_mpx_names[]
void get_frame_register(struct frame_info *frame, int regnum, gdb_byte *buf)
#define TYPE_NFIELDS(thistype)
void set_gdbarch_num_pseudo_regs(struct gdbarch *gdbarch, int num_pseudo_regs)
static int i386_next_regnum(int regnum)
#define I386_SAVE_FPU_ENV
void dwarf2_append_unwinders(struct gdbarch *gdbarch)
static struct frame_id i386_dummy_id(struct gdbarch *gdbarch, struct frame_info *this_frame)
void set_gdbarch_fetch_pointer_argument(struct gdbarch *gdbarch, gdbarch_fetch_pointer_argument_ftype fetch_pointer_argument)
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
#define I387_SIZEOF_FSAVE
struct m32c_reg regs[M32C_MAX_NUM_REGS]
static CORE_ADDR i386_frame_base_address(struct frame_info *this_frame, void **this_cache)
bool i386_pkru_regnum_p(struct gdbarch *gdbarch, int regnum)
#define I387_MXCSR_REGNUM(tdep)
#define I386_MAX_REGISTER_SIZE
static enum return_value_convention i386_return_value(struct gdbarch *gdbarch, struct value *function, struct type *type, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf)
const struct target_desc * tdesc
int i386_ymm_avx512_regnum_p(struct gdbarch *gdbarch, int regnum)
static int i386_fast_tracepoint_valid_at(struct gdbarch *gdbarch, CORE_ADDR addr, char **msg)
void ax_const_l(struct agent_expr *x, LONGEST l)
const struct regset * fpregset
struct tdesc_arch_data * tdesc_data_alloc(void)
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
int get_frame_register_bytes(struct frame_info *frame, int regnum, CORE_ADDR offset, int len, gdb_byte *myaddr, int *optimizedp, int *unavailablep)
static struct value * i386_epilogue_frame_prev_register(struct frame_info *this_frame, void **this_cache, int regnum)
void set_gdbarch_call_dummy_location(struct gdbarch *gdbarch, int call_dummy_location)
void i387_print_float_info(struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args)
static CORE_ADDR i386_fetch_pointer_argument(struct frame_info *frame, int argi, struct type *type)
unsigned long long ULONGEST
static CORE_ADDR i386_analyze_register_saves(CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache)
int i387_register_to_value(struct frame_info *frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep)
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)
static void i386_frame_cache_1(struct frame_info *this_frame, struct i386_frame_cache *cache)
struct type * value_type(const struct value *value)
struct type * builtin_int64
static int i386_register_to_value(struct frame_info *frame, int regnum, struct type *type, gdb_byte *to, int *optimizedp, int *unavailablep)
#define I387_NUM_XMM_AVX512_REGS(tdep)
void set_gdbarch_return_value(struct gdbarch *gdbarch, gdbarch_return_value_ftype return_value)
const struct bfd_arch_info * gdbarch_bfd_arch_info(struct gdbarch *gdbarch)
void regcache_raw_collect(const struct regcache *regcache, int regnum, void *buf)
int gdbarch_pc_regnum(struct gdbarch *gdbarch)
CORE_ADDR value_as_address(struct value *val)
#define X86_XSTATE_AVX_MPX_MASK
static int i386_record_floats(struct gdbarch *gdbarch, struct i386_record_s *ir, uint32_t iregnum)
void set_gdbarch_long_double_format(struct gdbarch *gdbarch, const struct floatformat **long_double_format)
gdb_byte * value_contents_raw(struct value *value)
int default_register_reggroup_p(struct gdbarch *gdbarch, int regnum, struct reggroup *group)
struct reggroup *const save_reggroup
#define I387_FCTRL_REGNUM(tdep)
static void i386_gen_return_address(struct gdbarch *gdbarch, struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope)
#define TYPE_LENGTH(thistype)
static int i386_insn_is_call(struct gdbarch *gdbarch, CORE_ADDR addr)
enum register_status regcache_raw_read_unsigned(struct regcache *regcache, int regnum, ULONGEST *val)
void set_gdbarch_push_dummy_call(struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype push_dummy_call)
static int i386_in_stack_tramp_p(CORE_ADDR pc)
#define COMPUNIT_EPILOGUE_UNWIND_VALID(cust)
static struct gdbarch * i386_gdbarch_init(struct gdbarch_info info, struct gdbarch_list *arches)
ULONGEST read_memory_unsigned_integer(CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
void set_gdbarch_insn_is_call(struct gdbarch *gdbarch, gdbarch_insn_is_call_ftype insn_is_call)
void set_gdbarch_sw_breakpoint_from_kind(struct gdbarch *gdbarch, gdbarch_sw_breakpoint_from_kind_ftype sw_breakpoint_from_kind)
CORE_ADDR read_memory_typed_address(CORE_ADDR addr, struct type *type)
void set_gdbarch_iterate_over_regset_sections(struct gdbarch *gdbarch, gdbarch_iterate_over_regset_sections_ftype iterate_over_regset_sections)
static int i386_mxcsr_regnum_p(struct gdbarch *gdbarch, int regnum)
void register_gdbarch_init(enum bfd_architecture bfd_architecture, gdbarch_init_ftype *init)
static CORE_ADDR i386_frame_align(struct gdbarch *gdbarch, CORE_ADDR sp)
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)
const char ** k_register_names
struct type * builtin_int8
void i386_pseudo_register_read_into_value(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, struct value *result_value)
static struct gdbarch_data * tdesc_data
const int num_lower_zmm_regs
struct tdesc_arch_data * tdesc_data
enum bfd_endian byte_order
void i386_iterate_over_regset_sections(struct gdbarch *gdbarch, iterate_over_regset_sections_cb *cb, void *cb_data, const struct regcache *regcache)
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 write_exp_string(struct parser_state *ps, struct stoken str)
static const char * i386_byte_names[]
int record_full_arch_list_add_end(void)
int tdesc_has_registers(const struct target_desc *target_desc)
static enum unwind_stop_reason i386_epilogue_frame_unwind_stop_reason(struct frame_info *this_frame, void **this_cache)
void write_exp_elt_type(struct parser_state *ps, struct type *expelt)
void set_gdbarch_register_name(struct gdbarch *gdbarch, gdbarch_register_name_ftype register_name)
CORE_ADDR get_frame_func(struct frame_info *this_frame)
static void set_mpx_cmd(const char *args, int from_tty)
static void store_signed_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, LONGEST val)
static CORE_ADDR i386_skip_probe(CORE_ADDR pc)
void error(const char *fmt,...)
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)
struct type * lookup_pointer_type(struct type *type)
#define I387_NUM_PKEYS_REGS
int i386_bnd_regnum_p(struct gdbarch *gdbarch, int regnum)
CORE_ADDR i386_pe_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc, char *name)
struct gdbarch * get_frame_arch(struct frame_info *this_frame)
#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK
const struct target_desc * i386_target_description(uint64_t xcr0)
int gdb_buffered_insn_length(struct gdbarch *gdbarch, const gdb_byte *insn, int max_len, CORE_ADDR addr)
static int i386_record_lea_modrm_addr(struct i386_record_s *irp, uint64_t *addr)
#define I386_RECORD_FULL_ARCH_LIST_ADD_REG(regnum)
struct type * arch_composite_type(struct gdbarch *gdbarch, const char *name, enum type_code code)
static const char intel_flavor[]
void i386_pseudo_register_write(struct gdbarch *gdbarch, struct regcache *regcache, int regnum, const gdb_byte *buf)
void regcache_cooked_write(struct regcache *regcache, int regnum, const gdb_byte *buf)
void set_gdbarch_print_insn(struct gdbarch *gdbarch, gdbarch_print_insn_ftype print_insn)
void field_fmt(const char *fldname, const char *format,...) ATTRIBUTE_PRINTF(3
static int i386_record_push(struct i386_record_s *irp, int size)
static CORE_ADDR i386_analyze_stack_align(CORE_ADDR pc, CORE_ADDR current_pc, struct i386_frame_cache *cache)
struct type * builtin_float
static struct type * i386_mmx_type(struct gdbarch *gdbarch)
static void store_unsigned_integer(gdb_byte *addr, int len, enum bfd_endian byte_order, ULONGEST val)
static const int i386_record_regmap[]
void regcache_raw_write(struct regcache *regcache, int regnum, const gdb_byte *buf)