This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [RFC] COMDAT Safe Module Level Multi versioning
- From: Cary Coutant <ccoutant at gmail dot com>
- To: Sriraman Tallam <tmsriram at google dot com>
- Cc: Xinliang David Li <davidxl at google dot com>, Richard Biener <richard dot guenther at gmail dot com>, "H.J. Lu" <hjl dot tools at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, binutils <binutils at sourceware dot org>, Yury Gribov <y dot gribov at samsung dot com>
- Date: Tue, 18 Aug 2015 14:24:45 -0700
- Subject: Re: [RFC] COMDAT Safe Module Level Multi versioning
- Authentication-results: sourceware.org; auth=none
- References: <CAAs8HmyB5jZS_zfHKeX9HEK3Eo59nVhuB4yfoGTy5hXV41YZYA at mail dot gmail dot com> <CAFiYyc1b++CR5FJBG4cFTZ2ec+dWgxXgoYWP72GWHtQ8BPruLg at mail dot gmail dot com> <CAAkRFZK3kgRbtCVTU7z04ugxSSCqmm_BA+Y=fW=MqnjNcV21Tg at mail dot gmail dot com> <CAAs8HmzY-YPt2bE6ce7S68Uh42KvfOZfLyMzT-N8JTFMbu9yPg at mail dot gmail dot com> <CAAs8HmwfrRfVuSU4iorW7ETscxxf4WqGx1qr+9+VeZ0Fe7xQKQ at mail dot gmail dot com> <CAAs8HmyoUAawcggMC7NU-LO4186vM2D4KL+xkA81PWdO32BXPg at mail dot gmail dot com> <CAAs8HmyVjF+cG10euUFNMZoLP6nV4V8nvqmCbNwSMgJr926C-Q at mail dot gmail dot com> <CAJimCsGMs5B0ZbFRYo5Ju5OrBxxvUz74Xwp51-VmUCWXpobLmA at mail dot gmail dot com>
> +@item -fno-weak-comdat-functions
> +@opindex fno-weak-comdat-functions
> +Do not use weak symbol support for comdat non-virtual functions, even if it
> +is provided by the linker. By default, G++ uses weak symbols if they are
> +available. This option is useful when comdat functions generated in certain
> +compilation units need to be kept local to the respective units and not exposed
> +globally. This does not apply to virtual comdat functions as their pointers
> +may be taken via virtual tables. This can cause unintended behavior if
> +the addresses of comdat functions are used.
>
> It's not really the "weak" that is causing the problem -- it's the
> "comdat". What the option really is doing is making the functions
> static rather than comdat. (It's all gated under flag_weak because
> weak symbols are the fall-back to link-once and comdat symbols.) I'd
> suggest phrasing this more in terms of static vs. comdat.
Oh, also, I'd suggest clarifying what you mean by "if the addresses of
comdat functions are used". I think what you really mean here is "if
pointers to the [now non-comdat] functions are compared for equality."
-cary