ReactOS 0.4.16-dev-2615-g89221f5
cpu_x86_64.c File Reference
#include <assert.h>
#include "ntstatus.h"
#include "dbghelp_private.h"
#include "winternl.h"
#include "wine/debug.h"
Include dependency graph for cpu_x86_64.c:

Go to the source code of this file.

Classes

union  _UNWIND_CODE
 
struct  _UNWIND_INFO
 

Macros

#define NONAMELESSUNION
 
#define NONAMELESSSTRUCT
 
#define WIN32_NO_STATUS
 

Typedefs

typedef enum _UNWIND_OP_CODES UNWIND_CODE_OPS
 
typedef union _UNWIND_CODE UNWIND_CODE
 
typedef union _UNWIND_CODEPUNWIND_CODE
 
typedef struct _UNWIND_INFO UNWIND_INFO
 
typedef struct _UNWIND_INFOPUNWIND_INFO
 

Enumerations

enum  _UNWIND_OP_CODES {
  UWOP_PUSH_NONVOL = 0 , UWOP_ALLOC_LARGE , UWOP_ALLOC_SMALL , UWOP_SET_FPREG ,
  UWOP_SAVE_NONVOL , UWOP_SAVE_NONVOL_FAR , UWOP_SAVE_XMM128 , UWOP_SAVE_XMM128_FAR ,
  UWOP_PUSH_MACHFRAME
}
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dbghelp)
 
static BOOL x86_64_get_addr (HANDLE hThread, const CONTEXT *ctx, enum cpu_addr ca, ADDRESS64 *addr)
 
static BOOL x86_64_stack_walk (struct cpu_stack_walk *csw, STACKFRAME64 *frame, union ctx *ctx)
 
static voidx86_64_find_runtime_function (struct module *module, DWORD64 addr)
 
static unsigned x86_64_map_dwarf_register (unsigned regno, const struct module *module, BOOL eh_frame)
 
static voidx86_64_fetch_context_reg (union ctx *pctx, unsigned regno, unsigned *size)
 
static const charx86_64_fetch_regname (unsigned regno)
 
static BOOL x86_64_fetch_minidump_thread (struct dump_context *dc, unsigned index, unsigned flags, const CONTEXT *ctx)
 
static BOOL x86_64_fetch_minidump_module (struct dump_context *dc, unsigned index, unsigned flags)
 

Variables

DECLSPEC_HIDDEN struct cpu cpu_x86_64
 

Macro Definition Documentation

◆ NONAMELESSSTRUCT

#define NONAMELESSSTRUCT

Definition at line 25 of file cpu_x86_64.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 24 of file cpu_x86_64.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 27 of file cpu_x86_64.c.

Typedef Documentation

◆ PUNWIND_CODE

typedef union _UNWIND_CODE * PUNWIND_CODE

◆ PUNWIND_INFO

◆ UNWIND_CODE

typedef union _UNWIND_CODE UNWIND_CODE

◆ UNWIND_CODE_OPS

◆ UNWIND_INFO

Enumeration Type Documentation

◆ _UNWIND_OP_CODES

Enumerator
UWOP_PUSH_NONVOL 
UWOP_ALLOC_LARGE 
UWOP_ALLOC_SMALL 
UWOP_SET_FPREG 
UWOP_SAVE_NONVOL 
UWOP_SAVE_NONVOL_FAR 
UWOP_SAVE_XMM128 
UWOP_SAVE_XMM128_FAR 
UWOP_PUSH_MACHFRAME 

Definition at line 36 of file cpu_x86_64.c.

