mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-29 23:36:06 +08:00
2009-11-13 Kazu Hirata <kazu@codesourcery.com>
Maxim Kuvyrkov <maxim@codesourcery.com> * remote-fileio.c (remote_fileio_request): Send Ctrl-C if it is pending. * remote-fileio.h: Update the prototype for remote_fileio_request. * remote.c (struct remote_state): Add ctrlc_pending_p. (remote_open_1): Clear ctrlc_pending_p. (remote_stop_as): Set ctrlc_pending_p to 1. (remote_wait_as): Pass ctrlc_pending_p to remote_fileio_request.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2009-11-13 Kazu Hirata <kazu@codesourcery.com>
|
||||||
|
Maxim Kuvyrkov <maxim@codesourcery.com>
|
||||||
|
|
||||||
|
* remote-fileio.c (remote_fileio_request): Send Ctrl-C if it is
|
||||||
|
pending.
|
||||||
|
* remote-fileio.h: Update the prototype for remote_fileio_request.
|
||||||
|
* remote.c (struct remote_state): Add ctrlc_pending_p.
|
||||||
|
(remote_open_1): Clear ctrlc_pending_p.
|
||||||
|
(remote_stop_as): Set ctrlc_pending_p to 1.
|
||||||
|
(remote_wait_as): Pass ctrlc_pending_p to remote_fileio_request.
|
||||||
|
|
||||||
2009-11-13 Daniel Jacobowitz <dan@codesourcery.com>
|
2009-11-13 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* arm-tdep.c (arm_skip_stub): Recognize RealView veneer functions.
|
* arm-tdep.c (arm_skip_stub): Recognize RealView veneer functions.
|
||||||
|
@ -1416,28 +1416,44 @@ remote_fileio_reset (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle a file I/O request. BUF points to the packet containing the
|
||||||
|
request. CTRLC_PENDING_P should be nonzero if the target has not
|
||||||
|
acknowledged the Ctrl-C sent asynchronously earlier. */
|
||||||
|
|
||||||
void
|
void
|
||||||
remote_fileio_request (char *buf)
|
remote_fileio_request (char *buf, int ctrlc_pending_p)
|
||||||
{
|
{
|
||||||
int ex;
|
int ex;
|
||||||
|
|
||||||
remote_fileio_sig_init ();
|
remote_fileio_sig_init ();
|
||||||
|
|
||||||
remote_fio_ctrl_c_flag = 0;
|
if (ctrlc_pending_p)
|
||||||
remote_fio_no_longjmp = 0;
|
|
||||||
|
|
||||||
ex = catch_exceptions (uiout, do_remote_fileio_request, (void *)buf,
|
|
||||||
RETURN_MASK_ALL);
|
|
||||||
switch (ex)
|
|
||||||
{
|
{
|
||||||
case RETURN_ERROR:
|
/* If the target hasn't responded to the Ctrl-C sent
|
||||||
remote_fileio_reply (-1, FILEIO_ENOSYS);
|
asynchronously earlier, take this opportunity to send the
|
||||||
break;
|
Ctrl-C synchronously. */
|
||||||
case RETURN_QUIT:
|
remote_fio_ctrl_c_flag = 1;
|
||||||
remote_fileio_reply (-1, FILEIO_EINTR);
|
remote_fio_no_longjmp = 0;
|
||||||
break;
|
remote_fileio_reply (-1, FILEIO_EINTR);
|
||||||
default:
|
}
|
||||||
break;
|
else
|
||||||
|
{
|
||||||
|
remote_fio_ctrl_c_flag = 0;
|
||||||
|
remote_fio_no_longjmp = 0;
|
||||||
|
|
||||||
|
ex = catch_exceptions (uiout, do_remote_fileio_request, (void *)buf,
|
||||||
|
RETURN_MASK_ALL);
|
||||||
|
switch (ex)
|
||||||
|
{
|
||||||
|
case RETURN_ERROR:
|
||||||
|
remote_fileio_reply (-1, FILEIO_ENOSYS);
|
||||||
|
break;
|
||||||
|
case RETURN_QUIT:
|
||||||
|
remote_fileio_reply (-1, FILEIO_EINTR);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
remote_fileio_sig_exit ();
|
remote_fileio_sig_exit ();
|
||||||
|
@ -26,7 +26,7 @@ struct cmd_list_element;
|
|||||||
|
|
||||||
/* Unified interface to remote fileio, called in remote.c from
|
/* Unified interface to remote fileio, called in remote.c from
|
||||||
remote_wait () and remote_async_wait () */
|
remote_wait () and remote_async_wait () */
|
||||||
extern void remote_fileio_request (char *buf);
|
extern void remote_fileio_request (char *buf, int ctrlc_pending_p);
|
||||||
|
|
||||||
/* Cleanup any remote fileio state. */
|
/* Cleanup any remote fileio state. */
|
||||||
extern void remote_fileio_reset (void);
|
extern void remote_fileio_reset (void);
|
||||||
|
15
gdb/remote.c
15
gdb/remote.c
@ -297,6 +297,10 @@ struct remote_state
|
|||||||
|
|
||||||
/* True if the stub reports support for conditional tracepoints. */
|
/* True if the stub reports support for conditional tracepoints. */
|
||||||
int cond_tracepoints;
|
int cond_tracepoints;
|
||||||
|
|
||||||
|
/* Nonzero if the user has pressed Ctrl-C, but the target hasn't
|
||||||
|
responded to that. */
|
||||||
|
int ctrlc_pending_p;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Returns true if the multi-process extensions are in effect. */
|
/* Returns true if the multi-process extensions are in effect. */
|
||||||
@ -3394,6 +3398,7 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, int extended
|
|||||||
rs->extended = extended_p;
|
rs->extended = extended_p;
|
||||||
rs->non_stop_aware = 0;
|
rs->non_stop_aware = 0;
|
||||||
rs->waiting_for_stop_reply = 0;
|
rs->waiting_for_stop_reply = 0;
|
||||||
|
rs->ctrlc_pending_p = 0;
|
||||||
|
|
||||||
general_thread = not_sent_ptid;
|
general_thread = not_sent_ptid;
|
||||||
continue_thread = not_sent_ptid;
|
continue_thread = not_sent_ptid;
|
||||||
@ -4122,6 +4127,8 @@ remote_stop_as (ptid_t ptid)
|
|||||||
{
|
{
|
||||||
struct remote_state *rs = get_remote_state ();
|
struct remote_state *rs = get_remote_state ();
|
||||||
|
|
||||||
|
rs->ctrlc_pending_p = 1;
|
||||||
|
|
||||||
/* If the inferior is stopped already, but the core didn't know
|
/* If the inferior is stopped already, but the core didn't know
|
||||||
about it yet, just ignore the request. The cached wait status
|
about it yet, just ignore the request. The cached wait status
|
||||||
will be collected in remote_wait. */
|
will be collected in remote_wait. */
|
||||||
@ -4848,6 +4855,11 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
|
|||||||
/* We got something. */
|
/* We got something. */
|
||||||
rs->waiting_for_stop_reply = 0;
|
rs->waiting_for_stop_reply = 0;
|
||||||
|
|
||||||
|
/* Assume that the target has acknowledged Ctrl-C unless we receive
|
||||||
|
an 'F' or 'O' packet. */
|
||||||
|
if (buf[0] != 'F' && buf[0] != 'O')
|
||||||
|
rs->ctrlc_pending_p = 0;
|
||||||
|
|
||||||
switch (buf[0])
|
switch (buf[0])
|
||||||
{
|
{
|
||||||
case 'E': /* Error of some sort. */
|
case 'E': /* Error of some sort. */
|
||||||
@ -4858,7 +4870,8 @@ remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
|
|||||||
status->value.sig = TARGET_SIGNAL_0;
|
status->value.sig = TARGET_SIGNAL_0;
|
||||||
break;
|
break;
|
||||||
case 'F': /* File-I/O request. */
|
case 'F': /* File-I/O request. */
|
||||||
remote_fileio_request (buf);
|
remote_fileio_request (buf, rs->ctrlc_pending_p);
|
||||||
|
rs->ctrlc_pending_p = 0;
|
||||||
break;
|
break;
|
||||||
case 'T': case 'S': case 'X': case 'W':
|
case 'T': case 'S': case 'X': case 'W':
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user