* infrun.c (handle_inferior_event): Allow for breakpoint

instructions to generate a SIGSEGV in addition to SIGTRAP, SIGILL
and SIGEMT.  Update comments.
* NEWS (Revised SPARC target): Mention support for non-executable
stack.
This commit is contained in:
Mark Kettenis 2004-02-05 19:56:33 +00:00
parent 290281b1cb
commit 03cebad224
3 changed files with 28 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2004-02-05 Mark Kettenis <kettenis@gnu.org>
* infrun.c (handle_inferior_event): Allow for breakpoint
instructions to generate a SIGSEGV in addition to SIGTRAP, SIGILL
and SIGEMT. Update comments.
* NEWS (Revised SPARC target): Mention support for non-executable
stack.
2004-02-04 Mark Kettenis <kettenis@gnu.org>
* target.h (target_object): Add TARGET_OBJECT_WCOOKIE.

View File

@ -19,7 +19,9 @@ you should upgrade gdbserver on the remote side.
The SPARC target has been completely revised, incorporating the
FreeBSD/sparc64 support that was added for GDB 6.0. As a result
support for LynxOS and SunOS 4 has been dropped.
support for LynxOS and SunOS 4 has been dropped. Calling functions
from within GDB on operating systems with a non-executable stack
(Solaris, OpenBSD) now works.
* New C++ demangler

View File

@ -1975,15 +1975,20 @@ handle_inferior_event (struct execution_control_state *ecs)
will be made according to the signal handling tables. */
/* First, distinguish signals caused by the debugger from signals
that have to do with the program's own actions.
Note that breakpoint insns may cause SIGTRAP or SIGILL
or SIGEMT, depending on the operating system version.
Here we detect when a SIGILL or SIGEMT is really a breakpoint
and change it to SIGTRAP. */
that have to do with the program's own actions. Note that
breakpoint insns may cause SIGTRAP or SIGILL or SIGEMT, depending
on the operating system version. Here we detect when a SIGILL or
SIGEMT is really a breakpoint and change it to SIGTRAP. We do
something similar for SIGSEGV, since a SIGSEGV will be generated
when we're trying to execute a breakpoint instruction on a
non-executable stack. This happens for call dummy breakpoints
for architectures like SPARC that place call dummies on the
stack. */
if (stop_signal == TARGET_SIGNAL_TRAP
|| (breakpoints_inserted &&
(stop_signal == TARGET_SIGNAL_ILL
|| stop_signal == TARGET_SIGNAL_SEGV
|| stop_signal == TARGET_SIGNAL_EMT))
|| stop_soon == STOP_QUIETLY
|| stop_soon == STOP_QUIETLY_NO_SIGSTOP)
@ -2046,10 +2051,14 @@ handle_inferior_event (struct execution_control_state *ecs)
If someone ever tries to get get call dummys on a
non-executable stack to work (where the target would stop
with something like a SIGSEG), then those tests might need to
be re-instated. Given, however, that the tests were only
with something like a SIGSEGV), then those tests might need
to be re-instated. Given, however, that the tests were only
enabled when momentary breakpoints were not being used, I
suspect that it won't be the case. */
suspect that it won't be the case.
NOTE: kettenis/2004-02-05: Indeed such checks don't seem to
be necessary for call dummies on a non-executable stack on
SPARC. */
if (stop_signal == TARGET_SIGNAL_TRAP)
ecs->random_signal