37{
enum _UNWIND_OP_CODES UNWIND_CODE_OPS
@ UWOP_SET_FPREG
Definition: cpu_x86_64.c:41
@ UWOP_SAVE_XMM128_FAR
Definition: cpu_x86_64.c:45
@ UWOP_ALLOC_LARGE
Definition: cpu_x86_64.c:39
@ UWOP_PUSH_MACHFRAME
Definition: cpu_x86_64.c:46
@ UWOP_SAVE_XMM128
Definition: cpu_x86_64.c:44
@ UWOP_SAVE_NONVOL_FAR
Definition: cpu_x86_64.c:43
@ UWOP_PUSH_NONVOL
Definition: cpu_x86_64.c:38
@ UWOP_ALLOC_SMALL
Definition: cpu_x86_64.c:40
@ UWOP_SAVE_NONVOL
Definition: cpu_x86_64.c:42

Function Documentation

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dbghelp  )

◆ x86_64_fetch_context_reg()

static void * x86_64_fetch_context_reg ( union ctx pctx,
unsigned  regno,
unsigned size 
)
static

Definition at line 792 of file cpu_x86_64.c.

793{
794#ifdef __x86_64__
795 CONTEXT *ctx = &pctx->ctx;
796
797 switch (regno)
798 {
799 case CV_AMD64_RAX: *size = sizeof(ctx->Rax); return &ctx->Rax;
800 case CV_AMD64_RDX: *size = sizeof(ctx->Rdx); return &ctx->Rdx;
801 case CV_AMD64_RCX: *size = sizeof(ctx->Rcx); return &ctx->Rcx;
802 case CV_AMD64_RBX: *size = sizeof(ctx->Rbx); return &ctx->Rbx;
803 case CV_AMD64_RSI: *size = sizeof(ctx->Rsi); return &ctx->Rsi;
804 case CV_AMD64_RDI: *size = sizeof(ctx->Rdi); return &ctx->Rdi;
805 case CV_AMD64_RBP: *size = sizeof(ctx->Rbp); return &ctx->Rbp;
806 case CV_AMD64_RSP: *size = sizeof(ctx->Rsp); return &ctx->Rsp;
807 case CV_AMD64_R8: *size = sizeof(ctx->R8); return &ctx->R8;
808 case CV_AMD64_R9: *size = sizeof(ctx->R9); return &ctx->R9;
809 case CV_AMD64_R10: *size = sizeof(ctx->R10); return &ctx->R10;
810 case CV_AMD64_R11: *size = sizeof(ctx->R11); return &ctx->R11;
811 case CV_AMD64_R12: *size = sizeof(ctx->R12); return &ctx->R12;
812 case CV_AMD64_R13: *size = sizeof(ctx->R13); return &ctx->R13;
813 case CV_AMD64_R14: *size = sizeof(ctx->R14); return &ctx->R14;
814 case CV_AMD64_R15: *size = sizeof(ctx->R15); return &ctx->R15;
815 case CV_AMD64_RIP: *size = sizeof(ctx->Rip); return &ctx->Rip;
816
817 case CV_AMD64_XMM0 + 0: *size = sizeof(ctx->u.s.Xmm0 ); return &ctx->u.s.Xmm0;
818 case CV_AMD64_XMM0 + 1: *size = sizeof(ctx->u.s.Xmm1 ); return &ctx->u.s.Xmm1;
819 case CV_AMD64_XMM0 + 2: *size = sizeof(ctx->u.s.Xmm2 ); return &ctx->u.s.Xmm2;
820 case CV_AMD64_XMM0 + 3: *size = sizeof(ctx->u.s.Xmm3 ); return &ctx->u.s.Xmm3;
821 case CV_AMD64_XMM0 + 4: *size = sizeof(ctx->u.s.Xmm4 ); return &ctx->u.s.Xmm4;
822 case CV_AMD64_XMM0 + 5: *size = sizeof(ctx->u.s.Xmm5 ); return &ctx->u.s.Xmm5;
823 case CV_AMD64_XMM0 + 6: *size = sizeof(ctx->u.s.Xmm6 ); return &ctx->u.s.Xmm6;
824 case CV_AMD64_XMM0 + 7: *size = sizeof(ctx->u.s.Xmm7 ); return &ctx->u.s.Xmm7;
825 case CV_AMD64_XMM8 + 0: *size = sizeof(ctx->u.s.Xmm8 ); return &ctx->u.s.Xmm8;
826 case CV_AMD64_XMM8 + 1: *size = sizeof(ctx->u.s.Xmm9 ); return &ctx->u.s.Xmm9;
827 case CV_AMD64_XMM8 + 2: *size = sizeof(ctx->u.s.Xmm10); return &ctx->u.s.Xmm10;
828 case CV_AMD64_XMM8 + 3: *size = sizeof(ctx->u.s.Xmm11); return &ctx->u.s.Xmm11;
829 case CV_AMD64_XMM8 + 4: *size = sizeof(ctx->u.s.Xmm12); return &ctx->u.s.Xmm12;
830 case CV_AMD64_XMM8 + 5: *size = sizeof(ctx->u.s.Xmm13); return &ctx->u.s.Xmm13;
831 case CV_AMD64_XMM8 + 6: *size = sizeof(ctx->u.s.Xmm14); return &ctx->u.s.Xmm14;
832 case CV_AMD64_XMM8 + 7: *size = sizeof(ctx->u.s.Xmm15); return &ctx->u.s.Xmm15;
833
834 case CV_AMD64_ST0 + 0: *size = sizeof(ctx->u.s.Legacy[0]); return &ctx->u.s.Legacy[0];
835 case CV_AMD64_ST0 + 1: *size = sizeof(ctx->u.s.Legacy[1]); return &ctx->u.s.Legacy[1];
836 case CV_AMD64_ST0 + 2: *size = sizeof(ctx->u.s.Legacy[2]); return &ctx->u.s.Legacy[2];
837 case CV_AMD64_ST0 + 3: *size = sizeof(ctx->u.s.Legacy[3]); return &ctx->u.s.Legacy[3];
838 case CV_AMD64_ST0 + 4: *size = sizeof(ctx->u.s.Legacy[4]); return &ctx->u.s.Legacy[4];
839 case CV_AMD64_ST0 + 5: *size = sizeof(ctx->u.s.Legacy[5]); return &ctx->u.s.Legacy[5];
840 case CV_AMD64_ST0 + 6: *size = sizeof(ctx->u.s.Legacy[6]); return &ctx->u.s.Legacy[6];
841 case CV_AMD64_ST0 + 7: *size = sizeof(ctx->u.s.Legacy[7]); return &ctx->u.s.Legacy[7];
842
843 case CV_AMD64_EFLAGS: *size = sizeof(ctx->EFlags); return &ctx->EFlags;
844 case CV_AMD64_ES: *size = sizeof(ctx->SegEs); return &ctx->SegEs;
845 case CV_AMD64_CS: *size = sizeof(ctx->SegCs); return &ctx->SegCs;
846 case CV_AMD64_SS: *size = sizeof(ctx->SegSs); return &ctx->SegSs;
847 case CV_AMD64_DS: *size = sizeof(ctx->SegDs); return &ctx->SegDs;
848 case CV_AMD64_FS: *size = sizeof(ctx->SegFs); return &ctx->SegFs;
849 case CV_AMD64_GS: *size = sizeof(ctx->SegGs); return &ctx->SegGs;
850
851 }
852#endif
853 FIXME("Unknown register %x\n", regno);
854 return NULL;
855}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define NULL
Definition: types.h:112
@ CV_AMD64_XMM8
Definition: compat.h:2186
@ CV_AMD64_RSI
Definition: compat.h:2192
@ CV_AMD64_XMM0
Definition: compat.h:2161
@ CV_AMD64_RIP
Definition: compat.h:2129
@ CV_AMD64_R9
Definition: compat.h:2198
@ CV_AMD64_ST0
Definition: compat.h:2149
@ CV_AMD64_CS
Definition: compat.h:2123
@ CV_AMD64_R13
Definition: compat.h:2202
@ CV_AMD64_RBX
Definition: compat.h:2189
@ CV_AMD64_RDI
Definition: compat.h:2193
@ CV_AMD64_FS
Definition: compat.h:2126
@ CV_AMD64_ES
Definition: compat.h:2122
@ CV_AMD64_EFLAGS
Definition: compat.h:2130
@ CV_AMD64_SS
Definition: compat.h:2124
@ CV_AMD64_R15
Definition: compat.h:2204
@ CV_AMD64_R14
Definition: compat.h:2203
@ CV_AMD64_R12
Definition: compat.h:2201
@ CV_AMD64_RDX
Definition: compat.h:2191
@ CV_AMD64_R11
Definition: compat.h:2200
@ CV_AMD64_R8
Definition: compat.h:2197
@ CV_AMD64_RBP
Definition: compat.h:2194
@ CV_AMD64_RAX
Definition: compat.h:2188
@ CV_AMD64_GS
Definition: compat.h:2127
@ CV_AMD64_RCX
Definition: compat.h:2190
@ CV_AMD64_RSP
Definition: compat.h:2195
@ CV_AMD64_R10
Definition: compat.h:2199
@ CV_AMD64_DS
Definition: compat.h:2125
GLsizeiptr size
Definition: glext.h:5919
CONTEXT ctx

