mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
107 lines
3.6 KiB
Plaintext
107 lines
3.6 KiB
Plaintext
# Copyright 2013-2022 Free Software Foundation, Inc.
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
# This test checks both $_exitcode and $_exitsignal variables. The
|
|
# purpose of this checking is to ensure that the variables are
|
|
# mutually exclusive, i.e., that when $_exitsignal is set, $_exitcode
|
|
# is not, and vice-versa. This mutual exclusion happens because if an
|
|
# inferior exited (either successfuly or not), it certainly was not
|
|
# killed by a signal. However, if it was killed by an uncaught
|
|
# signal, then there is no way for it to have exited.
|
|
|
|
if { [target_info exists gdb,nosignals] } {
|
|
verbose "Skipping exitsignal.exp because of nosignals."
|
|
continue
|
|
}
|
|
|
|
standard_testfile segv.c
|
|
|
|
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
|
|
return -1
|
|
}
|
|
|
|
# Run to main
|
|
if { ![runto_main] } {
|
|
return -1
|
|
}
|
|
|
|
# Print $_exitsignal. It should be void now, because nothing
|
|
# happened.
|
|
gdb_test "print \$_exitsignal" " = void" \
|
|
"\$_exitsignal is void before running"
|
|
|
|
# Just to guarantee, making sure that $_exitcode is also void.
|
|
gdb_test "print \$_exitcode" " = void" \
|
|
"\$_exitcode is void before running"
|
|
|
|
# Trigger SIGSEGV.
|
|
gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV"
|
|
|
|
# Continue until the end.
|
|
gdb_test "continue" "Program terminated with signal SIGSEGV.*" \
|
|
"program terminated with SIGSEGV"
|
|
|
|
# Now, print $_exitsignal again. It should be 11 (SIGSEGV).
|
|
gdb_test "print \$_exitsignal" " = 11" \
|
|
"\$_exitsignal is 11 (SIGSEGV) after SIGSEGV."
|
|
|
|
# And $_exitcode should still be void, since the inferior died because
|
|
# of a signal, and did not return.
|
|
gdb_test "print \$_exitcode" " = void" \
|
|
"\$_exitcode is still void after SIGSEGV"
|
|
|
|
# Re-run to main, i.e., restart the executable.
|
|
rerun_to_main
|
|
|
|
# Print the $_exitsignal again. Even in this normal scenario, it
|
|
# should still contain the signal triggered in the other run.
|
|
gdb_test "print \$_exitsignal" " = 11" \
|
|
"\$_exitsignal is 11 (SIGSEGV) after restarting the inferior"
|
|
|
|
# And, again, print $_exitcode.
|
|
gdb_test "print \$_exitcode" " = void" \
|
|
"\$_exitcode is still void after restarting the inferior"
|
|
|
|
# Now we test the behaviour of $_exit{code,signal} during a normal
|
|
# inferior execution.
|
|
standard_testfile normal.c
|
|
|
|
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
|
|
return -1
|
|
}
|
|
|
|
# Checking $_exitsignal and $_exitcode, both should be void before the
|
|
# inferior is executed.
|
|
gdb_test "print \$_exitsignal" " = void" \
|
|
"\$_exitsignal is void before normal inferior is executed"
|
|
gdb_test "print \$_exitcode" " = void" \
|
|
"\$_exitcode is void before normal inferior is executed"
|
|
|
|
# Run the inferior until the end.
|
|
if { ![runto_main] } {
|
|
return -1
|
|
}
|
|
|
|
gdb_continue_to_end
|
|
|
|
# Checking $_exitcode. It should be 0.
|
|
gdb_test "print \$_exitcode" " = 0" \
|
|
"\$_exitcode is zero after normal inferior is executed"
|
|
|
|
# Checking $_exitsignal. It should still be void, since the inferior
|
|
# has not received any signal.
|
|
gdb_test "print \$_exitsignal" " = void" \
|
|
"\$_exitsignal is still void after normal inferior is executed"
|