Why is fork1() exported from hotspot? (original) (raw)
Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Oct 21 15:32:53 UTC 2015
- Previous message: Why is fork1() exported from hotspot?
- Next message: Why is fork1() exported from hotspot?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 10/20/15, 1:14 AM, Thomas Stüfe wrote:
Hi all,
on Linux we define and export "fork1()" - a stub for fork() - and "fork1" also appears in linker mapfiles for bsd and AIX. The latter, I am sure, is just a copy-paste-effect. Why do we need to define and export fork1() for non-solaris platforms? We only ever use it on Solaris. The comment in oslinux.cpp is not really enlightening: "// Something to do with the numa-aware allocator needs these symbols" Does anyone know why this is needed? Regards, Thomas
$ hg -R hotspot annot hotspot/src/os/linux/vm/os_linux.cpp | grep fork1 2072: extern "C" JNIEXPORT int fork1() { return fork(); }
$ hg -R hotspot log -r 2072 hotspot/src/os/linux/vm/os_linux.cpp changeset: 2072:d70fe6ab4436 parent: 2062:3582bf76420e user: coleenp date: Tue Feb 01 11:23:19 2011 -0500 summary: 6588413: Use -fvisibility=hidden for gcc compiles
Here's the review thread: http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2011-January/001726.html
Here's the diff for just that file:
$ hg -R hotspot diff -r 2062 -r 2072 hotspot/src/os/linux/vm/os_linux.cpp diff -r 3582bf76420e -r d70fe6ab4436 src/os/linux/vm/os_linux.cpp --- a/src/os/linux/vm/os_linux.cpp Thu Jan 27 16:11:27 2011 -0800 +++ b/src/os/linux/vm/os_linux.cpp Tue Feb 01 11:23:19 2011 -0500 @@ -2509,8 +2509,10 @@ char *os::scan_pages(char start, char return end; }
-extern "C" void numa_warn(int number, char *where, ...) { } -extern "C" void numa_error(char *where) { } +// Something to do with the numa-aware allocator needs these symbols +extern "C" JNIEXPORT void numa_warn(int number, char *where, ...) { } +extern "C" JNIEXPORT void numa_error(char *where) { } +extern "C" JNIEXPORT int fork1() { return fork(); }
// If we are running with libnuma version > 2, then we should @@ -3483,7 +3485,7 @@ bool os::is_interrupted(Thread* thread, // Note that the VM will print warnings if it detects conflicting signal // handlers, unless invoked with the option "-XX:+AllowUserSignalHandlers". // -extern "C" int +extern "C" JNIEXPORT int JVM_handle_linux_signal(int signo, siginfo_t* siginfo, void* ucontext, int abort_if_unrecognized);
@@ -4678,44 +4680,6 @@ void os::pause() { } }
-extern "C" {
-/** - * NOTE: the following code is to keep the green threads code - * in the libjava.so happy. Once the green threads is removed, - * these code will no longer be needed. - / -int -jdk_waitpid(pid_t pid, int status, int options) { - return waitpid(pid, status, options); -}
-int -fork1() { - return fork(); -}
-int -jdk_sem_init(sem_t *sem, int pshared, unsigned int value) { - return sem_init(sem, pshared, value); -}
-int -jdk_sem_post(sem_t *sem) { - return sem_post(sem); -}
-int -jdk_sem_wait(sem_t *sem) { - return sem_wait(sem); -}
-int -jdk_pthread_sigmask(int how , const sigset_t* newmask, sigset_t* oldmask) { - return pthread_sigmask(how , newmask, oldmask); -}
-}
// Refer to the comments in os_solaris.cpp park-unpark. //
So fork1() used to be an "extern C" wrapper around fork() on Linux and now it is a JNIEXPORT'ed wrapper.
I don't think the addition of this comment:
+// Something to do with the numa-aware allocator needs these symbols
was meant to apply to the new JNIEXPORT of fork1(). However, it seems very strange that fork1() moved from a section that was associated with "green threads" to a section associated with "numa-aware allocator"...
Volker and Tom R are credited with doing some perf runs in the code review thread... Perhaps either of them can shed some light here?
Dan
- Previous message: Why is fork1() exported from hotspot?
- Next message: Why is fork1() exported from hotspot?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]