Why do we need both - export maps AND -fvisibility=hidden/__attribute__((visibility("default")))

Daniel D. Daugherty daniel.daugherty at oracle.com
Mon Feb 17 06:26:45 PST 2014

On 2/17/14 3:08 AM, Staffan Larsen wrote:
> Good that you are looking at it.
> My comment was on map-files. The static map files we have today aren’t involved with creating vtable symbols.

Perhaps I'm misunderstanding what you mean here. I agree that the
map-files do not create the vtable symbols, but they are involved
with exporting vtable symols.

There's a hook in the non-windows mapfiles:

$ grep 'INSERT VTABLE SYMBOLS HERE' make/*/makefiles/map*
make/bsd/makefiles/mapfile-vers-darwin-debug:                # INSERT 
make/bsd/makefiles/mapfile-vers-darwin-product:                # INSERT 
make/bsd/makefiles/mapfile-vers-debug:          # INSERT VTABLE SYMBOLS HERE
make/bsd/makefiles/mapfile-vers-product:                # INSERT VTABLE 
make/linux/makefiles/mapfile-vers-debug:                # INSERT VTABLE 
make/linux/makefiles/mapfile-vers-product:              # INSERT VTABLE 
make/solaris/makefiles/mapfile-vers:                # INSERT VTABLE 

and there's logic in the non-Windows Makfiles:

$ grep 'INSERT VTABLE SYMBOLS HERE' make/*/makefiles/*.make
make/bsd/makefiles/vm.make:     awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS 
HERE")  \
make/linux/makefiles/vm.make:   awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS 
HERE")  \
make/solaris/makefiles/vm.make:               if ($$0 ~ "INSERT VTABLE 

and they show up in the mapfile generated during the build:

$ grep -c _vtbl_ 

$ grep _vtbl_ solaris_amd64_compiler2/product/mapfile | head -5


> /Staffan
> On 17 feb 2014, at 09:18, Dmitry Samersoff <dmitry.samersoff at oracle.com> wrote:
>> Staffan,
>> I'd dived into this problem last week.
>> SA uses address of vtable (_ZTV* symbols) to calculate base addresses
>> for couple of internal structures.
>> i.e. (roughly) it takes vtable address, add offset from vm_structs and
>> get the data.
>> Since the time when hotspot build switched to gcc 4.x it doesn't work,
>> so many of SA command (e.g. jdis) is broken now.
>> I'm looking for solution.
>> see
>> https://bugs.openjdk.java.net/browse/JDK-8034065
>> -Dmitry
>> On 2014-02-17 11:50, Staffan Larsen wrote:
>>> On 17 feb 2014, at 03:15, David Holmes <david.holmes at oracle.com> wrote:
>>>> On 13/02/2014 5:26 PM, Magnus Ihse Bursie wrote:
>>>>> On 2014-02-05 19:09, Volker Simonis wrote:
>>>>>> If there are any more/other comments on this topic I'll be highly
>>>>>> interested.
>>>>> You can count on me having lots of opinion on build issues. ;-)
>>>>> I'd like to get rid of the hard-coded map files completely, both in
>>>>> hotspot and jdk. This can be done without loss of functionality. How?
>>>>> Because we can generate them on the fly at build time, using information
>>>>> provided by the source code.
>>>> Does that account for the dynamically generated symbols used by the SA?
>>> I think the symbols SA care about are all already declared with JNIEXPORT.
>>> /Staffan
>>>> David
>>>>> Note that the exported functions are prefixed by the macro JNIEXPORT. We
>>>>> can locate all functions that have this prefix and write them to a map
>>>>> file. This can be done, and was indeed the way we solved things back in
>>>>> the JRockit JVM. The technique we used there was to grep for "JNIEXPORT"
>>>>> and check for a symbol name (as provided by nm). We had rules requiring
>>>>> that JNIEXPORT was to be written on the same line as the function name,
>>>>> or the line before that. So we could do like "grep -A 1 -e JNIEXPORT"
>>>>> and then cross-reference for names extracted by nm. Not exactly a formal
>>>>> semantic parsing, but it was efficient and worked very well. I believe
>>>>> we can do something very similar for hotspot and jdk.
>>>>> Then again, if we could get rid of maps completely, by using visibility
>>>>> and not linking statically with the standard libs, that would be even
>>>>> better. :-)
>>>>> /Magnus
>> -- 
>> Dmitry Samersoff
>> Oracle Java development team, Saint Petersburg, Russia
>> * I would love to change the world, but they won't give me the sources.

More information about the hotspot-dev mailing list