From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) by sourceware.org (Postfix) with ESMTPS id BBBF03858D1E for ; Fri, 30 Sep 2022 16:22:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BBBF03858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=foss.st.com Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28UD1nXT016330; Fri, 30 Sep 2022 18:22:45 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=from : to : cc : subject : date : message-id : mime-version : content-type : content-transfer-encoding; s=selector1; bh=e/ltZpkhUIdc6CZIoRe5LiuREy1J+JYH4w3FGn9R7So=; b=cW6YDBXPAqo0MFfVpiopAm8b1D03CjuI50mssXRtA2wDvCQnT6qLbrsDi7MzgML/JYrg 1/y3jC9fTeyoplXMcU4oPuKpp9DW8x1WJaFubtwswECBPpT/eZijYxHklzc3L1baEtmU WXRC0/uCFmKOzYX7d7MYevhaHsRwNLJVeZokceMxJ2uVM4sodH9oveoAfFAivUjE2qDm maAleYLE8s85pATq51hthjHyQAieVydrJql54iQxi2dJ1HM0XlWGG95wvVqNYcy6s6Jb UcwCw4jowy2DXc94L+HmiTTo9USz3ikT7wdy8K8/HxDr7fWJ6fBKdu4gDFqMviZtLCci kA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3jwqasmh3t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 30 Sep 2022 18:22:45 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id F293010002A; Fri, 30 Sep 2022 18:22:43 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node3.st.com [10.75.129.71]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id CF441237D75; Fri, 30 Sep 2022 18:22:43 +0200 (CEST) Received: from jkgcxl0002.jkg.st.com (10.75.127.49) by SHFDAG1NODE3.st.com (10.75.129.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2375.31; Fri, 30 Sep 2022 18:22:40 +0200 From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= To: CC: , =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= , Yvan ROUX Subject: [PATCH v3] testsuite: Only run test on target if VMA == LMA Date: Fri, 30 Sep 2022 18:22:13 +0200 Message-ID: <20220930162212.2270178-1-torbjorn.svensson@foss.st.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.75.127.49] X-ClientProxiedBy: SFHDAG2NODE3.st.com (10.75.127.6) To SHFDAG1NODE3.st.com (10.75.129.71) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-30_04,2022-09-29_03,2022-06-22_01 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,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 List-Id: Checking that the triplet matches arm*-*-eabi (or msp430-*-*) is not enough to know if the execution will enter an endless loop, or if it will give a meaningful result. As the execution test only work when VMA and LMA are equal, make sure that this condition is met. gcc/ChangeLog: * doc/sourcebuild.texi: Document new vma_equals_lma effective target check. gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_effective_target_vma_equals_lma): New. * c-c++-common/torture/attr-noinit-1.c: Requre VMA == LMA to run. * c-c++-common/torture/attr-noinit-2.c: Likewise. * c-c++-common/torture/attr-noinit-3.c: Likewise. * c-c++-common/torture/attr-persistent-1.c: Likewise. * c-c++-common/torture/attr-persistent-3.c: Likewise. Co-Authored-By: Yvan ROUX Signed-off-by: Torbjörn SVENSSON --- gcc/doc/sourcebuild.texi | 3 ++ .../c-c++-common/torture/attr-noinit-1.c | 3 +- .../c-c++-common/torture/attr-noinit-2.c | 3 +- .../c-c++-common/torture/attr-noinit-3.c | 3 +- .../c-c++-common/torture/attr-persistent-1.c | 3 +- .../c-c++-common/torture/attr-persistent-3.c | 3 +- gcc/testsuite/lib/target-supports.exp | 49 +++++++++++++++++++ 7 files changed, 62 insertions(+), 5 deletions(-) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 52357cc7aee..c81e2ffd43a 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2868,6 +2868,9 @@ Vector alignment is reachable for types of 32 bits or less. @item vector_alignment_reachable_for_64bit Vector alignment is reachable for types of 64 bits or less. +@item vma_equals_lma +Target generates executable with VMA equal to LMA for .data section. + @item wchar_t_char16_t_compatible Target supports @code{wchar_t} that is compatible with @code{char16_t}. diff --git a/gcc/testsuite/c-c++-common/torture/attr-noinit-1.c b/gcc/testsuite/c-c++-common/torture/attr-noinit-1.c index 877e7647ac9..f84eba0b649 100644 --- a/gcc/testsuite/c-c++-common/torture/attr-noinit-1.c +++ b/gcc/testsuite/c-c++-common/torture/attr-noinit-1.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-do link } */ +/* { dg-do run { target { vma_equals_lma } } } */ /* { dg-require-effective-target noinit } */ /* { dg-skip-if "data LMA != VMA" { msp430-*-* } { "-mlarge" } } */ /* { dg-options "-save-temps" } */ diff --git a/gcc/testsuite/c-c++-common/torture/attr-noinit-2.c b/gcc/testsuite/c-c++-common/torture/attr-noinit-2.c index befa2a0bd52..4528b9e3cfa 100644 --- a/gcc/testsuite/c-c++-common/torture/attr-noinit-2.c +++ b/gcc/testsuite/c-c++-common/torture/attr-noinit-2.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-do link } */ +/* { dg-do run { target { vma_equals_lma } } } */ /* { dg-require-effective-target noinit } */ /* { dg-options "-fdata-sections -save-temps" } */ /* { dg-skip-if "data LMA != VMA" { msp430-*-* } { "-mlarge" } } */ diff --git a/gcc/testsuite/c-c++-common/torture/attr-noinit-3.c b/gcc/testsuite/c-c++-common/torture/attr-noinit-3.c index 519e88a59a6..2f1745694c9 100644 --- a/gcc/testsuite/c-c++-common/torture/attr-noinit-3.c +++ b/gcc/testsuite/c-c++-common/torture/attr-noinit-3.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-do link } */ +/* { dg-do run { target { vma_equals_lma } } } */ /* { dg-require-effective-target noinit } */ /* { dg-options "-flto -save-temps" } */ /* { dg-skip-if "data LMA != VMA" { msp430-*-* } { "-mlarge" } } */ diff --git a/gcc/testsuite/c-c++-common/torture/attr-persistent-1.c b/gcc/testsuite/c-c++-common/torture/attr-persistent-1.c index 72dc3c27192..b11a515cef8 100644 --- a/gcc/testsuite/c-c++-common/torture/attr-persistent-1.c +++ b/gcc/testsuite/c-c++-common/torture/attr-persistent-1.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-do link } */ +/* { dg-do run { target { vma_equals_lma } } } */ /* { dg-require-effective-target persistent } */ /* { dg-skip-if "data LMA != VMA" { msp430-*-* } { "-mlarge" } } */ /* { dg-options "-save-temps" } */ diff --git a/gcc/testsuite/c-c++-common/torture/attr-persistent-3.c b/gcc/testsuite/c-c++-common/torture/attr-persistent-3.c index 3e4fd28618d..068a72af5c8 100644 --- a/gcc/testsuite/c-c++-common/torture/attr-persistent-3.c +++ b/gcc/testsuite/c-c++-common/torture/attr-persistent-3.c @@ -1,4 +1,5 @@ -/* { dg-do run } */ +/* { dg-do link } */ +/* { dg-do run { target { vma_equals_lma } } } */ /* { dg-require-effective-target persistent } */ /* { dg-options "-flto -save-temps" } */ /* { dg-skip-if "data LMA != VMA" { msp430-*-* } { "-mlarge" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 0a959c63c4a..7c9dd45f2a7 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -370,6 +370,55 @@ proc check_weak_override_available { } { return [check_weak_available] } +# Return 1 if VMA is equal to LMA for the .data section, 0 +# otherwise. Cache the result. + +proc check_effective_target_vma_equals_lma { } { + global tool + + return [check_cached_effective_target vma_equals_lma { + set src vma_equals_lma[pid].c + set exe vma_equals_lma[pid].exe + verbose "check_effective_target_vma_equals_lma compiling testfile $src" 2 + set f [open $src "w"] + puts $f "#ifdef __cplusplus\nextern \"C\"\n#endif\n" + puts $f "int foo = 42; void main() {}" + close $f + set lines [${tool}_target_compile $src $exe executable ""] + file delete $src + + if [string match "" $lines] then { + # No error messages + + set objdump_name [find_binutils_prog objdump] + set output [remote_exec host "$objdump_name" "--section-headers --section=.data $exe"] + set output [lindex $output 1] + + remote_file build delete $exe + + # Example output of objdump: + #vma_equals_lma9059.exe: file format elf32-littlearm + # + #Sections: + #Idx Name Size VMA LMA File off Algn + # 6 .data 00000558 20000000 08002658 00020000 2**3 + # CONTENTS, ALLOC, LOAD, DATA + + # Capture LMA and VMA columns for .data section + if ![ regexp {\d*\d+\s+\.data\s+\d+\s+(\d+)\s+(\d+)} $output dummy vma lma ] { + verbose "Could not parse objdump output" 2 + return 0 + } else { + return [string equal $vma $lma] + } + } else { + remote_file build delete $exe + verbose "Could not determine if VMA is equal to LMA. Assuming not equal." 2 + return 0 + } + }] +} + # The "noinit" attribute is only supported by some targets. # This proc returns 1 if it's supported, 0 if it's not. -- 2.25.1