Lines Matching +full:0 +full:x64
28 static size_t win_dump_ptr_size(bool x64) in win_dump_ptr_size() argument
30 return x64 ? sizeof(uint64_t) : sizeof(uint32_t); in win_dump_ptr_size()
33 #define _WIN_DUMP_FIELD(f) (x64 ? h->x64.f : h->x32.f)
36 #define _WIN_DUMP_FIELD_PTR(f) (x64 ? (void *)&h->x64.f : (void *)&h->x32.f)
39 #define _WIN_DUMP_FIELD_SIZE(f) (x64 ? sizeof(h->x64.f) : sizeof(h->x32.f))
42 static size_t win_dump_ctx_size(bool x64) in win_dump_ctx_size() argument
44 return x64 ? sizeof(WinContext64) : sizeof(WinContext32); in win_dump_ctx_size()
55 size_t total = 0; in write_run()
63 " 0x%016" PRIx64 "-0x%016" PRIx64, addr, addr + size - 1); in write_run()
64 return 0; in write_run()
72 return 0; in write_run()
83 static void write_runs(DumpState *s, WinDumpHeader *h, bool x64, Error **errp) in write_runs() argument
89 for (i = 0; i < WIN_DUMP_FIELD(PhysicalMemoryBlock.NumberOfRuns); i++) { in write_runs()
100 static int cpu_read_ptr(bool x64, CPUState *cpu, uint64_t addr, uint64_t *ptr) in cpu_read_ptr() argument
106 ret = cpu_memory_rw_debug(cpu, addr, x64 ? (void *)&ptr64 : (void *)&ptr32, in cpu_read_ptr()
107 win_dump_ptr_size(x64), 0); in cpu_read_ptr()
109 *ptr = x64 ? ptr64 : ptr32; in cpu_read_ptr()
114 static void patch_mm_pfn_database(WinDumpHeader *h, bool x64, Error **errp) in patch_mm_pfn_database() argument
119 WIN_DUMP_FIELD_SIZE(PfnDatabase), 0)) { in patch_mm_pfn_database()
125 static void patch_bugcheck_data(WinDumpHeader *h, bool x64, Error **errp) in patch_bugcheck_data() argument
129 if (cpu_read_ptr(x64, first_cpu, in patch_bugcheck_data()
138 WIN_DUMP_FIELD_SIZE(BugcheckData), 0)) { in patch_bugcheck_data()
155 static void patch_header(WinDumpHeader *h, bool x64) in patch_header() argument
159 if (x64) { in patch_header()
160 h->x64.RequiredDumpSpace = sizeof(WinDumpHeader64) + in patch_header()
161 (h->x64.PhysicalMemoryBlock.NumberOfPages << TARGET_PAGE_BITS); in patch_header()
162 h->x64.PhysicalMemoryBlock.unused = 0; in patch_header()
163 h->x64.unused1 = 0; in patch_header()
169 patch_mm_pfn_database(h, x64, &local_err); in patch_header()
174 patch_bugcheck_data(h, x64, &local_err); in patch_header()
180 static bool check_header(WinDumpHeader *h, bool *x64, Error **errp) in check_header() argument
191 *x64 = false; in check_header()
193 *x64 = true; in check_header()
203 static void check_kdbg(WinDumpHeader *h, bool x64, Error **errp) in check_kdbg() argument
213 (uint8_t *)&read_OwnerTag, sizeof(read_OwnerTag), 0)) { in check_kdbg()
237 if (x64) { in check_kdbg()
238 h->x64.KdDebuggerDataBlock = KdDebuggerDataBlock; in check_kdbg()
249 static void patch_and_save_context(WinDumpHeader *h, bool x64, in patch_and_save_context() argument
257 int i = 0; in patch_and_save_context()
259 if (cpu_read_ptr(x64, first_cpu, in patch_and_save_context()
268 (uint8_t *)&OffsetPrcbContext, sizeof(OffsetPrcbContext), 0)) { in patch_and_save_context()
287 if (cpu_read_ptr(x64, first_cpu, in patch_and_save_context()
288 KiProcessorBlock + i * win_dump_ptr_size(x64), in patch_and_save_context()
295 if (cpu_read_ptr(x64, first_cpu, in patch_and_save_context()
305 if (x64) { in patch_and_save_context()
306 ctx.x64 = (WinContext64){ in patch_and_save_context()
310 .SegEs = env->segs[0].selector, in patch_and_save_context()
318 .Dr0 = env->dr[0], in patch_and_save_context()
351 .SegEs = env->segs[0].selector, in patch_and_save_context()
359 .Dr0 = env->dr[0], in patch_and_save_context()
380 &saved_ctx[i].ctx, win_dump_ctx_size(x64), 0)) { in patch_and_save_context()
386 &ctx, win_dump_ctx_size(x64), 1)) { in patch_and_save_context()
395 static void restore_context(WinDumpHeader *h, bool x64, in restore_context() argument
400 for (i = 0; i < WIN_DUMP_FIELD(NumberProcessors); i++) { in restore_context()
402 &saved_ctx[i].ctx, win_dump_ctx_size(x64), 1)) { in restore_context()
415 bool x64 = true; in create_win_dump() local
424 if (!check_header(h, &x64, &local_err)) { in create_win_dump()
429 hdr_size = x64 ? sizeof(WinDumpHeader64) : sizeof(WinDumpHeader32); in create_win_dump()
438 check_kdbg(h, x64, &local_err); in create_win_dump()
444 patch_header(h, x64); in create_win_dump()
453 patch_and_save_context(h, x64, saved_ctx, &local_err); in create_win_dump()
467 write_runs(s, h, x64, &local_err); in create_win_dump()
474 restore_context(h, x64, saved_ctx); in create_win_dump()