On Fri, 14 Apr 2023 00:34:14 GMT, Jiangli Zhou <jian...@openjdk.org> wrote:

>>> The direct renaming in this case seems to be more strait forward.
>> 
>> If we were to do this then we should have a naming convention of some kind 
>> e.g. `<lib-name>_<var-name>` but it strikes me as wrong as the code 
>> shouldn't need to know what library it is part of. In this case we do 
>> something as a simple point-fix, but to me it says there is a bigger problem.
>
>> I'm not familiar with the details of symbol scoping and linkage with 
>> libraries, but I would have hoped there was a way to have symbols like this 
>> shareable throughout the code that comprises the library without exposing 
>> them to users of the library. It used to be IIRC only functions we listed in 
>> the mapfiles were exposed, and these days we use explicit attributes to 
>> export them. Is there not some equivalent thing for data?
> 
> If my understanding is correct the mapfile is for exported symbols, which are 
> in the export table. Those symbols can be dynamically looked up, e.g. via 
> dlsym. By default, '-fvisibility=hidden' is used 
> (https://github.com/openjdk/jdk/blob/master/make/common/modules/LibCommon.gmk#L41).
>  The symbols are '.hidden' by default if not exported. E.g. jmm_interface is 
> 'hidden' as objdump shows below. However, the linker error that we are seeing 
> here for statically linking the libraries together is a different issue. The 
> linker founds multiple ones in different object files, hence the failures. 
> We'd have to change to use internal linkage for the affect variables to 
> resolve the failure if feasible (without renaming). Please let me know if I'm 
> missing anything.
> 
> objdump: 
> ./linux-x86_64-server-release/support/native/jdk.management/libmanagement_ext/management_ext.o:
>  not a dynamic object
> SYMBOL TABLE:
> 0000000000000000 l    df *ABS*        0000000000000000 management_ext.c
> ...
> 0000000000000000 g     F .text        0000000000000068 JNI_OnLoad
> 0000000000000008 g     O .bss 0000000000000008 .hidden jvm
> 0000000000000000         *UND*        0000000000000000 JVM_GetManagement
> 0000000000000010 g     O .bss 0000000000000008 .hidden jmm_interface
> 0000000000000000 g     O .bss 0000000000000004 .hidden jmm_version

> If we were to do this then we should have a naming convention of some kind 
> e.g. `<lib-name>_<var-name>` but it strikes me as wrong as the code shouldn't 
> need to know what library it is part of. In this case we do something as a 
> simple point-fix, but to me it says there is a bigger problem.

Using a naming convention as you suggested sounds good. I'm not completely 
clear what's the bigger problem though. Could you please clarify?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13451#discussion_r1166165671

Reply via email to