From 1e537771557f684cafb8247ad4ec03d38ac4deb5 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 23 Aug 2013 12:18:57 -0600 Subject: introduce relative_filename and use it This introduces a new relative_filename proc to gdb.exp and changes some tests to use it. This helps make these tests parallel-safe. 2013-11-04 Tom Tromey * gdb.base/fullname.exp: Use standard_output_file, relative_filename. * gdb.base/hashline1.exp: Use standard_testfile, standard_output_file, relative_filename, clean_restart. * gdb.base/hashline2.exp: Use standard_testfile, standard_output_file. * gdb.base/hashline3.exp: Use standard_testfile, standard_output_file, relative_filename. * lib/gdb.exp (relative_filename): New proc. --- gdb/testsuite/ChangeLog | 12 ++++++++++++ gdb/testsuite/gdb.base/fullname.exp | 5 +++-- gdb/testsuite/gdb.base/hashline1.exp | 21 +++++++++------------ gdb/testsuite/gdb.base/hashline2.exp | 13 ++++++------- gdb/testsuite/gdb.base/hashline3.exp | 14 +++++++------- gdb/testsuite/lib/gdb.exp | 19 +++++++++++++++++++ 6 files changed, 56 insertions(+), 28 deletions(-) (limited to 'gdb') diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c913cbb..b171dc2 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,17 @@ 2013-11-04 Tom Tromey + * gdb.base/fullname.exp: Use standard_output_file, + relative_filename. + * gdb.base/hashline1.exp: Use standard_testfile, + standard_output_file, relative_filename, clean_restart. + * gdb.base/hashline2.exp: Use standard_testfile, + standard_output_file. + * gdb.base/hashline3.exp: Use standard_testfile, + standard_output_file, relative_filename. + * lib/gdb.exp (relative_filename): New proc. + +2013-11-04 Tom Tromey + * gdb.base/fileio.c (test_open, test_write, test_read) (test_lseek, test_close, test_stat, test_fstat) (test_isatty, test_system, test_rename, test_unlink): diff --git a/gdb/testsuite/gdb.base/fullname.exp b/gdb/testsuite/gdb.base/fullname.exp index 32f6ea4..2754f59 100644 --- a/gdb/testsuite/gdb.base/fullname.exp +++ b/gdb/testsuite/gdb.base/fullname.exp @@ -70,7 +70,8 @@ if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] } # Build the test executable using a relative path. -if { [gdb_compile "${subdir}/tmp-${srcfile}" "${binfile}" executable {debug}] != "" } { +if { [gdb_compile [relative_filename [pwd] [standard_output_file tmp-${srcfile}]] \ + "${binfile}" executable {debug}] != "" } { return -1 } @@ -99,7 +100,7 @@ if { [gdb_breakpoint [standard_output_file tmp-${srcfile}]:${line} {no-message}] # we'll run GDB from. set save_pwd [pwd] -cd ${subdir} +cd [standard_output_file {}] if { [gdb_compile [standard_output_file tmp-${srcfile}] "${testfile}" \ executable {debug}] != "" } { cd $save_pwd diff --git a/gdb/testsuite/gdb.base/hashline1.exp b/gdb/testsuite/gdb.base/hashline1.exp index 950d67e..2330daf 100644 --- a/gdb/testsuite/gdb.base/hashline1.exp +++ b/gdb/testsuite/gdb.base/hashline1.exp @@ -21,28 +21,25 @@ # srcfile is in objdir because we need to machine generate it in order # to get the correct path in the #line directive. -set testfile "hashline1" -set srcfile "${testfile}.c" -set binfile "${objdir}/${subdir}/${testfile}" +standard_testfile .c -set fd [open ${objdir}/${subdir}/${srcfile} w] -puts $fd "#line 2 \"[pwd]/${subdir}/${srcfile}\"" +set new_srcfile [standard_output_file $srcfile] +set fd [open $new_srcfile w] +puts $fd "#line 2 \"$new_srcfile\"" puts $fd "int main () { return 0; } /* set breakpoint here */" close $fd # The choice of path name for the source file is important in order to trigger -# the bug. Using ${objdir}/${subdir}/${srcfile} here won't trigger the bug. -if { [gdb_compile "./${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { +# the bug. Using $new_srcfile here won't trigger the bug. +set compile_name [relative_filename $objdir $new_srcfile] +if { [gdb_compile $compile_name "${binfile}" executable {debug}] != "" } { untested hashline1.exp return -1 } -gdb_exit -gdb_start -gdb_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} +clean_restart ${binfile} -set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}] +set bp_location [gdb_get_line_number "set breakpoint here" $new_srcfile] # Try to set a breakpoint on the specified file location. diff --git a/gdb/testsuite/gdb.base/hashline2.exp b/gdb/testsuite/gdb.base/hashline2.exp index d7ee4a7..cd748ca 100644 --- a/gdb/testsuite/gdb.base/hashline2.exp +++ b/gdb/testsuite/gdb.base/hashline2.exp @@ -21,16 +21,15 @@ # srcfile is in objdir because we need to machine generate it in order # to get the correct path in the #line directive. -set testfile "hashline2" -set srcfile "${testfile}.c" -set binfile "${objdir}/${subdir}/${testfile}" +standard_testfile .c -set fd [open ${objdir}/${subdir}/${srcfile} w] -puts $fd "#line 2 \"///[pwd]/${subdir}/${srcfile}\"" +set new_srcfile [standard_output_file $srcfile] +set fd [open $new_srcfile w] +puts $fd "#line 2 \"///${new_srcfile}\"" puts $fd "int main () { return 0; } /* set breakpoint here */" close $fd -if { [gdb_compile "${objdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { +if { [gdb_compile $new_srcfile "${binfile}" executable {debug}] != "" } { untested hashline2.exp return -1 } @@ -40,7 +39,7 @@ gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} -set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}] +set bp_location [gdb_get_line_number "set breakpoint here" ${new_srcfile}] # Try to set a breakpoint on the specified file location. diff --git a/gdb/testsuite/gdb.base/hashline3.exp b/gdb/testsuite/gdb.base/hashline3.exp index 2496b3c..eba5f77 100644 --- a/gdb/testsuite/gdb.base/hashline3.exp +++ b/gdb/testsuite/gdb.base/hashline3.exp @@ -21,16 +21,16 @@ # srcfile is in objdir because we need to machine generate it in order # to get the correct path in the #line directive. -set testfile "hashline3" -set srcfile "${testfile}.c" -set binfile "${objdir}/${subdir}/${testfile}" +standard_testfile -set fd [open ${objdir}/${subdir}/${srcfile} w] -puts $fd "#line 2 \"./${subdir}/${srcfile}\"" +set new_srcfile [standard_output_file $srcfile] +set fd [open $new_srcfile w] +set relative [relative_filename $objdir $new_srcfile] +puts $fd "#line 2 \"./$relative\"" puts $fd "int main () { return 0; } /* set breakpoint here */" close $fd -if { [gdb_compile "${objdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { +if { [gdb_compile $new_srcfile "${binfile}" executable {debug}] != "" } { untested hashline3.exp return -1 } @@ -40,7 +40,7 @@ gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} -set bp_location [gdb_get_line_number "set breakpoint here" ${objdir}/${subdir}/${srcfile}] +set bp_location [gdb_get_line_number "set breakpoint here" $new_srcfile] # Try to set a breakpoint on the specified file location. diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 21a44af..7613761 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -4372,6 +4372,25 @@ proc set_remotetimeout { timeout } { } } +# ROOT and FULL are file names. Returns the relative path from ROOT +# to FULL. Note that FULL must be in a subdirectory of ROOT. +# For example, given ROOT = /usr/bin and FULL = /usr/bin/ls, this +# will return "ls". + +proc relative_filename {root full} { + set root_split [file split $root] + set full_split [file split $full] + + set len [llength $root_split] + + if {[eval file join $root_split] + != [eval file join [lrange $full_split 0 [expr {$len - 1}]]]} { + error "$full not a subdir of $root" + } + + return [eval file join [lrange $full_split $len end]] +} + # Log gdb command line and script if requested. if {[info exists TRANSCRIPT]} { rename send_gdb real_send_gdb -- cgit v1.1