RFR(S): 8080684: PPC64: Fix little-endian build after "8077838: Recent developments for ppc"
Volker Simonis
volker.simonis at gmail.com
Tue May 19 16:41:45 UTC 2015
Hi,
can I please get a review for the following fix of the ppc64le build.
@Sasha, Tiago: I would be also especially interested if somebody with
a little-endian ppc64 system can check if the fix really works there
as I have currently no access to such a system.
https://bugs.openjdk.java.net/browse/JDK-8080684
http://cr.openjdk.java.net/~simonis/webrevs/2015/8080684/
Following the details:
On big-endian ppc64 we need so called 'function descriptors' instead
of simple pointers in order to call functions. That's why the
Assembler class on ppc64 offers an 'emit_fd()' method which can be
used to create such a function descriptor.
On little-endian ppc64 the ABI was changed (i.e. ABI_ELFv2) and
function descriptors have been removed. That's why the before
mentioned 'emit_fd()' is being excluded from the build with the help
of preprocessor macros if the HotSpot is being build in a little
endian environment:
#if !defined(ABI_ELFv2)
inline address emit_fd(...)
#endif
The drawback of this approach is that every call site which uses
'emit_fd()' has to conditionally handle the case where 'emit_fd()'
isn't present as well. This was exactly the problem with change
"8077838: Recent developments for ppc" which introduced an
unconditional call to 'emit_fd()' in 'VM_Version::config_dscr() which
lead to a build failure on little endian.
A better approach would be to make 'emit_fd()' available on both,
little- and big-endian platforms and handle the difference internally,
within the function itself. On little-endian, the function will just
return the current PC without emitting any code at all while the
big-endian variant emits the required function descriptor.
Thank you and best regards,
Volker
More information about the ppc-aix-port-dev
mailing list