From patchwork Fri Feb 21 09:12:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shahab Vahedi X-Patchwork-Id: 38265 Received: (qmail 99235 invoked by alias); 21 Feb 2020 09:12:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 99227 invoked by uid 89); 21 Feb 2020 09:12:58 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=fledged, manipulating, wrapper_file, regeneration X-HELO: mail-lj1-f193.google.com Received: from mail-lj1-f193.google.com (HELO mail-lj1-f193.google.com) (209.85.208.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 21 Feb 2020 09:12:56 +0000 Received: by mail-lj1-f193.google.com with SMTP id a13so1404345ljm.10 for ; Fri, 21 Feb 2020 01:12:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=bBgHJba3Nluwz+sD8Ll5je9J6E2w0rTI6npRbYmGCRE=; b=ALNngiLFZXFV3jzPgBxrnMvXVNlyqjMJQqW2B81fm9gTlIs0shzbJNZs+wWUq8CgJ+ +INI+gtj719KkCmovnBQ9A2NmrFbk+y2lWV25T364vj/1kOKIsiNP6aYAn8HuV3jUcl5 nV60Z0lC1TMVa9/c6i/Zu9pErq8Gfq9TSZmHiVcrF8o2eSH6rVIGwED164nuZcE2UiAY +nYeL2XoOBZmgjXMemi7n+7ku5dsAVL4ZUWc8TqP8+/Sf631hXNQPpnZCO6DEzYJbqVm IKvtM1MkxQEtbdd7viZ10Y+wu/t9UEDGhoMKiq+goZcvqKPuNc+4a7BkFKLYUz0+v4TK bDbg== Return-Path: Received: from atlantis.internal.synopsys.com ([2a03:1b20:6:f011::2d]) by smtp.gmail.com with ESMTPSA id h14sm1304458lfc.2.2020.02.21.01.12.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 21 Feb 2020 01:12:52 -0800 (PST) From: Shahab Vahedi To: gdb-patches@sourceware.org Cc: Shahab Vahedi , Shahab Vahedi , Tom Tromey , Simon Marchi , Francois Bedard Subject: [PUSHED] gdb/testsuite: Regenerate the testglue if it is not in Date: Fri, 21 Feb 2020 10:12:47 +0100 Message-Id: <20200221091247.10180-1-shahab.vahedi@gmail.com> MIME-Version: 1.0 From: Shahab Vahedi 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 program's exit code. Therefore, for those tests that use "gdb_compile", a "gdb_tg.o" file is compiled and linked into 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 regeneration of the wrapper. 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_wrapper_init): Reset "gdb_wrapper_initialized" to 0 if "wrapper_file" does not exist. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/lib/gdb.exp | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5553782e0a5..6138a18f782 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2020-02-06 Shahab Vahedi + + * lib/gdb.exp (gdb_wrapper_init): Reset + "gdb_wrapper_initialized" to 0 if "wrapper_file" does + not exist. + 2020-02-20 Tom de Vries PR go/17018 diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index d8ebddf63ce..81518b9646a 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3577,11 +3577,20 @@ proc gdb_wrapper_init { args } { global gdb_wrapper_flags global gdb_wrapper_target + # 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 == 1 } { return; } if {[target_info exists needs_status_wrapper] && \ [target_info needs_status_wrapper] != "0"} { - set result [build_wrapper "testglue.o"] + set result [build_wrapper [standard_output_file "testglue.o"]] if { $result != "" } { set gdb_wrapper_file [lindex $result 0] set gdb_wrapper_flags [lindex $result 1] @@ -3831,7 +3840,7 @@ proc gdb_compile {source dest type options} { verbose "options are $options" verbose "source is $source $dest $type $options" - if { $gdb_wrapper_initialized == 0 } { gdb_wrapper_init } + gdb_wrapper_init if {[target_info exists needs_status_wrapper] && \ [target_info needs_status_wrapper] != "0" && \