2017-01-01 07:50:51 +01:00
|
|
|
# Copyright 2010-2017 Free Software Foundation, Inc.
|
2010-10-17 19:45:17 +02:00
|
|
|
|
|
|
|
# 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/>.
|
|
|
|
|
|
|
|
# The problem was due to amd64_skip_prologue attempting to access inferior
|
|
|
|
# memory before the PIE (Position Independent Executable) gets relocated.
|
|
|
|
|
Extended-remote exec test
This patch updates several exec-related tests and some of the library
functions in order to get them running with extended-remote. There were
three changes that were required, as follows:
In gdb.base/foll-exec.exp, use 'clean_start' in place of proc 'zap_session'
to reset the state of the debugger between tests. This sets 'remote
exec-file' to execute the correct binary file in each subsequent test.
In gdb.base/pie-execl.exp, there is an expect statement with an expression
that is used to match output from both gdb and the program under debug.
For the remote target, this had to be split into two expressions, using
$inferior_spawn_id to match the output from the program.
Because I had encountered problems with extended-remote exec events in
non-stop mode in my manual testing, I added non-stop testing to the
non-ldr-exc-[1234].exp tests. In order to set non-stop mode for remote
targets, it is necessary to 'set non-stop on' after gdb has started, but
before it connects to gdbserver. This is done using 'save_vars' to set
non-stop mode in GDBFLAGS, so GDB sets non-stop mode on startup.
gdb/testsuite/ChangeLog:
* gdb.base/foll-exec.c: Add copyright header. Fix
formatting issues.
* gdb.base/foll-exec.exp (zap_session): Delete proc.
(do_exec_tests): Use clean_restart in place of zap_session,
and for test initialization. Fix formatting issues. Use
fail in place of perror.
* gdb.base/pie-execl.exp (main): Use 'inferior_spawn_id' in
an expect statement to match an expression with output from
the program under debug.
* gdb.threads/non-ldr-exc-1.exp (do_test, main): Add
non-stop tests and pass stop mode argument to clean_restart.
Use save_vars to enable non-stop in GDBFLAGS.
* gdb.threads/non-ldr-exc-2.exp: Likewise.
* gdb.threads/non-ldr-exc-3.exp: Likewise.
* gdb.threads/non-ldr-exc-4.exp: Likewise.
2015-09-11 20:06:02 +02:00
|
|
|
global inferior_spawn_id
|
|
|
|
global gdb_spawn_id
|
|
|
|
|
2010-10-17 19:45:17 +02:00
|
|
|
if ![istarget *-linux*] {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
2015-12-14 20:18:05 +01:00
|
|
|
# In remote mode we cannot use the 'set args' command, and this
|
|
|
|
# test requires it.
|
|
|
|
if { [target_info exists gdb_protocol] } then {
|
|
|
|
if { [target_info gdb_protocol] == "remote" } then {
|
|
|
|
continue
|
|
|
|
}
|
2010-10-17 19:45:17 +02:00
|
|
|
}
|
|
|
|
|
test suite update - gdb.base/[n-r]
Convert files gdb.base/[n-r]*.exp to use standard_output_file et al.
* gdb.base/nextoverexit.exp, gdb.base/nextoverexit.exp,
gdb.base/nodebug.exp, gdb.base/nofield.exp, gdb.base/nostdlib.exp,
gdb.base/opaque.exp, gdb.base/overlays.exp, gdb.base/pc-fp.exp,
gdb.base/pending.exp, gdb.base/permissions.exp,
gdb.base/pie-execl.exp, gdb.base/pointers.exp,
gdb.base/pr11022.exp, gdb.base/print-file-var.exp,
gdb.base/printcmds.exp, gdb.base/prologue.exp,
gdb.base/psymtab.exp, gdb.base/ptr-typedef.exp,
gdb.base/ptype.exp, gdb.base/randomize.exp,
gdb.base/readline-ask.exp, gdb.base/recpar.exp,
gdb.base/recurse.exp, gdb.base/relativedebug.exp,
gdb.base/relocate.exp, gdb.base/remote.exp, gdb.base/reread.exp,
gdb.base/return-nodebug.exp, gdb.base/return2.exp: Use
standard_testfile, standard_output_file, prepare_for_testing,
clean_restart.
2013-06-27 20:53:49 +02:00
|
|
|
standard_testfile .c
|
2010-10-17 19:45:17 +02:00
|
|
|
set executable1 ${testfile}1
|
|
|
|
set executable2 ${testfile}2
|
test suite update - gdb.base/[n-r]
Convert files gdb.base/[n-r]*.exp to use standard_output_file et al.
* gdb.base/nextoverexit.exp, gdb.base/nextoverexit.exp,
gdb.base/nodebug.exp, gdb.base/nofield.exp, gdb.base/nostdlib.exp,
gdb.base/opaque.exp, gdb.base/overlays.exp, gdb.base/pc-fp.exp,
gdb.base/pending.exp, gdb.base/permissions.exp,
gdb.base/pie-execl.exp, gdb.base/pointers.exp,
gdb.base/pr11022.exp, gdb.base/print-file-var.exp,
gdb.base/printcmds.exp, gdb.base/prologue.exp,
gdb.base/psymtab.exp, gdb.base/ptr-typedef.exp,
gdb.base/ptype.exp, gdb.base/randomize.exp,
gdb.base/readline-ask.exp, gdb.base/recpar.exp,
gdb.base/recurse.exp, gdb.base/relativedebug.exp,
gdb.base/relocate.exp, gdb.base/remote.exp, gdb.base/reread.exp,
gdb.base/return-nodebug.exp, gdb.base/return2.exp: Use
standard_testfile, standard_output_file, prepare_for_testing,
clean_restart.
2013-06-27 20:53:49 +02:00
|
|
|
set binfile1 ${binfile}1
|
|
|
|
set binfile2 ${binfile}2
|
2011-02-07 14:35:42 +01:00
|
|
|
set binfile2_test_msg OBJDIR/${subdir}/${executable2}
|
2010-10-17 19:45:17 +02:00
|
|
|
|
|
|
|
# Use conditional compilation according to `BIN' as GDB remembers the source
|
|
|
|
# file name of the breakpoint.
|
|
|
|
|
2012-01-13 19:39:31 +01:00
|
|
|
set opts [list debug additional_flags=-fPIE ldflags=-pie]
|
2015-09-09 20:17:36 +02:00
|
|
|
if {[build_executable ${testfile}.exp $executable1 $srcfile [concat $opts {additional_flags=-DBIN=1}]] == -1
|
|
|
|
|| [build_executable ${testfile}.exp $executable2 $srcfile [concat $opts {additional_flags=-DBIN=2}]] == -1} {
|
2010-10-17 19:45:17 +02:00
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
|
|
|
clean_restart ${executable1}
|
|
|
|
|
2011-02-07 14:35:42 +01:00
|
|
|
gdb_test_no_output "set args ${binfile2}" "set args ${binfile2_test_msg}"
|
2010-10-17 19:45:17 +02:00
|
|
|
|
|
|
|
if ![runto_main] {
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
|
|
|
# Do not stop on `main' after re-exec.
|
|
|
|
delete_breakpoints
|
|
|
|
|
|
|
|
gdb_breakpoint "pie_execl_marker"
|
|
|
|
gdb_test "info breakpoints" ".*" ""
|
|
|
|
|
|
|
|
set addr1 ""
|
|
|
|
set test "pie_execl_marker address first"
|
|
|
|
gdb_test_multiple "p/x &pie_execl_marker" $test {
|
|
|
|
-re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
|
|
|
|
set addr1 $expect_out(1,string)
|
|
|
|
pass $test
|
|
|
|
}
|
|
|
|
}
|
|
|
|
verbose -log "addr1 is $addr1"
|
|
|
|
|
|
|
|
set test "continue"
|
Extended-remote exec test
This patch updates several exec-related tests and some of the library
functions in order to get them running with extended-remote. There were
three changes that were required, as follows:
In gdb.base/foll-exec.exp, use 'clean_start' in place of proc 'zap_session'
to reset the state of the debugger between tests. This sets 'remote
exec-file' to execute the correct binary file in each subsequent test.
In gdb.base/pie-execl.exp, there is an expect statement with an expression
that is used to match output from both gdb and the program under debug.
For the remote target, this had to be split into two expressions, using
$inferior_spawn_id to match the output from the program.
Because I had encountered problems with extended-remote exec events in
non-stop mode in my manual testing, I added non-stop testing to the
non-ldr-exc-[1234].exp tests. In order to set non-stop mode for remote
targets, it is necessary to 'set non-stop on' after gdb has started, but
before it connects to gdbserver. This is done using 'save_vars' to set
non-stop mode in GDBFLAGS, so GDB sets non-stop mode on startup.
gdb/testsuite/ChangeLog:
* gdb.base/foll-exec.c: Add copyright header. Fix
formatting issues.
* gdb.base/foll-exec.exp (zap_session): Delete proc.
(do_exec_tests): Use clean_restart in place of zap_session,
and for test initialization. Fix formatting issues. Use
fail in place of perror.
* gdb.base/pie-execl.exp (main): Use 'inferior_spawn_id' in
an expect statement to match an expression with output from
the program under debug.
* gdb.threads/non-ldr-exc-1.exp (do_test, main): Add
non-stop tests and pass stop mode argument to clean_restart.
Use save_vars to enable non-stop in GDBFLAGS.
* gdb.threads/non-ldr-exc-2.exp: Likewise.
* gdb.threads/non-ldr-exc-3.exp: Likewise.
* gdb.threads/non-ldr-exc-4.exp: Likewise.
2015-09-11 20:06:02 +02:00
|
|
|
set matches_found 0
|
2010-10-17 19:45:17 +02:00
|
|
|
gdb_test_multiple $test $test {
|
|
|
|
-re "Error in re-setting breakpoint" {
|
|
|
|
fail $test
|
|
|
|
}
|
|
|
|
-re "Cannot access memory" {
|
|
|
|
fail $test
|
|
|
|
}
|
Extended-remote exec test
This patch updates several exec-related tests and some of the library
functions in order to get them running with extended-remote. There were
three changes that were required, as follows:
In gdb.base/foll-exec.exp, use 'clean_start' in place of proc 'zap_session'
to reset the state of the debugger between tests. This sets 'remote
exec-file' to execute the correct binary file in each subsequent test.
In gdb.base/pie-execl.exp, there is an expect statement with an expression
that is used to match output from both gdb and the program under debug.
For the remote target, this had to be split into two expressions, using
$inferior_spawn_id to match the output from the program.
Because I had encountered problems with extended-remote exec events in
non-stop mode in my manual testing, I added non-stop testing to the
non-ldr-exc-[1234].exp tests. In order to set non-stop mode for remote
targets, it is necessary to 'set non-stop on' after gdb has started, but
before it connects to gdbserver. This is done using 'save_vars' to set
non-stop mode in GDBFLAGS, so GDB sets non-stop mode on startup.
gdb/testsuite/ChangeLog:
* gdb.base/foll-exec.c: Add copyright header. Fix
formatting issues.
* gdb.base/foll-exec.exp (zap_session): Delete proc.
(do_exec_tests): Use clean_restart in place of zap_session,
and for test initialization. Fix formatting issues. Use
fail in place of perror.
* gdb.base/pie-execl.exp (main): Use 'inferior_spawn_id' in
an expect statement to match an expression with output from
the program under debug.
* gdb.threads/non-ldr-exc-1.exp (do_test, main): Add
non-stop tests and pass stop mode argument to clean_restart.
Use save_vars to enable non-stop in GDBFLAGS.
* gdb.threads/non-ldr-exc-2.exp: Likewise.
* gdb.threads/non-ldr-exc-3.exp: Likewise.
* gdb.threads/non-ldr-exc-4.exp: Likewise.
2015-09-11 20:06:02 +02:00
|
|
|
-i "$inferior_spawn_id" -re "pie-execl: re-exec" {
|
|
|
|
# output from inferior
|
|
|
|
incr matches_found
|
|
|
|
if { $matches_found == 2 } {
|
|
|
|
pass $test
|
|
|
|
} else {
|
|
|
|
exp_continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
-i "$gdb_spawn_id"
|
|
|
|
-re "executing new program.*\r\nBreakpoint \[0-9\]+,\[^\r\n\]* pie_execl_marker .*\r\n$gdb_prompt $" {
|
|
|
|
# output from gdb
|
|
|
|
incr matches_found
|
|
|
|
if { $matches_found == 2 } {
|
|
|
|
pass $test
|
|
|
|
} else {
|
|
|
|
exp_continue
|
|
|
|
}
|
2010-10-17 19:45:17 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gdb_test "info breakpoints" ".*" ""
|
|
|
|
|
|
|
|
set addr2 ""
|
|
|
|
set test "pie_execl_marker address second"
|
|
|
|
gdb_test_multiple "p/x &pie_execl_marker" $test {
|
|
|
|
-re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
|
|
|
|
set addr2 $expect_out(1,string)
|
|
|
|
pass $test
|
|
|
|
}
|
|
|
|
}
|
|
|
|
verbose -log "addr2 is $addr2"
|
|
|
|
|
|
|
|
# Ensure we cannot get a false PASS and the inferior has really changed.
|
|
|
|
set test "pie_execl_marker address has changed"
|
|
|
|
if [string equal $addr1 $addr2] {
|
|
|
|
fail $test
|
|
|
|
} else {
|
|
|
|
pass $test
|
|
|
|
}
|