From patchwork Fri Sep 6 11:49:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Evgeny Karpov X-Patchwork-Id: 1981801 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=microsoft.com header.i=@microsoft.com header.a=rsa-sha256 header.s=selector2 header.b=aII0M0vE; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; 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 [IPv6:2620:52:3:1:0:246e:9693:128c]) (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 4X0ZKv2Dsvz1y1H for ; Fri, 6 Sep 2024 21:50:27 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 15F14384A446 for ; Fri, 6 Sep 2024 11:50:25 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20726.outbound.protection.outlook.com [IPv6:2a01:111:f403:2613::726]) by sourceware.org (Postfix) with ESMTPS id 8121D3858CDA for ; Fri, 6 Sep 2024 11:50:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8121D3858CDA Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=microsoft.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=microsoft.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8121D3858CDA Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=2a01:111:f403:2613::726 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1725623403; cv=pass; b=t9RFGxzY5Ml7YZ96N32o3eOQTBZ24/UkBMAGZUReb/8rDU92m/k7BC39YtAaRRqJY2rlLI2z9Byv1IsC3FNQfoFBd3qsOD10Wz16kYOXrpeXb5YYti2Ehcy8CQNi9sBY1K16gyT4aE/3zQgXicUsjfDsjfmADtQLBfXfA1av65M= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1725623403; c=relaxed/simple; bh=u/DVVadFrMcOyb/IM+ES2IhiYty2LW7zpFoJy2Fe2RY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=N4bLI5uhwh7+bTGT/LcdERaTYfUZmipu3wHUgaBPgLWqR2X2oZqL03JPtxooobJD2ZDeQYd8LAUcZ82VkqcwI14GO5q9yGN66qFlCE9185mrQiY483TpdxH+7BbLd5pjP4O+HpYRZjmYIvrmjx231dVXIul9cm5DhgfaMGbotvE= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h1BnOHkOZnZfNSi1uAECoGT547jFV31uWJ2Ef1L8JoMrddFAsFWISIPg3GnPxAVRONkzGUDQqM99bjtiBD92LR2956PPx3BOMep/m4OzYpkXJW3+n7bZqbmNX0cC/c9VXkPy2qShgq8RxpTZMS9lVIPSa2iUox5N2FVXICVOQivHcPRec/B2Rz+gQejdGPzzYFuV//KTdPQTPPfto1QoBhdSWGOhUKeMToV1qYzGrMSVOXKHmV1D1WZCXPPd8ZfqLQPYCDisB5QKUX6MawdWU5bbHrM+Htu5COQXMGb+XqX3RM8W4+Q4jtcaKzK/eT8Y51hdohqq/lOcn+v8oiaYWg== 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=u/DVVadFrMcOyb/IM+ES2IhiYty2LW7zpFoJy2Fe2RY=; b=qr8QkYkKX/lsI/b4HvvjPUEPVwDmcbWckB6cFZXapFc5TSa3SZwkbVpTDs+G7Vt4XMJh9/kOSo8kaqORodwsOSCiUZx8tBnbDJH0lFR7zLMhOX8Z0LYQUyaBoaQIDvjACBnc57TDbhELiTmRS3ishWbyuGZ02nHlXmX6X+UgK+GEZBHWcbUXOQwJtlYAxXPomc9bj5hJakcsyW0rVDVG+SBNRXcpxxRZrHSSLAfz4pa0sUQyo8lKYbKrZkNo3lSwHpNVq/nyPtWNZnPrkPyU7/i9d8AnYsGhEnTJbLzaNc4/UlMJvfxmlrfXILMwyIIRAGKGxAUustM1YKpoC8+gqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=u/DVVadFrMcOyb/IM+ES2IhiYty2LW7zpFoJy2Fe2RY=; b=aII0M0vEEfUSoiHCVM4jE96mNiCPwAIaM9Bu5IDZ5aoewfN0z2F64wrKsxwQ2BlpspzNF2JgbLUTzeh6SNszYQg3awfr9g45sNfMR6Up42kdQy6mKYcAPCuFRbDWyJ1ux7gx+qM7sTKXppumBA3vcDQA8WL523JP0bt82Tb7VTI= Received: from DBBPR83MB0613.EURPRD83.prod.outlook.com (2603:10a6:10:533::21) by DBBPR83MB0564.EURPRD83.prod.outlook.com (2603:10a6:10:533::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7962.4; Fri, 6 Sep 2024 11:49:56 +0000 Received: from DBBPR83MB0613.EURPRD83.prod.outlook.com ([fe80::399d:9bfc:1209:af10]) by DBBPR83MB0613.EURPRD83.prod.outlook.com ([fe80::399d:9bfc:1209:af10%4]) with mapi id 15.20.7918.000; Fri, 6 Sep 2024 11:49:56 +0000 From: Evgeny Karpov To: "gcc-patches@gcc.gnu.org" CC: "richard.sandiford@arm.com" , "Richard Earnshaw (lists)" , "christophe.lyon@linaro.org" , Maxim Kuvyrkov , Radek Barton Subject: [PATCH v2 1/9] Support weak references Thread-Topic: [PATCH v2 1/9] Support weak references Thread-Index: AQHbAFLlkxJ598df9kKJkeKfYfacYA== Date: Fri, 6 Sep 2024 11:49:56 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2024-09-06T11:49:56.968Z; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0; MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard; authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DBBPR83MB0613:EE_|DBBPR83MB0564:EE_ x-ms-office365-filtering-correlation-id: 0ac72d8f-5bee-4059-03b8-08dcce6a0786 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|376014|1800799024|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?NR+B6N2MOP76E6u0di2o7Uu5XjDY3Ww?= =?utf-8?q?dO+EvfQAeZnLPOg5WL7LBTF6eLdPbp3UGafuGZqqHuM8bQqCHUSatha7df/GZR+PF?= =?utf-8?q?pJ9hdu6wOb993S+BWVUzRXIgcP2YwmJSGS8b+N1UYpGL7fFFvfl0lv4cEB+izSXxg?= =?utf-8?q?OO125pDdUnFmuQhijUxw3av/1ZjRFUjdcw1SL/vBm8oRsNz3jmR15JpduL6RMgd5u?= =?utf-8?q?9Rxr6HTq9EbDSBHZ54Pu9zJ5c4MgbucXTTh9Xqd9QCOTnHQuxAi25N/7O5POYcO07?= =?utf-8?q?upFRpJ2jd8OkiKCKLwfLDolQjisGI7Ol2Tede4J0bPW7mtm+bVRbPEvBDyogaKy18?= =?utf-8?q?/HYNKU9oMknWx3If+Ed7FD/wzNCbUh69pqX6fR6UNg71EkE44CSB7sLAeLSKajQ94?= =?utf-8?q?OhsjIhE1/Ss4X6thTMWJe3CQSQH1CLcjEsYxV0YlUoZ6tqhrFwCJU2hEZXuAci/Fd?= =?utf-8?q?WU3AP0P38KUzFJVVsxK97otHDIrfkFkv5JTtRb7BgZ5g3VH5HKc+rVgWpe7eiL5dE?= =?utf-8?q?YjkJl6RS6hrZAjXiY056MSHi0tp84lzQRVQz9JxU393PwKQGpl45Mp3Oe3lqDz1Rc?= =?utf-8?q?Ni1c9vmuKxMhbzukYYZkBV83REB/Tx8mWZLnA11+Q2ws1WW8NZGXtT9JAR5mFwv5x?= =?utf-8?q?qHH4yG4zYBq2TLnlHQDkvZz3afhn+NnRj6S99iRJHG3u9G+uMXeVsfdKhrSK53vdt?= =?utf-8?q?Htq7eHG/0fUmekfmrMDu7MQqhRwqBtp4XC/6l1LnQNc+XVp7KJJrH4d0xUfzCcpzm?= =?utf-8?q?O/sMqhnkwqre7QwXcjNymA4rgSfVrQJ56towQmE1fsvLjeg5XnVaP2gJVRdx+LUp2?= =?utf-8?q?2zi1XftihKD2wocvaN2g1W54LnXKOUZppP05si8meQYJ+qQ4Lnr0Qz6Ludp9Nj+Q3?= =?utf-8?q?EH9WTsyCB2mPEfWSeaWgwWIJCnvS5KpW2TMpqTKwNholRlN7lo8A0d2GOQBD5f162?= =?utf-8?q?+hPOUkRLXof2wl1xO2OrJWT4eS0cpo5/i0bpNnzqSztb5jyEnYmqLIHaIscaN+W3f?= =?utf-8?q?2qkKFC6yAmtASmuqS6iw71xVDq8Ce+NDibitXHm0JWQy75yWk+LIcKqhHTUtPkp+Z?= =?utf-8?q?ctBj/7yhHNwlmaUcjv2BRiPwYxS9/rqWwHZNbB9/xeZb0Hr3czCsNnofi40r7jgK1?= =?utf-8?q?QqR42MJIi+sJ9bvzjhKtFbKjacDwFqT9F71ZdlCM0G3Jgg+btv9P5QTN34Cw7Y+kd?= =?utf-8?q?y0kzBLsk0CmDrKuwQ+1MLm0S9IH2CoNHPjQWkvtTslGVWuHJzexCnS2SYfzzqb+2g?= =?utf-8?q?kZsKj0twkzsOCyaERp6nfy1aA+mpcmaz3dwV7ZVIr4/makGqrZR576NS5UxGcsMyV?= =?utf-8?q?lfzhUOsRBUmh7xG0pXvCT39Vr20L90Nfcg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBBPR83MB0613.EURPRD83.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?pZ7BvV9r10ak6SU4NEmmq8guHqTE?= =?utf-8?q?qyNOvK1ueVZqkv0Dn8WuCOo4FLehAHRxPZLPArvg3ISSAH8ah8P65dmhWpYc96ld5?= =?utf-8?q?R4FGNAYexrEK8Qm213YiZ7LesEoEbR15O4SUxrHNZWEdRHJNN6regqHHdJRAKwMWr?= =?utf-8?q?Z/aMlMiLUBpnkYg/RDFhE5si32EdnM8Iw0KtPAZOqSh7UWMuR6haOxO40AX3e82J/?= =?utf-8?q?d4RHJD+RmSWNuqyM1WtSepaam9EK9gyn10hla7b/iHdN2UsKYtoW/6jPeSDYdY4ga?= =?utf-8?q?XRq2M/qSWPvLUqBTS6Xi+N+d5nb3l3hYxncIGTjouXMMoWMd+uZS/OP9NxfK7VsK2?= =?utf-8?q?M73yTa4ltDSvFQ2/jldrvighz1nhqgFqnh/ULBU3sEdrXnN0ri4A9dXlhae/ABruY?= =?utf-8?q?U6a5jmmWQKpzS76WSW4YWR+czsZ9ZvPaZupBZiqwohwIqmvRrwZEzgrMUzOYh2Gr9?= =?utf-8?q?kyKn63uURXGiBtfsfhdP6kVLzxKE3pZ98WHXTxXtfYsZXY8z2BVPav2Nb7o6qVSR1?= =?utf-8?q?TJ0fZVrX4DK3g++GxFwMo4MGidfBH8tGfGaaPlY3JmWNS+18dtIgEZSqql6DqnmxG?= =?utf-8?q?gBOatSz3sdx4u0YrPoK1VmncRmwaMrJB874GMetI4hCDGfChUW273RasxPmQ7gO1j?= =?utf-8?q?+ecKiBqQA79lkTdAw3v5dYKHBBjDfiAA3PjJbLRFaEgvYqxaZsnrJZwyZk98W8/X6?= =?utf-8?q?JUuCghi2LErMqnoRa902/MbE4Q7f8dGPUcjmB3j/ckj2B/dd0voki7WEzLJuaAWtX?= =?utf-8?q?pbW0nFVBcIdFavzBBQSWDqnGufMhkXye3IXvOC4kELwn/ZNFaXKGTxg7k1hdohpzG?= =?utf-8?q?vDYaFRXd2Fh3Dlcy8ViVqKvsM2hJnQJSbQY5gziUoLFSWo9OG2hHRIiNP2uG+fvw8?= =?utf-8?q?O7pp7FjqFcCPVN2G0makkFTcg4meHFTw6a2uhJUTNSPd+Dwjyv2oBZWNL1m8snLq7?= =?utf-8?q?myATMwhqIGHasHEKLkCHfxBIdjGLjDAi3HvNR2L0MuGrM/Y4SvCj2bSsS9PIB+bWv?= =?utf-8?q?v89T81UcBDCUCozmyFGplMQr0oOYD5Q97x604whkR+tAuBAb+6rMpbnlpyFXg2mPC?= =?utf-8?q?2kn1jgfcDlQPvwWKguW8YYmpFQoG1mBLwhMvGhKof8XlCxCoDs97Za0khW6orBhUn?= =?utf-8?q?zP2ccHRseOSnrbah1EEoqjf6ioDU/+lCmcvUynBzfOk9TQ3hl8j+ozjmEw+YowHBE?= =?utf-8?q?Svgge9aWbzDwFJnzOyPefjHyrH+fm9VhfHtxB15cM6zbNEQGUW4AsfPUgjsQdimpD?= =?utf-8?q?bd6ueZcqRLj93z2Wy42r12dJSdnRalEzWKaZkJkrMtTePw81abzQ6EVljnxYGPaj9?= =?utf-8?q?wlBN2rtvDGQ3zSMLiQMGMsKc1qoj3p6PW94obUEJoXlWij8REvW0VQCaSGltnYl8b?= =?utf-8?q?IQ1hl27LUuri0GjCnhYxCId0ThK+ssRnZCnTJ5dqCK8CZO4VqFuShLtf/4i+YeRXZ?= =?utf-8?q?YgiVg7oC4QJ/KF8DxbWM3SL1NyxTu1lLz/jASU7d/5lLYHdUztZdNYxondcxZGcJC?= =?utf-8?q?AZsKOTPLO4RcxdeCS+Q9+Ea/gly7slvodJGRRPqzu9JOvrODoKPW3tpLy/CWj1ah6?= =?utf-8?q?Y2L4XJ6LsAN?= MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DBBPR83MB0613.EURPRD83.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ac72d8f-5bee-4059-03b8-08dcce6a0786 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Sep 2024 11:49:56.7661 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +cfdAdqs8iN+mfVFzvi/16y2m5fVsI0Boc9XxwdPmD4hV0N17RsRsHKBaRT/Ot4TNY2GxKG2aJmQ5xbpsOgcZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR83MB0564 X-Spam-Status: No, score=-8.2 required=5.0 tests=BAYES_00, BODY_8BITS, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_NONE, 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 The patch adds support for weak references. The original MinGW implementation targets ix86, which handles weak symbols differently compared to AArch64. In AArch64, the weak symbols are replaced by other symbols which reference the original weak symbols, and the compiler does not track the original symbol names. This patch resolves this and declares the original symbols. Here is an explanation of why this change is needed and what the difference is between x86_64-w64-mingw32 and aarch64-w64-mingw32. The way x86_64 calls a weak function: call  weak_fn2 GCC emits the call and creates the required definitions at the end of the assembly: .weak weak_fn2 .def  weak_fn2;   .scl  2;    .type 32;   .endef This is different from aarch64: weak_fn2 will be legitimized and replaced by .refptr.weak_fn2, and there will be no other references to weak_fn2 in the code. adrp  x0, .refptr.weak_fn2 add   x0, x0, :lo12:.refptr.weak_fn2 ldr   x0, [x0] blr   x0 GCC does not emit the required definitions at the end of the assembly, and weak_fn2 is tracked only by the mingw stub sybmol. Without the change, the stub definition will emit: .section      .rdata$.refptr.weak_fn2, "dr" .globl  .refptr.weak_fn2 .linkonce     discard .refptr.weak_fn2: .quad   weak_fn2 which is not enough. This fix will emit the required definitions: .weak   weak_fn2 .def    weak_fn2;   .scl  2;    .type 32;   .endef .section      .rdata$.refptr.weak_fn2, "dr" .globl  .refptr.weak_fn2 .linkonce     discard .refptr.weak_fn2: .quad   weak_fn2 gcc/ChangeLog: * config/aarch64/cygming.h (SUB_TARGET_RECORD_STUB): Request declaration for weak symbols. (PE_COFF_LEGITIMIZE_EXTERN_DECL): Legitimize external declaration for weak symbols. * config/i386/cygming.h (SUB_TARGET_RECORD_STUB): Update declarations in ix86 with the same functionality. (PE_COFF_LEGITIMIZE_EXTERN_DECL): Likewise. * config/mingw/winnt-dll.cc (legitimize_pe_coff_symbol): Support declaration for weak symbols if requested. * config/mingw/winnt.cc (struct stub_list): Likewise. (mingw_pe_record_stub): Likewise. (mingw_pe_file_end): Likewise. * config/mingw/winnt.h (mingw_pe_record_stub): Likewise. --- gcc/config/aarch64/cygming.h | 6 ++++-- gcc/config/i386/cygming.h | 4 ++-- gcc/config/mingw/winnt-dll.cc | 4 ++-- gcc/config/mingw/winnt.cc | 13 ++++++++++++- gcc/config/mingw/winnt.h | 2 +- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/gcc/config/aarch64/cygming.h b/gcc/config/aarch64/cygming.h index 9ce140a356f..bd6078023e3 100644 --- a/gcc/config/aarch64/cygming.h +++ b/gcc/config/aarch64/cygming.h @@ -171,7 +171,8 @@ still needed for compilation. */ mingw_handle_selectany_attribute, NULL } #undef SUB_TARGET_RECORD_STUB -#define SUB_TARGET_RECORD_STUB mingw_pe_record_stub +#define SUB_TARGET_RECORD_STUB(NAME, DECL) mingw_pe_record_stub((NAME), \ + DECL_WEAK ((DECL))) #define SUPPORTS_ONE_ONLY 1 @@ -186,7 +187,8 @@ still needed for compilation. */ #undef GOT_ALIAS_SET #define GOT_ALIAS_SET mingw_GOT_alias_set () -#define PE_COFF_LEGITIMIZE_EXTERN_DECL 1 +#define PE_COFF_LEGITIMIZE_EXTERN_DECL(RTX) \ + (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_WEAK (RTX)) #define HAVE_64BIT_POINTERS 1 diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 9c8c7e33cc2..1633017eff6 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -461,7 +461,7 @@ do { \ #define TARGET_ASM_ASSEMBLE_VISIBILITY i386_pe_assemble_visibility #undef SUB_TARGET_RECORD_STUB -#define SUB_TARGET_RECORD_STUB mingw_pe_record_stub +#define SUB_TARGET_RECORD_STUB(NAME, DECL) mingw_pe_record_stub((NAME), 0) /* Static stack checking is supported by means of probes. */ #define STACK_CHECK_STATIC_BUILTIN 1 @@ -470,7 +470,7 @@ do { \ # define HAVE_GAS_ALIGNED_COMM 0 #endif -#define PE_COFF_LEGITIMIZE_EXTERN_DECL \ +#define PE_COFF_LEGITIMIZE_EXTERN_DECL(RTX) \ (ix86_cmodel == CM_LARGE_PIC || ix86_cmodel == CM_MEDIUM_PIC) #define HAVE_64BIT_POINTERS TARGET_64BIT_DEFAULT diff --git a/gcc/config/mingw/winnt-dll.cc b/gcc/config/mingw/winnt-dll.cc index f74495b7fda..eb7cff7a593 100644 --- a/gcc/config/mingw/winnt-dll.cc +++ b/gcc/config/mingw/winnt-dll.cc @@ -134,7 +134,7 @@ get_dllimport_decl (tree decl, bool beimport) { SYMBOL_REF_FLAGS (rtl) |= SYMBOL_FLAG_EXTERNAL; #ifdef SUB_TARGET_RECORD_STUB - SUB_TARGET_RECORD_STUB (name); + SUB_TARGET_RECORD_STUB (name, decl); #endif } @@ -206,7 +206,7 @@ legitimize_pe_coff_symbol (rtx addr, bool inreg) } } - if (!PE_COFF_LEGITIMIZE_EXTERN_DECL) + if (!PE_COFF_LEGITIMIZE_EXTERN_DECL (addr)) return NULL_RTX; if (GET_CODE (addr) == SYMBOL_REF diff --git a/gcc/config/mingw/winnt.cc b/gcc/config/mingw/winnt.cc index 803e5f5ec85..1e2ec53e841 100644 --- a/gcc/config/mingw/winnt.cc +++ b/gcc/config/mingw/winnt.cc @@ -635,6 +635,7 @@ struct GTY(()) stub_list { struct stub_list *next; const char *name; + bool is_weak_decl_needed; }; static GTY(()) struct export_list *export_head; @@ -672,7 +673,7 @@ mingw_pe_maybe_record_exported_symbol (tree decl, const char *name, int is_data) } void -mingw_pe_record_stub (const char *name) +mingw_pe_record_stub (const char *name, bool is_weak_decl_needed) { struct stub_list *p; @@ -691,6 +692,7 @@ mingw_pe_record_stub (const char *name) p = ggc_alloc (); p->next = stub_head; p->name = name; + p->is_weak_decl_needed = is_weak_decl_needed; stub_head = p; } @@ -807,6 +809,15 @@ mingw_pe_file_end (void) if (!startswith (name, "refptr.")) continue; name += 7; + + if (q->is_weak_decl_needed) + { +#ifdef ASM_WEAKEN_LABEL + ASM_WEAKEN_LABEL (asm_out_file, name); +#endif + mingw_pe_declare_function_type (asm_out_file, name, 1); + } + fprintf (asm_out_file, "\t.section\t.rdata$%s, \"dr\"\n" "\t.globl\t%s\n" "\t.linkonce\tdiscard\n", oname, oname); diff --git a/gcc/config/mingw/winnt.h b/gcc/config/mingw/winnt.h index 97fefbcebca..a21a36b7e5d 100644 --- a/gcc/config/mingw/winnt.h +++ b/gcc/config/mingw/winnt.h @@ -28,7 +28,7 @@ extern void mingw_pe_declare_function_type (FILE *file, const char *name, extern void mingw_pe_encode_section_info (tree, rtx, int); extern void mingw_pe_file_end (void); extern void mingw_pe_maybe_record_exported_symbol (tree, const char *, int); -extern void mingw_pe_record_stub (const char *); +extern void mingw_pe_record_stub (const char *, bool); extern unsigned int mingw_pe_section_type_flags (tree, const char *, int); extern void mingw_pe_unique_section (tree, int); extern bool mingw_pe_valid_dllimport_attribute_p (const_tree);