◆ x86_64_fetch_minidump_module()

static BOOL x86_64_fetch_minidump_module ( struct dump_context dc,
unsigned  index,
unsigned  flags 
)
static

Definition at line 931 of file cpu_x86_64.c.

932{
933 /* FIXME: not sure about the flags... */
934 if (1)
935 {
936 /* FIXME: crop values across module boundaries, */
937#ifdef __x86_64__
938 struct process* pcs;
939 struct module* module;
940 const RUNTIME_FUNCTION* rtf;
941 ULONG size;
942
943 if (!(pcs = process_find_by_handle(dc->process->handle)) ||
944 !(module = module_find_by_addr(pcs, dc->modules[index].base, DMT_UNKNOWN)))
945 return FALSE;
946 rtf = (const RUNTIME_FUNCTION*)pe_map_directory(module, IMAGE_DIRECTORY_ENTRY_EXCEPTION, &size);
947 if (rtf)
948 {
949 const RUNTIME_FUNCTION* end = (const RUNTIME_FUNCTION*)((const char*)rtf + size);
951
952 while (rtf + 1 < end)
953 {
954 while (rtf->UnwindData & 1) /* follow chained entry */
955 {
956 FIXME("RunTime_Function outside IMAGE_DIRECTORY_ENTRY_EXCEPTION unimplemented yet!\n");
957 return FALSE;
958 /* we need to read into the other process */
959 /* rtf = (RUNTIME_FUNCTION*)(module->module.BaseOfImage + (rtf->UnwindData & ~1)); */
960 }
961 if (read_process_memory(dc->process, dc->modules[index].base + rtf->UnwindData, &ui, sizeof(ui)))
962 minidump_add_memory_block(dc, dc->modules[index].base + rtf->UnwindData,
963 FIELD_OFFSET(UNWIND_INFO, UnwindCode) + ui.CountOfCodes * sizeof(UNWIND_CODE), 0);
964 rtf++;
965 }
966 }
967#endif
968 }
969
970 return TRUE;
971}
HDC dc
Definition: cylfrac.c:34
const char * pe_map_directory(struct module *module, int dirno, DWORD *size) DECLSPEC_HIDDEN
Definition: pe_module.c:331
static BOOL read_process_memory(const struct process *process, UINT64 addr, void *buf, size_t size)
void minidump_add_memory_block(struct dump_context *dc, ULONG64 base, ULONG size, ULONG rva) DECLSPEC_HIDDEN
Definition: minidump.c:355
struct module * module_find_by_addr(const struct process *pcs, DWORD64 addr, enum module_type type) DECLSPEC_HIDDEN
Definition: module.c:420
@ DMT_UNKNOWN
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
struct process * process_find_by_handle(HANDLE hProcess)
Definition: dbghelp.c:99
GLuint GLuint end
Definition: gl.h:1545
GLuint index
Definition: glext.h:6031
UINT ui
Definition: oleauto.h:49
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION
Definition: pedump.c:262
IMAGEHLP_MODULEW64 module
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
uint32_t ULONG
Definition: typedefs.h:59

