Correctly write 'definitions' in comments and documentation. Cc: Hao A Wu <hao.a.wu@intel.com> Signed-off-by: Antoine Coeur <coeur@gmx.fr> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com> Signed-off-by: Philippe Mathieu-Daude <philmd@redhat.com> Message-Id: <20200207010831.9046-74-philmd@redhat.com>
		
			
				
	
	
		
			305 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   IA32/x64 architecture specific definitions needed by debug transfer protocol.It is only
 | |
|   intended to be used by Debug related module implementation.
 | |
| 
 | |
|   Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef __PROCESSOR_CONTEXT_H__
 | |
| #define __PROCESSOR_CONTEXT_H__
 | |
| 
 | |
| //
 | |
| //  IA-32/x64 processor register index table
 | |
| //
 | |
| #define SOFT_DEBUGGER_REGISTER_DR0     0x00
 | |
| #define SOFT_DEBUGGER_REGISTER_DR1     0x01
 | |
| #define SOFT_DEBUGGER_REGISTER_DR2     0x02
 | |
| #define SOFT_DEBUGGER_REGISTER_DR3     0x03
 | |
| #define SOFT_DEBUGGER_REGISTER_DR6     0x04
 | |
| #define SOFT_DEBUGGER_REGISTER_DR7     0x05
 | |
| #define SOFT_DEBUGGER_REGISTER_EFLAGS  0x06
 | |
| #define SOFT_DEBUGGER_REGISTER_LDTR    0x07
 | |
| #define SOFT_DEBUGGER_REGISTER_TR      0x08
 | |
| #define SOFT_DEBUGGER_REGISTER_GDTR0   0x09 // the low 32bit of GDTR
 | |
| #define SOFT_DEBUGGER_REGISTER_GDTR1   0x0A // the high 32bit of GDTR
 | |
| #define SOFT_DEBUGGER_REGISTER_IDTR0   0x0B // the low 32bit of IDTR
 | |
| #define SOFT_DEBUGGER_REGISTER_IDTR1   0x0C // the high 32bot of IDTR
 | |
| #define SOFT_DEBUGGER_REGISTER_EIP     0x0D
 | |
| #define SOFT_DEBUGGER_REGISTER_GS      0x0E
 | |
| #define SOFT_DEBUGGER_REGISTER_FS      0x0F
 | |
| #define SOFT_DEBUGGER_REGISTER_ES      0x10
 | |
| #define SOFT_DEBUGGER_REGISTER_DS      0x11
 | |
| #define SOFT_DEBUGGER_REGISTER_CS      0x12
 | |
| #define SOFT_DEBUGGER_REGISTER_SS      0x13
 | |
| #define SOFT_DEBUGGER_REGISTER_CR0     0x14
 | |
| #define SOFT_DEBUGGER_REGISTER_CR1     0x15
 | |
| #define SOFT_DEBUGGER_REGISTER_CR2     0x16
 | |
| #define SOFT_DEBUGGER_REGISTER_CR3     0x17
 | |
| #define SOFT_DEBUGGER_REGISTER_CR4     0x18
 | |
| 
 | |
| #define SOFT_DEBUGGER_REGISTER_DI      0x19
 | |
| #define SOFT_DEBUGGER_REGISTER_SI      0x1A
 | |
| #define SOFT_DEBUGGER_REGISTER_BP      0x1B
 | |
| #define SOFT_DEBUGGER_REGISTER_SP      0x1C
 | |
| #define SOFT_DEBUGGER_REGISTER_DX      0x1D
 | |
| #define SOFT_DEBUGGER_REGISTER_CX      0x1E
 | |
| #define SOFT_DEBUGGER_REGISTER_BX      0x1F
 | |
| #define SOFT_DEBUGGER_REGISTER_AX      0x20
 | |
| 
 | |
| //
 | |
| // This below registers are only available for x64 (not valid for Ia32 mode)
 | |
| //
 | |
| #define SOFT_DEBUGGER_REGISTER_CR8     0x21
 | |
| #define SOFT_DEBUGGER_REGISTER_R8      0x22
 | |
| #define SOFT_DEBUGGER_REGISTER_R9      0x23
 | |
| #define SOFT_DEBUGGER_REGISTER_R10     0x24
 | |
| #define SOFT_DEBUGGER_REGISTER_R11     0x25
 | |
| #define SOFT_DEBUGGER_REGISTER_R12     0x26
 | |
| #define SOFT_DEBUGGER_REGISTER_R13     0x27
 | |
| #define SOFT_DEBUGGER_REGISTER_R14     0x28
 | |
| #define SOFT_DEBUGGER_REGISTER_R15     0x29
 | |
| 
 | |
| //
 | |
| // This below registers are FP / MMX / XMM registers
 | |
| //
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_BASE            0x30
 | |
