From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 29D7020D2C3B9 for ; Sun, 26 Mar 2017 21:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=intel.com; i=@intel.com; q=dns/txt; s=intel; t=1490590172; x=1522126172; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=UGjL7bw6M+NPsLfH15BnDjt1g9zscqg5RfLCli8wNls=; b=txyn8Fo98eOqqTWjXAoafgUrF6zFClEOQcN11HrA/1Rho76fChpAtEjC Y8gF7/zunpkhWS8l5nrUQViar3aRBg==; Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Mar 2017 21:49:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,229,1486454400"; d="scan'208";a="81274774" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 26 Mar 2017 21:49:31 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 26 Mar 2017 21:49:31 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.212]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.224]) with mapi id 14.03.0248.002; Mon, 27 Mar 2017 12:49:29 +0800 From: "Gao, Liming" To: Felix Poludov , "edk2-devel@lists.01.org" CC: "Gao, Liming" Thread-Topic: [RFC] GLOBAL_REMOVE_IF_UNREFERENCED, multiply defined symbols, and MSFT/GCC tool chains. Thread-Index: AdKkmm2mcThMLZckRnawazzXsHkPjwCDpsPA Date: Mon, 27 Mar 2017 04:49:29 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D702B8A@shsmsx102.ccr.corp.intel.com> References: <9333E191E0D52B4999CE63A99BA663A002DEEEDA95@atlms1.us.megatrends.com> In-Reply-To: <9333E191E0D52B4999CE63A99BA663A002DEEEDA95@atlms1.us.megatrends.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [RFC] GLOBAL_REMOVE_IF_UNREFERENCED, multiply defined symbols, and MSFT/GCC tool chains. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Mar 2017 04:49:32 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Felix: This changes the default MSFT build behavior. It will impact all platform= s even if this platform has no requirement to pass GCC build. I suggest to = update platform DSC to enable it in MSFT tool chain if this platform needs = to support MSFT and GCC both.=20 In Base.h: I agree to define GLOBAL_REMOVE_IF_UNREFERENCED only when it is = not defined. Then, Platform.dsc can append compiler option /D GLOBAL_REMOVE= _IF_UNREFERE to the different value in [BuildOptions] section.=20 #ifndef GLOBAL_REMOVE_IF_UNREFERENCED #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany) #endif Thanks Liming >-----Original Message----- >From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of >Felix Poludov >Sent: Friday, March 24, 2017 8:53 PM >To: edk2-devel@lists.01.org >Subject: [edk2] [RFC] GLOBAL_REMOVE_IF_UNREFERENCED, multiply defined >symbols, and MSFT/GCC tool chains. > >Trying to add GCC support to projects based on MSFT tool chain, I'm keep >stumbling into multiply defined symbol errors reported by GCC linker. >An attempt to understand why the errors are not reported by the Microsoft >linker lead me to GLOBAL_REMOVE_IF_UNREFERENCED macro. >The purpose of the macro is to enable link time optimization of global >variables. >However, the way it's defined for MSFT tool chain (__declspec(selectany) ) >has a side effect of explicitly allowing multiple instances of a symbol de= fined >with GLOBAL_REMOVE_IF_UNREFERENCED. >For a while usage of the macro was the only option to enable global variab= le >optimization. >Starting from VS2013 compiler supports /Gw flag that enables global variab= le >optimization without a special declarator. > >I propose to make the following modifications: > >1. Change GLOBAL_REMOVE_IF_UNREFERENCED definition to an empty >macro. > >Or more specifically, update macro definition in Base.h as follows: > >#ifndef GLOBAL_REMOVE_IF_UNREFERENCED > >#define GLOBAL_REMOVE_IF_UNREFERENCED > >#endif > >2. Update VS2013 and VS2015 compiler flags to add /Gw option > >3. Update compiler flags for older MSFT tool chains to define >GLOBAL_REMOVE_IF_UNREFERENCED in a backward compatible manner for >targets that enable optimization. > >/D GLOBAL_REMOVE_IF_UNREFERENCED =3D_declspec(selectany) > > >The advantages of these modifications are: > >- Better detection of on potential errors by breaking the build whe= n >symbol is defined more than once. > >- Improved consistency between MSFT and GCC tool chains > >- Improved link time optimization with VS2013 and newer MSFT tool c= hains. > >For example, mGaugeData in >MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c >is not declared as GLOBAL_REMOVE_IF_UNREFERENCED, so > >today performance library is linked with DXE Core even when performance >measurements are disabled. > >The alternative option is to enable support of multiply defined symbols on >GCC tool chain. >One way to do it is by defining the macro as >#define GLOBAL_REMOVE_IF_UNREFERENCED __attribute__((weak)) > >However, I'm not sure that embracing multiple symbol definitions is a good >idea. >For example, see Ard's arguments in this commit comment >https://github.com/tianocore/edk2/commit/214a3b79417f64bf2faae74af42c1 >b9d23f50dc8 > >Thanks >Felix > >Please consider the environment before printing this email. > >The information contained in this message may be confidential and >proprietary to American Megatrends, Inc. This communication is intended t= o >be read only by the individual or entity to whom it is addressed or by the= ir >designee. If the reader of this message is not the intended recipient, you= are >on notice that any distribution of this message, in any form, is strictly >prohibited. Please promptly notify the sender by reply e-mail or by telep= hone >at 770-246-8600, and then delete or destroy all copies of the transmission= . >_______________________________________________ >edk2-devel mailing list >edk2-devel@lists.01.org >https://lists.01.org/mailman/listinfo/edk2-devel