This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] COMDAT Safe Module Level Multi versioning


On Tue, Aug 4, 2015 at 11:43 AM, Sriraman Tallam <tmsriram@google.com> wrote:
> On Tue, Jun 16, 2015 at 4:22 PM, Sriraman Tallam <tmsriram@google.com> wrote:
>> On Tue, May 19, 2015 at 9:11 AM, Xinliang David Li <davidxl@google.com> wrote:
>>>>
>>>> Hm.  But which options are unsafe?  Also wouldn't it be better to simply
>>>> _not_ have unsafe options produce comdats but always make local clones
>>>> for them (thus emit the comdat with "unsafe" flags dropped)?
>>>
>>> Always localize comdat functions may lead to text size increase. It
>>> does not work if the comdat function is a virtual function for
>>> instance.
>>
>> Based on Richard's suggestion, I have a patch to localize comdat
>> functions which seems like a very effective solution to this problem.
>> The text size increase is limited to the extra comdat copies generated
>> for the specialized modules (modules with unsafe options) which is
>> usually only a few.   Since -fweak does something similar for
>> functions,  I have called the new option -fweak-comdat-functions.
>> This does not apply to virtual comdat functions as their addresses can
>> always be leaked via the vtable. Using this flag with virtual
>> functions generates a warning.
>>
>> To summarize, this is the intended usage of this option. Modules which
>> use unsafe code options, like -m<isa> for multiversioning, to generate
>> code that is meant to run only on a subset of CPUs can generate
>> comdats with specialized instructions which when picked by the linker
>> can get run unconditionally causing SIGILL on unsupported platforms.
>> This flag hides these comdats to be local to these modules and not
>> make them available publicly,  with the caveat that it does not apply
>> to virtual comdats.
>>
>> Could you please review?
>
> Ping.  This patch uses Richard's suggestion to localize comdat
> functions with option -fno-weak-comdat-functions.  Comments?


Ping.

* c-family/c.opt (fweak-comdat-functions): New option.
* cp/decl2.c (comdat_linkage): Implement new option.  Warn when
virtual comdat functions are seen.
* doc/invoke.texi: Document new option.
* testsuite/g++.dg/no-weak-comdat-functions-1.C: New test.

>
> * c-family/c.opt (fweak-comdat-functions): New option.
> * cp/decl2.c (comdat_linkage): Implement new option.  Warn when
> virtual comdat functions are seen.
> * doc/invoke.texi: Document new option.
> * testsuite/g++.dg/no-weak-comdat-functions-1.C: New test.
>
>
>>
>> * c-family/c.opt (fweak-comdat-functions): New option.
>> * cp/decl2.c (comdat_linkage): Implement new option.  Warn when
>> virtual comdat functions are seen.
>> * doc/invoke.texi: Document new option.
>> * testsuite/g++.dg/no-weak-comdat-functions-1.C: New test.
>>
>>
>> Thanks
>> Sri
>>
>>
>>>
>>> David
>>>
>>>
>>>>
>>>> Richard.
>>>>
>>>>>
>>>>> Thanks
>>>>> Sri

Attachment: no_weak_comdat_functions.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]