[rfc] Avoid '+' in file names (Re: [rfc] Re: Remote testsuite problem: invalid executable cache)

Ulrich Weigand
2011-07-26T17:19:11Z

Stan Shebs wrote:
> On 7/25/11 10:40 AM, Ulrich Weigand wrote:
> > Mark Kettenis wrote:
> >
> >>> +mi_gdb_load ${binfile}-c++
> >> Using the '+' character in filenames may not be the best idea.
> > Is this really a problem? I thought '+' was supported just about
> > everywhere ... (There's filenames containing '+' in the GDB source
> > repository, for example.)
>
> I would be inclined to avoid '+' myself, not because of the filesystem,
> but because of potential tcl/dejagnu regexp hell. (Yes, it can be
> worked around, but it gets annoying when 54 backslashes in a row is not
> enough :-) )

OK, so this patch avoids use of '+' in filenames. The Python test now
always calls the C version of the generated executable file "${binfile}",
and the C++ version "${binfile}-cxx". As convention, the subroutines
in those tests now receive the filename under test as extra parameter
and do not attempt to reconstruct it from the language argument.

Some tests used to build the C version twice, once as ${binfile} and
once as ${binfile}-c, which seems unnecessary. The patch removes the
second re-compile as C in those cases.

Tested on arm-linux-gnueabi target from a i386-linux host.

Tom, is this version still OK with you?

Bye,
Ulrich

ChangeLog:

* gdb.python/py-mi.exp: Avoid '+' in filenames. Call C version of
executable file "${binfile}", C++ version "${binfile}-cxx".
* gdb.python/py-prettyprint.exp: Likewise.
* gdb.python/py-symbol.exp: Likewise.
* gdb.python/py-type.exp: Likewise.
* gdb.python/py-value.exp: Likewise.
* gdb.python/py-template.exp (test_template_arg): Pass full executable
file name instead of just suffix.

