* 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:
parent
290281b1cb
commit
03cebad224
@ -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.
|
||||
|
4
gdb/NEWS
4
gdb/NEWS
@ -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
|
||||
|
||||
|
25
gdb/infrun.c
25
gdb/infrun.c
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user