From patchwork Fri Mar 22 19:40:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 87540 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 389EA3858D37 for ; Fri, 22 Mar 2024 19:41:09 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by sourceware.org (Postfix) with ESMTPS id B46EF3858D32 for ; Fri, 22 Mar 2024 19:40:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B46EF3858D32 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B46EF3858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711136444; cv=none; b=BGpdPKInDkw9VMRliDrRi6dON/luwbEeAaRFus/J3C888whlsVj/OHGYXJgNSVCeR338jsdmeDNqoa4AbNrXGBWUa0z7JFLmMQ/SVaIfeUh+f71WOEf4ruynFHJB5nQewHW5j8t5n8JWunmTe2V8wtrzGSLURiRtk+XgNVLy1A0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711136444; c=relaxed/simple; bh=T3S1dqDTlCngO8H9DqbrQYMf3+7KstlQ4gGUiGa5Ir8=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=kncbIVDbdVOtlI6wbZOO1mRPjrrCLCGRva0li/og8xBRCDZVUNM8erZo3zOQVmohzpb+aR5AqXAB3Pp0YngPCrL7VPx72g2ViELF16jObk26MoxD/cTdT4pTXjoMHy2r7W6HXDlA4/8P2iVjnT14HHYojV7YZry5/r/tgzv78kE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-414689ba80eso20187565e9.2 for ; Fri, 22 Mar 2024 12:40:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711136441; x=1711741241; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ybn91IONAC6gAXvhl4QL8fBfpt8PnqFwzcRAUmIVtM8=; b=tO2WVQIQ1anVEMNCKIdE8bWmhpgiiHsQDBbIjGPYPVLFj7ExggIXGMvWJrdXVkWw+T tBhZQ02zXKbRA65wuhjuATEQoiGxvzx7+e2jy4WGRFEAV5Wd4oWdXY4vu3hILvz5Ximg MjT2rRr4XctsVXXTqUBcpw9tSnHOOwJJfEG0bT40Y6wZOSH+S2NYBOJFR9WcJaUGyOED Xc6Vr4AzdQpsYFQRSUJMEYOQpj2Um4l53MREtaAVgjXvPV5lCFsuk3IVVjZGRo6QsuVt m+iujY8SGRrTjAgeed6MQ/0D+Jh6Z50X75/xpmH9S4/yFvyuX7qBBprVSsivvyW7xDvB B7Iw== X-Gm-Message-State: AOJu0YwNufM+dKTQltRt8rxstqy0Vhnm670RikeQzuTavBd40jT/Yb5P JqDfU0DbghObc0hVVSYF/9pLqvp0w8LMaPlACgj5XugFbPBx2UOr7CSTC9w4 X-Google-Smtp-Source: AGHT+IG8QyNhCxXbamMMksrYu8bMeDDbVSLY8Hi6y43wKsztDNiB/hGeO2P7zzc/oDkgfTyTVxFzew== X-Received: by 2002:a05:600c:998:b0:414:22b5:c32c with SMTP id w24-20020a05600c099800b0041422b5c32cmr243624wmp.37.1711136441107; Fri, 22 Mar 2024 12:40:41 -0700 (PDT) Received: from localhost ([2001:8a0:f918:ab00:3ba9:feec:1922:9a68]) by smtp.gmail.com with UTF8SMTPSA id z15-20020a05600c0a0f00b004146b00cd9csm396745wmp.11.2024.03.22.12.40.40 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Mar 2024 12:40:40 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH] gdb/testsuite: Fix set_unbuffered_mode.o handling in parallel mode Date: Fri, 22 Mar 2024 19:40:38 +0000 Message-ID: <20240322194038.1237467-1-pedro@palves.net> X-Mailer: git-send-email 2.43.2 MIME-Version: 1.0 X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Cygwin/MinGW testing links in a set_unbuffered_mode.o object to all test programs. When running the testsuite in parallel mode, on Cygwin, I noticed errors like: ERROR: remote_download to host of ..../build/set_unbuffered_mode.o to ..../build/set_unbuffered_mode_saved.o: cp: cannot open '..../build/set_unbuffered_mode.o' for reading: No such file or directory ... ERROR: remote_download to host of ..../build/set_unbuffered_mode.o to ..../build/set_unbuffered_mode_saved.o: cp: cannot stat '..../build/set_unbuffered_mode.o': No such file or directory ... ERROR: remote_download to host of ..../build/set_unbuffered_mode.o to ..../build/set_unbuffered_mode_saved.o: cp: skipping file '..../build/set_unbuffered_mode.o', as it was replaced while being copied (Absolute paths elided above.) The problem is that gdb_compile's unbuffered_mode_obj cache isn't parallel safe. This is fixed in this commit. Change-Id: I67a289473c14ce0603d4b0beb755b124588f18d2 Reviewed-by: Kevin Buettner --- gdb/testsuite/lib/gdb.exp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) base-commit: c05dd51122c2d654031b04e02ad0ea5b53ffe5e2 diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index a0c4855ffc5..fbfa6f81b8f 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -5565,10 +5565,20 @@ proc gdb_compile {source dest type options} { # which is time consuming, especially if we're remote # host testing. # + # Note the special care for GDB_PARALLEL. In that + # scenario, multiple expect instances will potentially try + # to compile the object file at the same time. The result + # should be identical for every one of them, so we just + # need to make sure that the final objfile is written to + # atomically. + if { $gdb_saved_set_unbuffered_mode_obj == "" } { verbose "compiling gdb_saved_set_unbuffered_obj" set unbuf_src ${srcdir}/lib/set_unbuffered_mode.c - set unbuf_obj ${objdir}/set_unbuffered_mode.o + # This gives us a per-expect-instance unique filename, + # which is important for GDB_PARALLEL. See comments + # above. + set unbuf_obj [standard_temp_file set_unbuffered_mode.o] set result [gdb_compile "${unbuf_src}" "${unbuf_obj}" object {nowarnings}] if { $result != "" } { @@ -5581,7 +5591,14 @@ proc gdb_compile {source dest type options} { } # Link a copy of the output object, because the # original may be automatically deleted. - remote_download host $unbuf_obj $gdb_saved_set_unbuffered_mode_obj + if {[info exists ::GDB_PARALLEL]} { + # Make sure to write the .o file atomically. + # (Note GDB_PARALLEL mode does not support remote + # host testing.) + file rename -force -- $unbuf_obj $gdb_saved_set_unbuffered_mode_obj + } else { + remote_download host $unbuf_obj $gdb_saved_set_unbuffered_mode_obj + } } else { verbose "gdb_saved_set_unbuffered_obj already compiled" }