* opcode/i386.h: Add multiple inclusion protection.
(EAX_REG_NUM,ECX_REG_NUM,EDX_REGNUM,EBX_REG_NUM,ESI_REG_NUM) (EDI_REG_NUM): New macros. (MODRM_MOD_FIELD,MODRM_REG_FIELD,MODRM_RM_FIELD): New macros. (SIB_SCALE_FIELD,SIB_INDEX_FIELD,SIB_BASE_FIELD): New macros. (REG_PREFIX_P): New macro. * amd64-tdep.h (amd64_displaced_step_copy_insn): Declare. (amd64_displaced_step_fixup): Declare. * amd64-tdep.c: #include opcode/i386.h, dis-asm.h. (amd64_arch_regmap): Move out of amd64_analyze_stack_align and make static global. (amd64_arch_regmap_len): New static global. (amd64_arch_reg_to_regnum): New function. (struct amd64_insn): New struct. (struct displaced_step_closure): New struct. (onebyte_has_modrm,twobyte_has_modrm): New static globals. (rex_prefix_p,skip_prefixes) (amd64_insn_length_fprintf,amd64_insn_length_init_dis) (amd64_insn_length,amd64_get_unused_input_int_reg) (amd64_get_insn_details,fixup_riprel,fixup_displaced_copy) (amd64_displaced_step_copy_insn) (amd64_absolute_jmp_p,amd64_absolute_call_p,amd64_ret_p) (amd64_call_p,amd64_breakpoint_p,amd64_syscall_p) (amd64_displaced_step_fixup): New functions. * amd64-linux-tdep.c: #include arch-utils.h. (amd64_linux_init_abi): Install displaced stepping support. * gdb.arch/amd64-disp-step.S: New file. * gdb.arch/amd64-disp-step.exp: New file. * gdb.arch/i386-disp-step.S: New file. * gdb.arch/i386-disp-step.exp: New file.
This commit is contained in:
parent
3e703e875a
commit
88db8cbb6a
|
@ -1,3 +1,12 @@
|
|||
2009-01-28 Doug Evans <dje@google.com>
|
||||
|
||||
* opcode/i386.h: Add multiple inclusion protection.
|
||||
(EAX_REG_NUM,ECX_REG_NUM,EDX_REGNUM,EBX_REG_NUM,ESI_REG_NUM)
|
||||
(EDI_REG_NUM): New macros.
|
||||
(MODRM_MOD_FIELD,MODRM_REG_FIELD,MODRM_RM_FIELD): New macros.
|
||||
(SIB_SCALE_FIELD,SIB_INDEX_FIELD,SIB_BASE_FIELD): New macros.
|
||||
(REG_PREFIX_P): New macro.
|
||||
|
||||
2009-01-09 Peter Bergner <bergner@vnet.ibm.com>
|
||||
|
||||
* ppc.h (struct powerpc_opcode): New field "deprecated".
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
|
||||
The affected opcode map is dceX, dcfX, deeX, defX. */
|
||||
|
||||
#ifndef OPCODE_I386_H
|
||||
#define OPCODE_I386_H
|
||||
|
||||
#ifndef SYSV386_COMPAT
|
||||
/* Set non-zero for broken, compatible instructions. Set to zero for
|
||||
non-broken opcodes at your peril. gcc generates SystemV/386
|
||||
|
@ -72,8 +75,14 @@
|
|||
#define NOP_OPCODE (char) 0x90
|
||||
|
||||
/* register numbers */
|
||||
#define EBP_REG_NUM 5
|
||||
#define EAX_REG_NUM 0
|
||||
#define ECX_REG_NUM 1
|
||||
#define EDX_REG_NUM 2
|
||||
#define EBX_REG_NUM 3
|
||||
#define ESP_REG_NUM 4
|
||||
#define EBP_REG_NUM 5
|
||||
#define ESI_REG_NUM 6
|
||||
#define EDI_REG_NUM 7
|
||||
|
||||
/* modrm_byte.regmem for twobyte escape */
|
||||
#define ESCAPE_TO_TWO_BYTE_ADDRESSING ESP_REG_NUM
|
||||
|
@ -87,9 +96,22 @@
|
|||
#define REGMEM_FIELD_HAS_REG 0x3/* always = 0x3 */
|
||||
#define REGMEM_FIELD_HAS_MEM (~REGMEM_FIELD_HAS_REG)
|
||||
|
||||
/* Extract fields from the mod/rm byte. */
|
||||
#define MODRM_MOD_FIELD(modrm) (((modrm) >> 6) & 3)
|
||||
#define MODRM_REG_FIELD(modrm) (((modrm) >> 3) & 7)
|
||||
#define MODRM_RM_FIELD(modrm) (((modrm) >> 0) & 7)
|
||||
|
||||
/* Extract fields from the sib byte. */
|
||||
#define SIB_SCALE_FIELD(sib) (((sib) >> 6) & 3)
|
||||
#define SIB_INDEX_FIELD(sib) (((sib) >> 3) & 7)
|
||||
#define SIB_BASE_FIELD(sib) (((sib) >> 0) & 7)
|
||||
|
||||
/* x86-64 extension prefix. */
|
||||
#define REX_OPCODE 0x40
|
||||
|
||||
/* Non-zero if OPCODE is the rex prefix. */
|
||||
#define REX_PREFIX_P(opcode) (((opcode) & 0xf0) == REX_OPCODE)
|
||||
|
||||
/* Indicates 64 bit operand size. */
|
||||
#define REX_W 8
|
||||
/* High extension to reg field of modrm byte. */
|
||||
|
@ -113,3 +135,5 @@
|
|||
|
||||
/* max size of register name in insn mnemonics. */
|
||||
#define MAX_REG_NAME_SIZE 8
|
||||
|
||||
#endif /* OPCODE_I386_H */
|
||||
|
|
Loading…
Reference in New Issue