[03/11,gdb/testsuite] Add test-case gdb.base/fission-macro-i.exp

Message ID 20240521154415.9543-3-tdevries@suse.de
State New
Headers
Series [01/11,gdb/testsuite] Add gdb.base/fission-macro.exp |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Tom de Vries May 21, 2024, 3:44 p.m. UTC
  We can exercise test-case gdb.base/fission-macro.exp using gcc release 14.

We cannot use the test-case with a gcc release earlier than gcc 14, because
it's missing gcc commit 80048aa13a6 ("debug/111409 - don't generate COMDAT
macro sections for split DWARF").

A way to work around this is to use a .i file instead of a .c file.  Add a
test-case using this approach.

This allows use to excercise gcc 11-13 in addition.

Tested on x86_64-linux.

Tested test-case using a current gcc trunk build and gcc 11-14.
---
 gdb/testsuite/gdb.base/fission-macro-i-2.i | 27 ++++++++
 gdb/testsuite/gdb.base/fission-macro-i.exp | 77 ++++++++++++++++++++++
 gdb/testsuite/gdb.base/fission-macro-i.i   | 27 ++++++++
 3 files changed, 131 insertions(+)
 create mode 100644 gdb/testsuite/gdb.base/fission-macro-i-2.i
 create mode 100644 gdb/testsuite/gdb.base/fission-macro-i.exp
 create mode 100644 gdb/testsuite/gdb.base/fission-macro-i.i
  

Comments

Tom de Vries June 13, 2024, 4:27 p.m. UTC | #1
On 5/21/24 17:44, Tom de Vries wrote:
> We can exercise test-case gdb.base/fission-macro.exp using gcc release 14.
> 
> We cannot use the test-case with a gcc release earlier than gcc 14, because
> it's missing gcc commit 80048aa13a6 ("debug/111409 - don't generate COMDAT
> macro sections for split DWARF").
> 
> A way to work around this is to use a .i file instead of a .c file.  Add a
> test-case using this approach.
> 
> This allows use to excercise gcc 11-13 in addition.
> 
> Tested on x86_64-linux.
> 

I'm having second thoughts on this and the following 2 patches, all 
using gdb.base/fission-macro-i.i.

While this adds a way to test gdb functionality in combination with gcc 
< 14, the actual use-cases for which the following two workaround 
patches will be useful will be severely limited, so I'm not sure it's 
worth the added complexity and maintenance burden of the workarounds.

So, I'm considering dropping these 3.

Thanks,
- Tom

> Tested test-case using a current gcc trunk build and gcc 11-14.
> ---
>   gdb/testsuite/gdb.base/fission-macro-i-2.i | 27 ++++++++
>   gdb/testsuite/gdb.base/fission-macro-i.exp | 77 ++++++++++++++++++++++
>   gdb/testsuite/gdb.base/fission-macro-i.i   | 27 ++++++++
>   3 files changed, 131 insertions(+)
>   create mode 100644 gdb/testsuite/gdb.base/fission-macro-i-2.i
>   create mode 100644 gdb/testsuite/gdb.base/fission-macro-i.exp
>   create mode 100644 gdb/testsuite/gdb.base/fission-macro-i.i
> 
> diff --git a/gdb/testsuite/gdb.base/fission-macro-i-2.i b/gdb/testsuite/gdb.base/fission-macro-i-2.i
> new file mode 100644
> index 00000000000..fb088c8bfaf
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/fission-macro-i-2.i
> @@ -0,0 +1,27 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 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 Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +#define THIRD 3
> +#define FOURTH 4
> +
> +extern int foo (void);
> +
> +int
> +foo (void)
> +{
> +  return 0;
> +}
> diff --git a/gdb/testsuite/gdb.base/fission-macro-i.exp b/gdb/testsuite/gdb.base/fission-macro-i.exp
> new file mode 100644
> index 00000000000..bf1ca206a6c
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/fission-macro-i.exp
> @@ -0,0 +1,77 @@
> +# Copyright 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 Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +# Gcc 11 is the first release containing the fix for PR debug/99319.
> +require {expr [gcc_major_version] >= 11}
> +
> +# Use a .i file instead of a .c file, to make sure that we only generate one
> +# .debug_macros section, working around gcc PR debug/111409.
> +standard_testfile .i -2.i
> +
> +proc do_tests { dwarf_version dwarf_bits strict_dwarf } {
> +    set opts {}
> +    lappend opts debug
> +    lappend opts quiet
> +    lappend opts additional_flags=-gsplit-dwarf
> +    lappend opts macros
> +
> +    if { $dwarf_bits == 64 } {
> +	lappend opts additional_flags=-gdwarf64
> +    }
> +
> +    if { $strict_dwarf } {
> +	lappend opts additional_flags=-gstrict-dwarf
> +    }
> +
> +    lappend opts additional_flags=-gdwarf-$dwarf_version
> +
> +    set id v$dwarf_version-b$dwarf_bits-s$strict_dwarf
> +
> +    set srcfiles [list $::srcfile $::srcfile2]
> +    if { [build_executable "failed to prepare" $::testfile-$id $srcfiles $opts] } {
> +	return -1
> +    }
> +
> +    clean_restart
> +
> +    gdb_load_no_complaints $::binfile-$id
> +
> +    if {![runto_main]} {
> +	return 0
> +    }
> +
> +    gdb_test "p FIRST" " = 1"
> +    gdb_test "p SECOND" " = 2"
> +
> +    gdb_test "info macro FIRST" "#define FIRST 1"
> +    gdb_test "info macro SECOND" "#define SECOND 2"
> +
> +    gdb_breakpoint foo
> +    gdb_continue_to_breakpoint "foo"
> +
> +    gdb_test "p THIRD" " = 3"
> +    gdb_test "p FOURTH" " = 4"
> +
> +    gdb_test "info macro THIRD" "#define THIRD 3"
> +    gdb_test "info macro FOURTH" "#define FOURTH 4"
> +}
> +
> +foreach_with_prefix dwarf_version {5} {
> +    foreach_with_prefix dwarf_bits {32 64} {
> +	foreach_with_prefix strict_dwarf {0 1} {
> +	    do_tests $dwarf_version $dwarf_bits $strict_dwarf
> +	}
> +    }
> +}
> diff --git a/gdb/testsuite/gdb.base/fission-macro-i.i b/gdb/testsuite/gdb.base/fission-macro-i.i
> new file mode 100644
> index 00000000000..9c8cbece5c5
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/fission-macro-i.i
> @@ -0,0 +1,27 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 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 Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +#define FIRST 1
> +#define SECOND 2
> +
> +extern int foo (void);
> +
> +int
> +main (void)
> +{
> +  return foo ();
> +}
  