| 
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_FCW          (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x00)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_FSW          (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x01)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_FTW          (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x02)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_OPCODE       (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x03)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_EIP          (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x04)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_CS           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x05)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET   (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x06)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_DS           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x07)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_MXCSR        (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x08)
 | |
| #define SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK   (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x09)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST0             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0A)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST1             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0B)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST2             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0C)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST3             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0D)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST4             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0E)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST5             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0F)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST6             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x10)
 | |
| #define SOFT_DEBUGGER_REGISTER_ST7             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x11)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM0            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x12)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM1            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x13)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM2            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x14)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM3            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x15)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM4            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x16)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM5            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x17)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM6            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x18)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM7            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x19)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM8            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1A)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM9            (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1B)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM10           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1C)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM11           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1D)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM12           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1E)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM13           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1F)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM14           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x20)
 | |
| #define SOFT_DEBUGGER_REGISTER_XMM15           (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x21)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM0             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x22)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM1             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x23)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM2             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x24)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM3             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x25)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM4             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x26)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM5             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x27)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM6             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x28)
 | |
| #define SOFT_DEBUGGER_REGISTER_MM7             (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x29)
 | |
| 
 | |
| #define SOFT_DEBUGGER_REGISTER_MAX             SOFT_DEBUGGER_REGISTER_MM7
 | |
| 
 | |
| #define SOFT_DEBUGGER_MSR_EFER                 (0xC0000080)
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| ///
 | |
| /// FXSAVE_STATE
 | |
| /// FP / MMX / XMM registers (see fxrstor instruction definition)
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT16  Fcw;
 | |
|   UINT16  Fsw;
 | |
|   UINT16  Ftw;
 | |
|   UINT16  Opcode;
 | |
|   UINT32  Eip;
 | |
|   UINT16  Cs;
 | |
|   UINT16  Reserved1;
 | |
|   UINT32  DataOffset;
 | |
|   UINT16  Ds;
 | |
|   UINT8   Reserved2[2];
 | |
|   UINT32  Mxcsr;
 | |
|   UINT32  Mxcsr_Mask;
 | |
|   UINT8   St0Mm0[10];
 | |
|   UINT8   Reserved3[6];
 | |
|   UINT8   St1Mm1[10];
 | |
|   UINT8   Reserved4[6];
 | |
|   UINT8   St2Mm2[10];
 | |
|   UINT8   Reserved5[6];
 | |
|   UINT8   St3Mm3[10];
 | |
|   UINT8   Reserved6[6];
 | |
|   UINT8   St4Mm4[10];
 | |
|   UINT8   Reserved7[6];
 | |
|   UINT8   St5Mm5[10];
 | |
|   UINT8   Reserved8[6];
 | |
|   UINT8   St6Mm6[10];
 | |
|   UINT8   Reserved9[6];
 | |
|   UINT8   St7Mm7[10];
 | |
|   UINT8   Reserved10[6];
 | |
|   UINT8   Xmm0[16];
 | |
|   UINT8   Xmm1[16];
 | |
|   UINT8   Xmm2[16];
 | |
|   UINT8   Xmm3[16];
 | |
|   UINT8   Xmm4[16];
 | |
|   UINT8   Xmm5[16];
 | |
|   UINT8   Xmm6[16];
 | |
|   UINT8   Xmm7[16];
 | |
|   UINT8   Reserved11[14 * 16];
 | |
| } DEBUG_DATA_IA32_FX_SAVE_STATE;
 | |
| 
 | |
| ///
 | |
| ///  IA-32 processor context definition
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT32                         ExceptionData;
 | |
|   DEBUG_DATA_IA32_FX_SAVE_STATE  FxSaveState;
 | |
|   UINT32                         Dr0;
 | |
|   UINT32                         Dr1;
 | |
|   UINT32                         Dr2;
 | |
|   UINT32                         Dr3;
 | |
|   UINT32                         Dr6;
 | |
|   UINT32                         Dr7;
 | |
|   UINT32                         Eflags;
 | |
|   UINT32                         Ldtr;
 | |
|   UINT32                         Tr;
 | |
|   UINT32                         Gdtr[2];
 | |
|   UINT32                         Idtr[2];
 | |
|   UINT32                         Eip;
 | |
|   UINT32                         Gs;
 | |
|   UINT32                         Fs;
 | |
|   UINT32                         Es;
 | |
|   UINT32                         Ds;
 | |
|   UINT32                         Cs;
 | |
|   UINT32                         Ss;
 | |
|   UINT32                         Cr0;
 | |
|   UINT32                         Cr1;  ///< Reserved
 | |
|   UINT32                         Cr2;
 | |
|   UINT32                         Cr3;
 | |
|   UINT32                         Cr4;
 | |
|   UINT32                         Edi;
 | |
|   UINT32                         Esi;
 | |
|   UINT32                         Ebp;
 | |
|   UINT32                         Esp;
 | |
|   UINT32                         Edx;
 | |
