mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 04:23:32 +00:00
[WINESYNC] dbghelp/dwarf: Allow get_context_reg() to handle different register sizes.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id 3507615f35777f38a20407b7879f7c7d6510b12a by Zebediah Figura <z.figura12@gmail.com>
This commit is contained in:
parent
1825a61069
commit
8629cdb6af
7 changed files with 22 additions and 20 deletions
|
@ -70,7 +70,7 @@ enum st_mode {stm_start, stm_arm, stm_done};
|
||||||
static BOOL fetch_next_frame(struct cpu_stack_walk* csw, union ctx *pcontext,
|
static BOOL fetch_next_frame(struct cpu_stack_walk* csw, union ctx *pcontext,
|
||||||
DWORD_PTR curr_pc)
|
DWORD_PTR curr_pc)
|
||||||
{
|
{
|
||||||
DWORD_PTR xframe;
|
DWORD64 xframe;
|
||||||
CONTEXT *context = &pcontext->ctx;
|
CONTEXT *context = &pcontext->ctx;
|
||||||
DWORD oldReturn = context->Lr;
|
DWORD oldReturn = context->Lr;
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ enum st_mode {stm_start, stm_arm64, stm_done};
|
||||||
static BOOL fetch_next_frame(struct cpu_stack_walk* csw, union ctx *pcontext,
|
static BOOL fetch_next_frame(struct cpu_stack_walk* csw, union ctx *pcontext,
|
||||||
DWORD_PTR curr_pc)
|
DWORD_PTR curr_pc)
|
||||||
{
|
{
|
||||||
DWORD_PTR xframe;
|
DWORD64 xframe;
|
||||||
CONTEXT *context = &pcontext->ctx;
|
CONTEXT *context = &pcontext->ctx;
|
||||||
DWORD_PTR oldReturn = context->u.s.Lr;
|
DWORD_PTR oldReturn = context->u.s.Lr;
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@ static BOOL i386_get_addr(HANDLE hThread, const CONTEXT* ctx,
|
||||||
static BOOL fetch_next_frame32(struct cpu_stack_walk* csw,
|
static BOOL fetch_next_frame32(struct cpu_stack_walk* csw,
|
||||||
union ctx *pcontext, DWORD_PTR curr_pc)
|
union ctx *pcontext, DWORD_PTR curr_pc)
|
||||||
{
|
{
|
||||||
DWORD_PTR xframe;
|
DWORD64 xframe;
|
||||||
struct pdb_cmd_pair cpair[4];
|
struct pdb_cmd_pair cpair[4];
|
||||||
DWORD val32;
|
DWORD val32;
|
||||||
WOW64_CONTEXT *context = &pcontext->x86;
|
WOW64_CONTEXT *context = &pcontext->x86;
|
||||||
|
|
|
@ -577,7 +577,7 @@ static BOOL interpret_function_table_entry(struct cpu_stack_walk* csw,
|
||||||
static BOOL fetch_next_frame(struct cpu_stack_walk *csw, union ctx *pcontext,
|
static BOOL fetch_next_frame(struct cpu_stack_walk *csw, union ctx *pcontext,
|
||||||
DWORD_PTR curr_pc, void** prtf)
|
DWORD_PTR curr_pc, void** prtf)
|
||||||
{
|
{
|
||||||
DWORD_PTR cfa;
|
DWORD64 cfa;
|
||||||
RUNTIME_FUNCTION* rtf;
|
RUNTIME_FUNCTION* rtf;
|
||||||
DWORD64 base;
|
DWORD64 base;
|
||||||
CONTEXT *context = &pcontext->ctx;
|
CONTEXT *context = &pcontext->ctx;
|
||||||
|
|
|
@ -725,7 +725,7 @@ extern BOOL dwarf2_parse(struct module* module, unsigned long load_offse
|
||||||
const struct elf_thunk_area* thunks,
|
const struct elf_thunk_area* thunks,
|
||||||
struct image_file_map* fmap) DECLSPEC_HIDDEN;
|
struct image_file_map* fmap) DECLSPEC_HIDDEN;
|
||||||
extern BOOL dwarf2_virtual_unwind(struct cpu_stack_walk *csw, DWORD_PTR ip,
|
extern BOOL dwarf2_virtual_unwind(struct cpu_stack_walk *csw, DWORD_PTR ip,
|
||||||
union ctx *ctx, ULONG_PTR *cfa) DECLSPEC_HIDDEN;
|
union ctx *ctx, DWORD64 *cfa) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* rsym.c */
|
/* rsym.c */
|
||||||
extern BOOL rsym_parse(struct module* module, unsigned long load_offset,
|
extern BOOL rsym_parse(struct module* module, unsigned long load_offset,
|
||||||
|
|
|
@ -3031,18 +3031,19 @@ static void execute_cfa_instructions(dwarf2_traverse_context_t* ctx,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* retrieve a context register from its dwarf number */
|
/* retrieve a context register from its dwarf number */
|
||||||
static ULONG_PTR get_context_reg(struct cpu_stack_walk *csw, union ctx *context,
|
static DWORD64 get_context_reg(struct cpu_stack_walk *csw, union ctx *context,
|
||||||
ULONG_PTR dw_reg)
|
ULONG_PTR dw_reg)
|
||||||
{
|
{
|
||||||
unsigned regno = csw->cpu->map_dwarf_register(dw_reg, TRUE), sz;
|
unsigned regno = csw->cpu->map_dwarf_register(dw_reg, TRUE), sz;
|
||||||
ULONG_PTR* ptr = csw->cpu->fetch_context_reg(context, regno, &sz);
|
void* ptr = csw->cpu->fetch_context_reg(context, regno, &sz);
|
||||||
|
|
||||||
if (sz != sizeof(ULONG_PTR))
|
if (sz == 8)
|
||||||
{
|
return *(DWORD64 *)ptr;
|
||||||
FIXME("reading register %lu/%u of wrong size %u\n", dw_reg, regno, sz);
|
else if (sz == 4)
|
||||||
return 0;
|
return *(DWORD *)ptr;
|
||||||
}
|
|
||||||
return *ptr;
|
FIXME("unhandled size %d\n", sz);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set a context register from its dwarf number */
|
/* set a context register from its dwarf number */
|
||||||
|
@ -3102,7 +3103,8 @@ static ULONG_PTR eval_expression(const struct module* module, struct cpu_stack_w
|
||||||
const unsigned char* zp, union ctx *context)
|
const unsigned char* zp, union ctx *context)
|
||||||
{
|
{
|
||||||
dwarf2_traverse_context_t ctx;
|
dwarf2_traverse_context_t ctx;
|
||||||
ULONG_PTR reg, sz, tmp, stack[64];
|
ULONG_PTR reg, sz, tmp;
|
||||||
|
DWORD64 stack[64];
|
||||||
int sp = -1;
|
int sp = -1;
|
||||||
ULONG_PTR len;
|
ULONG_PTR len;
|
||||||
|
|
||||||
|
@ -3140,7 +3142,7 @@ static ULONG_PTR eval_expression(const struct module* module, struct cpu_stack_w
|
||||||
case DW_OP_deref:
|
case DW_OP_deref:
|
||||||
if (!sw_read_mem(csw, stack[sp], &tmp, sizeof(tmp)))
|
if (!sw_read_mem(csw, stack[sp], &tmp, sizeof(tmp)))
|
||||||
{
|
{
|
||||||
ERR("Couldn't read memory at %lx\n", stack[sp]);
|
ERR("Couldn't read memory at %s\n", wine_dbgstr_longlong(stack[sp]));
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
}
|
}
|
||||||
stack[sp] = tmp;
|
stack[sp] = tmp;
|
||||||
|
@ -3190,7 +3192,7 @@ static ULONG_PTR eval_expression(const struct module* module, struct cpu_stack_w
|
||||||
sz = dwarf2_parse_byte(&ctx);
|
sz = dwarf2_parse_byte(&ctx);
|
||||||
if (!sw_read_mem(csw, stack[sp], &tmp, sz))
|
if (!sw_read_mem(csw, stack[sp], &tmp, sz))
|
||||||
{
|
{
|
||||||
ERR("Couldn't read memory at %lx\n", stack[sp]);
|
ERR("Couldn't read memory at %s\n", wine_dbgstr_longlong(stack[sp]));
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
}
|
}
|
||||||
/* do integral promotion */
|
/* do integral promotion */
|
||||||
|
@ -3211,7 +3213,7 @@ static ULONG_PTR eval_expression(const struct module* module, struct cpu_stack_w
|
||||||
}
|
}
|
||||||
|
|
||||||
static void apply_frame_state(const struct module* module, struct cpu_stack_walk* csw,
|
static void apply_frame_state(const struct module* module, struct cpu_stack_walk* csw,
|
||||||
union ctx *context, struct frame_state *state, ULONG_PTR* cfa)
|
union ctx *context, struct frame_state *state, DWORD64 *cfa)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
ULONG_PTR value;
|
ULONG_PTR value;
|
||||||
|
@ -3223,7 +3225,7 @@ static void apply_frame_state(const struct module* module, struct cpu_stack_walk
|
||||||
*cfa = eval_expression(module, csw, (const unsigned char*)state->cfa_offset, context);
|
*cfa = eval_expression(module, csw, (const unsigned char*)state->cfa_offset, context);
|
||||||
if (!sw_read_mem(csw, *cfa, cfa, sizeof(*cfa)))
|
if (!sw_read_mem(csw, *cfa, cfa, sizeof(*cfa)))
|
||||||
{
|
{
|
||||||
WARN("Couldn't read memory at %p\n", (void*)*cfa);
|
WARN("Couldn't read memory at %s\n", wine_dbgstr_longlong(*cfa));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3268,7 +3270,7 @@ static void apply_frame_state(const struct module* module, struct cpu_stack_walk
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BOOL dwarf2_virtual_unwind(struct cpu_stack_walk *csw, ULONG_PTR ip,
|
BOOL dwarf2_virtual_unwind(struct cpu_stack_walk *csw, ULONG_PTR ip,
|
||||||
union ctx *context, ULONG_PTR *cfa)
|
union ctx *context, DWORD64 *cfa)
|
||||||
{
|
{
|
||||||
struct module_pair pair;
|
struct module_pair pair;
|
||||||
struct frame_info info;
|
struct frame_info info;
|
||||||
|
|
|
@ -3,4 +3,4 @@ directories:
|
||||||
files:
|
files:
|
||||||
include/dbghelp.h: sdk/include/psdk/dbghelp.h
|
include/dbghelp.h: sdk/include/psdk/dbghelp.h
|
||||||
tags:
|
tags:
|
||||||
wine: 9ae588a96ef5f07ba22e0fadc3aacf61b274efe5
|
wine: 3507615f35777f38a20407b7879f7c7d6510b12a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue