public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] gdb/testsuite: Regenerate the testglue if it is not in path
@ 2020-02-11 13:37 Shahab Vahedi
  2020-02-11 15:41 ` Tom Tromey
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Shahab Vahedi @ 2020-02-11 13:37 UTC (permalink / raw)
  To: gdb-patches; +Cc: Shahab Vahedi, Shahab Vahedi, Francois Bedard

From: Shahab Vahedi <shahab@synopsys.com>

For running the  DejaGnu  tests,  some  esoteric  configurations
may require a testglue.   This,  for  instance,  is  true  about
testing ARC  targets  which  uses  its  own  DejaGnu  board  and
a simulator which does not support returning the  pass  or  fail
through the exit code.  Therefore,  for  those  tests  that  use
"gdb_compile" a "gdb_tg.o" file is compiled and  linked  to  the
final executable.

There  are  tests  that  invoke  "gdb_compile"  from   different
directories.   Let's  take  a   look   at   an   example   test:
gdb.base/fullname.exp.  The purpose of this  test  is  to  build
the executable from different directories (absolute vs. relative
vs.  other) and then check if gdb can handle setting breakpoints
accordingly.

When  "gdb_compile"  generates  the  "gdb_tg.o",  it  does   not
do it again  for  the  same  test.   Although  this  might  seem
efficient, it can lead to  problems  when  changing  directories
before the next compile:

  gdb compile failed, arc-elf32-gcc: error: gdb_tg.o:
  No such file or directory

This patch checks if the wrapper file ("gdb_tg.o") is  still  in
reach and if it is not, it will stimulate the generation of  the
wrapper again.

It is worth mentioning that GCC's  DejaGnu  tests  handle  these
scenarios as well and they seem to be more efficient in doing so
by saving the library paths and manipulating them  if  necessary
[1].  However, for GDB tests, that  require  less  compilations,
I think the proposed solution should be fine compared to a  more
full fledged solution from GCC.  The glue file in  our  case  is
only 2 KiB.

Last but not least, I ran the x86_64 tests on an x86_64 host and
found no regression.

[1]
Avid  coders  may  look  for  "set_ld_library_path_env_vars"  in
gcc/testsuite/lib/target-libpath.exp.

gdb/testsuite/ChangeLog:

	* lib/gdb.exp (gdb_compile): Reset
	"gdb_wrapper_initialized" to 0 if "wrapper_file" does
	not exist.
---
 gdb/testsuite/lib/gdb.exp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index d5e22957039..8e91c91e715 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -3812,6 +3812,15 @@ proc gdb_compile {source dest type options} {
     verbose "options are $options"
     verbose "source is $source $dest $type $options"
 
+    # if the wrapper is initialized but the wrapper file cannot be
+    # found anymore, the wrapper file must be built again.
+    if { $gdb_wrapper_initialized == 1 && \
+	    [info exists gdb_wrapper_file] && \
+	    ![file exists $gdb_wrapper_file] } {
+	verbose "reinitializing the wrapper"
+	set gdb_wrapper_initialized 0
+    }
+
     if { $gdb_wrapper_initialized == 0 } { gdb_wrapper_init }
 
     if {[target_info exists needs_status_wrapper] && \
-- 
2.25.0

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

end of thread, other threads:[~2020-02-19 21:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-11 13:37 [PATCH] gdb/testsuite: Regenerate the testglue if it is not in path Shahab Vahedi
2020-02-11 15:41 ` Tom Tromey
2020-02-11 16:52   ` Shahab Vahedi
2020-02-18 11:51 ` [PATCH v2] " Shahab Vahedi
2020-02-19  3:10   ` Simon Marchi
2020-02-19 21:16     ` Tom Tromey
2020-02-19 15:11 ` [PATCH v3] gdb/testsuite: Regenerate the testglue if it is not in Shahab Vahedi
2020-02-19 21:29   ` 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).