|   UINT32                         Ecx;
 | |
|   UINT32                         Ebx;
 | |
|   UINT32                         Eax;
 | |
| } DEBUG_DATA_IA32_SYSTEM_CONTEXT;
 | |
| 
 | |
| ///
 | |
| /// FXSAVE_STATE
 | |
| /// FP / MMX / XMM registers (see fxrstor instruction definition)
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT16  Fcw;
 | |
|   UINT16  Fsw;
 | |
|   UINT16  Ftw;
 | |
|   UINT16  Opcode;
 | |
|   UINT32  Eip;
 | |
|   UINT16  Cs;
 | |
|   UINT16  Reserved1;
 | |
|   UINT32  DataOffset;
 | |
|   UINT16  Ds;
 | |
|   UINT8   Reserved2[2];
 | |
|   UINT32  Mxcsr;
 | |
|   UINT32  Mxcsr_Mask;
 | |
|   UINT8   St0Mm0[10];
 | |
|   UINT8   Reserved3[6];
 | |
|   UINT8   St1Mm1[10];
 | |
|   UINT8   Reserved4[6];
 | |
|   UINT8   St2Mm2[10];
 | |
|   UINT8   Reserved5[6];
 | |
|   UINT8   St3Mm3[10];
 | |
|   UINT8   Reserved6[6];
 | |
|   UINT8   St4Mm4[10];
 | |
|   UINT8   Reserved7[6];
 | |
|   UINT8   St5Mm5[10];
 | |
|   UINT8   Reserved8[6];
 | |
|   UINT8   St6Mm6[10];
 | |
|   UINT8   Reserved9[6];
 | |
|   UINT8   St7Mm7[10];
 | |
|   UINT8   Reserved10[6];
 | |
|   UINT8   Xmm0[16];
 | |
|   UINT8   Xmm1[16];
 | |
|   UINT8   Xmm2[16];
 | |
|   UINT8   Xmm3[16];
 | |
|   UINT8   Xmm4[16];
 | |
|   UINT8   Xmm5[16];
 | |
|   UINT8   Xmm6[16];
 | |
|   UINT8   Xmm7[16];
 | |
|   UINT8   Xmm8[16];
 | |
|   UINT8   Xmm9[16];
 | |
|   UINT8   Xmm10[16];
 | |
|   UINT8   Xmm11[16];
 | |
|   UINT8   Xmm12[16];
 | |
|   UINT8   Xmm13[16];
 | |
|   UINT8   Xmm14[16];
 | |
|   UINT8   Xmm15[16];
 | |
|   UINT8   Reserved11[6 * 16];
 | |
| } DEBUG_DATA_X64_FX_SAVE_STATE;
 | |
| 
 | |
| ///
 | |
| ///  x64 processor context definition
 | |
| ///
 | |
| typedef struct {
 | |
|   UINT64                         ExceptionData;
 | |
|   DEBUG_DATA_X64_FX_SAVE_STATE   FxSaveState;
 | |
|   UINT64                         Dr0;
 | |
|   UINT64                         Dr1;
 | |
|   UINT64                         Dr2;
 | |
|   UINT64                         Dr3;
 | |
|   UINT64                         Dr6;
 | |
|   UINT64                         Dr7;
 | |
|   UINT64                         Eflags;
 | |
|   UINT64                         Ldtr;
 | |
|   UINT64                         Tr;
 | |
|   UINT64                         Gdtr[2];
 | |
|   UINT64                         Idtr[2];
 | |
|   UINT64                         Eip;
 | |
|   UINT64                         Gs;
 | |
|   UINT64                         Fs;
 | |
|   UINT64                         Es;
 | |
|   UINT64                         Ds;
 | |
|   UINT64                         Cs;
 | |
|   UINT64                         Ss;
 | |
|   UINT64                         Cr0;
 | |
|   UINT64                         Cr1;  ///< Reserved
 | |
|   UINT64                         Cr2;
 | |
|   UINT64                         Cr3;
 | |
|   UINT64                         Cr4;
 | |
|   UINT64                         Rdi;
 | |
|   UINT64                         Rsi;
 | |
|   UINT64                         Rbp;
 | |
|   UINT64                         Rsp;
 | |
|   UINT64                         Rdx;
 | |
|   UINT64                         Rcx;
 | |
|   UINT64                         Rbx;
 | |
|   UINT64                         Rax;
 | |
|   UINT64                         Cr8;
 | |
|   UINT64                         R8;
 | |
|   UINT64                         R9;
 | |
|   UINT64                         R10;
 | |
|   UINT64                         R11;
 | |
|   UINT64                         R12;
 | |
|   UINT64                         R13;
 | |
|   UINT64                         R14;
 | |
|   UINT64                         R15;
 | |
| } DEBUG_DATA_X64_SYSTEM_CONTEXT;
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| #endif
 | |
| 
 |