RFR(XXS): 8132232: Signature mismatch between declaration and definition of PosixSemaphore::timedwait
Volker Simonis
volker.simonis at gmail.com
Thu Jul 23 14:39:10 UTC 2015
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.
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