Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8135499 | emb-9 | Volker Simonis | P4 | Resolved | Fixed | team |
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.
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.
- backported by
-
JDK-8135499 PPC64: Fix little-endian build after "8077838: Recent developments for ppc"
- Resolved
- relates to
-
JDK-8221175 Fix bad function case for controlled JVM crash on PPC64 big-endian
- Resolved
-
JDK-8077838 Recent developments for ppc.
- Resolved