aboutsummaryrefslogtreecommitdiff
path: root/gdb/rdi-share
diff options
context:
space:
mode:
authorFernando Nasser <fnasser@redhat.com>2000-10-12 22:56:31 +0000
committerFernando Nasser <fnasser@redhat.com>2000-10-12 22:56:31 +0000
commite9110f4f31d4034296f20fab2bbad0f63a4b312e (patch)
tree900419b57f0b2fae5d246aaacb70f73d4b1eb1ed /gdb/rdi-share
parentd93bce0603df8a42ac881c0bf2fa043f147ca14f (diff)
downloadgdb-e9110f4f31d4034296f20fab2bbad0f63a4b312e.zip
gdb-e9110f4f31d4034296f20fab2bbad0f63a4b312e.tar.gz
gdb-e9110f4f31d4034296f20fab2bbad0f63a4b312e.tar.bz2
2000-10-11 Fernando Nasser <fnasser@totem.to.cygnus.com>
From Grant Edwards <grante@visi.com> This keeps the GUI alive while running an RDI target and lets the STOP button be used to stop the target. * remote-rdi.c (arm_rdi_stop): New function. Implements target_stop. (init_rdi_ops): Set to_stop target vector entry to the above. * rdi-share/ardi.c (stop_request): New variable. Tells when a stop has been requested. (angel_RDI_stop_request): New function. Registers that a stop has been requested. (angel_RDI_ExecuteOrStep): Add call to ui_loop_hook() in loop that waits while target is executing. Initialize and reset stop_request. * rdi-share/ardi.h: Add declaration of angel_RDI_stop_request().
Diffstat (limited to 'gdb/rdi-share')
-rw-r--r--gdb/rdi-share/ardi.c18
-rw-r--r--gdb/rdi-share/ardi.h2
2 files changed, 18 insertions, 2 deletions
diff --git a/gdb/rdi-share/ardi.c b/gdb/rdi-share/ardi.c
index 43b8cf4..334a1fc 100644
--- a/gdb/rdi-share/ardi.c
+++ b/gdb/rdi-share/ardi.c
@@ -396,6 +396,7 @@ static void (*old_handler)();
static bool boot_interrupted = FALSE;
static volatile bool interrupt_request = FALSE;
+static volatile bool stop_request = FALSE;
static void ardi_sigint_handler(int sig) {
#ifdef DEBUG
@@ -1343,10 +1344,16 @@ static void interrupt_target( void )
Packet *packet );
#endif
+void angel_RDI_stop_request(void)
+{
+ stop_request = 1;
+}
+
/* Core functionality for execute and step */
static int angel_RDI_ExecuteOrStep(PointHandle *handle, word type,
unsigned ninstr)
{
+ extern int (*ui_loop_hook) (int);
int err;
adp_stopped_struct stopped_info;
void* stateptr = (void *)&stopped_info;
@@ -1401,15 +1408,22 @@ static int angel_RDI_ExecuteOrStep(PointHandle *handle, word type,
angel_DebugPrint("Waiting for program to finish...\n");
#endif
+ interrupt_request = FALSE;
+ stop_request = FALSE;
+
signal(SIGINT, ardi_sigint_handler);
while( executing )
{
- if (interrupt_request)
+ if (ui_loop_hook)
+ ui_loop_hook(0);
+
+ if (interrupt_request || stop_request)
{
interrupt_target();
interrupt_request = FALSE;
+ stop_request = FALSE;
}
- Adp_AsynchronousProcessing( async_block_on_nothing );
+ Adp_AsynchronousProcessing( async_block_on_nothing );
}
signal(SIGINT, SIG_IGN);
diff --git a/gdb/rdi-share/ardi.h b/gdb/rdi-share/ardi.h
index 66acd1a..3b23d88 100644
--- a/gdb/rdi-share/ardi.h
+++ b/gdb/rdi-share/ardi.h
@@ -60,6 +60,8 @@ int angel_RDI_pointinq(ARMword *address, unsigned type, unsigned datatype,
int angel_RDI_execute(PointHandle *handle);
+void angel_RDI_stop_request(void);
+
int angel_RDI_step(unsigned ninstr, PointHandle *handle);
int angel_RDI_info(unsigned type, ARMword *arg1, ARMword *arg2);