Patch

diff --git a/gdb/testsuite/gdb.base/fission-macro-i-2.i b/gdb/testsuite/gdb.base/fission-macro-i-2.i
new file mode 100644
index 00000000000..fb088c8bfaf
--- /dev/null
+++ b/gdb/testsuite/gdb.base/fission-macro-i-2.i
@@ -0,0 +1,27 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 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 Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#define THIRD 3
+#define FOURTH 4
+
+extern int foo (void);
+
+int
+foo (void)
+{
+  return 0;
+}
diff --git a/gdb/testsuite/gdb.base/fission-macro-i.exp b/gdb/testsuite/gdb.base/fission-macro-i.exp
new file mode 100644
index 00000000000..bf1ca206a6c
--- /dev/null
+++ b/gdb/testsuite/gdb.base/fission-macro-i.exp
@@ -0,0 +1,77 @@ 
+# Copyright 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 Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+# Gcc 11 is the first release containing the fix for PR debug/99319.
+require {expr [gcc_major_version] >= 11}
+
+# Use a .i file instead of a .c file, to make sure that we only generate one
+# .debug_macros section, working around gcc PR debug/111409.
+standard_testfile .i -2.i
+
+proc do_tests { dwarf_version dwarf_bits strict_dwarf } {
+    set opts {}
+    lappend opts debug
+    lappend opts quiet
+    lappend opts additional_flags=-gsplit-dwarf
+    lappend opts macros
+
+    if { $dwarf_bits == 64 } {
+	lappend opts additional_flags=-gdwarf64
+    }
+
+    if { $strict_dwarf } {
+	lappend opts additional_flags=-gstrict-dwarf
+    }
+
+    lappend opts additional_flags=-gdwarf-$dwarf_version
+
+    set id v$dwarf_version-b$dwarf_bits-s$strict_dwarf
+
+    set srcfiles [list $::srcfile $::srcfile2]
+    if { [build_executable "failed to prepare" $::testfile-$id $srcfiles $opts] } {
+	return -1
+    }
+
+    clean_restart
+
+    gdb_load_no_complaints $::binfile-$id
+
+    if {![runto_main]} {
+	return 0
+    }
+
+    gdb_test "p FIRST" " = 1"
+    gdb_test "p SECOND" " = 2"
+
+    gdb_test "info macro FIRST" "#define FIRST 1"
+    gdb_test "info macro SECOND" "#define SECOND 2"
+
+    gdb_breakpoint foo
+    gdb_continue_to_breakpoint "foo"
+
+    gdb_test "p THIRD" " = 3"
+    gdb_test "p FOURTH" " = 4"
+
+    gdb_test "info macro THIRD" "#define THIRD 3"
+    gdb_test "info macro FOURTH" "#define FOURTH 4"
+}
+
+foreach_with_prefix dwarf_version {5} {
+    foreach_with_prefix dwarf_bits {32 64} {
+	foreach_with_prefix strict_dwarf {0 1} {
+	    do_tests $dwarf_version $dwarf_bits $strict_dwarf
+	}
+    }
+}
diff --git a/gdb/testsuite/gdb.base/fission-macro-i.i b/gdb/testsuite/gdb.base/fission-macro-i.i
new file mode 100644
index 00000000000..9c8cbece5c5
--- /dev/null
+++ b/gdb/testsuite/gdb.base/fission-macro-i.i
@@ -0,0 +1,27 @@ 
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 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 Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#define FIRST 1
+#define SECOND 2
+
+extern int foo (void);
+
+int
+main (void)
+{
+  return foo ();
+}