◆ x86_64_fetch_minidump_thread()

static BOOL x86_64_fetch_minidump_thread ( struct dump_context dc,
unsigned  index,
unsigned  flags,
const CONTEXT ctx 
)
static

Definition at line 917 of file cpu_x86_64.c.

918{
919 if (ctx->ContextFlags && (flags & ThreadWriteInstructionWindow))
920 {
921 /* FIXME: crop values across module boundaries, */
922#ifdef __x86_64__
923 ULONG64 base = ctx->Rip <= 0x80 ? 0 : ctx->Rip - 0x80;
924 minidump_add_memory_block(dc, base, ctx->Rip + 0x80 - base, 0);
925#endif
926 }
927
928 return TRUE;
929}
@ ThreadWriteInstructionWindow
Definition: compat.h:1150
GLbitfield flags
Definition: glext.h:7161
unsigned __int64 ULONG64
Definition: imports.h:198

◆ x86_64_fetch_regname()

static const char * x86_64_fetch_regname ( unsigned  regno)
static

Definition at line 857 of file cpu_x86_64.c.

858{
859 switch (regno)
860 {
861 case CV_AMD64_RAX: return "rax";
862 case CV_AMD64_RDX: return "rdx";
863 case CV_AMD64_RCX: return "rcx";
864 case CV_AMD64_RBX: return "rbx";
865 case CV_AMD64_RSI: return "rsi";
866 case CV_AMD64_RDI: return "rdi";
867 case CV_AMD64_RBP: return "rbp";
868 case CV_AMD64_RSP: return "rsp";
869 case CV_AMD64_R8: return "r8";
870 case CV_AMD64_R9: return "r9";
871 case CV_AMD64_R10: return "r10";
872 case CV_AMD64_R11: return "r11";
873 case CV_AMD64_R12: return "r12";
874 case CV_AMD64_R13: return "r13";
875 case CV_AMD64_R14: return "r14";
876 case CV_AMD64_R15: return "r15";
877 case CV_AMD64_RIP: return "rip";
878
879 case CV_AMD64_XMM0 + 0: return "xmm0";
880 case CV_AMD64_XMM0 + 1: return "xmm1";
881 case CV_AMD64_XMM0 + 2: return "xmm2";
882 case CV_AMD64_XMM0 + 3: return "xmm3";
883 case CV_AMD64_XMM0 + 4: return "xmm4";
884 case CV_AMD64_XMM0 + 5: return "xmm5";
885 case CV_AMD64_XMM0 + 6: return "xmm6";
886 case CV_AMD64_XMM0 + 7: return "xmm7";
887 case CV_AMD64_XMM8 + 0: return "xmm8";
888 case CV_AMD64_XMM8 + 1: return "xmm9";
889 case CV_AMD64_XMM8 + 2: return "xmm10";
890 case CV_AMD64_XMM8 + 3: return "xmm11";
891 case CV_AMD64_XMM8 + 4: return "xmm12";
892 case CV_AMD64_XMM8 + 5: return "xmm13";
893 case CV_AMD64_XMM8 + 6: return "xmm14";
894 case CV_AMD64_XMM8 + 7: return "xmm15";
895
896 case CV_AMD64_ST0 + 0: return "st0";
897 case CV_AMD64_ST0 + 1: return "st1";
898 case CV_AMD64_ST0 + 2: return "st2";
899 case CV_AMD64_ST0 + 3: return "st3";
900 case CV_AMD64_ST0 + 4: return "st4";
901 case CV_AMD64_ST0 + 5: return "st5";
902 case CV_AMD64_ST0 + 6: return "st6";
903 case CV_AMD64_ST0 + 7: return "st7";
904
905 case CV_AMD64_EFLAGS: return "eflags";
906 case CV_AMD64_ES: return "es";
907 case CV_AMD64_CS: return "cs";
908 case CV_AMD64_SS: return "ss";
909 case CV_AMD64_DS: return "ds";
910 case CV_AMD64_FS: return "fs";
911 case CV_AMD64_GS: return "gs";
912 }
913 FIXME("Unknown register %x\n", regno);
914 return NULL;
915}

