Commit 2b7f1f8f by Tom Tromey Committed by Tom Tromey

resolve.cc (ncode): Use _Jv_platform_ffi_abi.

	* resolve.cc (ncode): Use _Jv_platform_ffi_abi.
	Include platform.h.
	* java/lang/natRuntime.cc (insertSystemProperties): Use
	_Jv_platform_path_separator.
	(nativeGetLibname): Use _Jv_platform_file_separator.
	(_load): Use _Jv_platform_onload_names.
	(onload_names): New global.
	* include/win32.h (_Jv_platform_file_separator): New define.
	(_Jv_platform_path_separator): Likewise.
	(_Jv_platform_onload_names): Likewise.
	(_Jv_platform_ffi_abi): Likewise.
	* include/posix.h (_Jv_platform_file_separator): New define.
	(_Jv_platform_path_separator): Likewise.
	(_Jv_platform_onload_names): Likewise.
	(_Jv_platform_ffi_abi): Likewise.

From-SVN: r64461
parent 01cca2d8
2003-03-16 Tom Tromey <tromey@redhat.com>
* resolve.cc (ncode): Use _Jv_platform_ffi_abi.
Include platform.h.
* java/lang/natRuntime.cc (insertSystemProperties): Use
_Jv_platform_path_separator.
(nativeGetLibname): Use _Jv_platform_file_separator.
(_load): Use _Jv_platform_onload_names.
(onload_names): New global.
* include/win32.h (_Jv_platform_file_separator): New define.
(_Jv_platform_path_separator): Likewise.
(_Jv_platform_onload_names): Likewise.
(_Jv_platform_ffi_abi): Likewise.
* include/posix.h (_Jv_platform_file_separator): New define.
(_Jv_platform_path_separator): Likewise.
(_Jv_platform_onload_names): Likewise.
(_Jv_platform_ffi_abi): Likewise.
2003-03-14 Hans Boehm <Hans.Boehm@hp.com> 2003-03-14 Hans Boehm <Hans.Boehm@hp.com>
* java/lang/natObject.cc (JV_SYNC_HASH): replace signed % by &. * java/lang/natObject.cc (JV_SYNC_HASH): replace signed % by &.
......
...@@ -44,6 +44,18 @@ details. */ ...@@ -44,6 +44,18 @@ details. */
#define _Jv_platform_solib_prefix "lib" #define _Jv_platform_solib_prefix "lib"
#define _Jv_platform_solib_suffix ".so" #define _Jv_platform_solib_suffix ".so"
// Separator for file name components.
#define _Jv_platform_file_separator ((jchar) '/')
// Separator for path components.
#define _Jv_platform_path_separator ((jchar) ':')
// List of names for `JNI_OnLoad'.
#define _Jv_platform_onload_names { "JNI_OnLoad", NULL }
// Type of libffi ABI used by JNICALL methods. NOTE: This must agree
// with the JNICALL definition in jni.h
#define _Jv_platform_ffi_abi FFI_DEFAULT_ABI
#ifndef DISABLE_JAVA_NET #ifndef DISABLE_JAVA_NET
#include <java/net/InetAddress.h> #include <java/net/InetAddress.h>
#endif #endif
......
...@@ -24,6 +24,22 @@ details. */ ...@@ -24,6 +24,22 @@ details. */
#define _Jv_platform_solib_prefix "" #define _Jv_platform_solib_prefix ""
#define _Jv_platform_solib_suffix ".dll" #define _Jv_platform_solib_suffix ".dll"
// Separator for file name components.
#define _Jv_platform_file_separator ((jchar) '\\')
// Separator for path components.
#define _Jv_platform_path_separator ((jchar) ';')
// List of names for `JNI_OnLoad'. On Win32, JNI_OnLoad is an
// "stdcall" function taking two pointers (8 bytes) as arguments. It
// could also have been exported as "JNI_OnLoad@8" (MinGW) or
// "_JNI_OnLoad@8" (MSVC).
#define _Jv_platform_onload_names \
{ "JNI_OnLoad", "JNI_OnLoad@8", "_JNI_OnLoad@8", NULL }
// Type of libffi ABI used by JNICALL methods. NOTE: This must agree
// with the JNICALL definition in jni.h
#define _Jv_platform_ffi_abi FFI_STDCALL
#ifndef DISABLE_JAVA_NET #ifndef DISABLE_JAVA_NET
// these errors cannot occur on Win32 // these errors cannot occur on Win32
......
...@@ -140,6 +140,11 @@ java::lang::Runtime::gc (void) ...@@ -140,6 +140,11 @@ java::lang::Runtime::gc (void)
_Jv_RunGC (); _Jv_RunGC ();
} }
#ifdef USE_LTDL
// List of names for JNI_OnLoad.
static const char *onload_names[] = _Jv_platform_onload_names;
#endif
void void
java::lang::Runtime::_load (jstring path, jboolean do_search) java::lang::Runtime::_load (jstring path, jboolean do_search)
{ {
...@@ -221,19 +226,16 @@ java::lang::Runtime::_load (jstring path, jboolean do_search) ...@@ -221,19 +226,16 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
throw new UnsatisfiedLinkError (str); throw new UnsatisfiedLinkError (str);
} }
void *onload = lt_dlsym (h, "JNI_OnLoad"); // Search for JNI_OnLoad function.
void *onload = NULL;
#ifdef WIN32 const char **name = onload_names;
// On Win32, JNI_OnLoad is an "stdcall" function taking two pointers while (*name != NULL)
// (8 bytes) as arguments. It could also have been exported as
// "JNI_OnLoad@8" (MinGW) or "_JNI_OnLoad@8" (MSVC).
if (onload == NULL)
{ {
onload = lt_dlsym (h, "JNI_OnLoad@8"); onload = lt_dlsym (h, *name);
if (onload == NULL) if (onload != NULL)
onload = lt_dlsym (h, "_JNI_OnLoad@8"); break;
++name;
} }
#endif /* WIN32 */
if (onload != NULL) if (onload != NULL)
{ {
...@@ -570,11 +572,7 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops) ...@@ -570,11 +572,7 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
if (classpath) if (classpath)
{ {
sb->append (JvNewStringLatin1 (classpath)); sb->append (JvNewStringLatin1 (classpath));
#ifdef WIN32 sb->append (_Jv_platform_path_separator);
sb->append ((jchar) ';');
#else
sb->append ((jchar) ':');
#endif
} }
if (cp != NULL) if (cp != NULL)
sb->append (cp); sb->append (cp);
...@@ -632,14 +630,7 @@ java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname) ...@@ -632,14 +630,7 @@ java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname)
java::lang::StringBuffer *sb = new java::lang::StringBuffer (); java::lang::StringBuffer *sb = new java::lang::StringBuffer ();
sb->append(pathname); sb->append(pathname);
if (pathname->length() > 0) if (pathname->length() > 0)
{ sb->append (_Jv_platform_file_separator);
// FIXME: use platform function here.
#ifdef WIN32
sb->append ((jchar) '\\');
#else
sb->append ((jchar) '/');
#endif
}
sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix)); sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix));
sb->append(libname); sb->append(libname);
......
...@@ -11,6 +11,7 @@ details. */ ...@@ -11,6 +11,7 @@ details. */
/* Author: Kresten Krab Thorup <krab@gnu.org> */ /* Author: Kresten Krab Thorup <krab@gnu.org> */
#include <config.h> #include <config.h>
#include <platform.h>
#include <java-interp.h> #include <java-interp.h>
...@@ -1003,14 +1004,7 @@ _Jv_JNIMethod::ncode () ...@@ -1003,14 +1004,7 @@ _Jv_JNIMethod::ncode ()
memcpy (&jni_arg_types[offset], &closure->arg_types[0], memcpy (&jni_arg_types[offset], &closure->arg_types[0],
arg_count * sizeof (ffi_type *)); arg_count * sizeof (ffi_type *));
// NOTE: This must agree with the JNICALL definition in jni.h if (ffi_prep_cif (&jni_cif, _Jv_platform_ffi_abi,
#ifdef WIN32
#define FFI_JNI_ABI FFI_STDCALL
#else
#define FFI_JNI_ABI FFI_DEFAULT_ABI
#endif
if (ffi_prep_cif (&jni_cif, FFI_JNI_ABI,
extra_args + arg_count, rtype, extra_args + arg_count, rtype,
jni_arg_types) != FFI_OK) jni_arg_types) != FFI_OK)
throw_internal_error ("ffi_prep_cif failed for JNI function"); throw_internal_error ("ffi_prep_cif failed for JNI function");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment