This file is part of GDB.
This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Pessublic License as published by
+it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
extern HINSTANCE Tk_GetHINSTANCE PARAMS ((void));
+extern void (*ui_loop_hook) PARAMS ((int));
+
/* Prototypes for local functions */
static int init_hidden_window PARAMS ((void));
static void togdb_force_update PARAMS ((void));
+static void view_source PARAMS ((CORE_ADDR));
+
+static void do_gdb (char *, char *, int);
+
+
/* Globals */
static HWND hidden_hwnd; /* HWND for messages */
#define WM_SYM_TO_ADDR WM_USER+102
#define WM_ADDR_TO_SYM WM_USER+103
#define WM_DISASSEMBLY WM_USER+104
+#define WM_SOURCE WM_USER+105
/* STATE_CHANGE codes */
#define STATE_CHANGE_REGS 1 /* Register(s) changed */
case WM_ADDR_TO_SYM:
MessageBox (0, "Address resolution\nNot implemented", "GDB", MB_OK);
break;
+ case WM_SOURCE:
+ view_source ((CORE_ADDR) lParam);
+ break;
case WM_STATE_CHANGE:
switch (wParam)
{
char buf[256];
struct MessageIO iob;
int done = 0;
+ int count = 0;
+
iob.size = 0;
iob.buf = buf;
do
{
+ if (count++ % 100000)
+ {
+ ui_loop_hook (-2);
+ count = 0;
+ }
+
v850_status = ExeAppReq ("GDB", GCHECKSTATUS, NULL, &iob);
switch (v850_status)
{
if (regno <= 31)
sprintf (buf, "r%d", regno);
- else if (reg_names[regno][0] == 's'
- && reg_names[regno][1] == 'r')
+ else if (REGISTER_NAME (regno)[0] == 's'
+ && REGISTER_NAME (regno)[1] == 'r')
return 0;
else
- sprintf (buf, "%s", reg_names[regno]);
+ sprintf (buf, "%s", REGISTER_NAME (regno));
return 1;
}
char *c;
{
printf_filtered ("continue (ice)");
+ ReplyMessage ((LRESULT) 1);
Tcl_Eval (gdbtk_interp, "gdb_immediate continue");
return 1;
}
+static void
+do_gdb (cmd, str, count)
+ char *cmd;
+ char *str;
+ int count;
+{
+
+ ReplyMessage ((LRESULT) 1);
+
+ while (count--)
+ {
+ printf_unfiltered (str);
+ Tcl_Eval (gdbtk_interp, cmd);
+ }
+}
+
+
static int
ice_stepi (c)
char *c;
{
- char string[50] = "\0";
int count = (int) c;
- sprintf (string, "gdb_immediate stepi %d", count);
- printf_unfiltered ("stepi (ice)\n");
- Tcl_Eval (gdbtk_interp, string);
- ReplyMessage ((LRESULT) 1);
+ do_gdb ("gdb_immediate stepi", "stepi (ice)\n", count);
return 1;
}
ice_nexti (c)
char *c;
{
- char string[50] = "\0";
int count = (int) c;
- sprintf (string, "gdb_immediate nexti %d", count);
- printf_unfiltered ("nexti (ice)\n");
- Tcl_Eval (gdbtk_interp, string);
+ do_gdb ("gdb_immediate nexti", "nexti (ice)\n", count);
return 1;
}
Tcl_Eval (gdbtk_interp, "gdbtk_update");
}
+static void
+view_source (addr)
+ CORE_ADDR addr;
+{
+ char c[256];
+
+ sprintf (c, "set src [lindex [manage find src] 0]\n$src location BROWSE [gdb_loc *0x%x]", addr);
+ Tcl_Eval (gdbtk_interp, c);
+}
+
/* Define the target subroutine names */
-static void init_850ice_ops(void)
+static void
+init_850ice_ops(void)
{
v850ice_ops.to_shortname = "ice";
v850ice_ops.to_longname = "NEC V850 ICE interface";
v850ice_ops.to_doc = "Debug a system controlled by a NEC 850 ICE.";
v850ice_ops.to_open = v850ice_open;
v850ice_ops.to_close = v850ice_close;
- v850ice_ops.to_attach = NULL;
- v850ice_ops.to_detach = v850ice_detach;
+ v850ice_ops.to_attach = NULL;
+ v850ice_ops.to_post_attach = NULL;
+ v850ice_ops.to_require_attach = NULL;
+ v850ice_ops.to_detach = v850ice_detach;
+ v850ice_ops.to_require_detach = NULL;
v850ice_ops.to_resume = v850ice_resume;
- v850ice_ops.to_wait = v850ice_wait;
+ v850ice_ops.to_wait = v850ice_wait;
+ v850ice_ops.to_post_wait = NULL;
v850ice_ops.to_fetch_registers = v850ice_fetch_registers;
v850ice_ops.to_store_registers = v850ice_store_registers;
v850ice_ops.to_prepare_to_store = v850ice_prepare_to_store;
v850ice_ops.to_kill = v850ice_kill;
v850ice_ops.to_load = v850ice_load;
v850ice_ops.to_lookup_symbol = NULL;
- v850ice_ops.to_create_inferior = NULL;
+ v850ice_ops.to_create_inferior = NULL;
v850ice_ops.to_mourn_inferior = v850ice_mourn;
v850ice_ops.to_can_run = 0;
v850ice_ops.to_notice_signals = 0;
v850ice_ops.to_thread_alive = NULL;
v850ice_ops.to_stop = v850ice_stop;
+ v850ice_ops.to_pid_to_exec_file = NULL;
+ v850ice_ops.to_core_file_to_sym_file = NULL;
v850ice_ops.to_stratum = process_stratum;
v850ice_ops.DONT_USE = NULL;
v850ice_ops.to_has_all_memory = 1;