From: Tom Tromey Date: Fri, 23 Aug 2013 18:18:57 +0000 (-0600) Subject: introduce relative_filename and use it X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1e537771557f684cafb8247ad4ec03d38ac4deb5;p=binutils-gdb.git 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c913cbbb4e7..b171dc25666 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,15 @@ +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) diff --git a/gdb/testsuite/gdb.base/fullname.exp b/gdb/testsuite/gdb.base/fullname.exp index 32f6ea45583..2754f59f50a 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 950d67efb1f..2330daf7f00 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 d7ee4a75dfc..cd748ca7b5a 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 2496b3ccd5a..eba5f778be5 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 21a44af3767..76137613c39 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