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

Hubert Tong via cfe-dev cfe-dev at lists.llvm.org
Thu Sep 10 15:57:35 PDT 2020


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).

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/a4cff3d5/attachment-0001.html>


More information about the cfe-dev mailing list