◆ x86_64_find_runtime_function()

static void * x86_64_find_runtime_function ( struct module module,
DWORD64  addr 
)
static

Definition at line 708 of file cpu_x86_64.c.

709{
710#ifdef __x86_64__
711 RUNTIME_FUNCTION* rtf;
712 ULONG size;
713 int min, max;
714
715 rtf = (RUNTIME_FUNCTION*)pe_map_directory(module, IMAGE_DIRECTORY_ENTRY_EXCEPTION, &size);
716 if (rtf) for (min = 0, max = size / sizeof(*rtf); min <= max; )
717 {
718 int pos = (min + max) / 2;
719 if (addr < module->module.BaseOfImage + rtf[pos].BeginAddress) max = pos - 1;
720 else if (addr >= module->module.BaseOfImage + rtf[pos].EndAddress) min = pos + 1;
721 else
722 {
723 rtf += pos;
724 while (rtf->UnwindData & 1) /* follow chained entry */
725 {
726 FIXME("RunTime_Function outside IMAGE_DIRECTORY_ENTRY_EXCEPTION unimplemented yet!\n");
727 return NULL;
728 /* we need to read into the other process */
729 /* rtf = (RUNTIME_FUNCTION*)(module->module.BaseOfImage + (rtf->UnwindData & ~1)); */
730 }
731 return rtf;
732 }
733 }
734#endif
735 return NULL;
736}
GLenum const GLvoid * addr
Definition: glext.h:9621
#define min(a, b)
Definition: monoChain.cc:55
DWORD64 BaseOfImage
Definition: compat.h:1070
#define max(a, b)
Definition: svc.c:63

