RFR: 8253795: Implementation of JEP 391: macOS/AArch64 Port [v12]
Stefan Karlsson
stefank at openjdk.java.net
Tue Feb 9 09:34:38 UTC 2021
On Fri, 5 Feb 2021 16:07:09 GMT, Anton Kozlov <akozlov at openjdk.org> wrote:
>> Please review the implementation of JEP 391: macOS/AArch64 Port.
>>
>> It's heavily based on existing ports to linux/aarch64, macos/x86_64, and windows/aarch64.
>>
>> Major changes are in:
>> * src/hotspot/cpu/aarch64: support of the new calling convention (subtasks JDK-8253817, JDK-8253818)
>> * src/hotspot/os_cpu/bsd_aarch64: copy of os_cpu/linux_aarch64 with necessary adjustments (JDK-8253819)
>> * src/hotspot/share, test/hotspot/gtest: support of write-xor-execute (W^X), required on macOS/AArch64 platform. It's implemented with pthread_jit_write_protect_np provided by Apple. The W^X mode is local to a thread, so W^X mode change relates to the java thread state change (for java threads). In most cases, JVM executes in write-only mode, except when calling a generated stub like SafeFetch, which requires a temporary switch to execute-only mode. The same execute-only mode is enabled when a java thread executes in java or native states. This approach of managing W^X mode turned out to be simple and efficient enough.
>> * src/jdk.hotspot.agent: serviceability agent implementation (JDK-8254941)
>
> Anton Kozlov has updated the pull request incrementally with one additional commit since the last revision:
>
> Update signal handler part for debugger
Thanks for cleaning out WXWriteFromExecSetter.
src/hotspot/share/gc/shared/barrierSetNMethod.cpp line 52:
> 50:
> 51: int BarrierSetNMethod::nmethod_stub_entry_barrier(address* return_address_ptr) {
> 52: // Enable WXWrite: the function is called direclty from nmethod_entry_barrier
direclty -> directly
src/hotspot/share/runtime/threadWXSetters.hpp line 28:
> 26: #define SHARE_RUNTIME_THREADWXSETTERS_HPP
> 27:
> 28: #include "runtime/thread.inline.hpp"
This breaks against our convention to forbid inline.hpp files from being included from being included from .hpp files. You need to rework this by either moving the implementation to a .cpp file, or convert this file into an .inline.hpp
See the Source Files section in:
https://htmlpreview.github.io/?https://github.com/openjdk/jdk/blob/master/doc/hotspot-style.html
src/hotspot/share/runtime/thread.hpp line 848:
> 846: void init_wx();
> 847: WXMode enable_wx(WXMode new_state);
> 848: #endif // __APPLE__ && AARCH64
Now that this is only compiled into macOS/AArch64, could this be moved over to thread_bsd_aarch64.hpp? The same goes for the associated functions.
src/hotspot/share/runtime/thread.cpp line 2515:
> 2513: void JavaThread::check_special_condition_for_native_trans(JavaThread *thread) {
> 2514: // Enable WXWrite: called directly from interpreter native wrapper.
> 2515: MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, thread));
FWIW, I personally think that adding these MACOS_AARCH64_ONLY usages at the call sites increase the line-noise in the affected functions. I think I would have preferred a version:
ThreadWXEnable(WXMode new_mode, Thread* thread = NULL) {
MACOS_AARCH64_ONLY(initialize(new_mode, thread);) {}
void initialize(...); // Implementation in thread_bsd_aarch64.cpp (alt. inline.hpp)
With that said, I'm fine with taking this discussion as a follow-up.
-------------
Changes requested by stefank (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/2200
More information about the build-dev
mailing list