[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