I see tons of exports listed, most of which do not have the static keyword. So, I would expect them to be exported from their compilation unit, but not from the linked shared library? Am I making a thinking error here?
Hi Thomas , I see "a ton" of exported symbols as well when looking into it (e.g. libjvm.so) with dump . More than one would like to have . However for now I think we should progress with the suggested patch as it is. Once we switch to xlc 13 (or some follow up release of xlc) that supports the visibility attributes ( as decribed in https://www.ibm.com/developerworks/aix/library/au-aix-symbol-visibility/inde... ) we can open a follow up item with compiler flag adjustment and adjust src/java.base/unix/native/include/jni_md.h , I think this file misses a proper JNIEXPORT definition for AIX / xlc 13.1 ). Best regards, Matthias
-----Original Message----- From: Thomas Stüfe [mailto:thomas.stuefe@gmail.com] Sent: Freitag, 27. April 2018 10:04 To: Langer, Christoph <christoph.langer@sap.com> Cc: Volker Simonis <volker.simonis@gmail.com>; Baesken, Matthias <matthias.baesken@sap.com>; Simonis, Volker <volker.simonis@sap.com>; ppc-aix-port-dev@openjdk.java.net; core-libs-dev@openjdk.java.net; build- dev@openjdk.java.net Subject: Re: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1
On Fri, Apr 27, 2018 at 9:27 AM, Langer, Christoph <christoph.langer@sap.com> wrote:
Hi Thomas,
let me cite one section from the article:
----------------------------------------------
Visibility attribute and backward compatibility on AIX
As we know from the previous article, on AIX, symbols are not visible by default unless we export them at the linking stage, either manually or with the help of CreateExportList. However, on Linux, symbols are, by default, with export (namely default) visibility. This brings a gap between the AIX visibility attribute and the GNU visibility attribute. To be backward compatible, on AIX, XL C/C++ would not set all the symbols to be exported like Linux. It might consider symbol without any visibility setting to be an unspecific visibility, which aligns with an old AIX implementation. For such symbols, AIX compiler, linker, and related tools would handle it as before. However, unspecific visibility does not mean that the symbol is internal or invisible at all. It is just a visibility that is specially designed to keep the compatibility.
...
----------------------------------------------
It says in the first sentence: " As we know from the previous article, on AIX, symbols are not visible by default unless we export them at the linking stage, either manually or with the help of CreateExportList". I guess that is why I was under the impression that with xlc12 symbols would not be visible...
:) Thanks for that pointer.
I did read:
"Consequently, as we have mentioned at the beginning of this article, if the programmer does not explicitly specify the visibility attribute for a symbol, on Linux, the visibility of the symbol could be thedefault. But on AIX, the visibility would be unspecified."
So I thought, default is "unspecified", which is not hidden.
I just had a look at the libjvm.so from our nightly fastdebug build, using "nm -g".
I see tons of exports listed, most of which do not have the static keyword. So, I would expect them to be exported from their compilation unit, but not from the linked shared library? Am I making a thinking error here?
Anyway. I do not want to hold up this patch if you guys think it is okay to ignore the compiler warning, so it is okay by me.
Best Regards, Thomas
Best regards Christoph
-----Original Message----- From: Thomas Stüfe [mailto:thomas.stuefe@gmail.com] Sent: Freitag, 27. April 2018 09:21 To: Langer, Christoph <christoph.langer@sap.com> Cc: Volker Simonis <volker.simonis@gmail.com>; Baesken, Matthias <matthias.baesken@sap.com>; Simonis, Volker <volker.simonis@sap.com>; ppc-aix-port-dev@openjdk.java.net; core-libs-dev@openjdk.java.net; build- dev@openjdk.java.net Subject: Re: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1
Hi Christoph
On Fri, Apr 27, 2018 at 8:07 AM, Langer, Christoph <christoph.langer@sap.com> wrote:
Hi Thomas,
Look at this blog: https://www.ibm.com/developerworks/aix/library/au- aix-symbol-visibility-part2/index.html
if I understand it correctly, the xlc 12 default behavior should be like what we'd expect from -qvisibility=hidden.
Where in this article do you read this?
..Thomas
Best regards Christoph
-----Original Message----- From: build-dev [mailto:build-dev-bounces@openjdk.java.net] On Behalf Of Thomas Stüfe Sent: Freitag, 27. April 2018 06:55 To: Volker Simonis <volker.simonis@gmail.com>; Baesken, Matthias <matthias.baesken@sap.com> Cc: Simonis, Volker <volker.simonis@sap.com>; ppc-aix-port- dev@openjdk.java.net; core-libs-dev@openjdk.java.net; build- dev@openjdk.java.net Subject: Re: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1
Hi,
This was added by "8200178: Remove mapfiles for JDK native libraries". But if the flag is not accepted, what is the default behavior? Do we now export everything?
I'd like to understand this first before removing the flag to get rid of the warnings.
Best Regards, Thomas
On Thu, Apr 26, 2018 at 5:16 PM, Volker Simonis <volker.simonis@gmail.com> wrote:
Hi Matthias,
after Bhaktavatsal Reddy's report about the problems with "-qvisibility" with xlC 13 and taking into account that we can't test this anyway because we don't currently have xlC 13 on our machines I think it would be best to completely remove this option for now on AIX. Once we get xlC 13 we can revisit the issue.
Thanks, Volker
On Thu, Apr 26, 2018 at 4:59 PM, Bhaktavatsal R Maram <bhamaram@in.ibm.com> wrote: > Hi Matthias, > > At this point, I think we can remove the flag as you found that it is not supported in XLC < 13. And with XLC 13, it require more work to use this flag. > > Thanks, > Bhaktavatsal Reddy > > > > -----"Baesken, Matthias" <matthias.baesken@sap.com> wrote: ----
> To: "Langer, Christoph" <christoph.langer@sap.com>, "'build- dev@openjdk.java.net'" <build-dev@openjdk.java.net>, "ppc-aix- port- dev@openjdk.java.net" <ppc-aix-port-dev@openjdk.java.net>, "core- libs- dev@openjdk.java.net" <core-libs-dev@openjdk.java.net> > From: "Baesken, Matthias" <matthias.baesken@sap.com> > Date: 04/26/2018 08:23PM > Cc: "Simonis, Volker" <volker.simonis@sap.com>, Bhaktavatsal R Maram <bhamaram@in.ibm.com> > Subject: RE: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1 > > > Hello Christoph, I think all XLC versions < 12.1 are unsupported (and probably not working anyway) for the OpenJDK build . > I am only aware of XLC versions 12.1 and 13.1 which work / in case of 13.1 “might” work for OpenJDK compilation . > And for 12.1 I want to remove the flags . > > ( waiting for the feedback of Bhaktavatsal Reddy , in case he prefers it I remove them for all xlC versions including 13.1 ) > > Best regards, Matthias > > > > > > > From: Langer, Christoph > Sent: Donnerstag, 26. April 2018 16:38 > To: Baesken, Matthias <matthias.baesken@sap.com>; 'build- dev@openjdk.java.net' <build-dev@openjdk.java.net>; ppc-aix-port- dev@openjdk.java.net; core-libs-dev@openjdk.java.net > Cc: Simonis, Volker <volker.simonis@sap.com> > Subject: RE: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1 > > Hi Matthias, > > to me the change in principal looks good. > > I’m wondering if it is possible to do a comparison like xlc < 13 (e.g. extract major number before the first dot, then compare numerically) – but maybe it is too complicated and the current single version compare suits our needs ? > > Best regards > Christoph > > > > > From: Baesken, Matthias > Sent: Donnerstag, 26. April 2018 16:14 > To: 'build-dev@openjdk.java.net' <build-dev@openjdk.java.net>; ppc- aix-port-dev@openjdk.java.net; core-libs-dev@openjdk.java.net > Cc: Langer, Christoph <christoph.langer@sap.com>; Simonis, Volker <volker.simonis@sap.com> > Subject: RFR : 8202322: AIX: symbol visibility flags not support on xlc 12.1 > > Hello , could you please review this small adjustment to the symbol visibility compilation settings on AIX ? > Currently we use XLC 12.1 to compile JDK on AIX . > > However XLC 12.1 does not support the “-qvisibility=hidden” setting currently set on AIX. > It was introduced with XLC 13.1 . Christoph found some info about it here : > > https://www.ibm.com/developerworks/aix/library/au-aix-symbol- visibility-part2/index.html > > Setting it only generates hundreds of warnings in the build log , warnings look like this : > XlC12.1 > > bash-4.4$ xlC -qversion > IBM XL C/C++ for AIX, V12.1 (5765-J02, 5725-C72) > Version: 12.01.0000.0019 > > bash-4.4$ xlC -qvisibility=hidden sizeof.c -o sizeof_aixxlc > 1506-173 (W) Option visibility=hidden is not valid. Enter xlC for list of valid options. > > Compare to XLC13.1 > > bash-3.00$ xlC -qversion > IBM XL C/C++ for AIX, V13.1 (5725-C72, 5765-J07) > Version: 13.01.0000.0008 > bash-3.00$ xlC -qvisibility=default sizeof.c -o sizeof_aixxlc > bash-3.00$ xlC -qvisibility=hidden sizeof.c -o sizeof_aixxlc > > > So it is better to avoid setting these flags when using xlc12.1 . > Please review : > > Bug : > > https://bugs.openjdk.java.net/browse/JDK-8202322 > > Change : > > http://cr.openjdk.java.net/~mbaesken/webrevs/8202322/ > > > Best regards, Matthias > > > >