* [PATCH 0/2] Fix gdb.base/print-file-var.exp with Clang @ 2020-10-13 17:26 Gary Benson 2020-10-13 17:26 ` [PATCH 1/2] Detect and report incompatible gdb_compile options Gary Benson 2020-10-13 17:26 ` [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 0 siblings, 2 replies; 9+ messages in thread From: Gary Benson @ 2020-10-13 17:26 UTC (permalink / raw) To: gdb-patches Hi all, The C++ parts of gdb.base/print-file-var.exp failed to build with Clang because the "-x c++" option added by gdb_compile caused the compiler to attempt to parse .so files as C++. Not only did this fail to compile, it also resulted in a MAHOOSSIVE gdb.log of over 100Mb for that single test, as Clang happily dumped the "lines" of the binary file it felt violated the C++ standard. The first patch of this series adds code to gdb_compile to detect this situation and report an error. The second patch is the actual fix: it separates the options for the compiler and linker into two lists, and uses build_executable_from_specs to perform the build as it can handle this separation. Checked on Fedora 32 x86_64, with GCC and Clang. Is this ok to commit? Cheers, Gary -- Gary Benson - he / him / his Principal Software Engineer, Red Hat ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] Detect and report incompatible gdb_compile options 2020-10-13 17:26 [PATCH 0/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson @ 2020-10-13 17:26 ` Gary Benson 2020-10-23 13:04 ` Pedro Alves 2020-10-30 18:45 ` Tom Tromey 2020-10-13 17:26 ` [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 1 sibling, 2 replies; 9+ messages in thread From: Gary Benson @ 2020-10-13 17:26 UTC (permalink / raw) To: gdb-patches In commits 221db974e653659edb280787af1b3efdd1615083 and 68d654afdfcff840ebb3ae432ed72dca0521d670, these patches: 2020-06-24 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when compiling C++ programs. 2020-09-25 Gary Benson <gbenson@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only for .c files. attempted to fix problems with testcases that compile .c files using the C++ compiler. These patches cause gdb_compile to add "-x c++" to the compiler options when using Clang. This fix does not work for gdb.base/print-file-var.exp, however, which attempts to compile a .c input file to an executable linked with shared libraries: the resulting command caused the compiler to attempt to parse the .so files as C++. This patch causes gdb_compile to reject this combination of options. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Inhibit passing "-x c++" for .c files compiled as C++ with Clang if any shared libraries are specified. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/lib/gdb.exp | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 6084699..999fd63 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3946,6 +3946,22 @@ proc gdb_compile {source dest type options} { && [lsearch -exact $options c++] != -1 && [string match *.c $source] != 0 && [test_compiler_info "clang-*"] } { + + # gdb_compile cannot handle this combination of options, the + # result is a command like "clang -x c++ foo.c bar.so -o baz" + # which tells Clang to treat bar.so as C++. The solution is + # to call gdb_compile twice--once to compile, once to link-- + # either directly, or via build_executable_from_specs. + if { [lsearch $options shlib=*] != -1 } { + set result "incompatible gdb_compile options" + + if {[lsearch $options quiet] < 0} { + clone_output "gdb compile failed, $result" + } + + return $result + } + lappend new_options early_flags=-x\ c++ } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Detect and report incompatible gdb_compile options 2020-10-13 17:26 ` [PATCH 1/2] Detect and report incompatible gdb_compile options Gary Benson @ 2020-10-23 13:04 ` Pedro Alves 2020-11-02 14:23 ` Gary Benson 2020-10-30 18:45 ` Tom Tromey 1 sibling, 1 reply; 9+ messages in thread From: Pedro Alves @ 2020-10-23 13:04 UTC (permalink / raw) To: Gary Benson, gdb-patches On 10/13/20 6:26 PM, Gary Benson via Gdb-patches wrote: > diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp > index 6084699..999fd63 100644 > --- a/gdb/testsuite/lib/gdb.exp > +++ b/gdb/testsuite/lib/gdb.exp > @@ -3946,6 +3946,22 @@ proc gdb_compile {source dest type options} { > && [lsearch -exact $options c++] != -1 > && [string match *.c $source] != 0 > && [test_compiler_info "clang-*"] } { > + > + # gdb_compile cannot handle this combination of options, the > + # result is a command like "clang -x c++ foo.c bar.so -o baz" > + # which tells Clang to treat bar.so as C++. The solution is > + # to call gdb_compile twice--once to compile, once to link-- > + # either directly, or via build_executable_from_specs. > + if { [lsearch $options shlib=*] != -1 } { > + set result "incompatible gdb_compile options" > + > + if {[lsearch $options quiet] < 0} { > + clone_output "gdb compile failed, $result" > + } > + > + return $result > + } I think it would be better to do this check outside the [test_compiler_info "clang-*"] condition, so that people don't add more tests with the same problem without realizing. I'd also think it would be better to make this a hard visible error call blowing away the testcase, instead of just merely a "failed to compile" regular return? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Detect and report incompatible gdb_compile options 2020-10-23 13:04 ` Pedro Alves @ 2020-11-02 14:23 ` Gary Benson 0 siblings, 0 replies; 9+ messages in thread From: Gary Benson @ 2020-11-02 14:23 UTC (permalink / raw) To: gdb-patches Pedro Alves wrote: > On 10/13/20 6:26 PM, Gary Benson via Gdb-patches wrote: > > diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp > > index 6084699..999fd63 100644 > > --- a/gdb/testsuite/lib/gdb.exp > > +++ b/gdb/testsuite/lib/gdb.exp > > @@ -3946,6 +3946,22 @@ proc gdb_compile {source dest type options} { > > && [lsearch -exact $options c++] != -1 > > && [string match *.c $source] != 0 > > && [test_compiler_info "clang-*"] } { > > + > > + # gdb_compile cannot handle this combination of options, the > > + # result is a command like "clang -x c++ foo.c bar.so -o baz" > > + # which tells Clang to treat bar.so as C++. The solution is > > + # to call gdb_compile twice--once to compile, once to link-- > > + # either directly, or via build_executable_from_specs. > > + if { [lsearch $options shlib=*] != -1 } { > > + set result "incompatible gdb_compile options" > > + > > + if {[lsearch $options quiet] < 0} { > > + clone_output "gdb compile failed, $result" > > + } > > + > > + return $result > > + } > > I think it would be better to do this check outside > the [test_compiler_info "clang-*"] condition, so that people > don't add more tests with the same problem without realizing. Good idea! > I'd also think it would be better to make this a hard visible > error call blowing away the testcase, instead of just merely > a "failed to compile" regular return? Sure. I've made both these changes and pushed the patch, as inlined below. Thanks for reviewing this! Cheers, Gary --- In commits 221db974e653659edb280787af1b3efdd1615083 and 68d654afdfcff840ebb3ae432ed72dca0521d670, these patches: 2020-06-24 Pedro Alves <palves@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" explicitly when compiling C++ programs. 2020-09-25 Gary Benson <gbenson@redhat.com> * lib/gdb.exp (gdb_compile): Pass "-x c++" earlier, and only for .c files. attempted to fix problems with testcases that compile .c files using the C++ compiler. These patches cause gdb_compile to add "-x c++" to the compiler options when using Clang. This fix does not work for gdb.base/print-file-var.exp, however, which attempts to compile a .c input file to an executable linked with shared libraries: the resulting command caused the compiler to attempt to parse the .so files as C++. This commit causes gdb_compile to reject this combination of options. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_compile): Inhibit passing "-x c++" for .c files compiled as C++ with Clang if any shared libraries are specified. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/lib/gdb.exp | 17 ++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 003bd30..6c98ae0 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3960,9 +3960,20 @@ proc gdb_compile {source dest type options} { # explicitly force C++ language. if { [lsearch -exact $options getting_compiler_info] == -1 && [lsearch -exact $options c++] != -1 - && [string match *.c $source] != 0 - && [test_compiler_info "clang-*"] } { - lappend new_options early_flags=-x\ c++ + && [string match *.c $source] != 0 } { + + # gdb_compile cannot handle this combination of options, the + # result is a command like "clang -x c++ foo.c bar.so -o baz" + # which tells Clang to treat bar.so as C++. The solution is + # to call gdb_compile twice--once to compile, once to link-- + # either directly, or via build_executable_from_specs. + if { [lsearch $options shlib=*] != -1 } { + error "incompatible gdb_compile options" + } + + if {[test_compiler_info "clang-*"]} { + lappend new_options early_flags=-x\ c++ + } } # Place (and look for) Fortran `.mod` files in the output -- 1.8.3.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] Detect and report incompatible gdb_compile options 2020-10-13 17:26 ` [PATCH 1/2] Detect and report incompatible gdb_compile options Gary Benson 2020-10-23 13:04 ` Pedro Alves @ 2020-10-30 18:45 ` Tom Tromey 1 sibling, 0 replies; 9+ messages in thread From: Tom Tromey @ 2020-10-30 18:45 UTC (permalink / raw) To: Gary Benson via Gdb-patches Gary> gdb/testsuite/ChangeLog: Gary> * lib/gdb.exp (gdb_compile): Inhibit passing "-x c++" Gary> for .c files compiled as C++ with Clang if any shared Gary> libraries are specified. I think this is ok. Thank you. Tom ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang 2020-10-13 17:26 [PATCH 0/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 2020-10-13 17:26 ` [PATCH 1/2] Detect and report incompatible gdb_compile options Gary Benson @ 2020-10-13 17:26 ` Gary Benson 2020-10-23 13:05 ` Pedro Alves 2020-10-30 18:45 ` Tom Tromey 1 sibling, 2 replies; 9+ messages in thread From: Gary Benson @ 2020-10-13 17:26 UTC (permalink / raw) To: gdb-patches The C++ parts of gdb.base/print-file-var.exp failed to build with Clang because the "-x c++" option added by gdb_compile caused the compiler to attempt to parse .so files as C++. This patch splits the compiler and linker options into separate lists, and switches to building via build_executable_from_specs which can accomodate this separation. gdb/testsuite/ChangeLog: * gdb.base/print-file-var.exp (test): Separate compiler and linker options, and build using build_executable_from_specs to accomodate this. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/print-file-var.exp | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/gdb/testsuite/gdb.base/print-file-var.exp b/gdb/testsuite/gdb.base/print-file-var.exp index 22df9f1..62e5f23 100644 --- a/gdb/testsuite/gdb.base/print-file-var.exp +++ b/gdb/testsuite/gdb.base/print-file-var.exp @@ -56,22 +56,24 @@ proc test {hidden dlopen version_id_main lang} { return -1 } - set main_opts [list debug shlib=${libobj1} $lang] + set main_opts [list debug $lang] + set link_opts [list debug shlib=${libobj1}] if {$dlopen} { - lappend main_opts "shlib_load" \ - "additional_flags=-DSHLIB_NAME=\"$libobj2\"" + lappend main_opts "additional_flags=-DSHLIB_NAME=\"$libobj2\"" + lappend link_opts "shlib_load" } else { - lappend main_opts "shlib=${libobj2}" + lappend link_opts "shlib=${libobj2}" } lappend main_opts "additional_flags=-DVERSION_ID_MAIN=$version_id_main" - if { [gdb_compile "${srcdir}/${subdir}/${main}.c" \ - [standard_output_file ${executable}] \ - executable \ + if { [build_executable_from_specs ${main} \ + $executable \ + $link_opts \ + ${main}.c \ $main_opts] - != ""} { + != 0 } { return -1 } -- 1.8.3.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang 2020-10-13 17:26 ` [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson @ 2020-10-23 13:05 ` Pedro Alves 2020-11-02 14:24 ` Gary Benson 2020-10-30 18:45 ` Tom Tromey 1 sibling, 1 reply; 9+ messages in thread From: Pedro Alves @ 2020-10-23 13:05 UTC (permalink / raw) To: Gary Benson, gdb-patches On 10/13/20 6:26 PM, Gary Benson via Gdb-patches wrote: > The C++ parts of gdb.base/print-file-var.exp failed to build with > Clang because the "-x c++" option added by gdb_compile caused the > compiler to attempt to parse .so files as C++. This patch splits > the compiler and linker options into separate lists, and switches > to building via build_executable_from_specs which can accomodate accomodate -> accommodate > this separation. > > gdb/testsuite/ChangeLog: > > * gdb.base/print-file-var.exp (test): Separate compiler and > linker options, and build using build_executable_from_specs > to accomodate this. OK. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang 2020-10-23 13:05 ` Pedro Alves @ 2020-11-02 14:24 ` Gary Benson 0 siblings, 0 replies; 9+ messages in thread From: Gary Benson @ 2020-11-02 14:24 UTC (permalink / raw) To: Pedro Alves; +Cc: gdb-patches Pedro Alves wrote: > On 10/13/20 6:26 PM, Gary Benson via Gdb-patches wrote: > > The C++ parts of gdb.base/print-file-var.exp failed to build with > > Clang because the "-x c++" option added by gdb_compile caused the > > compiler to attempt to parse .so files as C++. This patch splits > > the compiler and linker options into separate lists, and switches > > to building via build_executable_from_specs which can accomodate > > accomodate -> accommodate > > > this separation. > > > > gdb/testsuite/ChangeLog: > > > > * gdb.base/print-file-var.exp (test): Separate compiler and > > linker options, and build using build_executable_from_specs > > to accomodate this. > > OK. Thanks. I've updated the spelling of "accommodate" and pushed this. Cheers, Gary -- Gary Benson - he / him / his Principal Software Engineer, Red Hat ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang 2020-10-13 17:26 ` [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 2020-10-23 13:05 ` Pedro Alves @ 2020-10-30 18:45 ` Tom Tromey 1 sibling, 0 replies; 9+ messages in thread From: Tom Tromey @ 2020-10-30 18:45 UTC (permalink / raw) To: Gary Benson via Gdb-patches >>>>> "Gary" == Gary Benson via Gdb-patches <gdb-patches@sourceware.org> writes: Gary> gdb/testsuite/ChangeLog: Gary> * gdb.base/print-file-var.exp (test): Separate compiler and Gary> linker options, and build using build_executable_from_specs Gary> to accomodate this. Looks good. Thanks. Tom ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-11-02 14:24 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-10-13 17:26 [PATCH 0/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 2020-10-13 17:26 ` [PATCH 1/2] Detect and report incompatible gdb_compile options Gary Benson 2020-10-23 13:04 ` Pedro Alves 2020-11-02 14:23 ` Gary Benson 2020-10-30 18:45 ` Tom Tromey 2020-10-13 17:26 ` [PATCH 2/2] Fix gdb.base/print-file-var.exp with Clang Gary Benson 2020-10-23 13:05 ` Pedro Alves 2020-11-02 14:24 ` Gary Benson 2020-10-30 18: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).