public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Update testsuite mechanism to allow object files as source files.
@ 2020-07-16 16:50 Caroline Tice
  2020-07-16 17:21 ` Andrew Burgess
  2020-07-16 17:33 ` Joseph Myers
  0 siblings, 2 replies; 15+ messages in thread
From: Caroline Tice @ 2020-07-16 16:50 UTC (permalink / raw)
  To: Caroline Tice via Gdb-patches
  Cc: Eric Christopher, H.J. Lu, Simon Marchi, Tom Tromey

[-- Attachment #1: Type: text/plain, Size: 2710 bytes --]

Since this patch will be resulting in something of a policy change, I
expect there will be a fair
amount of discussion around it.

High level summary:
In some (hopefully rare) cases, certain tests MUST be built with a
particular compiler to work.  If that compiler is not GCC, then it
makes it very burdensome for developers to run the GDB testsuite and
test those tests.  This change allows those tests to use object files
(generated by the required compiler) as the test source file, so that
when the test suite is run with GCC those tests will still
execute/test properly.

Details:
This change is motivated by the fact that clang and GCC sometimes generate
different output, which affects whether or not a test works properly.  The
particular motivating example is the gdb.dwarf2/dw5-rnglist-test.exp test,
which tests whether or not GDB is properly reading/handling DWARF v5
DW_AT_ranges of the form DW_FORM_rnglistx in lexical block dies.  GCC does
not generate that code, so compiling the test with GCC does not successfully
test anything. Clang does generate that code, so the only way to properly
test this is to compile the test case with clang.  A further twist is that
the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
they start their file index at 0 instead of 1, and the GNU assembler has not
been updated to handle this.  This is not a problem for
assembly files generated by GCC, because GCC generates DWARF v3
.debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
clang-generated .s file for the test is not an option, because the GNU
assembler chokes on it.

This patch updates lib/gdb.exp to allow it to properly handle test
cases where the source file is in fact an object file, and it updates
the dw5-rnglist-test to use an object file rather than the .cc file.  This
in turn makes the test itself compiler-agnostic.


-- Caroline Tice
cmtice@google.com

gdb/testsuite/ChangeLog

2020-07-16  Caroline Tice  <cmtice@google.com>

        * lib/gdb.exp (build_executable_from_specs): Create output_dir
        variable from call to standard_output_file; update code that
        compiles source files to object files and copies them to output
        directory, to check first and make sure they are not already
        object file.  If they are already object files, just copy them to
        output directory.
        * gdb.dwarf2/dw5-rnglist-test.o: New file (object file)
        * gdb.dwarf2/dw5-rnglist-test.exp: Update to use .o file rather than
        .cc file; this removes the dependency of this test on clang and
        allows it to work with GCC as well.

[-- Attachment #2: v1-0001-Update-GDB-testsuite-to-allow-tests-to-use-pre-bu.patch --]
[-- Type: application/octet-stream, Size: 42313 bytes --]

From fddf396f1a20e350ab233625f4866abb6bec70b7 Mon Sep 17 00:00:00 2001
From: Caroline Tice <cmtice@google.com>
Date: Thu, 16 Jul 2020 09:26:04 -0700
Subject: [PATCH v1] Update GDB testsuite to allow tests to use pre-built
 object files.

This change is motivated by the fact that clang and GCC sometimes generate
different output, which affects whether or not a test works properly.  The
particular motivating example is the gdb.dwarf2/dw5-rnglist-test.exp test,
which tests whether or not GDB is properly reading/handling DWARF v5
DW_AT_ranges of the form DW_FORM_rnglistx in lexical block dies.  GCC does
not generate that code, so compiling the test with GCC does not successfully
test anything. Clang does generate that code, so the only way to properly
test this is to compile the test case with clang.  A further twist is that
the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
they start their file index at 0 instead of 1, and the GNU assembler has not
been updated to handle this.  This is not a problem for
assembly files generated by GCC, because GCC generates DWARF v3
.debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
clang-generated .s file for the test is not an option, because the GNU
assembler chokes on it.

This patch updates lib/gdb.exp to allow it to properly handle test
cases where the source file is in fact an object file, and it updates
the dw5-rnglist-test to use an object file rather than the .cc file.  This
in turn makes the test itself compiler-agnostic.
---
 gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp |  15 ++++++++++++--
 gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.o   | Bin 0 -> 93144 bytes
 gdb/testsuite/lib/gdb.exp                     |  19 ++++++++++++++----
 3 files changed, 28 insertions(+), 6 deletions(-)
 create mode 100644 gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.o

diff --git a/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp b/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp
index af6c34b5dd..53f7c16795 100644
--- a/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp
@@ -17,12 +17,23 @@
 # DW_FORM_rnglistx DW_AT_ranges field.  This test is intended for DWARF-5,
 # compiled with clang++.
 
-standard_testfile .cc
+# In order to allow this test to work with GCC as well as clang, we
+# compiled the source to an object file, using the command below, and then
+# run the test on the .o file.  This ensures that it will work for
+# either compiler, and that it will continue to test what it was
+# intened to test, even if subsequent compilers change their code
+# generation.
+#
+# Compilation command:
+# $ clang++ -gdwarf-5 -O0 -fPIE -c dw5-rnglist-test.cc
+
+standard_testfile .o
 
 # This test is intended for targets which support DWARF-5.
 # Since we pass an explicit -gdwarf-5 to the compiler,
 # we let that be the test of whether the target supports it.
 
+
 if { [prepare_for_testing "failed to prepare" "${testfile}" \
           $srcfile {debug c++ additional_flags=-gdwarf-5 \
                         additional_flags=-O0}] } {
@@ -33,7 +44,7 @@ if ![runto_main] {
     return -1
 }
 
-gdb_breakpoint [gdb_get_line_number "break-here"]
+gdb_breakpoint dw5-rnglist-test.cc:70
 gdb_continue_to_breakpoint "break-here" ".* break-here .*"
 
 gdb_test "print curr" "\\\(node \\\*\\\) $hex <node_array>"
diff --git a/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.o b/gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.o
new file mode 100644
index 0000000000000000000000000000000000000000..a45678039dde17c8bfaf89eb568a44525ca459d7
GIT binary patch
literal 93144
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
F|9|~ID;xj-

literal 0
HcmV?d00001

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index 78dae17b0c..f5e1f0e876 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -6227,6 +6227,7 @@ proc build_executable_from_specs {testname executable options args} {
     global srcdir
 
     set binfile [standard_output_file $executable]
+    set output_dir [standard_output_file "."]
 
     set info_options ""
     if { [lsearch -exact $options "c++"] >= 0 } {
@@ -6272,11 +6273,21 @@ proc build_executable_from_specs {testname executable options args} {
 	    if { ! [regexp "^/" "$s"] } then {
 		set s "$srcdir/$subdir/$s"
 	    }
-	    if  { [$func "${s}" "${binfile}${i}.o" object $local_options] != "" } {
-		untested $testname
-		return -1
+	    # Only compile sourcfile into .o file if it is not already a
+	    # .o file.
+	    if { ! [string match "*.o" "$s"] } then {
+		if  { [$func "${s}" "${binfile}${i}.o" object $local_options] != "" } {
+		    untested $testname
+		    return -1
+		}
+		lappend objects "${binfile}${i}.o"
+	    } else {
+		# Source file IS an object file, so copy it to the
+		# standard_output_file directory and append it to the objects
+		# list.
+		eval exec cp "${s}" "${output_dir}"
+		lappend objects "${binfile}.o"
 	    }
-	    lappend objects "${binfile}${i}.o"
 	    incr i
 	}
 	set ret [$func $objects "${binfile}" executable $options]
-- 
2.27.0.389.gc38d7665816-goog


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 16:50 [PATCH] Update testsuite mechanism to allow object files as source files Caroline Tice
@ 2020-07-16 17:21 ` Andrew Burgess
  2020-07-16 18:07   ` Caroline Tice
  2020-07-16 17:33 ` Joseph Myers
  1 sibling, 1 reply; 15+ messages in thread
From: Andrew Burgess @ 2020-07-16 17:21 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Caroline Tice via Gdb-patches, Eric Christopher, Tom Tromey,
	Simon Marchi

* Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 09:50:36 -0700]:

> Since this patch will be resulting in something of a policy change, I
> expect there will be a fair
> amount of discussion around it.
> 
> High level summary:
> In some (hopefully rare) cases, certain tests MUST be built with a
> particular compiler to work.  If that compiler is not GCC, then it
> makes it very burdensome for developers to run the GDB testsuite and
> test those tests.  This change allows those tests to use object files
> (generated by the required compiler) as the test source file, so that
> when the test suite is run with GCC those tests will still
> execute/test properly.
> 
> Details:
> This change is motivated by the fact that clang and GCC sometimes generate
> different output, which affects whether or not a test works properly.  The
> particular motivating example is the gdb.dwarf2/dw5-rnglist-test.exp test,
> which tests whether or not GDB is properly reading/handling DWARF v5
> DW_AT_ranges of the form DW_FORM_rnglistx in lexical block dies.  GCC does
> not generate that code, so compiling the test with GCC does not successfully
> test anything. Clang does generate that code, so the only way to properly
> test this is to compile the test case with clang.  A further twist is that
> the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
> they start their file index at 0 instead of 1, and the GNU assembler has not
> been updated to handle this.  This is not a problem for
> assembly files generated by GCC, because GCC generates DWARF v3
> .debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
> when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
> clang-generated .s file for the test is not an option, because the GNU
> assembler chokes on it.
> 
> This patch updates lib/gdb.exp to allow it to properly handle test
> cases where the source file is in fact an object file, and it updates
> the dw5-rnglist-test to use an object file rather than the .cc file.  This
> in turn makes the test itself compiler-agnostic.

I haven't looked at this particular test, but I think any
justification for this change, especially when the example you cite is
about different DWARF, should include an explanation about why the
existing DWARF assembler can't be used in this case.

Thanks,
Andrew

> 
> 
> -- Caroline Tice
> cmtice@google.com
> 
> gdb/testsuite/ChangeLog
> 
> 2020-07-16  Caroline Tice  <cmtice@google.com>
> 
>         * lib/gdb.exp (build_executable_from_specs): Create output_dir
>         variable from call to standard_output_file; update code that
>         compiles source files to object files and copies them to output
>         directory, to check first and make sure they are not already
>         object file.  If they are already object files, just copy them to
>         output directory.
>         * gdb.dwarf2/dw5-rnglist-test.o: New file (object file)
>         * gdb.dwarf2/dw5-rnglist-test.exp: Update to use .o file rather than
>         .cc file; this removes the dependency of this test on clang and
>         allows it to work with GCC as well.



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 16:50 [PATCH] Update testsuite mechanism to allow object files as source files Caroline Tice
  2020-07-16 17:21 ` Andrew Burgess
@ 2020-07-16 17:33 ` Joseph Myers
  2020-07-16 18:13   ` Caroline Tice
  2020-07-16 20:12   ` Tom Tromey
  1 sibling, 2 replies; 15+ messages in thread
From: Joseph Myers @ 2020-07-16 17:33 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Caroline Tice via Gdb-patches, Eric Christopher, Tom Tromey,
	Simon Marchi

On Thu, 16 Jul 2020, Caroline Tice via Gdb-patches wrote:

> High level summary:
> In some (hopefully rare) cases, certain tests MUST be built with a
> particular compiler to work.  If that compiler is not GCC, then it
> makes it very burdensome for developers to run the GDB testsuite and
> test those tests.  This change allows those tests to use object files
> (generated by the required compiler) as the test source file, so that
> when the test suite is run with GCC those tests will still
> execute/test properly.

How is this expected to work when the GDB being tested is configured for a 
different architecture or OS from that of the checked-in object file and 
may not be able to read its object file format at all?  Will all such 
tests have explicit conditioning on the target for which GDB is 
configured?

On general free software and reproducible builds principles:

* The source for any checked-in object file should be checked in.

* That source should include comments giving all information required to 
be able to reproduce the object file byte-for-byte - for example, the 
exact git commit of the compiler used to generate it, the exact options 
with which that compiler should be configured and the exact command line 
to use with that compiler to generate that object file.  And it should 
have been verified by someone in a different environment from the person 
proposing the addition of such an object file that following those 
instructions does give a byte-for-byte identical object file.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 17:21 ` Andrew Burgess
@ 2020-07-16 18:07   ` Caroline Tice
  2020-07-16 18:29     ` Andrew Burgess
  0 siblings, 1 reply; 15+ messages in thread
From: Caroline Tice @ 2020-07-16 18:07 UTC (permalink / raw)
  To: Andrew Burgess
  Cc: Caroline Tice via Gdb-patches, Eric Christopher, Tom Tromey,
	Simon Marchi

This text, extracted from my detailed explanation, DOES explain (I
thought) why the existing DWARF assembler can't be used:

> > A further twist is that
> > the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
> > they start their file index at 0 instead of 1, and the GNU assembler has not
> > been updated to handle this.  This is not a problem for
> > assembly files generated by GCC, because GCC generates DWARF v3
> > .debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
> > when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
> > clang-generated .s file for the test is not an option, because the GNU
> > assembler chokes on it.

-- Caroline
cmtice@google.com

On Thu, Jul 16, 2020 at 10:21 AM Andrew Burgess
<andrew.burgess@embecosm.com> wrote:
>
> * Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 09:50:36 -0700]:
>
> > Since this patch will be resulting in something of a policy change, I
> > expect there will be a fair
> > amount of discussion around it.
> >
> > High level summary:
> > In some (hopefully rare) cases, certain tests MUST be built with a
> > particular compiler to work.  If that compiler is not GCC, then it
> > makes it very burdensome for developers to run the GDB testsuite and
> > test those tests.  This change allows those tests to use object files
> > (generated by the required compiler) as the test source file, so that
> > when the test suite is run with GCC those tests will still
> > execute/test properly.
> >
> > Details:
> > This change is motivated by the fact that clang and GCC sometimes generate
> > different output, which affects whether or not a test works properly.  The
> > particular motivating example is the gdb.dwarf2/dw5-rnglist-test.exp test,
> > which tests whether or not GDB is properly reading/handling DWARF v5
> > DW_AT_ranges of the form DW_FORM_rnglistx in lexical block dies.  GCC does
> > not generate that code, so compiling the test with GCC does not successfully
> > test anything. Clang does generate that code, so the only way to properly
> > test this is to compile the test case with clang.  A further twist is that
> > the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
> > they start their file index at 0 instead of 1, and the GNU assembler has not
> > been updated to handle this.  This is not a problem for
> > assembly files generated by GCC, because GCC generates DWARF v3
> > .debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
> > when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
> > clang-generated .s file for the test is not an option, because the GNU
> > assembler chokes on it.
> >
> > This patch updates lib/gdb.exp to allow it to properly handle test
> > cases where the source file is in fact an object file, and it updates
> > the dw5-rnglist-test to use an object file rather than the .cc file.  This
> > in turn makes the test itself compiler-agnostic.
>
> I haven't looked at this particular test, but I think any
> justification for this change, especially when the example you cite is
> about different DWARF, should include an explanation about why the
> existing DWARF assembler can't be used in this case.
>
> Thanks,
> Andrew
>
> >
> >
> > -- Caroline Tice
> > cmtice@google.com
> >
> > gdb/testsuite/ChangeLog
> >
> > 2020-07-16  Caroline Tice  <cmtice@google.com>
> >
> >         * lib/gdb.exp (build_executable_from_specs): Create output_dir
> >         variable from call to standard_output_file; update code that
> >         compiles source files to object files and copies them to output
> >         directory, to check first and make sure they are not already
> >         object file.  If they are already object files, just copy them to
> >         output directory.
> >         * gdb.dwarf2/dw5-rnglist-test.o: New file (object file)
> >         * gdb.dwarf2/dw5-rnglist-test.exp: Update to use .o file rather than
> >         .cc file; this removes the dependency of this test on clang and
> >         allows it to work with GCC as well.
>
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 17:33 ` Joseph Myers
@ 2020-07-16 18:13   ` Caroline Tice
  2020-07-16 18:47     ` Andrew Burgess
  2020-07-16 20:35     ` Joseph Myers
  2020-07-16 20:12   ` Tom Tromey
  1 sibling, 2 replies; 15+ messages in thread
From: Caroline Tice @ 2020-07-16 18:13 UTC (permalink / raw)
  To: Joseph Myers
  Cc: Caroline Tice via Gdb-patches, Eric Christopher, Tom Tromey,
	Simon Marchi

On Thu, Jul 16, 2020 at 10:33 AM Joseph Myers <joseph@codesourcery.com> wrote:
>
> On Thu, 16 Jul 2020, Caroline Tice via Gdb-patches wrote:
>
> > High level summary:
> > In some (hopefully rare) cases, certain tests MUST be built with a
> > particular compiler to work.  If that compiler is not GCC, then it
> > makes it very burdensome for developers to run the GDB testsuite and
> > test those tests.  This change allows those tests to use object files
> > (generated by the required compiler) as the test source file, so that
> > when the test suite is run with GCC those tests will still
> > execute/test properly.
>
> How is this expected to work when the GDB being tested is configured for a
> different architecture or OS from that of the checked-in object file and
> may not be able to read its object file format at all?  Will all such
> tests have explicit conditioning on the target for which GDB is
> configured?

That is a very good point; I suppose this test should be marked to
only work on the architecture for which the test was compiled? (I know
I've seen those kinds of restrictions in testsuites before, although
I'm not sure if the GDB testsuite is currently set up for such
restrictions).

>
> On general free software and reproducible builds principles:
>
> * The source for any checked-in object file should be checked in.
>
> * That source should include comments giving all information required to
> be able to reproduce the object file byte-for-byte - for example, the
> exact git commit of the compiler used to generate it, the exact options
> with which that compiler should be configured and the exact command line
> to use with that compiler to generate that object file.  And it should
> have been verified by someone in a different environment from the person
> proposing the addition of such an object file that following those
> instructions does give a byte-for-byte identical object file.

The source code for this test case was checked in as part of the patch
recently committed for fixing GDB's handling of DWARF v5 dwo files.
The
source file is in gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.cc

The command used to generate the .object file is added in the comments
of the updated testcase in the patch I attached to the first message
in this thread (in the file
gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp.  I did not include the
compiler version information in those comments, but I can certainly
update it to do so.

>
> --
> Joseph S. Myers
> joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 18:07   ` Caroline Tice
@ 2020-07-16 18:29     ` Andrew Burgess
  0 siblings, 0 replies; 15+ messages in thread
From: Andrew Burgess @ 2020-07-16 18:29 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Caroline Tice via Gdb-patches, Eric Christopher, Tom Tromey,
	Simon Marchi

* Caroline Tice <cmtice@google.com> [2020-07-16 11:07:39 -0700]:

> This text, extracted from my detailed explanation, DOES explain (I
> thought) why the existing DWARF assembler can't be used:
> 
> > > A further twist is that
> > > the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
> > > they start their file index at 0 instead of 1, and the GNU assembler has not
> > > been updated to handle this.  This is not a problem for
> > > assembly files generated by GCC, because GCC generates DWARF v3
> > > .debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
> > > when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
> > > clang-generated .s file for the test is not an option, because the GNU
> > > assembler chokes on it.

But GDB's DWARF assembler (gdb/testsuite/lib/dwarf.exp) just generates
.byte/.word/etc?  I don't see why there would be any problems
extending this to cover the features you'd want (again, I say this
without actually looking at your example test).  It seems like the
text above would apply to the GNU assembler trying to assemble .file
directives as generated by a compiler.

Also, on further reflection, we already have tests like:
  gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.S
where the DWARF has been compiled down to a raw assembler file.  Given
that, as has already been pointed out, any object file is going to be
architecture and maybe even OS specific anyway, there doesn't appear
to be much (any?) difference between adding object files into the
testsuite and just adding the test as a raw assembler file.  Have you
considered this approach?

Thanks,
Andrew





> 
> -- Caroline
> cmtice@google.com
> 
> On Thu, Jul 16, 2020 at 10:21 AM Andrew Burgess
> <andrew.burgess@embecosm.com> wrote:
> >
> > * Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 09:50:36 -0700]:
> >
> > > Since this patch will be resulting in something of a policy change, I
> > > expect there will be a fair
> > > amount of discussion around it.
> > >
> > > High level summary:
> > > In some (hopefully rare) cases, certain tests MUST be built with a
> > > particular compiler to work.  If that compiler is not GCC, then it
> > > makes it very burdensome for developers to run the GDB testsuite and
> > > test those tests.  This change allows those tests to use object files
> > > (generated by the required compiler) as the test source file, so that
> > > when the test suite is run with GCC those tests will still
> > > execute/test properly.
> > >
> > > Details:
> > > This change is motivated by the fact that clang and GCC sometimes generate
> > > different output, which affects whether or not a test works properly.  The
> > > particular motivating example is the gdb.dwarf2/dw5-rnglist-test.exp test,
> > > which tests whether or not GDB is properly reading/handling DWARF v5
> > > DW_AT_ranges of the form DW_FORM_rnglistx in lexical block dies.  GCC does
> > > not generate that code, so compiling the test with GCC does not successfully
> > > test anything. Clang does generate that code, so the only way to properly
> > > test this is to compile the test case with clang.  A further twist is that
> > > the GNU assembler currently chokes on DWARF v5 .debug_line sections, because
> > > they start their file index at 0 instead of 1, and the GNU assembler has not
> > > been updated to handle this.  This is not a problem for
> > > assembly files generated by GCC, because GCC generates DWARF v3
> > > .debug_line sections, even when passed -gdwarf-5.  Clang on the other hand,
> > > when passed -gdwarf-5, generates DWARF v5 .debug_line tables. So using a
> > > clang-generated .s file for the test is not an option, because the GNU
> > > assembler chokes on it.
> > >
> > > This patch updates lib/gdb.exp to allow it to properly handle test
> > > cases where the source file is in fact an object file, and it updates
> > > the dw5-rnglist-test to use an object file rather than the .cc file.  This
> > > in turn makes the test itself compiler-agnostic.
> >
> > I haven't looked at this particular test, but I think any
> > justification for this change, especially when the example you cite is
> > about different DWARF, should include an explanation about why the
> > existing DWARF assembler can't be used in this case.
> >
> > Thanks,
> > Andrew
> >
> > >
> > >
> > > -- Caroline Tice
> > > cmtice@google.com
> > >
> > > gdb/testsuite/ChangeLog
> > >
> > > 2020-07-16  Caroline Tice  <cmtice@google.com>
> > >
> > >         * lib/gdb.exp (build_executable_from_specs): Create output_dir
> > >         variable from call to standard_output_file; update code that
> > >         compiles source files to object files and copies them to output
> > >         directory, to check first and make sure they are not already
> > >         object file.  If they are already object files, just copy them to
> > >         output directory.
> > >         * gdb.dwarf2/dw5-rnglist-test.o: New file (object file)
> > >         * gdb.dwarf2/dw5-rnglist-test.exp: Update to use .o file rather than
> > >         .cc file; this removes the dependency of this test on clang and
> > >         allows it to work with GCC as well.
> >
> >

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 18:13   ` Caroline Tice
@ 2020-07-16 18:47     ` Andrew Burgess
  2020-07-16 20:35     ` Joseph Myers
  1 sibling, 0 replies; 15+ messages in thread
From: Andrew Burgess @ 2020-07-16 18:47 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Joseph Myers, Eric Christopher, Simon Marchi, Tom Tromey,
	Caroline Tice via Gdb-patches

* Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 11:13:24 -0700]:

> On Thu, Jul 16, 2020 at 10:33 AM Joseph Myers <joseph@codesourcery.com> wrote:
> >
> > On Thu, 16 Jul 2020, Caroline Tice via Gdb-patches wrote:
> >
> > > High level summary:
> > > In some (hopefully rare) cases, certain tests MUST be built with a
> > > particular compiler to work.  If that compiler is not GCC, then it
> > > makes it very burdensome for developers to run the GDB testsuite and
> > > test those tests.  This change allows those tests to use object files
> > > (generated by the required compiler) as the test source file, so that
> > > when the test suite is run with GCC those tests will still
> > > execute/test properly.
> >
> > How is this expected to work when the GDB being tested is configured for a
> > different architecture or OS from that of the checked-in object file and
> > may not be able to read its object file format at all?  Will all such
> > tests have explicit conditioning on the target for which GDB is
> > configured?
> 
> That is a very good point; I suppose this test should be marked to
> only work on the architecture for which the test was compiled? (I know
> I've seen those kinds of restrictions in testsuites before, although
> I'm not sure if the GDB testsuite is currently set up for such
> restrictions).

Yes tests can be restricted for particular architectures, look for
istarget checks throughout the testsuite, for example in:

  gdb/testsuite/gdb.arch/amd64-entry-value-param-dwarf5.exp

Thanks,
Andrew


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 17:33 ` Joseph Myers
  2020-07-16 18:13   ` Caroline Tice
@ 2020-07-16 20:12   ` Tom Tromey
  2020-07-16 21:10     ` Caroline Tice
  1 sibling, 1 reply; 15+ messages in thread
From: Tom Tromey @ 2020-07-16 20:12 UTC (permalink / raw)
  To: Joseph Myers
  Cc: Caroline Tice, Caroline Tice via Gdb-patches, Eric Christopher,
	Tom Tromey, Simon Marchi

Joseph> On general free software and reproducible builds principles:
Joseph> * The source for any checked-in object file should be checked in.
Joseph> * That source should include comments giving all information required to 
Joseph> be able to reproduce the object file byte-for-byte

In the past we tried this kind of thing, by taking the assembly
generated by the compiler, then editing it and checking it in.

However, IMO, this turned out to be a pain.  The hand editing was often
not sufficiently documented, and the tests were still
architecture-dependent.  Once or twice I think someone has had to edit
the .S file later, which is error-prone.  Also, the earliest test suite
additions like this didn't include the original source, making this
harder to handle.

The "DWARF assembler" in the test suite avoids all this, at least for
tests that require particular debuginfo.  The main drawbacks of this
approach are (again IMO) that sometimes it's a pain to write the DWARF
by hand, and that sometimes the assembler framework itself needs
upgrades before one can even begin.  However, the tests are much more
robust.

I'd encourage the extension of the latter approach as much as possible.
It isn't perfect but IME has been better on the whole.

Tom

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 18:13   ` Caroline Tice
  2020-07-16 18:47     ` Andrew Burgess
@ 2020-07-16 20:35     ` Joseph Myers
  1 sibling, 0 replies; 15+ messages in thread
From: Joseph Myers @ 2020-07-16 20:35 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Eric Christopher, Simon Marchi, Tom Tromey,
	Caroline Tice via Gdb-patches

On Thu, 16 Jul 2020, Caroline Tice via Gdb-patches wrote:

> The command used to generate the .object file is added in the comments
> of the updated testcase in the patch I attached to the first message
> in this thread (in the file
> gdb/testsuite/gdb.dwarf2/dw5-rnglist-test.exp.  I did not include the
> compiler version information in those comments, but I can certainly
> update it to do so.

Note that it's best for the compiler for this sort of thing to be an 
unmodified upstream version - not a distribution version.  Cf. the issues 
we have with people checking in configure scripts generated by 
distribution version of autoconf, which are not the same as generated by 
upstream autoconf.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 20:12   ` Tom Tromey
@ 2020-07-16 21:10     ` Caroline Tice
  2020-07-16 21:16       ` Eric Christopher
  2020-07-17  9:43       ` Andrew Burgess
  0 siblings, 2 replies; 15+ messages in thread
From: Caroline Tice @ 2020-07-16 21:10 UTC (permalink / raw)
  To: Tom Tromey
  Cc: Joseph Myers, Caroline Tice via Gdb-patches, Eric Christopher,
	Simon Marchi

Has the DWARF assembler in the GDB testsuite been updated to handle
DWARF v5?  Or can it handle that automatically?  Is there a good
example I can look at to see how to use it?

-- Caroline
cmtice@google.com

On Thu, Jul 16, 2020 at 1:12 PM Tom Tromey <tom@tromey.com> wrote:
>
> Joseph> On general free software and reproducible builds principles:
> Joseph> * The source for any checked-in object file should be checked in.
> Joseph> * That source should include comments giving all information required to
> Joseph> be able to reproduce the object file byte-for-byte
>
> In the past we tried this kind of thing, by taking the assembly
> generated by the compiler, then editing it and checking it in.
>
> However, IMO, this turned out to be a pain.  The hand editing was often
> not sufficiently documented, and the tests were still
> architecture-dependent.  Once or twice I think someone has had to edit
> the .S file later, which is error-prone.  Also, the earliest test suite
> additions like this didn't include the original source, making this
> harder to handle.
>
> The "DWARF assembler" in the test suite avoids all this, at least for
> tests that require particular debuginfo.  The main drawbacks of this
> approach are (again IMO) that sometimes it's a pain to write the DWARF
> by hand, and that sometimes the assembler framework itself needs
> upgrades before one can even begin.  However, the tests are much more
> robust.
>
> I'd encourage the extension of the latter approach as much as possible.
> It isn't perfect but IME has been better on the whole.
>
> Tom

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 21:10     ` Caroline Tice
@ 2020-07-16 21:16       ` Eric Christopher
  2020-07-17  9:48         ` Andrew Burgess
  2020-07-17  9:43       ` Andrew Burgess
  1 sibling, 1 reply; 15+ messages in thread
From: Eric Christopher @ 2020-07-16 21:16 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Tom Tromey, Eric Christopher, Simon Marchi,
	Caroline Tice via Gdb-patches, Joseph Myers

Should be just gas in the binutils-gdb checkout?

-eric

On Thu, Jul 16, 2020 at 2:10 PM Caroline Tice via Gdb-patches <
gdb-patches@sourceware.org> wrote:

> Has the DWARF assembler in the GDB testsuite been updated to handle
> DWARF v5?  Or can it handle that automatically?  Is there a good
> example I can look at to see how to use it?
>
> -- Caroline
> cmtice@google.com
>
> On Thu, Jul 16, 2020 at 1:12 PM Tom Tromey <tom@tromey.com> wrote:
> >
> > Joseph> On general free software and reproducible builds principles:
> > Joseph> * The source for any checked-in object file should be checked in.
> > Joseph> * That source should include comments giving all information
> required to
> > Joseph> be able to reproduce the object file byte-for-byte
> >
> > In the past we tried this kind of thing, by taking the assembly
> > generated by the compiler, then editing it and checking it in.
> >
> > However, IMO, this turned out to be a pain.  The hand editing was often
> > not sufficiently documented, and the tests were still
> > architecture-dependent.  Once or twice I think someone has had to edit
> > the .S file later, which is error-prone.  Also, the earliest test suite
> > additions like this didn't include the original source, making this
> > harder to handle.
> >
> > The "DWARF assembler" in the test suite avoids all this, at least for
> > tests that require particular debuginfo.  The main drawbacks of this
> > approach are (again IMO) that sometimes it's a pain to write the DWARF
> > by hand, and that sometimes the assembler framework itself needs
> > upgrades before one can even begin.  However, the tests are much more
> > robust.
> >
> > I'd encourage the extension of the latter approach as much as possible.
> > It isn't perfect but IME has been better on the whole.
> >
> > Tom
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 21:10     ` Caroline Tice
  2020-07-16 21:16       ` Eric Christopher
@ 2020-07-17  9:43       ` Andrew Burgess
  2020-07-17 17:45         ` Tom Tromey
  1 sibling, 1 reply; 15+ messages in thread
From: Andrew Burgess @ 2020-07-17  9:43 UTC (permalink / raw)
  To: Caroline Tice
  Cc: Tom Tromey, Eric Christopher, Simon Marchi,
	Caroline Tice via Gdb-patches, Joseph Myers

* Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 14:10:25 -0700]:

> Has the DWARF assembler in the GDB testsuite been updated to handle
> DWARF v5?  Or can it handle that automatically?  Is there a good
> example I can look at to see how to use it?

To find examples look for the pattern 'Dwarf::assemble" in
gdb/testsuite/gdb.dwarf2/*.exp.

The dwarf assembler does use include/dwarf.h and include/dwarf.def to
build up the set of attributes and form types that are supported, so
in that sense the basics of DWARF5 will be supported, but when you
start to look at new sections, or new layouts for existing sections,
then no, this is most likely not supported, yet.

Thanks,
Andrew







> 
> -- Caroline
> cmtice@google.com
> 
> On Thu, Jul 16, 2020 at 1:12 PM Tom Tromey <tom@tromey.com> wrote:
> >
> > Joseph> On general free software and reproducible builds principles:
> > Joseph> * The source for any checked-in object file should be checked in.
> > Joseph> * That source should include comments giving all information required to
> > Joseph> be able to reproduce the object file byte-for-byte
> >
> > In the past we tried this kind of thing, by taking the assembly
> > generated by the compiler, then editing it and checking it in.
> >
> > However, IMO, this turned out to be a pain.  The hand editing was often
> > not sufficiently documented, and the tests were still
> > architecture-dependent.  Once or twice I think someone has had to edit
> > the .S file later, which is error-prone.  Also, the earliest test suite
> > additions like this didn't include the original source, making this
> > harder to handle.
> >
> > The "DWARF assembler" in the test suite avoids all this, at least for
> > tests that require particular debuginfo.  The main drawbacks of this
> > approach are (again IMO) that sometimes it's a pain to write the DWARF
> > by hand, and that sometimes the assembler framework itself needs
> > upgrades before one can even begin.  However, the tests are much more
> > robust.
> >
> > I'd encourage the extension of the latter approach as much as possible.
> > It isn't perfect but IME has been better on the whole.
> >
> > Tom

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-16 21:16       ` Eric Christopher
@ 2020-07-17  9:48         ` Andrew Burgess
  2020-07-17 16:05           ` Caroline Tice
  0 siblings, 1 reply; 15+ messages in thread
From: Andrew Burgess @ 2020-07-17  9:48 UTC (permalink / raw)
  To: Eric Christopher
  Cc: Caroline Tice, Eric Christopher, Simon Marchi, Tom Tromey,
	Joseph Myers, Caroline Tice via Gdb-patches

* Eric Christopher via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 14:16:46 -0700]:

> Should be just gas in the binutils-gdb checkout?

GDB's DWARF assembler is written in TCL, and generates a .S file
containing the debug sections and their contents.

A test will usually consist of some DWARF written in TCL and a C file.
The C file is compiled without debug information and the TCL code then
places references to symbols in the C file into the generated DWARF.

The DWARF assembler then creates a .S file, which is assembled and
linked with the C file.

We then start up GDB and debug as normal.

Thanks,
Andrew




> 
> -eric
> 
> On Thu, Jul 16, 2020 at 2:10 PM Caroline Tice via Gdb-patches <
> gdb-patches@sourceware.org> wrote:
> 
> > Has the DWARF assembler in the GDB testsuite been updated to handle
> > DWARF v5?  Or can it handle that automatically?  Is there a good
> > example I can look at to see how to use it?
> >
> > -- Caroline
> > cmtice@google.com
> >
> > On Thu, Jul 16, 2020 at 1:12 PM Tom Tromey <tom@tromey.com> wrote:
> > >
> > > Joseph> On general free software and reproducible builds principles:
> > > Joseph> * The source for any checked-in object file should be checked in.
> > > Joseph> * That source should include comments giving all information
> > required to
> > > Joseph> be able to reproduce the object file byte-for-byte
> > >
> > > In the past we tried this kind of thing, by taking the assembly
> > > generated by the compiler, then editing it and checking it in.
> > >
> > > However, IMO, this turned out to be a pain.  The hand editing was often
> > > not sufficiently documented, and the tests were still
> > > architecture-dependent.  Once or twice I think someone has had to edit
> > > the .S file later, which is error-prone.  Also, the earliest test suite
> > > additions like this didn't include the original source, making this
> > > harder to handle.
> > >
> > > The "DWARF assembler" in the test suite avoids all this, at least for
> > > tests that require particular debuginfo.  The main drawbacks of this
> > > approach are (again IMO) that sometimes it's a pain to write the DWARF
> > > by hand, and that sometimes the assembler framework itself needs
> > > upgrades before one can even begin.  However, the tests are much more
> > > robust.
> > >
> > > I'd encourage the extension of the latter approach as much as possible.
> > > It isn't perfect but IME has been better on the whole.
> > >
> > > Tom
> >

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-17  9:48         ` Andrew Burgess
@ 2020-07-17 16:05           ` Caroline Tice
  0 siblings, 0 replies; 15+ messages in thread
From: Caroline Tice @ 2020-07-17 16:05 UTC (permalink / raw)
  To: Andrew Burgess
  Cc: Eric Christopher, Eric Christopher, Simon Marchi, Tom Tromey,
	Joseph Myers, Caroline Tice via Gdb-patches

I've been able to generate/hand-edit a .S file for this test (thanks to
various people for help/suggestions).  I will drop this object-file
approach and submit a new patch (on a new thread) with the .S file update.
Thanks everyone!

-- Caroline
cmtice@google.com


On Fri, Jul 17, 2020 at 2:48 AM Andrew Burgess <andrew.burgess@embecosm.com>
wrote:

> * Eric Christopher via Gdb-patches <gdb-patches@sourceware.org>
> [2020-07-16 14:16:46 -0700]:
>
> > Should be just gas in the binutils-gdb checkout?
>
> GDB's DWARF assembler is written in TCL, and generates a .S file
> containing the debug sections and their contents.
>
> A test will usually consist of some DWARF written in TCL and a C file.
> The C file is compiled without debug information and the TCL code then
> places references to symbols in the C file into the generated DWARF.
>
> The DWARF assembler then creates a .S file, which is assembled and
> linked with the C file.
>
> We then start up GDB and debug as normal.
>
> Thanks,
> Andrew
>
>
>
>
> >
> > -eric
> >
> > On Thu, Jul 16, 2020 at 2:10 PM Caroline Tice via Gdb-patches <
> > gdb-patches@sourceware.org> wrote:
> >
> > > Has the DWARF assembler in the GDB testsuite been updated to handle
> > > DWARF v5?  Or can it handle that automatically?  Is there a good
> > > example I can look at to see how to use it?
> > >
> > > -- Caroline
> > > cmtice@google.com
> > >
> > > On Thu, Jul 16, 2020 at 1:12 PM Tom Tromey <tom@tromey.com> wrote:
> > > >
> > > > Joseph> On general free software and reproducible builds principles:
> > > > Joseph> * The source for any checked-in object file should be
> checked in.
> > > > Joseph> * That source should include comments giving all information
> > > required to
> > > > Joseph> be able to reproduce the object file byte-for-byte
> > > >
> > > > In the past we tried this kind of thing, by taking the assembly
> > > > generated by the compiler, then editing it and checking it in.
> > > >
> > > > However, IMO, this turned out to be a pain.  The hand editing was
> often
> > > > not sufficiently documented, and the tests were still
> > > > architecture-dependent.  Once or twice I think someone has had to
> edit
> > > > the .S file later, which is error-prone.  Also, the earliest test
> suite
> > > > additions like this didn't include the original source, making this
> > > > harder to handle.
> > > >
> > > > The "DWARF assembler" in the test suite avoids all this, at least for
> > > > tests that require particular debuginfo.  The main drawbacks of this
> > > > approach are (again IMO) that sometimes it's a pain to write the
> DWARF
> > > > by hand, and that sometimes the assembler framework itself needs
> > > > upgrades before one can even begin.  However, the tests are much more
> > > > robust.
> > > >
> > > > I'd encourage the extension of the latter approach as much as
> possible.
> > > > It isn't perfect but IME has been better on the whole.
> > > >
> > > > Tom
> > >
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH] Update testsuite mechanism to allow object files as source files.
  2020-07-17  9:43       ` Andrew Burgess
@ 2020-07-17 17:45         ` Tom Tromey
  0 siblings, 0 replies; 15+ messages in thread
From: Tom Tromey @ 2020-07-17 17:45 UTC (permalink / raw)
  To: Andrew Burgess
  Cc: Caroline Tice, Tom Tromey, Eric Christopher, Simon Marchi,
	Caroline Tice via Gdb-patches, Joseph Myers

>>>>> "Andrew" == Andrew Burgess <andrew.burgess@embecosm.com> writes:

Andrew> * Caroline Tice via Gdb-patches <gdb-patches@sourceware.org> [2020-07-16 14:10:25 -0700]:
>> Has the DWARF assembler in the GDB testsuite been updated to handle
>> DWARF v5?  Or can it handle that automatically?  Is there a good
>> example I can look at to see how to use it?

Andrew> To find examples look for the pattern 'Dwarf::assemble" in
Andrew> gdb/testsuite/gdb.dwarf2/*.exp.

There are also comments in gdb/testsuite/lib/dwarf.exp explaining how to
use it.

Tom

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2020-07-17 17:45 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-16 16:50 [PATCH] Update testsuite mechanism to allow object files as source files Caroline Tice
2020-07-16 17:21 ` Andrew Burgess
2020-07-16 18:07   ` Caroline Tice
2020-07-16 18:29     ` Andrew Burgess
2020-07-16 17:33 ` Joseph Myers
2020-07-16 18:13   ` Caroline Tice
2020-07-16 18:47     ` Andrew Burgess
2020-07-16 20:35     ` Joseph Myers
2020-07-16 20:12   ` Tom Tromey
2020-07-16 21:10     ` Caroline Tice
2020-07-16 21:16       ` Eric Christopher
2020-07-17  9:48         ` Andrew Burgess
2020-07-17 16:05           ` Caroline Tice
2020-07-17  9:43       ` Andrew Burgess
2020-07-17 17:45         ` Tom Tromey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).