* 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> 2004-02-04 Mark Kettenis <kettenis@gnu.org>
* target.h (target_object): Add TARGET_OBJECT_WCOOKIE. * 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 The SPARC target has been completely revised, incorporating the
FreeBSD/sparc64 support that was added for GDB 6.0. As a result 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 * 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. */ will be made according to the signal handling tables. */
/* First, distinguish signals caused by the debugger from signals /* First, distinguish signals caused by the debugger from signals
that have to do with the program's own actions. that have to do with the program's own actions. Note that
Note that breakpoint insns may cause SIGTRAP or SIGILL breakpoint insns may cause SIGTRAP or SIGILL or SIGEMT, depending
or SIGEMT, depending on the operating system version. on the operating system version. Here we detect when a SIGILL or
Here we detect when a SIGILL or SIGEMT is really a breakpoint SIGEMT is really a breakpoint and change it to SIGTRAP. We do
and change it to SIGTRAP. */ 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 if (stop_signal == TARGET_SIGNAL_TRAP
|| (breakpoints_inserted && || (breakpoints_inserted &&
(stop_signal == TARGET_SIGNAL_ILL (stop_signal == TARGET_SIGNAL_ILL
|| stop_signal == TARGET_SIGNAL_SEGV
|| stop_signal == TARGET_SIGNAL_EMT)) || stop_signal == TARGET_SIGNAL_EMT))
|| stop_soon == STOP_QUIETLY || stop_soon == STOP_QUIETLY
|| stop_soon == STOP_QUIETLY_NO_SIGSTOP) || 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 If someone ever tries to get get call dummys on a
non-executable stack to work (where the target would stop non-executable stack to work (where the target would stop
with something like a SIGSEG), then those tests might need to with something like a SIGSEGV), then those tests might need
be re-instated. Given, however, that the tests were only to be re-instated. Given, however, that the tests were only
enabled when momentary breakpoints were not being used, I 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) if (stop_signal == TARGET_SIGNAL_TRAP)
ecs->random_signal ecs->random_signal