old-cross-binutils/gdb/testsuite/gdb.base/pie-execl.exp
Don Breazeal a8f077dc25 Target remote mode fork and exec test updates
This patch updates tests for fork and exec events in target remote mode.
In the majority of cases this was a simple matter of removing some code
that disabled the test for target remote.  In a few cases the test needed
to be disabled; in those cases the gdb_protocol was checked instead of
using the [is_remote target] etc.

In a couple of cases we needed to use clean_restart, since target remote
doesn't support the run command, and in one case we had to modify an expect
expression to allow for a "multiprocess-style" ptid.

Tested with the patch that implemented target remote mode fork and exec
event support.

gdb/testsuite/ChangeLog:

	* gdb.base/execl-update-breakpoints.exp (main): Enable for target
	remote.
	* gdb.base/foll-exec-mode.exp (main): Disable for target remote.
	* gdb.base/foll-exec.exp (main): Enable for target remote.
	* gdb.base/foll-fork.exp (main): Likewise.
	* gdb.base/foll-vfork.exp (main): Likewise.
	* gdb.base/multi-forks.exp (main): Likewise, and use clean_restart.
	(proc continue_to_exit_bp_loc): Use clean_restart.
	* gdb.base/pie-execl.exp (main): Disable for target remote.
	* gdb.base/watch-vfork.exp (main): Enable for target remote.
	* gdb.mi/mi-nsthrexec.exp (main): Likewise.
	* gdb.threads/execl.exp (main): Likewise.
	* gdb.threads/fork-child-threads.exp (main): Likewise.
	* gdb.threads/fork-plus-threads.exp (main): Disable for target
	remote.
	* gdb.threads/fork-thread-pending.exp (main): Enable for target
	remote.
	* gdb.threads/linux-dp.exp (check_philosopher_stack): Allow
	pid.tid style ptids, instead of just tid.
	* gdb.threads/thread-execl.exp (main): Enable for target remote.
	* gdb.threads/watchpoint-fork.exp (main): Likewise.
	* gdb.trace/report.exp (use_collected_data): Allow pid.tid style
	ptids, instead of just tid.
2015-12-14 11:18:05 -08:00

122 lines
3.3 KiB
Text

# Copyright 2010-2015 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/>.
# The problem was due to amd64_skip_prologue attempting to access inferior
# memory before the PIE (Position Independent Executable) gets relocated.
global inferior_spawn_id
global gdb_spawn_id
if ![istarget *-linux*] {
continue
}
# 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
}
}
standard_testfile .c
set executable1 ${testfile}1
set executable2 ${testfile}2
set binfile1 ${binfile}1
set binfile2 ${binfile}2
set binfile2_test_msg OBJDIR/${subdir}/${executable2}
# Use conditional compilation according to `BIN' as GDB remembers the source
# file name of the breakpoint.
set opts [list debug additional_flags=-fPIE ldflags=-pie]
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} {
return -1
}
clean_restart ${executable1}
gdb_test_no_output "set args ${binfile2}" "set args ${binfile2_test_msg}"
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"
set matches_found 0
gdb_test_multiple $test $test {
-re "Error in re-setting breakpoint" {
fail $test
}
-re "Cannot access memory" {
fail $test
}
-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
}
}
}
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
}