◆ x86_64_get_addr()

static BOOL x86_64_get_addr ( HANDLE  hThread,
const CONTEXT ctx,
enum cpu_addr  ca,
ADDRESS64 addr 
)
static

Definition at line 79 of file cpu_x86_64.c.

81{
82 addr->Mode = AddrModeFlat;
83 switch (ca)
84 {
85#ifdef __x86_64__
86 case cpu_addr_pc: addr->Segment = ctx->SegCs; addr->Offset = ctx->Rip; return TRUE;
87 case cpu_addr_stack: addr->Segment = ctx->SegSs; addr->Offset = ctx->Rsp; return TRUE;
88 case cpu_addr_frame: addr->Segment = ctx->SegSs; addr->Offset = ctx->Rbp; return TRUE;
89#endif
90 default: addr->Mode = -1;
91 return FALSE;
92 }
93}
@ cpu_addr_frame
@ cpu_addr_pc
@ cpu_addr_stack
static const WCHAR ca[]
Definition: main.c:457
@ AddrModeFlat
Definition: compat.h:1159

◆ x86_64_map_dwarf_register()

static unsigned x86_64_map_dwarf_register ( unsigned  regno,
const struct module module,
BOOL  eh_frame 
)
static

Definition at line 738 of file cpu_x86_64.c.

