From patchwork Tue Aug 13 06:30:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Deepthi.Hemraj@windriver.com X-Patchwork-Id: 1971792 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4WjhNm69kxz1ybZ for ; Tue, 13 Aug 2024 16:31:19 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BF2763858C50 for ; Tue, 13 Aug 2024 06:31:17 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-0064b401.pphosted.com (mx0b-0064b401.pphosted.com [205.220.178.238]) by sourceware.org (Postfix) with ESMTPS id 4FB683858D20 for ; Tue, 13 Aug 2024 06:30:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4FB683858D20 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=windriver.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=windriver.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4FB683858D20 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.178.238 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1723530657; cv=pass; b=cJokoGiv/4u14hnsRcO5od3QmevMKnCgL3jZQVmSJUieJYuYKrei00aWIqmE1BTTjqmfRWHOiO+omc7LW79KbtNkD5aXgGQV0OVorFYk71xii6pxqqXxfw1rrQqV7oVIEMn/ghcHRrPYFCqLFGzjh/JJG+qmgv+fuNNj8IW79tc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1723530657; c=relaxed/simple; bh=FrED9gQeg08+JGQK0rKIpbkGRzK+Pqrpeyla0yaIDso=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=mPgpZL7GjAGDZ9SHqAF0RhVnDUokR9eyWyW2QDYwIq+d9crBm8yzFqabHruMVCOFw2qmrcwOoON1z3dxGQbnVt9GdICRCSqu+U4s9ZQ5qBHNwD1VqqaiIRcNtjZEf28DTbkEGJ1nEN4kVOe+DIH7zOfuyFw2E8NkdH7ZdSbV7+8= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0250811.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 47D38NjT030239 for ; Tue, 13 Aug 2024 06:30:53 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2177.outbound.protection.outlook.com [104.47.58.177]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 40wxcujpwx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 13 Aug 2024 06:30:53 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WlavQdspXdvwalMiFHv1RdIUadKgk/PCpalPXi2+ABtPXNSnbrDL6nOnQ4V03gSixrlQ4tFmte49eGxm5RxuT5hpsQY4GzJBtOoK8luDV6Ea+m3i+FMl7o8KCAESsGQN1AYqiiveZKyxpRxMZLmgC84hSB7nHoHCxxd4tilKGuUtfQSAua3z3lPbpLsZcCP6BxbyKuBWSjVZzBtLVKv/JdyP3kwQX4zlETngsu+8THQNUgu2y0lQVNSMs64wTruMqGtNx9cYJbrHcL0/sEVwcORlOzS1ZeETAqQOEScKxxcii+IFi1u8rkomVCOqA9MbUMoujwwvo7zVW/UEkDaYUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Lfalok49wfVmGsbxs60WLYq3IT7IY3IL6lUAKqh2swg=; b=keX3EbHS2Au1+YS1204G9yoDkj5F5puHH7vGUojL3v15hdHhIRsLgT0hDgDZU1EtESjj0bDpJaYj6ujcPeuXvkh14JexEz4ysi6fn31Jmux7qqoWgiiS1cBaaAv4sodIWzMHQ8lS233mL7w8vFzFb7XafhrapQUu6CceAz+PEoqtGcB0mmc4kLDWfQioppLV3/wcMsedDo+9bGwFmdz57WqgbX3tkVIpTRvh6XcElmZYwSDbvfAqe7lAzC8Zl3AuWKZZrvdboBFhzpD14vPYI7wTtfxyjRvxCO+RGXz3El7M0VyqGrQZAjFhD1sFFllR2z0EWOFtPa0pqACi+DzjYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from LV3PR11MB8602.namprd11.prod.outlook.com (2603:10b6:408:1b3::11) by MW4PR11MB5890.namprd11.prod.outlook.com (2603:10b6:303:188::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.33; Tue, 13 Aug 2024 06:30:51 +0000 Received: from LV3PR11MB8602.namprd11.prod.outlook.com ([fe80::5e20:4508:a523:df39]) by LV3PR11MB8602.namprd11.prod.outlook.com ([fe80::5e20:4508:a523:df39%5]) with mapi id 15.20.7828.023; Tue, 13 Aug 2024 06:30:51 +0000 From: Deepthi.Hemraj@windriver.com To: gcc-patches@gcc.gnu.org Cc: Randy.MacLeod@windriver.com, Sundeep.Kokkonda@windriver.com, Naveen.Gowda@windriver.com, Shivaprasad.Moodalappa@windriver.com, Deepthi.Hemraj@windriver.com Subject: [PATCH] GCC Driver : Enable very long gcc command-line option Date: Mon, 12 Aug 2024 23:30:30 -0700 Message-ID: <20240813063030.524541-1-Deepthi.Hemraj@windriver.com> X-Mailer: git-send-email 2.43.0 X-ClientProxiedBy: SJ0PR05CA0163.namprd05.prod.outlook.com (2603:10b6:a03:339::18) To LV3PR11MB8602.namprd11.prod.outlook.com (2603:10b6:408:1b3::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR11MB8602:EE_|MW4PR11MB5890:EE_ X-MS-Office365-Filtering-Correlation-Id: cb183f47-0e8b-4918-bb26-08dcbb6179e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|366016|1800799024|376014|38350700014; X-Microsoft-Antispam-Message-Info: ulIzMPjruB4JIcU5frPtYR8s1jtyeqyuopJVPzELlBxyQgern9fUaYYwErlNUE3flll/TpoON/hJXCWx3btDEx7IlMIwfNcA7PseRgBMpKykv7/5cEU1Gf0zHWK9gcDlMMWrsfRUAkt0Gpar6HvWzSywduIIK/1f3+Z0i8SgWt6LxyjN6dwDbKWasxPrZD4klQKgmGWxi0SyLbe3qNhUN3W2cQsKjNWpRky8hswXWq7vYSlck2udzkuDRFODizm2qOS5jC5H4kIjyybSe3QKLOgePEDxCQfjGoZ6fppuqecBJkUN//gjoa3XoPaRQEDYi8I5QCCtIDFuK7da78pmNuMN5l+xqVBOWvYcusfFUXUS+P1NRTCEc0oKlDNgoF81WJ6O7wOGbvGQjz4MKWWm+ZwOt8DB2MHvK4mPBQt0+YEeJLIGC8gOzZ31uLACndlR6R//AdJqFf/QkYdAnsQh3Gxo0a/T3vUWxg+SUJDK5X83nKOwp+zoL9xVlKCmKKeXkNOHJycGZgraRv2+Sxny/N11LY29Fmbg3UuWsO60VkVWRCHhTVAo1AW8/10zRqcXvPX5tDQyWTri3Mm4twSVyohcU4wVBUwQeG2RlLVni5Tif+rQkZBjC/PmgY9oMIYusUAzckfdHOJpZug4FGkUDVNDYYieh9QRN6E6qU4qA0e97wLjXir4QKQ8yS50izsts1mI8pOlJxFMHJ0FyxiSqeK+qs9l3Rozfl+4+KhW5+JV09CttjisOtX0IbWJh80dNaHTd1sStI79p1tfWK8NbRdwgegkubBe2bQWDzIfWphwcXQ5vwRMvJHAVnCWJGVg1MIUh5ProfNua8vmYWQwGSucqjz0fhALWkFtwsj5HwVtDZ4ZDgW1rLCgBh4y4QQfHKnaCPVSsvs5mnSXPRtrBziZz5ToYPzU3TmCGzOu9/IJAb053NHpUX+WcspRYWBm6vcJYJKnIaQkJGKjjjD3859cAp5fnQvBW+IGil6l3zbOIUOFZhbpVKuKPUf7SAJkpoFEjH4hfi/awZniYJyJS2yZBIvwbkK28+QoNM8AqLUqOCZXHZjNsDsHFt22ZURmWXtZrZuo1avo+ZIIY/nENyDg/25qFm/0zyPx6qd1s7oWFTBZ05jw28ORzqBEs875DJT/4luOwFbXewnj3GfjIgn4XOdiUUJl7iIAghIUxExuKptGD0cyZrSebBKPDy1M07fqGTpPmwunfH5NQ1JiSII0JR9V/AmiwPtOzWhLWd8Z0Fi8YcB6uuTjBlvl9wAzIkBFLy9sqorgudmEI/Cyo9uhTeWkj75zjus0klDohVQW3AsN3A23aH2f1CatQJAsvd/3alA9tE2BDeFbLNK7i8MMH8+muVF9ERQSfpWYhEk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:LV3PR11MB8602.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(366016)(1800799024)(376014)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cL7ofYePfR9HfUsazIYh7ZoadcG8wZ2Lc5fJmchm0+O2qClXvZb3NqhXak7z+/NC3z+DyaAORx+rUz1pt0bSgA/q/1ON5T9DNe43XPB2qdFvq7EaMOsEOCwJQzSFf1gChe5kzh2PPtO61q3hLLjWSeS3wm71sDwe8kj/DeujN9urwXzIjEdI5DG9HILqzEJRRcExbVAGh4FkQ/ROQ0SbIKi4XKYHTr+C2cNzXq5ID2dDYF0w3Ypn/6rpt8shYOlslNF9qZ8E3NU3cp8h0zwjVv9RTjZl94Yza9qHpkj8u2JaKr2bUGJ5Xovy4evGlV96ypYVMWbT0kNR1EPG8c6juO4rQmKXp6jz0hoNwc9M/QbJmub1Crme3B3nSxc84H8p4j08gmVS2wDAUvf4Bso0k/Qd1ZVR42sjgOodMuGx+XmOWV5tlflT3iOC4xu9I/a/SEkaeIzsyjOXIQIiG+oVG6qlqvKYiGLrbsNjsj9lt0c4IJF64ZLvu3//+hzqNCWswqiX3Kzylh/wN6Ucqip/+Tg7A0Jo1umSXxU38WOE8j5uei4UeZ/wbI1vNwBwftcW+/18es6VWNy2m5bTdflRgSKiIoOtrp2jyBkrh3RfpyhwQSLbTG0OOKc9EIh/7CCTSjzvRr8onyFfFmEGM7Rfe7cg3JSaZWf8JYAVwhyfeOnNfhIVB+clXuebT+GDFUnbNUKKQK/UrLvnYtqLEQcFbXxaUD5YN9sr357H6xbW6AicuD1xu8rVTGKdd/IP1eoIgOJfLrIVNp2K39yRCyEvQJOsSrvQBlaEDFXkq4z1/bwXrMqBXn3v4rPeDGLe8++WFG/wHY0NYFfO4lKzltpzcFnGqr0noEQuinC1c0K7pqBTjCzcNYAFa/g9CvVw20eLOOJke5HkN4Ek4NKjrV5PuuBQN/V4O8tRwBsRVzdRokF+mfDbeOTRa7L9YkyMZOUOGR2SgeC8ZC2qw1dTeXxdy1i0wnO39cwVJnfBt4tl/zXSSqYnvOjMX6htVNN2e9aZJ0O13e4GBLtWjP15vr6eJ7kIVar8AXgr0EgCqpXLF0KXBdCY41aHuBymQjnsGK0Q1a7sxdxe/N+ei96/9d0aa2je+8DMraUMwPcMAbQKZZyT0GjNgDlCfl7iwK5H5tAlpK1uWvp9xImY4HgeKyAfBvOWJxxymOIzpxGVp1WnQPN46Y8SRd5KJagao+LCwyXMqgJMPKPBrW5DwxmHseNuptKkah9260ZmOqHzCGA4XoXDLjWAlrFEnfWB4jdMWD8GlCOSr1A/djlUjVmLWcWGC7lbtSZS1XtCSNjF4bzTmrUVl8/Y4vE+0DpVo4VSYc4hpqF5aOp/LJP1T9pGMwYiETckyVOrT0nDglNCYhDIsvLofFD9ZVwg9s5U7Ro6Y5aV/lDW2rc+m2CCAeSU/8iKKsIbY2Ba984/YalV/9tVWeAz3qJl7wdbMO20yv5rQCB0ZRJyYk9Ln0mpu511W8SDeA67hpqKrUndh9+LXI7wvDYSv4zODuZl0opMn64gzSVf5o0Tuy8R79DQKQ9yWr7XmK5oe4ytYhCNT1P1vYy/34QY1MMD87eN5pM8CB5JzagXLDPKIxJ/bS2ialEYckNsNA== X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb183f47-0e8b-4918-bb26-08dcbb6179e4 X-MS-Exchange-CrossTenant-AuthSource: LV3PR11MB8602.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Aug 2024 06:30:51.2459 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kncWxlRBKbY0koKFs7jXvRYYnGCypAlvuCjoUS0+iO0JPWvpOmIyn7CtQ8K8aIEZId+xTafJl/DRG/PPAgcHcCu3YUmfADwwOFkJo/2aJsc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB5890 X-Proofpoint-GUID: KqM5teEXD8MLAAM9dSTodyXbSr_Unr5x X-Proofpoint-ORIG-GUID: KqM5teEXD8MLAAM9dSTodyXbSr_Unr5x X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-08-12_12,2024-08-13_01,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1011 priorityscore=1501 mlxscore=0 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 mlxlogscore=999 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.21.0-2407110000 definitions=main-2408130045 X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org From: sunil dora For excessively long environment variables i.e >128KB Store the arguments in a temporary file and collect them back together in collect2. This commit patches for COLLECT_GCC_OPTIONS issue: GCC should not limit the length of command line passed to collect2. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111527 The Linux kernel has the following limits on shell commands: I. Total number of bytes used to specify arguments must be under 128KB. II. Each environment variable passed to an executable must be under 128 KiB In order to circumvent these limitations, many build tools support response-files, i.e. files that contain the arguments for the executed command. These are typically passed using @ syntax. Gcc uses the COLLECT_GCC_OPTIONS environment variable to transfer the expanded command line to collect2. With many options, this exceeds the limit II. GCC : Added Testcase for PR111527 TC1 : If the command line argument less than 128kb, gcc should use COLLECT_GCC_OPTION to communicate and compile fine. TC2 : If the command line argument in the range of 128kb to 2mb, gcc should copy arguments in a file and use FILE_GCC_OPTIONS to communicate and compile fine. TC3 : If the command line argument greater thean 2mb, gcc shuld fail the compile and report error. (Expected FAIL) Signed-off-by: Topi Kuutela Signed-off-by: sunil dora --- gcc/collect2.cc | 40 +++++++++++++++++++-- gcc/gcc.cc | 37 +++++++++++++++++-- gcc/testsuite/gcc.dg/longcmd/longcmd.exp | 16 +++++++++ gcc/testsuite/gcc.dg/longcmd/pr111527-1.c | 44 +++++++++++++++++++++++ gcc/testsuite/gcc.dg/longcmd/pr111527-2.c | 9 +++++ gcc/testsuite/gcc.dg/longcmd/pr111527-3.c | 10 ++++++ gcc/testsuite/gcc.dg/longcmd/pr111527-4.c | 10 ++++++ 7 files changed, 160 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/longcmd/longcmd.exp create mode 100644 gcc/testsuite/gcc.dg/longcmd/pr111527-1.c create mode 100644 gcc/testsuite/gcc.dg/longcmd/pr111527-2.c create mode 100644 gcc/testsuite/gcc.dg/longcmd/pr111527-3.c create mode 100644 gcc/testsuite/gcc.dg/longcmd/pr111527-4.c diff --git a/gcc/collect2.cc b/gcc/collect2.cc index 902014a9cc1..564d8968648 100644 --- a/gcc/collect2.cc +++ b/gcc/collect2.cc @@ -376,6 +376,40 @@ typedef int scanfilter; static void scan_prog_file (const char *, scanpass, scanfilter); +char* getenv_extended (const char* var_name) +{ + int file_size; + char* buf = NULL; + + char* string = getenv (var_name); + if (!string) + { + char* string = getenv ("FILE_GCC_OPTIONS"); + FILE *fptr; + fptr = fopen (string, "r"); + if (fptr == NULL) + return (0); + /* Copy contents from temporary file to buffer */ + if (fseek (fptr, 0, SEEK_END) == -1) + return (0); + file_size = ftell (fptr); + rewind (fptr); + buf = (char *) xmalloc (file_size + 1); + if (buf == NULL) + return (0); + if (fread ((void *) buf, file_size, 1, fptr) <= 0) + { + free (buf); + fatal_error (input_location, "fread failed"); + return (0); + } + buf[file_size] = '\0'; + return buf; + } + return string; +} + + /* Delete tempfiles and exit function. */ @@ -1004,7 +1038,7 @@ main (int argc, char **argv) /* Now pick up any flags we want early from COLLECT_GCC_OPTIONS The LTO options are passed here as are other options that might be unsuitable for ld (e.g. -save-temps). */ - p = getenv ("COLLECT_GCC_OPTIONS"); + p = getenv_extended ("COLLECT_GCC_OPTIONS"); while (p && *p) { const char *q = extract_string (&p); @@ -1200,7 +1234,7 @@ main (int argc, char **argv) AIX support needs to know if -shared has been specified before parsing commandline arguments. */ - p = getenv ("COLLECT_GCC_OPTIONS"); + p = getenv_extended ("COLLECT_GCC_OPTIONS"); while (p && *p) { const char *q = extract_string (&p); @@ -1594,7 +1628,7 @@ main (int argc, char **argv) fprintf (stderr, "o_file = %s\n", (o_file ? o_file : "not found")); - ptr = getenv ("COLLECT_GCC_OPTIONS"); + ptr = getenv_extended ("COLLECT_GCC_OPTIONS"); if (ptr) fprintf (stderr, "COLLECT_GCC_OPTIONS = %s\n", ptr); diff --git a/gcc/gcc.cc b/gcc/gcc.cc index abdb40bfe6e..fb36d4a979c 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -2952,12 +2952,43 @@ add_to_obstack (char *path, void *data) return NULL; } -/* Add or change the value of an environment variable, outputting the - change to standard error if in verbose mode. */ +/* Add or change the value of an environment variable, + outputting the change to standard error if in verbose mode. */ static void xputenv (const char *string) { - env.xput (string); + static const size_t MAX_ENV_VAR_LEN = 128*1024; + size_t count; + FILE *fptr; + + const size_t string_length = strlen (string); + if ( string_length < MAX_ENV_VAR_LEN ) + { + env.xput (string); + return; + } + /* For excessively long environment variables i.e >128KB + Store the arguments in a temporary file and collect i + them back together in collect2 */ + char *temp_file = make_at_file (); + fptr = fopen (temp_file, "w"); + if (fptr == NULL) + { + fatal_error (input_location, "Cannot open temporary file"); + return; + } + /* Copy contents into temporary file */ + count = fwrite (string, sizeof(char), strlen(string), fptr); + if ( count != string_length ) + { + fatal_error (input_location, "Cannot write into temporary file"); + return; + } + char *env_val = (char *) xmalloc (strlen (temp_file) + 18); + sprintf (env_val, "FILE_GCC_OPTIONS=%s", temp_file); + env.xput (env_val); + record_temp_file (temp_file, !save_temps_flag, !save_temps_flag); + fclose (fptr); } /* Build a list of search directories from PATHS. diff --git a/gcc/testsuite/gcc.dg/longcmd/longcmd.exp b/gcc/testsuite/gcc.dg/longcmd/longcmd.exp new file mode 100644 index 00000000000..bac8b6d6fff --- /dev/null +++ b/gcc/testsuite/gcc.dg/longcmd/longcmd.exp @@ -0,0 +1,16 @@ +# GCC testsuite that uses the `dg.exp' driver. +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS "" +} + +dg-init + +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ + "" $DEFAULT_CFLAGS + +dg-finish diff --git a/gcc/testsuite/gcc.dg/longcmd/pr111527-1.c b/gcc/testsuite/gcc.dg/longcmd/pr111527-1.c new file mode 100644 index 00000000000..a5373f57790 --- /dev/null +++ b/gcc/testsuite/gcc.dg/longcmd/pr111527-1.c @@ -0,0 +1,44 @@ +/* { dg-do run } */ + +#include +#include +#include +#include + +#define ARGV_LIMIT_SIZE 128 * 1024 +#define SYSTEM_LIMIT_SIZE 2 * 1024 * 1024 +#define STR_TO_WRITE "-DTEST " +void create_large_response_file () +{ + FILE *fp1, *fp2; + char buffer[1024]; + + strcpy (buffer, STR_TO_WRITE); + + fp1 = fopen ("options_128kb_to_2mb.txt", "wb"); + if (fp1 == NULL) + { + abort (); + } + while (ftell (fp1) < (ARGV_LIMIT_SIZE + 10)) + { + fwrite (buffer, strlen (buffer), 1, fp1); + } + fclose (fp1); + + fp2 = fopen ("options_greater_then_2mb.txt", "wb"); + if (fp2 == NULL) + { + abort (); + } + while (ftell (fp2) < (SYSTEM_LIMIT_SIZE +10)) + { + fwrite (buffer, strlen (buffer), 1, fp2); + } + fclose (fp2); +} + +int main() +{ + create_large_response_file (); +} diff --git a/gcc/testsuite/gcc.dg/longcmd/pr111527-2.c b/gcc/testsuite/gcc.dg/longcmd/pr111527-2.c new file mode 100644 index 00000000000..397d70f7b03 --- /dev/null +++ b/gcc/testsuite/gcc.dg/longcmd/pr111527-2.c @@ -0,0 +1,9 @@ +/* { dg-do run } */ + +#include + +int main() +{ + printf("Hello World\n"); +} +/* { dg-final { output-exists { target *-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/longcmd/pr111527-3.c b/gcc/testsuite/gcc.dg/longcmd/pr111527-3.c new file mode 100644 index 00000000000..394e54b1074 --- /dev/null +++ b/gcc/testsuite/gcc.dg/longcmd/pr111527-3.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-options "@options_128kb_to_2mb.txt" } */ + +#include + +int main() +{ + printf("Hello world\n"); +} +/* { dg-final { output-exists { target *-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/longcmd/pr111527-4.c b/gcc/testsuite/gcc.dg/longcmd/pr111527-4.c new file mode 100644 index 00000000000..eaa427f24a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/longcmd/pr111527-4.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "@options_greater_then_2mb.txt" } */ +/* { dg-excess-errors "warnings about argument list too long" } */ + +#include + +int main() +{ + /* { xfail *-*-* } */ +}