Index: gdb/testsuite/gdb.python/py-mi.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-mi.exp,v
retrieving revision 1.12
diff -u -p -r1.12 py-mi.exp
--- gdb/testsuite/gdb.python/py-mi.exp 22 Jul 2011 18:01:43 -0000 1.12
+++ gdb/testsuite/gdb.python/py-mi.exp 26 Jul 2011 17:02:01 -0000
@@ -286,7 +286,7 @@ mi_list_varobj_children nstype2 {

# C++ MI tests
gdb_exit
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-c++" \
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-cxx" \
executable {debug c++ additional_flags=-DMI}] != "" } {
untested "Couldn't compile ${srcfile} in c++ mode"
return -1
@@ -297,7 +297,7 @@ if [mi_gdb_start] {
}
mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
-mi_gdb_load ${binfile}-c++
+mi_gdb_load ${binfile}-cxx

if {[lsearch -exact [mi_get_features] python] < 0} {
unsupported "python support is disabled"
Index: gdb/testsuite/gdb.python/py-prettyprint.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-prettyprint.exp,v
retrieving revision 1.21
diff -u -p -r1.21 py-prettyprint.exp
--- gdb/testsuite/gdb.python/py-prettyprint.exp 22 Jul 2011 18:01:43 -0000 1.21
+++ gdb/testsuite/gdb.python/py-prettyprint.exp 26 Jul 2011 17:02:01 -0000
@@ -33,9 +33,9 @@ gdb_start
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

-proc run_lang_tests {lang} {
- global srcdir subdir srcfile binfile testfile hex
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-${lang}" executable "debug $lang"] != "" } {
+proc run_lang_tests {exefile lang} {
+ global srcdir subdir srcfile testfile hex
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
untested "Couldn't compile ${srcfile} in $lang mode"
return -1
}
@@ -46,7 +46,7 @@ proc run_lang_tests {lang} {
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
- gdb_load ${binfile}-${lang}
+ gdb_load ${exefile}

if ![runto_main ] then {
perror "couldn't run to breakpoint"
@@ -113,16 +113,11 @@ proc run_lang_tests {lang} {
remote_file host delete ${remote_python_file}
}

-run_lang_tests "c"
-run_lang_tests "c++"
+run_lang_tests "${binfile}" "c"
+run_lang_tests "${binfile}-cxx" "c++"

# Run various other tests.

-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable "debug"] != "" } {
- untested "Couldn't compile ${srcfile}"
- return -1
-}
-
# Start with a fresh gdb.
gdb_exit
gdb_start
Index: gdb/testsuite/gdb.python/py-symbol.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-symbol.exp,v
retrieving revision 1.7
diff -u -p -r1.7 py-symbol.exp
--- gdb/testsuite/gdb.python/py-symbol.exp 22 Jul 2011 18:01:43 -0000 1.7
+++ gdb/testsuite/gdb.python/py-symbol.exp 26 Jul 2011 17:02:01 -0000
@@ -99,7 +99,7 @@ gdb_test "python print t\[0\].symtab" "g

# C++ tests
# Recompile binary.
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-c++" executable "debug c++"] != "" } {
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-cxx" executable "debug c++"] != "" } {
untested "Couldn't compile ${srcfile} in c++ mode"
return -1
}
@@ -108,7 +108,7 @@ gdb_test "python print t\[0\].symtab" "g
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}-c++
+gdb_load ${binfile}-cxx

if ![runto_main] then {
fail "Can't run to main"
Index: gdb/testsuite/gdb.python/py-template.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-template.exp,v
retrieving revision 1.8
diff -u -p -r1.8 py-template.exp
--- gdb/testsuite/gdb.python/py-template.exp 22 Jul 2011 18:01:43 -0000 1.8
+++ gdb/testsuite/gdb.python/py-template.exp 26 Jul 2011 17:02:01 -0000
@@ -40,15 +40,15 @@ gdb_reinitialize_dir $srcdir/$subdir
# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

-proc test_template_arg {name type} {
- global testfile srcdir subdir srcfile binfile
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-${name}" \
+proc test_template_arg {exefile type} {
+ global testfile srcdir subdir srcfile
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" \
executable \
[list debug c++ additional_flags="-DTYPE=$type"]] != "" } {
untested $type
return -1
}
- gdb_load ${binfile}-${name}
+ gdb_load ${exefile}
if ![runto_main ] then {
perror "couldn't run to breakpoint"
return
@@ -62,11 +62,11 @@ proc test_template_arg {name type} {
gdb_test "python print foo.type.template_argument(0)" $t $type
}

-test_template_arg "ci" "const int"
-test_template_arg "vi" "volatile int"
-test_template_arg "cir" "const int &"
-test_template_arg "vir" "volatile int &"
-test_template_arg "vipc" "volatile int * const"
-test_template_arg "vipcp" "volatile int * const *"
-test_template_arg "cipv" "const int * volatile"
-test_template_arg "cipvpcpvp" "const int * volatile * const * volatile *"
+test_template_arg "${binfile}-ci" "const int"
+test_template_arg "${binfile}-vi" "volatile int"
+test_template_arg "${binfile}-cir" "const int &"
+test_template_arg "${binfile}-vir" "volatile int &"
+test_template_arg "${binfile}-vipc" "volatile int * const"
+test_template_arg "${binfile}-vipcp" "volatile int * const *"
+test_template_arg "${binfile}-cipv" "const int * volatile"
+test_template_arg "${binfile}-cipvpcpvp" "const int * volatile * const * volatile *"
Index: gdb/testsuite/gdb.python/py-type.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-type.exp,v
retrieving revision 1.12
diff -u -p -r1.12 py-type.exp
--- gdb/testsuite/gdb.python/py-type.exp 22 Jul 2011 18:01:43 -0000 1.12
+++ gdb/testsuite/gdb.python/py-type.exp 26 Jul 2011 17:02:01 -0000
@@ -31,23 +31,23 @@ if [get_compiler_info not-used c++] {
}

# Build inferior to language specification.
-proc build_inferior {lang} {
- global srcdir subdir srcfile binfile testfile hex
+proc build_inferior {exefile lang} {
+ global srcdir subdir srcfile testfile hex

- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-${lang}" executable "debug $lang"] != "" } {
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
untested "Couldn't compile ${srcfile} in $lang mode"
return -1
}
}

# Restart GDB.
-proc restart_gdb {lang} {
- global srcdir subdir srcfile binfile testfile hex
+proc restart_gdb {exefile} {
+ global srcdir subdir srcfile testfile hex

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
- gdb_load ${binfile}-${lang}
+ gdb_load ${exefile}

if ![runto_main ] then {
perror "couldn't run to breakpoint"
@@ -161,8 +161,8 @@ proc test_template {} {
}

# Perform C Tests.
-build_inferior "c"
-restart_gdb "c"
+build_inferior "${binfile}" "c"
+restart_gdb "${binfile}"

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }
@@ -171,8 +171,8 @@ runto_bp "break to inspect struct and ar
test_fields "c"

# Perform C++ Tests.
-build_inferior "c++"
-restart_gdb "c++"
+build_inferior "${binfile}-cxx" "c++"
+restart_gdb "${binfile}-cxx"
runto_bp "break to inspect struct and array."
test_fields "c++"
test_base_class
Index: gdb/testsuite/gdb.python/py-value.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.python/py-value.exp,v
retrieving revision 1.21
diff -u -p -r1.21 py-value.exp
--- gdb/testsuite/gdb.python/py-value.exp 22 Jul 2011 18:01:43 -0000 1.21
+++ gdb/testsuite/gdb.python/py-value.exp 26 Jul 2011 17:02:01 -0000
@@ -25,9 +25,15 @@ load_lib gdb-python.exp
set testfile "py-value"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
- untested "Couldn't compile ${srcfile}"
- return -1
+
+# Build inferior to language specification.
+proc build_inferior {exefile lang} {
+ global srcdir subdir srcfile testfile hex
+
+ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${exefile}" executable "debug $lang"] != "" } {
+ untested "Couldn't compile ${srcfile} in $lang mode"
+ return -1
+ }
}

proc test_value_creation {} {
@@ -323,19 +329,15 @@ proc test_value_after_death {} {
# the type of the value was not being checked before allowing a
# subscript operation to proceed.

-proc test_subscript_regression {lang} {
+proc test_subscript_regression {exefile lang} {

- global srcdir subdir srcfile binfile testfile hex
- if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}-${lang}" executable "debug $lang"] != "" } {
- untested "Couldn't compile ${srcfile} in $lang mode"
- return -1
- }
+ global srcdir subdir

# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
- gdb_load ${binfile}-${lang}
+ gdb_load ${exefile}

if ![runto_main ] then {
perror "couldn't run to breakpoint"
@@ -426,6 +428,9 @@ proc test_value_hash {} {
gdb_test "python print one.__hash__() == hash(one)" "True" "Test inbuilt hash"
}

+# Build C and C++ versions of executable
+build_inferior "${binfile}" "c"
+build_inferior "${binfile}-cxx" "c++"

# Start with a fresh gdb.

@@ -457,7 +462,6 @@ test_inferior_function_call
test_lazy_strings
test_value_after_death

-# The following test recompiles the binary to test either C or C++
-# values.
-test_subscript_regression "c++"
-test_subscript_regression "c"
+# Test either C or C++ values.
+test_subscript_regression "${binfile}" "c"
+test_subscript_regression "${binfile}-cxx" "c++"