-# Copyright 2010 Free Software Foundation, Inc.
+# Copyright 2010-2024 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 problem was due to amd64_skip_prologue attempting to access inferior
# memory before the PIE (Position Independent Executable) gets relocated.
-if ![istarget *-linux*] {
- continue
-}
+global inferior_spawn_id
+global gdb_spawn_id
-# Remote protocol does not support follow-exec notifications.
+require {istarget *-linux*}
-if [is_remote target] {
- continue
+# In remote mode we cannot use the 'set args' command, and this
+# test requires it.
+if {[target_info exists gdb_protocol]} {
+ if {[target_info gdb_protocol] == "remote"} {
+ return
+ }
}
-set testfile "pie-execl"
-set srcfile ${testfile}.c
+standard_testfile .c
set executable1 ${testfile}1
set executable2 ${testfile}2
-set binfile1 ${objdir}/${subdir}/${executable1}
-set binfile2 ${objdir}/${subdir}/${executable2}
+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 -pie}]
-if {[build_executable ${testfile}.exp $executable1 $srcfile [concat $opts {additional_flags=-DBIN=1}]] == ""
- || [build_executable ${testfile}.exp $executable2 $srcfile [concat $opts {additional_flags=-DBIN=2}]] == ""} {
+set opts [list debug 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}"
+gdb_test_no_output "set args ${binfile2}" "set args ${binfile2_test_msg}"
if ![runto_main] {
return -1
delete_breakpoints
gdb_breakpoint "pie_execl_marker"
-gdb_test "info breakpoints" ".*" ""
+gdb_test "info breakpoints" "" "info breakpoints first"
set addr1 ""
set test "pie_execl_marker address first"
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
}
- -re "pie-execl: re-exec.*executing new program.*\r\nBreakpoint \[0-9\]+,\[^\r\n\]* pie_execl_marker .*\r\n$gdb_prompt $" {
- pass $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" ".*" ""
+gdb_test "info breakpoints" "" "info breakpoints second"
set addr2 ""
set test "pie_execl_marker address second"