Eric Pouech : winedbg: Add 'set' command to change data model.
Alexandre Julliard
julliard at winehq.org
Fri May 13 15:45:13 CDT 2022
Module: wine
Branch: master
Commit: 6eb18ae6920da897af7e22f43347b3044f172e3c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6eb18ae6920da897af7e22f43347b3044f172e3c
Author: Eric Pouech <eric.pouech at gmail.com>
Date: Tue May 10 17:11:08 2022 +0200
winedbg: Add 'set' command to change data model.
Signed-off-by: Eric Pouech <eric.pouech at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/winedbg/debugger.h | 4 ++++
programs/winedbg/types.c | 10 ++++++----
programs/winedbg/winedbg.c | 24 ++++++++++++++++++++++++
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h
index de6c8b3e438..ac13a28e3ca 100644
--- a/programs/winedbg/debugger.h
+++ b/programs/winedbg/debugger.h
@@ -265,6 +265,7 @@ struct dbg_process
char source_current_file[MAX_PATH];
int source_start_line;
int source_end_line;
+ const struct data_model* data_model;
};
/* describes the way the debugger interacts with a given process */
@@ -550,6 +551,9 @@ struct data_model
unsigned size;
const WCHAR* name;
};
+extern const struct data_model ilp32_data_model[];
+extern const struct data_model lp64_data_model[];
+extern const struct data_model llp64_data_model[];
extern struct dbg_internal_var dbg_internal_vars[];
diff --git a/programs/winedbg/types.c b/programs/winedbg/types.c
index f4ee5a011d5..899e7f472b2 100644
--- a/programs/winedbg/types.c
+++ b/programs/winedbg/types.c
@@ -714,7 +714,7 @@ BOOL types_print_type(const struct dbg_type* type, BOOL details)
return TRUE;
}
-static const struct data_model ilp32_data_model[] = {
+const struct data_model ilp32_data_model[] = {
{btVoid, 0, L"void"},
{btChar, 1, L"char"},
{btWChar, 2, L"wchar_t"},
@@ -741,7 +741,7 @@ static const struct data_model ilp32_data_model[] = {
{0, 0, NULL}
};
-static const struct data_model llp64_data_model[] = {
+const struct data_model llp64_data_model[] = {
{btVoid, 0, L"void"},
{btChar, 1, L"char"},
{btWChar, 2, L"wchar_t"},
@@ -770,7 +770,7 @@ static const struct data_model llp64_data_model[] = {
{0, 0, NULL}
};
-static const struct data_model lp64_data_model[] = {
+const struct data_model lp64_data_model[] = {
{btVoid, 0, L"void"},
{btChar, 1, L"char"},
{btWChar, 2, L"wchar_t"},
@@ -803,7 +803,9 @@ static const struct data_model* get_data_model(DWORD modaddr)
{
const struct data_model *model;
- if (ADDRSIZE == 4) model = ilp32_data_model;
+ if (dbg_curr_process->data_model)
+ model = dbg_curr_process->data_model;
+ else if (ADDRSIZE == 4) model = ilp32_data_model;
else
{
IMAGEHLP_MODULEW64 mi;
diff --git a/programs/winedbg/winedbg.c b/programs/winedbg/winedbg.c
index d11b68ec432..8a5c9bc69ed 100644
--- a/programs/winedbg/winedbg.c
+++ b/programs/winedbg/winedbg.c
@@ -284,6 +284,7 @@ struct dbg_process* dbg_add_process(const struct be_process_io* pio, DWORD pid,
p->source_current_file[0] = '\0';
p->source_start_line = -1;
p->source_end_line = -1;
+ p->data_model = NULL;
list_add_head(&dbg_process_list, &p->entry);
@@ -467,6 +468,29 @@ void dbg_set_option(const char* option, const char* val)
return;
}
}
+ else if (!strcasecmp(option, "data_model"))
+ {
+ if (!dbg_curr_process)
+ {
+ dbg_printf("Not attached to a process\n");
+ return;
+ }
+ if (!val)
+ {
+ const char* model = "";
+ if (dbg_curr_process->data_model == NULL) model = "auto";
+ else if (dbg_curr_process->data_model == ilp32_data_model) model = "ilp32";
+ else if (dbg_curr_process->data_model == llp64_data_model) model = "llp64";
+ else if (dbg_curr_process->data_model == lp64_data_model) model = "lp64";
+ dbg_printf("Option: data_model %s\n", model);
+ }
+ else if (!strcasecmp(val, "auto")) dbg_curr_process->data_model = NULL;
+ else if (!strcasecmp(val, "ilp32")) dbg_curr_process->data_model = ilp32_data_model;
+ else if (!strcasecmp(val, "llp64")) dbg_curr_process->data_model = llp64_data_model;
+ else if (!strcasecmp(val, "lp64")) dbg_curr_process->data_model = lp64_data_model;
+ else
+ dbg_printf("Unknown data model %s\n", val);
+ }
else dbg_printf("Unknown option '%s'\n", option);
}
More information about the wine-cvs
mailing list