Ignore:
Timestamp:
Apr 27, 2004, 8:39:34 PM (21 years ago)
Author:
bird
Message:

GCC v3.3.3 sources.

Location:
branches/GNU/src/gcc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/GNU/src/gcc

    • Property svn:ignore
      •  

        old new  
        2626configure.vr
        2727configure.vrs
         28dir.info
        2829Makefile
        29 dir.info
        3030lost+found
        3131update.out
  • branches/GNU/src/gcc/libjava/jni.cc

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.1.1.2
    r1390 r1391  
    11// jni.cc - JNI implementation, including the jump table.
    22
    3 /* Copyright (C) 1998, 1999, 2000, 2001, 2002  Free Software Foundation
     3/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003  Free Software Foundation
    44
    55   This file is part of libgcj.
     
    1111#include <config.h>
    1212
     13#include <stdio.h>
    1314#include <stddef.h>
    1415#include <string.h>
     
    220221
    221222static jobject
    222 _Jv_JNI_NewGlobalRef (JNIEnv *, jobject obj)
     223(JNICALL _Jv_JNI_NewGlobalRef) (JNIEnv *, jobject obj)
    223224{
    224225  // This seems weird but I think it is correct.
     
    229230
    230231static void
    231 _Jv_JNI_DeleteGlobalRef (JNIEnv *, jobject obj)
     232(JNICALL _Jv_JNI_DeleteGlobalRef) (JNIEnv *, jobject obj)
    232233{
    233234  // This seems weird but I think it is correct.
     
    237238
    238239static void
    239 _Jv_JNI_DeleteLocalRef (JNIEnv *env, jobject obj)
     240(JNICALL _Jv_JNI_DeleteLocalRef) (JNIEnv *env, jobject obj)
    240241{
    241242  _Jv_JNI_LocalFrame *frame;
     
    264265
    265266static jint
    266 _Jv_JNI_EnsureLocalCapacity (JNIEnv *env, jint size)
     267(JNICALL _Jv_JNI_EnsureLocalCapacity) (JNIEnv *env, jint size)
    267268{
    268269  // It is easier to just always allocate a new frame of the requested
     
    292293
    293294static jint
    294 _Jv_JNI_PushLocalFrame (JNIEnv *env, jint size)
     295(JNICALL _Jv_JNI_PushLocalFrame) (JNIEnv *env, jint size)
    295296{
    296297  jint r = _Jv_JNI_EnsureLocalCapacity (env, size);
     
    305306
    306307static jobject
    307 _Jv_JNI_NewLocalRef (JNIEnv *env, jobject obj)
     308(JNICALL _Jv_JNI_NewLocalRef) (JNIEnv *env, jobject obj)
    308309{
    309310  // This seems weird but I think it is correct.
     
    346347
    347348static jobject
    348 _Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result, int stop)
     349(JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result, int stop)
    349350{
    350351  _Jv_JNI_LocalFrame *rf = env->locals;
     
    381382
    382383static jobject
    383 _Jv_JNI_PopLocalFrame (JNIEnv *env, jobject result)
     384(JNICALL _Jv_JNI_PopLocalFrame) (JNIEnv *env, jobject result)
    384385{
    385386  return _Jv_JNI_PopLocalFrame (env, result, MARK_USER);
     
    426427
    427428static jint
    428 _Jv_JNI_GetVersion (JNIEnv *)
    429 {
    430   return JNI_VERSION_1_2;
     429(JNICALL _Jv_JNI_GetVersion) (JNIEnv *)
     430{
     431  return JNI_VERSION_1_4;
    431432}
    432433
    433434static jclass
    434 _Jv_JNI_DefineClass (JNIEnv *env, jobject loader,
    435                      const jbyte *buf, jsize bufLen)
     435(JNICALL _Jv_JNI_DefineClass) (JNIEnv *env, const char *name, jobject loader,
     436                               const jbyte *buf, jsize bufLen)
    436437{
    437438  try
     
    439440      loader = unwrap (loader);
    440441
     442      jstring sname = JvNewStringUTF (name);
    441443      jbyteArray bytes = JvNewByteArray (bufLen);
    442444
     
    447449        = reinterpret_cast<java::lang::ClassLoader *> (loader);
    448450
    449       jclass result = l->defineClass (bytes, 0, bufLen);
     451      jclass result = l->defineClass (sname, bytes, 0, bufLen);
    450452      return (jclass) wrap_value (env, result);
    451453    }
     
    458460
    459461static jclass
    460 _Jv_JNI_FindClass (JNIEnv *env, const char *name)
     462(JNICALL _Jv_JNI_FindClass) (JNIEnv *env, const char *name)
    461463{
    462464  // FIXME: assume that NAME isn't too long.
     
    494496
    495497static jclass
    496 _Jv_JNI_GetSuperclass (JNIEnv *env, jclass clazz)
     498(JNICALL _Jv_JNI_GetSuperclass) (JNIEnv *env, jclass clazz)
    497499{
    498500  return (jclass) wrap_value (env, unwrap (clazz)->getSuperclass ());
     
    500502
    501503static jboolean
    502 _Jv_JNI_IsAssignableFrom(JNIEnv *, jclass clazz1, jclass clazz2)
     504(JNICALL _Jv_JNI_IsAssignableFrom) (JNIEnv *, jclass clazz1, jclass clazz2)
    503505{
    504506  return unwrap (clazz1)->isAssignableFrom (unwrap (clazz2));
     
    506508
    507509static jint
    508 _Jv_JNI_Throw (JNIEnv *env, jthrowable obj)
     510(JNICALL _Jv_JNI_Throw) (JNIEnv *env, jthrowable obj)
    509511{
    510512  // We check in case the user did some funky cast.
     
    516518
    517519static jint
    518 _Jv_JNI_ThrowNew (JNIEnv *env, jclass clazz, const char *message)
     520(JNICALL _Jv_JNI_ThrowNew) (JNIEnv *env, jclass clazz, const char *message)
    519521{
    520522  using namespace java::lang::reflect;
     
    553555
    554556static jthrowable
    555 _Jv_JNI_ExceptionOccurred (JNIEnv *env)
     557(JNICALL _Jv_JNI_ExceptionOccurred) (JNIEnv *env)
    556558{
    557559  return (jthrowable) wrap_value (env, env->ex);
     
    559561
    560562static void
    561 _Jv_JNI_ExceptionDescribe (JNIEnv *env)
     563(JNICALL _Jv_JNI_ExceptionDescribe) (JNIEnv *env)
    562564{
    563565  if (env->ex != NULL)
     
    566568
    567569static void
    568 _Jv_JNI_ExceptionClear (JNIEnv *env)
     570(JNICALL _Jv_JNI_ExceptionClear) (JNIEnv *env)
    569571{
    570572  env->ex = NULL;
     
    572574
    573575static jboolean
    574 _Jv_JNI_ExceptionCheck (JNIEnv *env)
     576(JNICALL _Jv_JNI_ExceptionCheck) (JNIEnv *env)
    575577{
    576578  return env->ex != NULL;
     
    578580
    579581static void
    580 _Jv_JNI_FatalError (JNIEnv *, const char *message)
     582(JNICALL _Jv_JNI_FatalError) (JNIEnv *, const char *message)
    581583{
    582584  JvFail (message);
     
    587589
    588590static jboolean
    589 _Jv_JNI_IsSameObject (JNIEnv *, jobject obj1, jobject obj2)
     591(JNICALL _Jv_JNI_IsSameObject) (JNIEnv *, jobject obj1, jobject obj2)
    590592{
    591593  return unwrap (obj1) == unwrap (obj2);
     
    593595
    594596static jobject
    595 _Jv_JNI_AllocObject (JNIEnv *env, jclass clazz)
     597(JNICALL _Jv_JNI_AllocObject) (JNIEnv *env, jclass clazz)
    596598{
    597599  jobject obj = NULL;
     
    605607        env->ex = new java::lang::InstantiationException ();
    606608      else
    607         {
    608           // FIXME: will this work for String?
    609           obj = JvAllocObject (clazz);
    610         }
     609        obj = JvAllocObject (clazz);
    611610    }
    612611  catch (jthrowable t)
     
    619618
    620619static jclass
    621 _Jv_JNI_GetObjectClass (JNIEnv *env, jobject obj)
     620(JNICALL _Jv_JNI_GetObjectClass) (JNIEnv *env, jobject obj)
    622621{
    623622  obj = unwrap (obj);
     
    627626
    628627static jboolean
    629 _Jv_JNI_IsInstanceOf (JNIEnv *, jobject obj, jclass clazz)
     628(JNICALL _Jv_JNI_IsInstanceOf) (JNIEnv *, jobject obj, jclass clazz)
    630629{
    631630  return unwrap (clazz)->isInstance(unwrap (obj));
     
    641640template<jboolean is_static>
    642641static jmethodID
    643 _Jv_JNI_GetAnyMethodID (JNIEnv *env, jclass clazz,
    644                         const char *name, const char *sig)
     642(JNICALL _Jv_JNI_GetAnyMethodID) (JNIEnv *env, jclass clazz,
     643                                  const char *name, const char *sig)
    645644{
    646645  try
     
    700699  for (int i = 0; i < arg_types->length; ++i)
    701700    {
     701      // Here we assume that sizeof(int) >= sizeof(jint), because we
     702      // use `int' when decoding the varargs.  Likewise for
     703      // float, and double.  Also we assume that sizeof(jlong) >=
     704      // sizeof(int), i.e. that jlong values are not further
     705      // promoted.
     706      JvAssert (sizeof (int) >= sizeof (jint));
     707      JvAssert (sizeof (jlong) >= sizeof (int));
     708      JvAssert (sizeof (double) >= sizeof (jfloat));
     709      JvAssert (sizeof (double) >= sizeof (jdouble));
    702710      if (arg_elts[i] == JvPrimClass (byte))
    703711        values[i].b = (jbyte) va_arg (vargs, int);
     
    705713        values[i].s = (jshort) va_arg (vargs, int);
    706714      else if (arg_elts[i] == JvPrimClass (int))
    707         values[i].i = va_arg (vargs, jint);
     715        values[i].i = (jint) va_arg (vargs, int);
    708716      else if (arg_elts[i] == JvPrimClass (long))
    709         values[i].j = va_arg (vargs, jlong);
     717        values[i].j = (jlong) va_arg (vargs, jlong);
    710718      else if (arg_elts[i] == JvPrimClass (float))
    711         values[i].f = va_arg (vargs, jfloat);
     719        values[i].f = (jfloat) va_arg (vargs, double);
    712720      else if (arg_elts[i] == JvPrimClass (double))
    713         values[i].d = va_arg (vargs, jdouble);
     721        values[i].d = (jdouble) va_arg (vargs, double);
    714722      else if (arg_elts[i] == JvPrimClass (boolean))
    715723        values[i].z = (jboolean) va_arg (vargs, int);
     
    728736template<typename T, invocation_type style>
    729737static T
    730 _Jv_JNI_CallAnyMethodV (JNIEnv *env, jobject obj, jclass klass,
    731                         jmethodID id, va_list vargs)
     738(JNICALL _Jv_JNI_CallAnyMethodV) (JNIEnv *env, jobject obj, jclass klass,
     739                                  jmethodID id, va_list vargs)
    732740{
    733741  obj = unwrap (obj);
     
    776784template<typename T, invocation_type style>
    777785static T
    778 _Jv_JNI_CallAnyMethod (JNIEnv *env, jobject obj, jclass klass,
    779                        jmethodID method, ...)
     786(JNICALL _Jv_JNI_CallAnyMethod) (JNIEnv *env, jobject obj, jclass klass,
     787                                 jmethodID method, ...)
    780788{
    781789  va_list args;
     
    791799template<typename T, invocation_type style>
    792800static T
    793 _Jv_JNI_CallAnyMethodA (JNIEnv *env, jobject obj, jclass klass,
    794                         jmethodID id, jvalue *args)
     801(JNICALL _Jv_JNI_CallAnyMethodA) (JNIEnv *env, jobject obj, jclass klass,
     802                                  jmethodID id, jvalue *args)
    795803{
    796804  obj = unwrap (obj);
     
    846854template<invocation_type style>
    847855static void
    848 _Jv_JNI_CallAnyVoidMethodV (JNIEnv *env, jobject obj, jclass klass,
    849                             jmethodID id, va_list vargs)
     856(JNICALL _Jv_JNI_CallAnyVoidMethodV) (JNIEnv *env, jobject obj, jclass klass,
     857                                      jmethodID id, va_list vargs)
    850858{
    851859  obj = unwrap (obj);
     
    887895template<invocation_type style>
    888896static void
    889 _Jv_JNI_CallAnyVoidMethod (JNIEnv *env, jobject obj, jclass klass,
    890                            jmethodID method, ...)
     897(JNICALL _Jv_JNI_CallAnyVoidMethod) (JNIEnv *env, jobject obj, jclass klass,
     898                                     jmethodID method, ...)
    891899{
    892900  va_list args;
     
    899907template<invocation_type style>
    900908static void
    901 _Jv_JNI_CallAnyVoidMethodA (JNIEnv *env, jobject obj, jclass klass,
    902                             jmethodID id, jvalue *args)
     909(JNICALL _Jv_JNI_CallAnyVoidMethodA) (JNIEnv *env, jobject obj, jclass klass,
     910                                      jmethodID id, jvalue *args)
    903911{
    904912  if (style == normal)
     
    943951template<typename T>
    944952static T
    945 _Jv_JNI_CallMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args)
     953(JNICALL _Jv_JNI_CallMethodV) (JNIEnv *env, jobject obj,
     954                               jmethodID id, va_list args)
    946955{
    947956  return _Jv_JNI_CallAnyMethodV<T, normal> (env, obj, NULL, id, args);
     
    952961template<typename T>
    953962static T
    954 _Jv_JNI_CallMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
     963(JNICALL _Jv_JNI_CallMethod) (JNIEnv *env, jobject obj, jmethodID id, ...)
    955964{
    956965  va_list args;
     
    968977template<typename T>
    969978static T
    970 _Jv_JNI_CallMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args)
     979(JNICALL _Jv_JNI_CallMethodA) (JNIEnv *env, jobject obj,
     980                               jmethodID id, jvalue *args)
    971981{
    972982  return _Jv_JNI_CallAnyMethodA<T, normal> (env, obj, NULL, id, args);
     
    974984
    975985static void
    976 _Jv_JNI_CallVoidMethodV (JNIEnv *env, jobject obj, jmethodID id, va_list args)
     986(JNICALL _Jv_JNI_CallVoidMethodV) (JNIEnv *env, jobject obj,
     987                                   jmethodID id, va_list args)
    977988{
    978989  _Jv_JNI_CallAnyVoidMethodV<normal> (env, obj, NULL, id, args);
     
    980991
    981992static void
    982 _Jv_JNI_CallVoidMethod (JNIEnv *env, jobject obj, jmethodID id, ...)
     993(JNICALL _Jv_JNI_CallVoidMethod) (JNIEnv *env, jobject obj, jmethodID id, ...)
    983994{
    984995  va_list args;
     
    9901001
    9911002static void
    992 _Jv_JNI_CallVoidMethodA (JNIEnv *env, jobject obj, jmethodID id, jvalue *args)
     1003(JNICALL _Jv_JNI_CallVoidMethodA) (JNIEnv *env, jobject obj,
     1004                                   jmethodID id, jvalue *args)
    9931005{
    9941006  _Jv_JNI_CallAnyVoidMethodA<normal> (env, obj, NULL, id, args);
     
    9991011template<typename T>
    10001012static T
    1001 _Jv_JNI_CallStaticMethodV (JNIEnv *env, jclass klass,
    1002                            jmethodID id, va_list args)
     1013(JNICALL _Jv_JNI_CallStaticMethodV) (JNIEnv *env, jclass klass,
     1014                                     jmethodID id, va_list args)
    10031015{
    10041016  JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
     
    10121024template<typename T>
    10131025static T
    1014 _Jv_JNI_CallStaticMethod (JNIEnv *env, jclass klass, jmethodID id, ...)
     1026(JNICALL _Jv_JNI_CallStaticMethod) (JNIEnv *env, jclass klass,
     1027                                    jmethodID id, ...)
    10151028{
    10161029  va_list args;
     
    10321045template<typename T>
    10331046static T
    1034 _Jv_JNI_CallStaticMethodA (JNIEnv *env, jclass klass, jmethodID id,
    1035                            jvalue *args)
     1047(JNICALL _Jv_JNI_CallStaticMethodA) (JNIEnv *env, jclass klass, jmethodID id,
     1048                                     jvalue *args)
    10361049{
    10371050  JvAssert (((id->accflags) & java::lang::reflect::Modifier::STATIC));
     
    10421055
    10431056static void
    1044 _Jv_JNI_CallStaticVoidMethodV (JNIEnv *env, jclass klass, jmethodID id,
    1045                               va_list args)
     1057(JNICALL _Jv_JNI_CallStaticVoidMethodV) (JNIEnv *env, jclass klass,
     1058                                         jmethodID id, va_list args)
    10461059{
    10471060  _Jv_JNI_CallAnyVoidMethodV<static_type> (env, NULL, klass, id, args);
     
    10491062
    10501063static void
    1051 _Jv_JNI_CallStaticVoidMethod (JNIEnv *env, jclass klass, jmethodID id, ...)
     1064(JNICALL _Jv_JNI_CallStaticVoidMethod) (JNIEnv *env, jclass klass,
     1065                                        jmethodID id, ...)
    10521066{
    10531067  va_list args;
     
    10591073
    10601074static void
    1061 _Jv_JNI_CallStaticVoidMethodA (JNIEnv *env, jclass klass, jmethodID id,
    1062                               jvalue *args)
     1075(JNICALL _Jv_JNI_CallStaticVoidMethodA) (JNIEnv *env, jclass klass,
     1076                                         jmethodID id, jvalue *args)
    10631077{
    10641078  _Jv_JNI_CallAnyVoidMethodA<static_type> (env, NULL, klass, id, args);
     
    10661080
    10671081static jobject
    1068 _Jv_JNI_NewObjectV (JNIEnv *env, jclass klass,
    1069                     jmethodID id, va_list args)
     1082(JNICALL _Jv_JNI_NewObjectV) (JNIEnv *env, jclass klass,
     1083                              jmethodID id, va_list args)
    10701084{
    10711085  JvAssert (klass && ! klass->isArray ());
     
    10811095
    10821096static jobject
    1083 _Jv_JNI_NewObject (JNIEnv *env, jclass klass, jmethodID id, ...)
     1097(JNICALL _Jv_JNI_NewObject) (JNIEnv *env, jclass klass, jmethodID id, ...)
    10841098{
    10851099  JvAssert (klass && ! klass->isArray ());
     
    11021116
    11031117static jobject
    1104 _Jv_JNI_NewObjectA (JNIEnv *env, jclass klass, jmethodID id,
    1105                     jvalue *args)
     1118(JNICALL _Jv_JNI_NewObjectA) (JNIEnv *env, jclass klass, jmethodID id,
     1119                              jvalue *args)
    11061120{
    11071121  JvAssert (klass && ! klass->isArray ());
     
    11211135template<typename T>
    11221136static T
    1123 _Jv_JNI_GetField (JNIEnv *env, jobject obj, jfieldID field)
     1137(JNICALL _Jv_JNI_GetField) (JNIEnv *env, jobject obj, jfieldID field)
    11241138{
    11251139  obj = unwrap (obj);
     
    11311145template<typename T>
    11321146static void
    1133 _Jv_JNI_SetField (JNIEnv *, jobject obj, jfieldID field, T value)
     1147(JNICALL _Jv_JNI_SetField) (JNIEnv *, jobject obj, jfieldID field, T value)
    11341148{
    11351149  obj = unwrap (obj);
     
    11431157template<jboolean is_static>
    11441158static jfieldID
    1145 _Jv_JNI_GetAnyFieldID (JNIEnv *env, jclass clazz,
    1146                        const char *name, const char *sig)
     1159(JNICALL _Jv_JNI_GetAnyFieldID) (JNIEnv *env, jclass clazz,
     1160                                 const char *name, const char *sig)
    11471161{
    11481162  try
     
    12041218template<typename T>
    12051219static T
    1206 _Jv_JNI_GetStaticField (JNIEnv *env, jclass, jfieldID field)
     1220(JNICALL _Jv_JNI_GetStaticField) (JNIEnv *env, jclass, jfieldID field)
    12071221{
    12081222  T *ptr = (T *) field->u.addr;
     
    12121226template<typename T>
    12131227static void
    1214 _Jv_JNI_SetStaticField (JNIEnv *, jclass, jfieldID field, T value)
     1228(JNICALL _Jv_JNI_SetStaticField) (JNIEnv *, jclass, jfieldID field, T value)
    12151229{
    12161230  value = unwrap (value);
     
    12201234
    12211235static jstring
    1222 _Jv_JNI_NewString (JNIEnv *env, const jchar *unichars, jsize len)
     1236(JNICALL _Jv_JNI_NewString) (JNIEnv *env, const jchar *unichars, jsize len)
    12231237{
    12241238  try
     
    12351249
    12361250static jsize
    1237 _Jv_JNI_GetStringLength (JNIEnv *, jstring string)
     1251(JNICALL _Jv_JNI_GetStringLength) (JNIEnv *, jstring string)
    12381252{
    12391253  return unwrap (string)->length();
     
    12411255
    12421256static const jchar *
    1243 _Jv_JNI_GetStringChars (JNIEnv *, jstring string, jboolean *isCopy)
     1257(JNICALL _Jv_JNI_GetStringChars) (JNIEnv *, jstring string, jboolean *isCopy)
    12441258{
    12451259  string = unwrap (string);
     
    12521266
    12531267static void
    1254 _Jv_JNI_ReleaseStringChars (JNIEnv *, jstring string, const jchar *)
     1268(JNICALL _Jv_JNI_ReleaseStringChars) (JNIEnv *, jstring string, const jchar *)
    12551269{
    12561270  unmark_for_gc (unwrap (string), global_ref_table);
     
    12581272
    12591273static jstring
    1260 _Jv_JNI_NewStringUTF (JNIEnv *env, const char *bytes)
     1274(JNICALL _Jv_JNI_NewStringUTF) (JNIEnv *env, const char *bytes)
    12611275{
    12621276  try
     
    12731287
    12741288static jsize
    1275 _Jv_JNI_GetStringUTFLength (JNIEnv *, jstring string)
     1289(JNICALL _Jv_JNI_GetStringUTFLength) (JNIEnv *, jstring string)
    12761290{
    12771291  return JvGetStringUTFLength (unwrap (string));
     
    12791293
    12801294static const char *
    1281 _Jv_JNI_GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy)
     1295(JNICALL _Jv_JNI_GetStringUTFChars) (JNIEnv *env, jstring string,
     1296                                     jboolean *isCopy)
    12821297{
    12831298  string = unwrap (string);
     
    13021317
    13031318static void
    1304 _Jv_JNI_ReleaseStringUTFChars (JNIEnv *, jstring, const char *utf)
     1319(JNICALL _Jv_JNI_ReleaseStringUTFChars) (JNIEnv *, jstring, const char *utf)
    13051320{
    13061321  _Jv_Free ((void *) utf);
     
    13081323
    13091324static void
    1310 _Jv_JNI_GetStringRegion (JNIEnv *env, jstring string, jsize start, jsize len,
    1311                         jchar *buf)
     1325(JNICALL _Jv_JNI_GetStringRegion) (JNIEnv *env, jstring string, jsize start,
     1326                                   jsize len, jchar *buf)
    13121327{
    13131328  string = unwrap (string);
     
    13301345
    13311346static void
    1332 _Jv_JNI_GetStringUTFRegion (JNIEnv *env, jstring str, jsize start,
    1333                             jsize len, char *buf)
     1347(JNICALL _Jv_JNI_GetStringUTFRegion) (JNIEnv *env, jstring str, jsize start,
     1348                                      jsize len, char *buf)
    13341349{
    13351350  str = unwrap (str);
     
    13521367
    13531368static const jchar *
    1354 _Jv_JNI_GetStringCritical (JNIEnv *, jstring str, jboolean *isCopy)
     1369(JNICALL _Jv_JNI_GetStringCritical) (JNIEnv *, jstring str, jboolean *isCopy)
    13551370{
    13561371  jchar *result = _Jv_GetStringChars (unwrap (str));
     
    13611376
    13621377static void
    1363 _Jv_JNI_ReleaseStringCritical (JNIEnv *, jstring, const jchar *)
     1378(JNICALL _Jv_JNI_ReleaseStringCritical) (JNIEnv *, jstring, const jchar *)
    13641379{
    13651380  // Nothing.
     
    13671382
    13681383static jsize
    1369 _Jv_JNI_GetArrayLength (JNIEnv *, jarray array)
     1384(JNICALL _Jv_JNI_GetArrayLength) (JNIEnv *, jarray array)
    13701385{
    13711386  return unwrap (array)->length;
     
    13731388
    13741389static jarray
    1375 _Jv_JNI_NewObjectArray (JNIEnv *env, jsize length, jclass elementClass,
    1376                         jobject init)
     1390(JNICALL _Jv_JNI_NewObjectArray) (JNIEnv *env, jsize length,
     1391                                  jclass elementClass, jobject init)
    13771392{
    13781393  try
     
    13811396      init = unwrap (init);
    13821397
     1398      _Jv_CheckCast (elementClass, init);
    13831399      jarray result = JvNewObjectArray (length, elementClass, init);
    13841400      return (jarray) wrap_value (env, result);
     
    13921408
    13931409static jobject
    1394 _Jv_JNI_GetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index)
    1395 {
     1410(JNICALL _Jv_JNI_GetObjectArrayElement) (JNIEnv *env, jobjectArray array,
     1411                                         jsize index)
     1412{
     1413  if ((unsigned) index >= (unsigned) array->length)
     1414    _Jv_ThrowBadArrayIndex (index);
    13961415  jobject *elts = elements (unwrap (array));
    13971416  return wrap_value (env, elts[index]);
     
    13991418
    14001419static void
    1401 _Jv_JNI_SetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index,
    1402                               jobject value)
     1420(JNICALL _Jv_JNI_SetObjectArrayElement) (JNIEnv *env, jobjectArray array,
     1421                                         jsize index, jobject value)
    14031422{
    14041423  try
     
    14081427
    14091428      _Jv_CheckArrayStore (array, value);
     1429      if ((unsigned) index >= (unsigned) array->length)
     1430        _Jv_ThrowBadArrayIndex (index);
    14101431      jobject *elts = elements (array);
    14111432      elts[index] = value;
     
    14191440template<typename T, jclass K>
    14201441static JArray<T> *
    1421 _Jv_JNI_NewPrimitiveArray (JNIEnv *env, jsize length)
     1442(JNICALL _Jv_JNI_NewPrimitiveArray) (JNIEnv *env, jsize length)
    14221443{
    14231444  try
     
    14341455template<typename T>
    14351456static T *
    1436 _Jv_JNI_GetPrimitiveArrayElements (JNIEnv *, JArray<T> *array,
    1437                                    jboolean *isCopy)
     1457(JNICALL _Jv_JNI_GetPrimitiveArrayElements) (JNIEnv *, JArray<T> *array,
     1458                                             jboolean *isCopy)
    14381459{
    14391460  array = unwrap (array);
     
    14501471template<typename T>
    14511472static void
    1452 _Jv_JNI_ReleasePrimitiveArrayElements (JNIEnv *, JArray<T> *array,
    1453                                        T *, jint /* mode */)
     1473(JNICALL _Jv_JNI_ReleasePrimitiveArrayElements) (JNIEnv *, JArray<T> *array,
     1474                                                 T *, jint /* mode */)
    14541475{
    14551476  array = unwrap (array);
     
    14621483template<typename T>
    14631484static void
    1464 _Jv_JNI_GetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
    1465                                  jsize start, jsize len,
     1485(JNICALL _Jv_JNI_GetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array,
     1486                                           jsize start, jsize len,
    14661487                                 T *buf)
    14671488{
     
    14921513template<typename T>
    14931514static void
    1494 _Jv_JNI_SetPrimitiveArrayRegion (JNIEnv *env, JArray<T> *array,
    1495                                  jsize start, jsize len, T *buf)
     1515(JNICALL _Jv_JNI_SetPrimitiveArrayRegion) (JNIEnv *env, JArray<T> *array,
     1516                                           jsize start, jsize len, T *buf)
    14961517{
    14971518  array = unwrap (array);
     
    15191540
    15201541static void *
    1521 _Jv_JNI_GetPrimitiveArrayCritical (JNIEnv *, jarray array,
    1522                                    jboolean *isCopy)
     1542(JNICALL _Jv_JNI_GetPrimitiveArrayCritical) (JNIEnv *, jarray array,
     1543                                             jboolean *isCopy)
    15231544{
    15241545  array = unwrap (array);
     
    15331554
    15341555static void
    1535 _Jv_JNI_ReleasePrimitiveArrayCritical (JNIEnv *, jarray, void *, jint)
     1556(JNICALL _Jv_JNI_ReleasePrimitiveArrayCritical) (JNIEnv *, jarray, void *, jint)
    15361557{
    15371558  // Nothing.
     
    15391560
    15401561static jint
    1541 _Jv_JNI_MonitorEnter (JNIEnv *env, jobject obj)
     1562(JNICALL _Jv_JNI_MonitorEnter) (JNIEnv *env, jobject obj)
    15421563{
    15431564  try
     
    15541575
    15551576static jint
    1556 _Jv_JNI_MonitorExit (JNIEnv *env, jobject obj)
     1577(JNICALL _Jv_JNI_MonitorExit) (JNIEnv *env, jobject obj)
    15571578{
    15581579  try
     
    15701591// JDK 1.2
    15711592jobject
    1572 _Jv_JNI_ToReflectedField (JNIEnv *env, jclass cls, jfieldID fieldID,
    1573                           jboolean)
     1593(JNICALL _Jv_JNI_ToReflectedField) (JNIEnv *env, jclass cls, jfieldID fieldID,
     1594                                    jboolean)
    15741595{
    15751596  try
     
    15911612// JDK 1.2
    15921613static jfieldID
    1593 _Jv_JNI_FromReflectedField (JNIEnv *, jobject f)
     1614(JNICALL _Jv_JNI_FromReflectedField) (JNIEnv *, jobject f)
    15941615{
    15951616  using namespace java::lang::reflect;
     
    16011622
    16021623jobject
    1603 _Jv_JNI_ToReflectedMethod (JNIEnv *env, jclass klass, jmethodID id,
    1604                            jboolean)
     1624(JNICALL _Jv_JNI_ToReflectedMethod) (JNIEnv *env, jclass klass, jmethodID id,
     1625                                     jboolean)
    16051626{
    16061627  using namespace java::lang::reflect;
     
    16361657
    16371658static jmethodID
    1638 _Jv_JNI_FromReflectedMethod (JNIEnv *, jobject method)
     1659(JNICALL _Jv_JNI_FromReflectedMethod) (JNIEnv *, jobject method)
    16391660{
    16401661  using namespace java::lang::reflect;
     
    16481669// JDK 1.2.
    16491670jweak
    1650 _Jv_JNI_NewWeakGlobalRef (JNIEnv *env, jobject obj)
     1671(JNICALL _Jv_JNI_NewWeakGlobalRef) (JNIEnv *env, jobject obj)
    16511672{
    16521673  using namespace gnu::gcj::runtime;
     
    16691690
    16701691void
    1671 _Jv_JNI_DeleteWeakGlobalRef (JNIEnv *, jweak obj)
     1692(JNICALL _Jv_JNI_DeleteWeakGlobalRef) (JNIEnv *, jweak obj)
    16721693{
    16731694  using namespace gnu::gcj::runtime;
     
    16751696  unmark_for_gc (ref, global_ref_table);
    16761697  ref->clear ();
     1698}
     1699
     1700
     1701
     1702
     1703// Direct byte buffers.
     1704
     1705static jobject
     1706(JNICALL _Jv_JNI_NewDirectByteBuffer) (JNIEnv *, void *, jlong)
     1707{
     1708  // For now we don't support this.
     1709  return NULL;
     1710}
     1711
     1712static void *
     1713(JNICALL _Jv_JNI_GetDirectBufferAddress) (JNIEnv *, jobject)
     1714{
     1715  // For now we don't support this.
     1716  return NULL;
     1717}
     1718
     1719static jlong
     1720(JNICALL _Jv_JNI_GetDirectBufferCapacity) (JNIEnv *, jobject)
     1721{
     1722  // For now we don't support this.
     1723  return -1;
    16771724}
    16781725
     
    17951842
    17961843static jint
    1797 _Jv_JNI_RegisterNatives (JNIEnv *env, jclass klass,
    1798                          const JNINativeMethod *methods,
    1799                          jint nMethods)
     1844(JNICALL _Jv_JNI_RegisterNatives) (JNIEnv *env, jclass klass,
     1845                                   const JNINativeMethod *methods,
     1846                                   jint nMethods)
    18001847{
    18011848  // Synchronize while we do the work.  This must match
     
    18491896
    18501897static jint
    1851 _Jv_JNI_UnregisterNatives (JNIEnv *, jclass)
     1898(JNICALL _Jv_JNI_UnregisterNatives) (JNIEnv *, jclass)
    18521899{
    18531900  // FIXME -- we could implement this.
     
    19622009      env = (JNIEnv *) _Jv_MallocUnchecked (sizeof (JNIEnv));
    19632010      env->p = &_Jv_JNIFunctions;
    1964       env->ex = NULL;
    19652011      env->klass = klass;
    19662012      env->locals = NULL;
     2013      // We set env->ex below.
    19672014
    19682015      _Jv_SetCurrentJNIEnv (env);
     
    19772024  frame->size = FRAME_SIZE;
    19782025  frame->next = env->locals;
    1979   env->locals = frame;
    19802026
    19812027  for (int i = 0; i < frame->size; ++i)
    19822028    frame->vec[i] = NULL;
     2029
     2030  env->locals = frame;
     2031  env->ex = NULL;
    19832032
    19842033  return env;
     
    19902039extern "C" void *
    19912040_Jv_LookupJNIMethod (jclass klass, _Jv_Utf8Const *name,
    1992                      _Jv_Utf8Const *signature)
    1993 {
    1994   char buf[10 + 6 * (name->length + signature->length)];
     2041                     _Jv_Utf8Const *signature, int args_size)
     2042{
     2043  char buf[10 + 6 * (name->length + signature->length) + 12];
    19952044  int long_start;
    19962045  void *function;
     
    20122061
    20132062  // If there was no override, then look in the symbol table.
    2014   mangled_name (klass, name, signature, buf, &long_start);
    2015   char c = buf[long_start];
    2016   buf[long_start] = '\0';
    2017   function = _Jv_FindSymbolInExecutable (buf);
     2063  buf[0] = '_';
     2064  mangled_name (klass, name, signature, buf + 1, &long_start);
     2065  char c = buf[long_start + 1];
     2066  buf[long_start + 1] = '\0';
     2067
     2068  function = _Jv_FindSymbolInExecutable (buf + 1);
     2069#ifdef WIN32
     2070  // On Win32, we use the "stdcall" calling convention (see JNICALL
     2071  // in jni.h).
     2072  //
     2073  // For a function named 'fooBar' that takes 'nn' bytes as arguments,
     2074  // by default, MinGW GCC exports it as 'fooBar@nn', MSVC exports it
     2075  // as '_fooBar@nn' and Borland C exports it as 'fooBar'. We try to
     2076  // take care of all these variations here.
     2077
     2078  char asz_buf[12];    /* '@' + '2147483647' (32-bit INT_MAX) + '\0' */
     2079  char long_nm_sv[11]; /* Ditto, except for the '\0'. */
     2080
    20182081  if (function == NULL)
    20192082    {
    2020       buf[long_start] = c;
     2083      // We have tried searching for the 'fooBar' form (BCC) - now
     2084      // try the others.
     2085
     2086      // First, save the part of the long name that will be damaged
     2087      // by appending '@nn'.
     2088      memcpy (long_nm_sv, (buf + long_start + 1 + 1), sizeof (long_nm_sv));
     2089
     2090      sprintf (asz_buf, "@%d", args_size);
     2091      strcat (buf, asz_buf);
     2092
     2093      // Search for the '_fooBar@nn' form (MSVC).
    20212094      function = _Jv_FindSymbolInExecutable (buf);
     2095
    20222096      if (function == NULL)
    2023         {
    2024           jstring str = JvNewStringUTF (name->data);
    2025           throw new java::lang::UnsatisfiedLinkError (str);
     2097        {
     2098          // Search for the 'fooBar@nn' form (MinGW GCC).
     2099          function = _Jv_FindSymbolInExecutable (buf + 1);
     2100        }
     2101    }
     2102#else /* WIN32 */
     2103  args_size;  /* Dummy statement to avoid unused parameter warning */
     2104#endif /* ! WIN32 */
     2105
     2106  if (function == NULL)
     2107    {
     2108      buf[long_start + 1] = c;
     2109#ifdef WIN32
     2110      // Restore the part of the long name that was damaged by
     2111      // appending the '@nn'.
     2112      memcpy ((buf + long_start + 1 + 1), long_nm_sv, sizeof (long_nm_sv));
     2113#endif /* WIN32 */
     2114      function = _Jv_FindSymbolInExecutable (buf + 1);
     2115      if (function == NULL)
     2116        {
     2117#ifdef WIN32
     2118          strcat (buf, asz_buf);
     2119          function = _Jv_FindSymbolInExecutable (buf);
     2120          if (function == NULL)
     2121            function = _Jv_FindSymbolInExecutable (buf + 1);
     2122
     2123          if (function == NULL)
     2124#endif /* WIN32 */
     2125            {
     2126              jstring str = JvNewStringUTF (name->data);
     2127              throw new java::lang::UnsatisfiedLinkError (str);
     2128            }
    20262129        }
    20272130    }
     
    20542157    JvSynchronize sync (global_ref_table);
    20552158    if (_this->function == NULL)
    2056       _this->function = _Jv_LookupJNIMethod (_this->defining_class,
    2057                                              _this->self->name,
    2058                                              _this->self->signature);
     2159      {
     2160        int args_size = sizeof (JNIEnv *) + _this->args_raw_size;
     2161
     2162        if (_this->self->accflags & java::lang::reflect::Modifier::STATIC)
     2163          args_size += sizeof (_this->defining_class);
     2164
     2165        _this->function = _Jv_LookupJNIMethod (_this->defining_class,
     2166                                               _this->self->name,
     2167                                               _this->self->signature,
     2168                                               args_size);
     2169      }
    20592170  }
    20602171
     
    21062217// An internal helper function.
    21072218static jint
    2108 _Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv, void *args)
     2219_Jv_JNI_AttachCurrentThread (JavaVM *, jstring name, void **penv,
     2220                             void *args, jboolean is_daemon)
    21092221{
    21102222  JavaVMAttachArgs *attach = reinterpret_cast<JavaVMAttachArgs *> (args);
     
    21142226    {
    21152227      // FIXME: do we really want to support 1.1?
    2116       if (attach->version != JNI_VERSION_1_2
     2228      if (attach->version != JNI_VERSION_1_4
     2229          && attach->version != JNI_VERSION_1_2
    21172230          && attach->version != JNI_VERSION_1_1)
    21182231        return JNI_EVERSION;
     
    21572270      try
    21582271        {
    2159           _Jv_AttachCurrentThread (name, group);
     2272          if (is_daemon)
     2273            _Jv_AttachCurrentThreadAsDaemon (name, group);
     2274          else
     2275            _Jv_AttachCurrentThread (name, group);
    21602276        }
    21612277      catch (jthrowable t)
     
    21712287// This is the one actually used by JNI.
    21722288static jint
    2173 _Jv_JNI_AttachCurrentThread (JavaVM *vm, void **penv, void *args)
    2174 {
    2175   return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args);
     2289(JNICALL _Jv_JNI_AttachCurrentThread) (JavaVM *vm, void **penv, void *args)
     2290{
     2291  return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, false);
    21762292}
    21772293
    21782294static jint
    2179 _Jv_JNI_DestroyJavaVM (JavaVM *vm)
     2295(JNICALL _Jv_JNI_AttachCurrentThreadAsDaemon) (JavaVM *vm, void **penv,
     2296                                               void *args)
     2297{
     2298  return _Jv_JNI_AttachCurrentThread (vm, NULL, penv, args, true);
     2299}
     2300
     2301static jint
     2302(JNICALL _Jv_JNI_DestroyJavaVM) (JavaVM *vm)
    21802303{
    21812304  JvAssert (the_vm && vm == the_vm);
     
    21952318        }
    21962319
    2197       jint r = _Jv_JNI_AttachCurrentThread (vm,
    2198                                             main_name,
     2320      jint r = _Jv_JNI_AttachCurrentThread (vm, main_name,
    21992321                                            reinterpret_cast<void **> (&env),
    2200                                             NULL);
     2322                                            NULL, false);
    22012323      if (r < 0)
    22022324        return r;
     
    22122334
    22132335jint
    2214 _Jv_JNI_DetachCurrentThread (JavaVM *)
     2336(JNICALL _Jv_JNI_DetachCurrentThread) (JavaVM *)
    22152337{
    22162338  jint code = _Jv_DetachCurrentThread ();
     
    22192341
    22202342static jint
    2221 _Jv_JNI_GetEnv (JavaVM *, void **penv, jint version)
     2343(JNICALL _Jv_JNI_GetEnv) (JavaVM *, void **penv, jint version)
    22222344{
    22232345  if (_Jv_ThreadCurrent () == NULL)
     
    22372359
    22382360  // FIXME: do we really want to support 1.1?
    2239   if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_1)
     2361  if (version != JNI_VERSION_1_4 && version != JNI_VERSION_1_2
     2362      && version != JNI_VERSION_1_1)
    22402363    {
    22412364      *penv = NULL;
     
    22472370}
    22482371
    2249 jint
     2372JNIEXPORT jint JNICALL
    22502373JNI_GetDefaultJavaVMInitArgs (void *args)
    22512374{
    22522375  jint version = * (jint *) args;
    2253   // Here we only support 1.2.
    2254   if (version != JNI_VERSION_1_2)
     2376  // Here we only support 1.2 and 1.4.
     2377  if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
    22552378    return JNI_EVERSION;
    22562379
    22572380  JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
    2258   ia->version = JNI_VERSION_1_2;
     2381  ia->version = JNI_VERSION_1_4;
    22592382  ia->nOptions = 0;
    22602383  ia->options = NULL;
     
    22642387}
    22652388
    2266 jint
     2389JNIEXPORT jint JNICALL
    22672390JNI_CreateJavaVM (JavaVM **vm, void **penv, void *args)
    22682391{
     
    22812404    {
    22822405      jint version = * (jint *) args;
    2283       // We only support 1.2.
    2284       if (version != JNI_VERSION_1_2)
     2406      // We only support 1.2 and 1.4.
     2407      if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
    22852408        return JNI_EVERSION;
    22862409      JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
     
    23292452}
    23302453
    2331 jint
     2454JNIEXPORT jint JNICALL
    23322455JNI_GetCreatedJavaVMs (JavaVM **vm_buffer, jsize buf_len, jsize *n_vms)
    23332456{
     
    23702493
    23712494static jint
    2372 _Jv_JNI_GetJavaVM (JNIEnv *, JavaVM **vm)
     2495(JNICALL _Jv_JNI_GetJavaVM) (JNIEnv *, JavaVM **vm)
    23732496{
    23742497  *vm = _Jv_GetJavaVM ();
     
    25622685  _Jv_JNI_NewStringUTF,                // NewStringUTF
    25632686  _Jv_JNI_GetStringUTFLength,          // GetStringUTFLength
    2564   _Jv_JNI_GetStringUTFChars,           // GetStringUTFLength
     2687  _Jv_JNI_GetStringUTFChars,           // GetStringUTFChars
    25652688  _Jv_JNI_ReleaseStringUTFChars,       // ReleaseStringUTFChars
    25662689  _Jv_JNI_GetArrayLength,              // GetArrayLength
     
    26252748  _Jv_JNI_DeleteWeakGlobalRef,              // DeleteWeakGlobalRef
    26262749
    2627   _Jv_JNI_ExceptionCheck
     2750  _Jv_JNI_ExceptionCheck,                   // ExceptionCheck
     2751
     2752  _Jv_JNI_NewDirectByteBuffer,              // NewDirectByteBuffer
     2753  _Jv_JNI_GetDirectBufferAddress,           // GetDirectBufferAddress
     2754  _Jv_JNI_GetDirectBufferCapacity           // GetDirectBufferCapacity
    26282755};
    26292756
     
    26372764  _Jv_JNI_AttachCurrentThread,
    26382765  _Jv_JNI_DetachCurrentThread,
    2639   _Jv_JNI_GetEnv
     2766  _Jv_JNI_GetEnv,
     2767  _Jv_JNI_AttachCurrentThreadAsDaemon
    26402768};
Note: See TracChangeset for help on using the changeset viewer.