RFR(XXS): 8132232: Signature mismatch between declaration and definition of PosixSemaphore::timedwait

Mikael Gerdin mikael.gerdin at oracle.com
Thu Jul 23 15:03:12 UTC 2015


Volker,

On 2015-07-23 16:39, Volker Simonis wrote:
> Hi,
>
> can somebody please review and sponsor this tiny change to fix the build on
> Solaris/Sparc with SS12u3:
>
> http://cr.openjdk.java.net/~simonis/webrevs/2015/8132232
> https://bugs.openjdk.java.net/browse/JDK-8132232
>
> In semaphore_posix.hpp timedwait is declared as follows:
>
> class PosixSemaphore : public CHeapObj<mtInternal> {
>   private:
>    bool timedwait(struct timespec ts);
> }
>
> but in os_posix.cpp it is defined as follows:
>
> bool PosixSemaphore::timedwait(const struct timespec ts) {
>
> On Solaris 10/11 on Sparc with SS12u3 (Sun C++ 5.12 SunOS_sparc 2011/11/16)
> this gives an error in the release build:
>
> Undefined first referenced
>   symbol in file
> bool PosixSemaphore::timedwait(timespec) os_solaris.o
>
> This is because the caller in os_solaris.o requires:
>
> /usr/ccs/bin/nm -C hotspot/solaris_sparcv9_compiler2/product/os_solaris.o |
> grep timedwait
> [456] | 0| 0|FUNC |GLOB |0 |UNDEF |bool PosixSemaphore::timedwait(timespec)
> [__1cOPosixSemaphoreJtimedwait6MnItimespec__b_]
>
> but the implementation in os_posix.o has:
>
> /usr/ccs/bin/nm -C hotspot/solaris_sparcv9_compiler2/product/os_posix.o |
> grep timedwait
> [61] | 6928| 124|FUNC |GLOB |0 |2 |bool PosixSemaphore::timedwait(const
> timespec)
> [__1cOPosixSemaphoreJtimedwait6MknItimespec__b_]
>
> Strange enough, the error doesn't seem to happen on Solaris/AMD64 (using
> the exactly same compiler version) and I absolutely can not see how this
> error is related to the CPU architecture!
>
> I also can not understand why nobody has seen this before? Maybe you
> (Oracle) are using a newer compiler where this is fixed? But the "Supported
> Build Platforms" wiki page [1] still mentions 12.3.

Unfortunately the version string of the compiler do not contain any 
patch information. I'm pretty sure that any 2011 version of 12.3 
contains at least one critical bug which caused incorrect code 
generation on at least x86.

I think we are running
CC: Sun C++ 5.12 SunOS_sparc Patch 148506-18 2014/02/11
and
CC: Sun C++ 5.12 SunOS_i386 Patch 148509-18 2014/02/11
respectively.

/Mikael

>
> Fortunately, the fix is trivial - just remove the const qualifier from the
> method definition.
>
> Regards,
> Volker
>
> [1] https://wiki.openjdk.java.net/display/Build/Supported+Build+Platforms
>


More information about the hotspot-dev mailing list