1 /* src/native/vm/openjdk/hpi.c - HotSpot HPI interface functions
4 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
6 This file is part of CACAO.
8 This program is free software; you can redistribute it and/or
9 modify it under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 2, or (at
11 your option) any later version.
13 This program is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
28 // Include our JNI header before the HPI headers, because the HPI
29 // headers include jni.h and we want to override the typedefs in
31 #include "native/jni.hpp"
33 // We include hpi_md.h before hpi.h as the latter includes the former.
34 #include INCLUDE_HPI_MD_H
35 #include INCLUDE_HPI_H
37 #include "mm/memory.h"
39 #include "native/native.hpp"
41 #include "native/vm/openjdk/hpi.h"
43 #include "vm/options.h"
45 #include "vm/properties.hpp"
50 /* VM callback functions ******************************************************/
52 static vm_calls_t callbacks = {
53 /* TODO What should we use here? */
55 /* unimplemented_panic, */
56 /* unimplemented_monitorRegister, */
67 /* HPI interfaces *************************************************************/
69 GetInterfaceFunc hpi_get_interface = NULL;
70 HPI_FileInterface *hpi_file = NULL;
71 HPI_SocketInterface *hpi_socket = NULL;
72 HPI_LibraryInterface *hpi_library = NULL;
73 HPI_SystemInterface *hpi_system = NULL;
76 /* hpi_initialize **************************************************************
78 Initialize the Host Porting Interface (HPI).
80 *******************************************************************************/
82 void hpi_initialize(void)
84 const char* boot_library_path;
92 jint (JNICALL * DLL_Initialize)(GetInterfaceFunc *, void *);
94 TRACESUBSYSTEMINITIALIZATION("hpi_init");
98 boot_library_path = Properties_get("sun.boot.library.path");
101 os_strlen(boot_library_path) +
102 os_strlen("/native_threads/libhpi.so") +
107 os_strcpy(p, boot_library_path);
108 os_strcat(p, "/native_threads/libhpi.so");
113 log_println("hpi_init: Loading HPI %s ", p);
117 handle = native_library_open(u);
121 vm_abort("hpi_init: HPI open failed");
123 /* Resolve the DLL_Initialize function from the library. */
125 dll_initialize = os_dlsym(handle, "DLL_Initialize");
127 DLL_Initialize = (jint (JNICALL *)(GetInterfaceFunc *, void *)) (intptr_t) dll_initialize;
129 if (opt_TraceHPI && DLL_Initialize == NULL)
130 log_println("hpi_init: HPI dlsym of DLL_Initialize failed: %s", os_dlerror());
132 if (DLL_Initialize == NULL ||
133 (*DLL_Initialize)(&hpi_get_interface, &callbacks) < 0) {
136 vm_abort("hpi_init: HPI DLL_Initialize failed");
139 native_library_add(u, NULL, handle);
142 log_println("hpi_init: HPI loaded successfully");
144 /* Resolve the interfaces. */
145 /* NOTE: The intptr_t-case is only to prevent the a compiler
146 warning with -O2: warning: dereferencing type-punned pointer
147 will break strict-aliasing rules */
149 result = (*hpi_get_interface)((void **) (intptr_t) &hpi_file, "File", 1);
152 vm_abort("hpi_init: Can't find HPI_FileInterface");
154 result = (*hpi_get_interface)((void **) (intptr_t) &hpi_library, "Library", 1);
157 vm_abort("hpi_init: Can't find HPI_LibraryInterface");
159 result = (*hpi_get_interface)((void **) (intptr_t) &hpi_system, "System", 1);
162 vm_abort("hpi_init: Can't find HPI_SystemInterface");
166 /* hpi_initialize_socket_library ***********************************************
168 Initialize the library Host Porting Interface (HPI).
170 *******************************************************************************/
172 int hpi_initialize_socket_library(void)
176 /* Resolve the socket library interface. */
178 result = (*hpi_get_interface)((void **) (intptr_t) &hpi_socket, "Socket", 1);
182 log_println("hpi_initialize_socket_library: Can't find HPI_SocketInterface");
192 * These are local overrides for various environment variables in Emacs.
193 * Please do not remove this and leave it at the end of the file, where
194 * Emacs will automagically detect them.
195 * ---------------------------------------------------------------------
198 * indent-tabs-mode: t
202 * vim:noexpandtab:sw=4:ts=4: