From patchwork Thu Mar 16 01:20:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 66437 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 BC9FD3857838 for ; Thu, 16 Mar 2023 01:21:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BC9FD3857838 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678929677; bh=an7wOTfzzyj+UBtFQtzqwmdIaupSMJBUBNk7G6j2QRU=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=eojzmMhx3YBjU4mrMg+4a1kS9R3flKsSJGA334+tj22xrTPK9Zf5fnQAXzwSi7t9Y T7QNjFLUhlVkbrZIvohsQXrY12Pi57yXLlPYxqnLrpYcS+h2Jo6Rh1stmo13BNEqz3 emOo9eb9RLVVO40mgJL3R5ggVpdrDp5DQC8HnBgw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from rock.gnat.com (rock.gnat.com [205.232.38.15]) by sourceware.org (Postfix) with ESMTPS id 666D33858D38 for ; Thu, 16 Mar 2023 01:20:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 666D33858D38 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 2C6D01166EE; Wed, 15 Mar 2023 21:20:45 -0400 (EDT) X-Virus-Scanned: Debian amavisd-new at gnat.com Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id DoP2KOmTb5kH; Wed, 15 Mar 2023 21:20:45 -0400 (EDT) Received: from free.home (tron.gnat.com [IPv6:2620:20:4000:0:46a8:42ff:fe0e:e294]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by rock.gnat.com (Postfix) with ESMTPS id BA53C1162BF; Wed, 15 Mar 2023 21:20:44 -0400 (EDT) Received: from livre (livre.home [172.31.160.2]) by free.home (8.15.2/8.15.2) with ESMTPS id 32G1KTam1035751 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Wed, 15 Mar 2023 22:20:30 -0300 To: gcc-patches@gcc.gnu.org Cc: Rainer Orth , Mike Stump Subject: [PATCH] [testsuite] test for weak_undefined support and add options Organization: Free thinker, does not speak for AdaCore Date: Wed, 15 Mar 2023 22:20:29 -0300 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alexandre Oliva via Gcc-patches From: Alexandre Oliva Reply-To: Alexandre Oliva Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" A number of tests that depend on weak undefined symbols fail to require that support, and arrange to skip some targets and add special options to others on a test-by-test basis. Fix this by stating the requirement explicitly, and adding a proc to return any required options. Others rely on weak undefined symbols only to test for the availability of posix_memalign. Drop that in favor of dg effective target support for posix_memalign. Regstrapped on ppc64-linux-gnu. Also tested (with gcc-12) on multiple *-vxworks7r2 targets (arm, aarch64, ppc64, x86, x86_64). Ok to install? for gcc/testsuite/ChangeLog * lib/target-supports.exp (add_options_for_weak_undefined): New. (check_effective_target_weak_undefined): Use it. (check_effective_target_posix_memalign): New. * gcc.dg/torture/pr53922.c: Drop skips and custom options in favor of effective target requirement and added options for weak_undefined symbols. * gcc.dg/torture/pr90020.c: Likewise. * gcc.dg/addr_equal-1.c: Likewise. * gcc.target/aarch64/aapcs64/aapcs64.exp: Likewise, for abitest.S-using tests. * gcc.dg/torture/pr60092.c: Likewise, but in favor of posix_memalign tests. * gcc.dg/vect/vect-tail-nomask-1.c: Likewise. --- gcc/testsuite/gcc.dg/addr_equal-1.c | 5 ++-- gcc/testsuite/gcc.dg/torture/pr53922.c | 10 ++------ gcc/testsuite/gcc.dg/torture/pr60092.c | 12 ++------- gcc/testsuite/gcc.dg/torture/pr90020.c | 7 ++--- gcc/testsuite/gcc.dg/vect/vect-tail-nomask-1.c | 11 ++------ .../gcc.target/aarch64/aapcs64/aapcs64.exp | 17 ++++++++----- gcc/testsuite/lib/target-supports.exp | 26 ++++++++++++++++++-- 7 files changed, 44 insertions(+), 44 deletions(-) diff --git a/gcc/testsuite/gcc.dg/addr_equal-1.c b/gcc/testsuite/gcc.dg/addr_equal-1.c index 35fa0102e3063..db65dea4a8d2a 100644 --- a/gcc/testsuite/gcc.dg/addr_equal-1.c +++ b/gcc/testsuite/gcc.dg/addr_equal-1.c @@ -1,9 +1,8 @@ -/* { dg-do run { target { nonpic || pie_enabled } } } */ -/* { dg-require-weak "" } */ +/* { dg-do run { target { { nonpic || pie_enabled } && weak_undefined } } } */ /* { dg-require-alias "" } */ /* { dg-options "-O2 -fdelete-null-pointer-checks" } */ -/* { dg-skip-if "" { powerpc-ibm-aix* } } */ /* { dg-skip-if "function pointers can be NULL" { keeps_null_pointer_checks } } */ +/* { dg-add-options weak_undefined } */ void abort (void); extern int undef_var0, undef_var1; extern __attribute__ ((weak)) int weak_undef_var0; diff --git a/gcc/testsuite/gcc.dg/torture/pr53922.c b/gcc/testsuite/gcc.dg/torture/pr53922.c index b3f2c1a58f830..07359d6764964 100644 --- a/gcc/testsuite/gcc.dg/torture/pr53922.c +++ b/gcc/testsuite/gcc.dg/torture/pr53922.c @@ -1,11 +1,5 @@ -/* { dg-do run } */ -/* { dg-require-weak "" } */ -/* { dg-skip-if "No undefined" { *-*-mingw* } } */ -/* { dg-skip-if "No undefined weak" { *-*-aix* } } */ -/* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */ -/* { dg-skip-if "No undefined weak" { nvptx-*-* } } */ -/* { dg-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ -/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ +/* { dg-do run { target { weak_undefined } } } */ +/* { dg-add-options weak_undefined } */ int x(int a) { diff --git a/gcc/testsuite/gcc.dg/torture/pr60092.c b/gcc/testsuite/gcc.dg/torture/pr60092.c index 74e7c174a8323..102ba6e0d9f87 100644 --- a/gcc/testsuite/gcc.dg/torture/pr60092.c +++ b/gcc/testsuite/gcc.dg/torture/pr60092.c @@ -1,12 +1,7 @@ -/* { dg-do run } */ -/* { dg-require-weak "" } */ -/* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */ -/* { dg-skip-if "No undefined weak" { nvptx-*-* } } */ -/* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ -/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ +/* { dg-do run { target { posix_memalign } } } */ typedef __SIZE_TYPE__ size_t; -extern int posix_memalign(void **memptr, size_t alignment, size_t size) __attribute__((weak)); +extern int posix_memalign(void **memptr, size_t alignment, size_t size); extern void abort(void); int main (void) @@ -14,9 +9,6 @@ main (void) void *p; int ret; - if (!posix_memalign) - return 0; - p = (void *)&ret; ret = posix_memalign (&p, sizeof (void *), -1); if (p != (void *)&ret) diff --git a/gcc/testsuite/gcc.dg/torture/pr90020.c b/gcc/testsuite/gcc.dg/torture/pr90020.c index 657c4ccfe45c4..40035aa758e6e 100644 --- a/gcc/testsuite/gcc.dg/torture/pr90020.c +++ b/gcc/testsuite/gcc.dg/torture/pr90020.c @@ -1,8 +1,5 @@ -/* { dg-do run } */ -/* { dg-skip-if "No undefined weak" { hppa*-*-hpux* || powerpc-ibm-aix* } } */ -/* { dg-require-weak "" } */ -/* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ -/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ +/* { dg-do run { target { weak_undefined } } } */ +/* { dg-add-options weak_undefined } */ void __attribute__((noinline,noclone)) check (int i) diff --git a/gcc/testsuite/gcc.dg/vect/vect-tail-nomask-1.c b/gcc/testsuite/gcc.dg/vect/vect-tail-nomask-1.c index e5bbeaede095b..ee9ab2e9d910b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-tail-nomask-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-tail-nomask-1.c @@ -1,14 +1,10 @@ -/* { dg-require-weak "" } */ -/* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */ -/* { dg-skip-if "No undefined weak" { nvptx-*-* } } */ -/* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ -/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ +/* { dg-skip-if "No undefined weak" { ! { posix_memalign } } } */ /* { dg-additional-options "--param vect-epilogues-nomask=1 -mavx2" { target avx2_runtime } } */ #define SIZE 1023 #define ALIGN 64 -extern int posix_memalign(void **memptr, __SIZE_TYPE__ alignment, __SIZE_TYPE__ size) __attribute__((weak)); +extern int posix_memalign(void **memptr, __SIZE_TYPE__ alignment, __SIZE_TYPE__ size); extern void free (void *); void __attribute__((noinline)) @@ -98,9 +94,6 @@ run_test () int main (int argc, const char **argv) { - if (!posix_memalign) - return 0; - run_test (); return 0; } diff --git a/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp b/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp index 8cf9cc1e8e585..ef3799fdee390 100644 --- a/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp +++ b/gcc/testsuite/gcc.target/aarch64/aapcs64/aapcs64.exp @@ -32,12 +32,15 @@ set additional_flags "-W -Wall -Wno-abi -fno-pie -no-pie" # Test parameter passing. This uses abitest.S which relies on weak # symbols. -if { [check_weak_available] } { +set additional_flags_for_abitest $additional_flags +lappend additional_flags_for_abitest [add_options_for_weak_undefined ""] + +if { [check_effective_target_weak_undefined] } { foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] { if {[runtest_file_p $runtests $src]} { c-torture-execute [list $src \ $srcdir/$subdir/abitest.S] \ - $additional_flags + $additional_flags_for_abitest } } } @@ -54,28 +57,28 @@ foreach src [lsort [glob -nocomplain $srcdir/$subdir/rec_*.c]] { # Test unnamed argument retrieval via the va_arg macro. This uses abitest.S # which relies on weak symbols. -if { [check_weak_available] } { +if { [check_effective_target_weak_undefined] } { foreach src [lsort [glob -nocomplain $srcdir/$subdir/va_arg-*.c]] { if {[runtest_file_p $runtests $src]} { c-torture-execute [list $src \ $srcdir/$subdir/abitest.S] \ - $additional_flags + $additional_flags_for_abitest } } } # Test function return value. This uses abitest.S which relies on # weak symbols. -if { [check_weak_available] } { +if { [check_effective_target_weak_undefined] } { # Disable -fipa-ra to prevent the compiler from generating # conflicting code. - set additional_flags_for_func_ret $additional_flags + set additional_flags_for_func_ret $additional_flags_for_abitest append additional_flags_for_func_ret " -fno-ipa-ra" foreach src [lsort [glob -nocomplain $srcdir/$subdir/func-ret-*.c]] { if {[runtest_file_p $runtests $src]} { c-torture-execute [list $src \ $srcdir/$subdir/abitest.S] \ - $additional_flags_for_func_ret + $additional_flags_for_func_ret } } } diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index fcfe290d07d71..ac6f000afd18e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -356,6 +356,18 @@ proc check_weak_available { } { } } +# return options to add to enable weak undefined symbols. + +proc add_options_for_weak_undefined { flags } { + if { [istarget *-*-darwin*] } { + lappend flags "-Wl,-undefined,dynamic_lookup" + if { [istarget *-*-darwin[89]*] } { + lappend flags "-Wl,-flat_namespace" + } + } + return $flags +} + # return 1 if weak undefined symbols are supported. proc check_effective_target_weak_undefined { } { @@ -365,7 +377,7 @@ proc check_effective_target_weak_undefined { } { return [check_runtime weak_undefined { extern void foo () __attribute__((weak)); int main (void) { if (foo) return 1; return 0; } - } ""] + } [add_options_for_weak_undefined ""]] } ############################### @@ -1154,6 +1166,16 @@ proc check_effective_target_clone {} { return [check_function_available "clone"] } +# Return 1 if the target supports posix_memalign, 0 otherwise. +proc check_effective_target_posix_memalign {} { + if { [istarget *-*-vxworks*] } { + # VxWorks doesn't have posix_memalign but our way to test + # can't tell as we're doing partial links for kernel modules. + return 0 + } + return [check_function_available "posix_memalign"] +} + # Return 1 if the target supports setrlimit, 0 otherwise. proc check_effective_target_setrlimit {} { # Darwin has non-posix compliant RLIMIT_AS @@ -10827,7 +10849,7 @@ proc check_vect_support_and_set_flags { } { } else { set dg-do-what-default link } - } elseif [istarget "aarch64*-*-*"] { + } elseif [istarget aarch64*-*-*] { set dg-do-what-default run } elseif [istarget s390*-*-*] { # The S/390 backend set a default of 2 for that value.