I find something strange. Background: a new method getentropy() is available on OpenBSD [1] and Solaris and people are also proposing it on other OSes.
Therefore inside JDK I write a piece of native code to detect it, something like typedef int (*GETENTROPY_FN)(char* buffer, int len); getentropy = (GETENTROPY_FN)dlsym(RTLD_DEFAULT, "getentropy"); if (getentropy) { return 1; } On Mac, it returns non-NULL, but a later call to (*getentropy)(cbuffer, length) shows # SIGBUS (0xa) at pc=0x0000000103bfa030, pid=22434, tid=5891 ... # Problematic frame: # C [libj2rand.dylib+0x1030] getentropy+0x0 However, "man getentropy" does not show anything, and the following simple program also prints out 0x0 #include <dlfcn.h> #include <stdlib.h> main() { void* g = dlsym(RTLD_DEFAULT, "getentropy"); printf("%p\n", g); } What does this mean? Is the JDK code loading another getentropy() somewhere else? How do I detect it and what shall I do to avoid it? Thanks Max [1] http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2