From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) by sourceware.org (Postfix) with ESMTP id D894A385841E for ; Tue, 23 Jan 2024 07:10:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D894A385841E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gentoo.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D894A385841E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=140.211.166.183 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705993811; cv=none; b=pqJORkJ0Dy0yAw041xKJeEbvDIbvBPZovUjTqkz2S1mnw/QPTP47uKXE3LTGXs0JAmC84vmnKxeINvVSm8UBszbzRj8hPH2Q2aETetWxp3O6nTj0eqEZKtL/cfvePh3d1u8fQDjoxCzQkG3pnG74iXDVpxNEFVozjpU1z+lkBN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705993811; c=relaxed/simple; bh=NF8OuzHAMhk7zpwWDMFWDZ3jsMHBHhaF1ngk7HEokF4=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=GwLxJrhSPdFer5ItRuGFjXENA/iztk7r4+giCnGBpcK/SSa1DGXQdlorSFBuq3kbi/UA2aWgRhjXkrh8BaiBGaQlulzEU3SUm5M3BRvZc7AuRacygVfuZGyDqyMXVB5JNuwi7tKUPgHJmpioTzU+CgXHzG7nm8pSEJcwedoV+tM= ARC-Authentication-Results: i=1; server2.sourceware.org From: Sam James To: binutils@sourceware.org Cc: Vladimir Mezentsev Subject: [2.41 PATCH COMMITTED] Fix 31252 gprofng causes testsuite parallel jobs fail Date: Tue, 23 Jan 2024 07:09:29 +0000 Message-ID: <20240123070957.3398644-1-sam@gentoo.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,JMQ_SPF_NEUTRAL,KAM_DMARC_STATUS,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: From: Vladimir Mezentsev Before running our tests, we made a fake installation into ./tmpdir. This installation changes libopcodes.la in the build area. Gas testing may fail if gas and gprofng tests are run in parallel. I create a script to run gprofng. Inside this script, LD_LIBRARY_PATH, GPROFNG_SYSCONFDIR are set. putenv_libcollector_ld_misc() first uses $GPROFNG_PRELOAD_LIBDIRS to create directories for SP_COLLECTOR_LIBRARY_PATH ($SP_COLLECTOR_LIBRARY_PATH is used to set up LD_PRELOAD). gprofng/ChangeLog 2024-01-19 Vladimir Mezentsev PR gprofng/31252 PR gprofng/30808 * src/envsets.cc (putenv_libcollector_ld_misc): Use $GPROFNG_PRELOAD_LIBDIRS first to build SP_COLLECTOR_LIBRARY_PATH. * testsuite/config/default.exp: Create a script to run gprofng. * testsuite/lib/display-lib.exp: Fix typo. (cherry picked from commit 26f557af696726a8556bff12f54e4d05cd7a5034) --- I've gone ahead and backported this as it's needed for parallel tests to work correctly on 2.41. Tested and tests now pass when they didn't before. Thanks! gprofng/src/envsets.cc | 36 +++++++++++++++++++++----- gprofng/testsuite/config/default.exp | 37 +++++++++++++++++++-------- gprofng/testsuite/lib/display-lib.exp | 4 +-- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/gprofng/src/envsets.cc b/gprofng/src/envsets.cc index 52d155160fc..40ee39dc328 100644 --- a/gprofng/src/envsets.cc +++ b/gprofng/src/envsets.cc @@ -146,20 +146,42 @@ collect::putenv_libcollector_ld_misc () // so that -agentlib:gp-collector works // and so that collect -F works with 32/64-bit mix of processes - // Set GPROFNG_PRELOAD_LIBDIRS + StringBuilder sb; + sb.append ("SP_COLLECTOR_LIBRARY_PATH="); + int len = sb.length (); + int cnt = 0; + char *fname; char *ev = getenv (GPROFNG_PRELOAD_LIBDIRS); char *libpath_list = NULL; - if (ev == NULL && settings->preload_libdirs == NULL) + if (ev) + { /* GPROFNG_PRELOAD_LIBDIRS is used only in the gprofng testing. + * Use these directories first. */ + ev = strdup (ev); + for (char *s = ev; s;) + { + char *s1 = strchr (s, ':'); + if (s1) + *(s1++) = 0; + fname = dbe_sprintf ("%s/%s", s, LIBGP_COLLECTOR); + if (access (fname, R_OK | F_OK) == 0) + { + if (++cnt != 1) + sb.append (':'); + sb.append (s); + } + free (fname); + s = s1; + } + free (ev); + ev = NULL; + } + if (settings->preload_libdirs == NULL) { settings->read_rc (false); ev = settings->preload_libdirs; } ev = dbe_strdup (ev); - StringBuilder sb; - sb.appendf ("%s=", "SP_COLLECTOR_LIBRARY_PATH"); - int len = sb.length (); - int cnt = 0; - char *fname = dbe_sprintf ("%s/%s/%s", LIBDIR, PACKAGE, LIBGP_COLLECTOR); + fname = dbe_sprintf ("%s/%s/%s", LIBDIR, PACKAGE, LIBGP_COLLECTOR); if (access (fname, R_OK | F_OK) == 0) { ++cnt; diff --git a/gprofng/testsuite/config/default.exp b/gprofng/testsuite/config/default.exp index c4a6588bb64..3828514c0b0 100644 --- a/gprofng/testsuite/config/default.exp +++ b/gprofng/testsuite/config/default.exp @@ -19,6 +19,7 @@ # MA 02110-1301, USA. # + # The "make check" target in the Makefile passes in # "CC=$(CC_FOR_TARGET)". But, if the user invokes runtest directly, # these flags may not be set. @@ -36,18 +37,32 @@ remote_exec host "sh -c \"rm -rf tmpdir; mkdir -p tmpdir\"" if { "$CHECK_TARGET" == "check-install" } { set ::env(GPROFNG) "$PREFIX/bin/gprofng" } else { - # Make a temporary install dir to run gprofng from, and point at it - remote_exec host "sh -c \"$MAKE -C .. install-gprofng MAKEFLAGS=program_transform_name= DESTDIR=$BUILDDIR/tmpdir/root\"" - set ::env(GPROFNG) [exec find $BUILDDIR/tmpdir -type f -name gprofng -perm -u+x | head -1] - - set x [exec find $BUILDDIR/tmpdir -type d -name gprofng | head -1] - set ::env(LD_LIBRARY_PATH) "$x:$x/.." - - set x [exec find $BUILDDIR/tmpdir -type f -name gprofng.rc | head -1] - set ::env(GPROFNG_SYSCONFDIR) [exec dirname $x] + set ld_library_path "${BUILDDIR}/src/.libs:${BUILDDIR}/libcollector/.libs" + set orig_ld_library_path "" + catch { set orig_ld_library_path $::env(LD_LIBRARY_PATH) } + if [file exists "${BUILDDIR}/../bfd/.libs/libbfd.a"] { + append ld_library_path ":${BUILDDIR}/../bfd/.libs" + } + if [file exists "${BUILDDIR}/../opcodes/.libs/libopcodes.a"] { + append ld_library_path ":${BUILDDIR}/../opcodes/.libs" + } + if [file exists "${BUILDDIR}/../libsframe/.libs/libsframe.a"] { + append ld_library_path ":${BUILDDIR}/../libsframe/.libs" + } + if [file exists "${BUILDDIR}/../libiberty/libiberty.a"] { + append ld_library_path ":${BUILDDIR}/../libiberty" + } - puts "### LD_LIBRARY_PATH: $env(LD_LIBRARY_PATH)" - puts "### GPROFNG_SYSCONFDIR: $env(GPROFNG_SYSCONFDIR)" + set f [open "gprofng_wraper" w+] + puts $f "#!/usr/bin/bash" + puts $f "LD_LIBRARY_PATH=$ld_library_path:$orig_ld_library_path" + puts $f "GPROFNG_SYSCONFDIR=$env(srcroot)/src" + puts $f "GPROFNG_PRELOAD_LIBDIRS=$BUILDDIR/libcollector/.libs" + puts $f "export LD_LIBRARY_PATH GPROFNG_SYSCONFDIR GPROFNG_PRELOAD_LIBDIRS" + puts $f "${BUILDDIR}/src/gprofng \"\$@\"" + close $f + file attributes gprofng_wraper -permissions +rx + set ::env(GPROFNG) "$BUILDDIR/gprofng_wraper" } puts "### GPROFNG: $env(GPROFNG)" diff --git a/gprofng/testsuite/lib/display-lib.exp b/gprofng/testsuite/lib/display-lib.exp index 50db4d5055a..6941d84761c 100644 --- a/gprofng/testsuite/lib/display-lib.exp +++ b/gprofng/testsuite/lib/display-lib.exp @@ -26,8 +26,8 @@ proc run_native_host_cmd { command } { verbose -log "$command" set run_output "" try { - send_log "% timeout $TEST_TIMEOUT sh -c '$command' 2>&1\n" - set run_output [exec "timeout" $TEST_TIMEOUT "sh" "-c" "$command" "2>&1"] + send_log "% timeout $TEST_TIMEOUT sh -c '$command' 2>@1\n" + set run_output [exec "timeout" $TEST_TIMEOUT "sh" "-c" "$command" "2>@1"] set status 0 } trap CHILDSTATUS {results options} { set status [lindex [dict get $options -errorcode] 2] -- 2.43.0