739{
740 unsigned reg;
741
742 if (regno >= 17 && regno <= 24)
743 reg = CV_AMD64_XMM0 + regno - 17;
744 else if (regno >= 25 && regno <= 32)
745 reg = CV_AMD64_XMM8 + regno - 25;
746 else if (regno >= 33 && regno <= 40)
747 reg = CV_AMD64_ST0 + regno - 33;
748 else switch (regno)
749 {
750 case 0: reg = CV_AMD64_RAX; break;
751 case 1: reg = CV_AMD64_RDX; break;
752 case 2: reg = CV_AMD64_RCX; break;
753 case 3: reg = CV_AMD64_RBX; break;
754 case 4: reg = CV_AMD64_RSI; break;
755 case 5: reg = CV_AMD64_RDI; break;
756 case 6: reg = CV_AMD64_RBP; break;
757 case 7: reg = CV_AMD64_RSP; break;
758 case 8: reg = CV_AMD64_R8; break;
759 case 9: reg = CV_AMD64_R9; break;
760 case 10: reg = CV_AMD64_R10; break;
761 case 11: reg = CV_AMD64_R11; break;
762 case 12: reg = CV_AMD64_R12; break;
763 case 13: reg = CV_AMD64_R13; break;
764 case 14: reg = CV_AMD64_R14; break;
765 case 15: reg = CV_AMD64_R15; break;
766 case 16: reg = CV_AMD64_RIP; break;
767 case 49: reg = CV_AMD64_EFLAGS; break;
768 case 50: reg = CV_AMD64_ES; break;
769 case 51: reg = CV_AMD64_CS; break;
770 case 52: reg = CV_AMD64_SS; break;
771 case 53: reg = CV_AMD64_DS; break;
772 case 54: reg = CV_AMD64_FS; break;
773 case 55: reg = CV_AMD64_GS; break;
774 case 62: reg = CV_AMD64_TR; break;
775 case 63: reg = CV_AMD64_LDTR; break;
776 case 64: reg = CV_AMD64_MXCSR; break;
777 case 65: reg = CV_AMD64_CTRL; break;
778 case 66: reg = CV_AMD64_STAT; break;
779/*
780 * 56-57 reserved
781 * 58 %fs.base
782 * 59 %gs.base
783 * 60-61 reserved
784 */
785 default:
786 FIXME("Don't know how to map register %d\n", regno);
787 return 0;
788 }
789 return reg;
790}
@ CV_AMD64_LDTR
Definition: compat.h:2145
@ CV_AMD64_MXCSR
Definition: compat.h:2165
@ CV_AMD64_CTRL
Definition: compat.h:2150
@ CV_AMD64_STAT
Definition: compat.h:2151
@ CV_AMD64_TR
Definition: compat.h:2146
static int reg
Definition: i386-dis.c:1290

◆ x86_64_stack_walk()

static BOOL x86_64_stack_walk ( struct cpu_stack_walk csw,
STACKFRAME64 frame,
union ctx ctx 
)
static

Definition at line 701 of file cpu_x86_64.c.

703{
704 return FALSE;
705}

Variable Documentation

◆ cpu_x86_64

Initial value:
= {
8,
}
static BOOL x86_64_stack_walk(struct cpu_stack_walk *csw, STACKFRAME64 *frame, union ctx *ctx)
Definition: cpu_x86_64.c:701
static BOOL x86_64_fetch_minidump_module(struct dump_context *dc, unsigned index, unsigned flags)
Definition: cpu_x86_64.c:931
static BOOL x86_64_get_addr(HANDLE hThread, const CONTEXT *ctx, enum cpu_addr ca, ADDRESS64 *addr)
Definition: cpu_x86_64.c:79
static void * x86_64_find_runtime_function(struct module *module, DWORD64 addr)
Definition: cpu_x86_64.c:708
static const char * x86_64_fetch_regname(unsigned regno)
Definition: cpu_x86_64.c:857
static BOOL x86_64_fetch_minidump_thread(struct dump_context *dc, unsigned index, unsigned flags, const CONTEXT *ctx)
Definition: cpu_x86_64.c:917
static void * x86_64_fetch_context_reg(union ctx *pctx, unsigned regno, unsigned *size)
Definition: cpu_x86_64.c:792
static unsigned x86_64_map_dwarf_register(unsigned regno, const struct module *module, BOOL eh_frame)
Definition: cpu_x86_64.c:738
#define IMAGE_FILE_MACHINE_AMD64
Definition: ntimage.h:17

Definition at line 973 of file cpu_x86_64.c.