On Tue, 8 Mar 2022 00:25:51 GMT, Johannes Bechberger <d...@openjdk.java.net> 
wrote:

>> The WXMode for the current thread (on MacOS aarch64) is currently stored in 
>> the thread class which is unnecessary as the WXMode is bound to the current 
>> OS thread, not the current instance of the thread class.
>> This pull request moves the storage of the current WXMode into a thread 
>> local global variable in `os` and changes all related code. SafeFetch 
>> depended on the existence of a thread object only because of the WXMode. 
>> This pull request therefore removes the dependency, making SafeFetch usable 
>> in more contexts.
>
> Johannes Bechberger has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Move WX functionality into os specific files

This is looking good. A few additional comments below.

Thanks,
David

src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp line 538:

> 536: 
> 537: #ifdef __APPLE__
> 538: static THREAD_LOCAL os::WXMode _wx_state = os::WXUnknown;

Please add a blank line between the THREAD_LOCAL and the next method. Or even 
move this THREAD_LOCAL to just before `os::current_thread_change_wx`.

src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp line 547:

> 545:   if (_wx_state == WXUnknown) {
> 546:     _wx_state = os::WXWrite; // No way to know but we assume the 
> original state is "writable, not executable"
> 547:   }

Given this can't you just initialize to WXWrite and do away with WXUnknown?

src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.hpp line 57:

> 55:   static void current_thread_init_wx();
> 56: 
> 57:   static void current_thread_assert_wx_state(WXMode expected);

Can we move all these into the ThreadWXEnable class so they are not in the os 
namespace? Even the enum could move - though it will make the use-sites a bit 
more verbose. I won't insist on pushing this WX stuff even deeper, but if 
anyone else thinks it is a good idea ... :)

src/hotspot/share/prims/jni.cpp line 97:

> 95: #include "utilities/macros.hpp"
> 96: #include "utilities/vmError.hpp"
> 97: #include "runtime/thread.inline.hpp"

Why do we need this? Why do we not include os.hpp?

src/hotspot/share/runtime/safefetch.inline.hpp line 31:

> 29: 
> 30: #include "runtime/stubRoutines.hpp"
> 31: #include "runtime/os.hpp"

Please list the includes alphabetically.

-------------

PR: https://git.openjdk.java.net/jdk/pull/7727

Reply via email to