[cfe-dev] add new option -fnovisibility for clang

James Y Knight via cfe-dev cfe-dev at lists.llvm.org
Thu Sep 10 18:07:09 PDT 2020


On Thu, Sep 10, 2020, 6:57 PM Hubert Tong <hubert.reinterpretcast at gmail.com>
wrote:

> On Thu, Sep 10, 2020 at 6:30 PM James Y Knight via cfe-dev <
> cfe-dev at lists.llvm.org> wrote:
>
>> But *why* does AIX want to ignore visibility restrictions encoded via
>> attribute? Especially by default?
>>
> One reason is that AIX performs more early/less lazy symbol resolution
> (even with runtime linking) than, say, Linux. So, if a project goes with an
> export-by-default model (via attribute in some scope), they can cause
> link-time errors from symbol references to undefined symbols from code that
> would otherwise have been discarded as unreferenced by the linker. It seems
> such code is not uncommon (and has the questionable effect of exporting
> template instantiations based on "client provided" types that are not part
> of the "library"/"utility" code in question).
>

But, the default visibility is "default" -- which is the most export-y
visibility setting there is. So, without specifying visibility options on
the command line, the only thing you can do with visibility attributes in
code is to *remove *exports, not add additional ones.

What am I missing?

Now, if someone was porting their project to AIX, it is reasonable to ask
> them to figure out the problem with their less-than-discriminate usage of
> visibility. For developers trying to use packages with such problems,
> they're rather less interested in fixing the projects that they're
> dependent on.
>
>
>>
>> On Thu, Sep 10, 2020 at 10:04 AM digger lin via cfe-dev <
>> cfe-dev at lists.llvm.org> wrote:
>>
>>> Hi All,
>>>
>>>   In IBM compiler Xlclang , there is option -fnovisibiilty. The option
>>> is description as
>>>
>>> https://www.ibm.com/support/knowledgecenter/SSGH3R_16.1.0/com.ibm.xlcpp161.aix.doc/compiler_ref/opt_visibility.html
>>>
>>>
>>>   we need to add the option -fnovisibiilty for clang in the IBM AIX
>>> OS(and the option is enabled by default in AIX OS).
>>>   I will implement the option in the other OS platform.(but the option
>>> is disabled by default in other OS).
>>>
>>>   For example, the file test.c
>>>
>>>  bash-4.2$ test.c
>>>  __attribute__((visibility ("protected"))) int b;
>>>
>>>  1 In AIX OS:
>>>
>>>  1.1 Compiled with
>>>
>>> *  clang -fnovisibility    -target powerpc-unknown-aix  -emit-llvm  -S
>>> test.c*
>>>  or
>>>   *clang -target powerpc-unknown-aix  -emit-llvm  -S test.c * ( the
>>> -fnovisibility is *enabled* by default in AIX OS)
>>>
>>>  Generate IR as :
>>>
>>>   *@b = global i32 0, align 4*
>>>
>>>  1.2 Compiled with
>>>   (If have "-fnovisibility  -fvisibility=*" at the same time.  the
>>> compile will ignore the -fnovisibility).
>>>
>>>   *clang -fnovisibility  -fvisibility=default   -target
>>> powerpc-unknown-aix   -emit-llvm  -S test.c*
>>>
>>> Or
>>>
>>>   *clang -fvisibility=default   -target powerpc-unknown-aix
>>> -emit-llvm  -S test.c*
>>>
>>>   Generate IR as :
>>>   *@b = protected global i32 0, align 4*
>>>
>>>  2. In Other OS(not AIX)
>>>    2.1* clang -fnovisibility    -target powerpc-unknown-linux
>>>  -emit-llvm  -S test.c*
>>>
>>>     Generate IR as :
>>>     *@b = global i32 0, align 4*
>>>
>>>   2.2
>>>    * clang -target powerpc-unknown-linux  -emit-llvm  -S test.c* ( the
>>> -fnovisibility is *disabled *by default in not AIX OS)
>>>   Or
>>>     (if have "-fnovisibility  -fvisibility=*" at the same time.  the
>>> compile will ignore the -fnovisibility).
>>>     *clang -fnovisibility  -fvisibility=default   -target
>>> powerpc-unknown-linux   -emit-llvm  -S test.c*
>>>   Or
>>>     *clang -fvisibility=default   -target powerpc-unknown-linux
>>> -emit-llvm  -S test.c*
>>>
>>>    Generate IR as :
>>>     *@b = protected global i32 0, align 4 *
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20200910/24ebf2be/attachment.html>


More information about the cfe-dev mailing list