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

Jason Liu via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 11 07:02:37 PDT 2020


Hi James,

I think the rationale is that by default, we want users to use an `export
list` to manually control the symbol visibility on AIX instead of relying
on the attribute in the code (which could cause unwanted effects as Hubert
already described).
Here's some description on how to use export list on AIX:
https://developer.ibm.com/technologies/systems/articles/au-aix-symbol-visibility/#3-using-the-export-list
Not sure if that answers your question.

Thanks,

Jason Liu

On Thu, Sep 10, 2020 at 9:07 PM James Y Knight via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

>
>
> 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
>>>
>> _______________________________________________
> 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/20200911/a1654798/attachment-0001.html>


More information about the cfe-dev mailing list