On 15/2/22 14:09, Akihiko Odaki wrote:
On Tue, Feb 15, 2022 at 9:06 PM Philippe Mathieu-Daudé <f4...@amsat.org> wrote:

qemu_thread_jit_execute() and qemu_thread_jit_write() call
pthread_jit_write_protect_np() which is declared in "pthread.h".
Since we don't want all C files to preprocess unused headers,
avoid adding yet another header here and move the function
definitions to osdep.c, un-inlining them.

Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org>
---
  include/qemu/osdep.h | 17 ++---------------
  util/osdep.c         | 20 ++++++++++++++++++++
  2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index 1e7a002339..785884728b 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -773,21 +773,8 @@ size_t qemu_get_host_physmem(void);
   * Toggle write/execute on the pages marked MAP_JIT
   * for the current thread.
   */
-#if defined(MAC_OS_VERSION_11_0) && \
-    MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
-static inline void qemu_thread_jit_execute(void)
-{
-    pthread_jit_write_protect_np(true);
-}
-
-static inline void qemu_thread_jit_write(void)
-{
-    pthread_jit_write_protect_np(false);
-}
-#else
-static inline void qemu_thread_jit_write(void) {}
-static inline void qemu_thread_jit_execute(void) {}
-#endif
+void qemu_thread_jit_execute(void);
+void qemu_thread_jit_write(void);

  /**
   * Platforms which do not support system() return ENOSYS
diff --git a/util/osdep.c b/util/osdep.c
index 42a0a4986a..b228a53612 100644
--- a/util/osdep.c
+++ b/util/osdep.c
@@ -124,6 +124,26 @@ int qemu_mprotect_none(void *addr, size_t size)
  #endif
  }

+static void qemu_pthread_jit_write_protect(bool enabled)
+{
+#if defined(MAC_OS_VERSION_11_0) \
+        && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_VERSION_11_0
+    if (__builtin_available(macOS 11.0, *)) {
+        pthread_jit_write_protect_np(enabled);
+    }
+#endif
+}
+
+void qemu_thread_jit_execute(void)
+{
+    qemu_pthread_jit_write_protect(true);
+}
+
+void qemu_thread_jit_write(void)
+{
+    qemu_pthread_jit_write_protect(false);
+}
+
  #ifndef _WIN32

  static int fcntl_op_setlk = -1;
--
2.34.1


Is this for compile-time reduction? If so, it would be nice if you
provide some numbers. It should have some explanation of the advantage
otherwise.

No, no number, but when using GCC on Monterey, the C files not including
"pthread.h" complain qemu_pthread_jit_write_protect() is not declared,
although not using qemu_thread_jit_execute(). I'll check why GCC is not
eliding unused inlined code.

Reply via email to