[binutils-gdb] [gdb/testsuite] Fix gdb.fortran/info-modules.exp with gcc-4.8

Tom de Vries vries@sourceware.org
Thu Jul 30 15:47:40 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e12dcc50da18ef4382c02d1f2bb1541251cce45e

commit e12dcc50da18ef4382c02d1f2bb1541251cce45e
Author: Tom de Vries <tdevries@suse.de>
Date:   Thu Jul 30 17:47:37 2020 +0200

    [gdb/testsuite] Fix gdb.fortran/info-modules.exp with gcc-4.8
    
    When running test-case gdb.fortran/info-modules.exp with gfortran 4.8.5, I
    get:
    ...
    FAIL: gdb.fortran/info-modules.exp: info module functions: \
      check for entry 'info-types.f90', '35', \
      'void mod1::__copy_mod1_M1t1\(Type m1t1, Type m1t1\);'
    FAIL: gdb.fortran/info-modules.exp: info module functions -m mod1: \
      check for entry 'info-types.f90', '35', \
      'void mod1::__copy_mod1_M1t1\(Type m1t1, Type m1t1\);'
    FAIL: gdb.fortran/info-modules.exp: info module variables: \
      check for entry 'info-types.f90', '(35)?', \
      'Type m1t1 mod1::__def_init_mod1_M1t1;'
    FAIL: gdb.fortran/info-modules.exp: info module variables: \
      check for entry 'info-types.f90', '(35)?', \
      'Type __vtype_mod1_M1t1 mod1::__vtab_mod1_M1t1;'
    ...
    
    With gfortran 7.5.0, we have:
    ...
    $ readelf -wi info-modules | egrep "DW_AT_name.*(copy|def_init|vtype)_mod1"
        <286>   DW_AT_name        : __def_init_mod1_M1t1
        <29f>   DW_AT_name        : __vtype_mod1_M1t1
        <3de>   DW_AT_name        : __copy_mod1_M1t1
    $
    ...
    but with gfortran 4.8.5:
    ...
    $ readelf -wi info-modules | egrep "DW_AT_name.*(copy|def_init|vtype)_mod1"
    $
    ...
    
    Fix this by allowing these module functions and variables to be missing.
    
    Tested on x86_64-linux with gcc 4.8.5 and gcc 7.5.0.
    
    gdb/testsuite/ChangeLog:
    
    2020-07-30  Tom de Vries  <tdevries@suse.de>
    
            * lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_entry_1): Factor
            out of ...
            (GDBInfoModuleSymbols::check_entry): ... here.
            (GDBInfoModuleSymbols::check_optional_entry): New proc.
            * gdb.fortran/info-modules.exp: Use check_optional_entry for entries
            related to __def_init_mod1_M1t1 / __vtype_mod1_M1t1 / __copy_mod1_M1t1.

Diff:
---
 gdb/testsuite/ChangeLog                    |  9 +++++++++
 gdb/testsuite/gdb.fortran/info-modules.exp |  8 ++++----
 gdb/testsuite/lib/sym-info-cmds.exp        | 21 +++++++++++++++++++--
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ef7a9387efd..198eefeee61 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2020-07-30  Tom de Vries  <tdevries@suse.de>
+
+	* lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_entry_1): Factor
+	out of ...
+	(GDBInfoModuleSymbols::check_entry): ... here.
+	(GDBInfoModuleSymbols::check_optional_entry): New proc.
+	* gdb.fortran/info-modules.exp: Use check_optional_entry for entries
+	related to __def_init_mod1_M1t1 / __vtype_mod1_M1t1 / __copy_mod1_M1t1.
+
 2020-07-30  Tom de Vries  <tdevries@suse.de>
 
 	* gdb.fortran/ptype-on-functions.exp: Make "_t" suffix on
diff --git a/gdb/testsuite/gdb.fortran/info-modules.exp b/gdb/testsuite/gdb.fortran/info-modules.exp
index 02e35c207e1..3af3d55e772 100644
--- a/gdb/testsuite/gdb.fortran/info-modules.exp
+++ b/gdb/testsuite/gdb.fortran/info-modules.exp
@@ -76,7 +76,7 @@ GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "22" \
     "void mod2::sub_m2_a\\(${integer4}, ${logical4}\\);"
 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "30" \
     "${logical4} mod2::sub_m2_b\\(${real4}\\);"
-GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \
+GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \
     "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);"
 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \
     "void mod1::sub_m1_a\\(${integer4}\\);"
@@ -88,7 +88,7 @@ GDBInfoModuleSymbols::check_no_entry "${srcfile2}" ".*"
 GDBInfoModuleSymbols::run_command "info module functions -m mod1"
 GDBInfoModuleSymbols::check_header \
     "All functions in all modules matching regular expression \"mod1\":"
-GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "35" \
+GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "35" \
     "void mod1::__copy_mod1_M1t1\\(Type m1t1, Type m1t1\\);"
 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "25" \
     "void mod1::sub_m1_a\\(${integer4}\\);"
@@ -117,9 +117,9 @@ GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "19" \
     "${integer4} mod2::mod2_var_1;"
 GDBInfoModuleSymbols::check_entry "${srcfile2}" "mod2" "20" \
     "${real4} mod2::mod2_var_2;"
-GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "(35)?" \
+GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \
     "Type m1t1 mod1::__def_init_mod1_M1t1;"
-GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "(35)?" \
+GDBInfoModuleSymbols::check_optional_entry "${srcfile}" "mod1" "(35)?" \
     "Type __vtype_mod1_M1t1 mod1::__vtab_mod1_M1t1;"
 GDBInfoModuleSymbols::check_entry "${srcfile}" "mod1" "21" \
     "${real4} mod1::mod1_var_1;"
diff --git a/gdb/testsuite/lib/sym-info-cmds.exp b/gdb/testsuite/lib/sym-info-cmds.exp
index 02f8b324b90..dd769ef1312 100644
--- a/gdb/testsuite/lib/sym-info-cmds.exp
+++ b/gdb/testsuite/lib/sym-info-cmds.exp
@@ -421,7 +421,10 @@ namespace eval GDBInfoModuleSymbols {
     # If a matching entry is found then it is removed from the
     # _entries list, this allows us to check for duplicates using the
     # check_no_entry call.
-    proc check_entry { filename module lineno text { testname "" } } {
+    #
+    # If OPTIONAL, don't generate a FAIL for a mismatch, but use UNSUPPORTED
+    # instead.
+    proc check_entry_1 { filename module lineno text optional testname } {
 	variable _entries
 	variable _last_command
 
@@ -458,7 +461,21 @@ namespace eval GDBInfoModuleSymbols {
 	}
 
 	set _entries $new_entries
-	gdb_assert { $found_match } $testname
+	if { $optional && ! $found_match } {
+	    unsupported $testname
+	} else {
+	    gdb_assert { $found_match } $testname
+	}
+    }
+
+    # Call check_entry_1 with OPTIONAL == 0.
+    proc check_entry { filename module lineno text { testname "" } } {
+	check_entry_1 $filename $module $lineno $text 0 $testname
+    }
+
+    # Call check_entry_1 with OPTIONAL == 1.
+    proc check_optional_entry { filename module lineno text { testname "" } } {
+	check_entry_1 $filename $module $lineno $text 1 $testname
     }
 
     # Check that there is no entry in the _entries list matching


More information about the Gdb-cvs mailing list