42
42
// #undef LOGV
43
43
// #define LOGV(...) fprintf(stderr, __VA_ARGS__)
44
44
45
+ #if !defined(__LP64__)
46
+ #define M_OBJECT_TYPE " I"
47
+ #define GET_M_OBJECT (obj, mobject ) env->GetIntField (obj, mobject)
48
+ #define SET_M_OBJECT (obj, mobject, val ) env->SetIntField (obj, mobject, (int )val)
49
+ #else
50
+ #define M_OBJECT_TYPE " J"
51
+ #define GET_M_OBJECT (obj, mobject ) env->GetLongField (obj, mobject);
52
+ #define SET_M_OBJECT (obj, mobject, val ) env->SetLongField (obj, mobject, (long long int )val)
53
+ #endif
54
+
45
55
using namespace android ;
46
56
47
57
// ----------------------------------------------------------------------------
@@ -465,7 +475,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
465
475
if (object != NULL ) {
466
476
LOGV (" objectForBinder %p: created new %p!\n " , val.get (), object);
467
477
// The proxy holds a reference to the native object.
468
- env-> SetIntField (object, gBinderProxyOffsets .mObject , ( int ) val.get ());
478
+ SET_M_OBJECT (object, gBinderProxyOffsets .mObject , val.get ());
469
479
val->incStrong (object);
470
480
471
481
// The native object needs to hold a weak reference back to the
@@ -489,13 +499,13 @@ sp<IBinder> ibinderForJavaObject(JNIEnv* env, jobject obj)
489
499
490
500
if (env->IsInstanceOf (obj, gBinderOffsets .mClass )) {
491
501
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
492
- env-> GetIntField (obj, gBinderOffsets .mObject );
502
+ GET_M_OBJECT (obj, gBinderOffsets .mObject );
493
503
return jbh != NULL ? jbh->get (env) : NULL ;
494
504
}
495
505
496
506
if (env->IsInstanceOf (obj, gBinderProxyOffsets .mClass )) {
497
507
return (IBinder*)
498
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
508
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
499
509
}
500
510
501
511
LOGW (" ibinderForJavaObject: %p is not a Binder object" , obj);
@@ -630,15 +640,15 @@ static void android_os_Binder_init(JNIEnv* env, jobject clazz)
630
640
}
631
641
LOGV (" Java Binder %p: acquiring first ref on holder %p" , clazz, jbh);
632
642
jbh->incStrong (clazz);
633
- env-> SetIntField (clazz, gBinderOffsets .mObject , ( int ) jbh);
643
+ SET_M_OBJECT (clazz, gBinderOffsets .mObject , jbh);
634
644
}
635
645
636
646
static void android_os_Binder_destroy (JNIEnv* env, jobject clazz)
637
647
{
638
648
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
639
- env-> GetIntField (clazz, gBinderOffsets .mObject );
649
+ GET_M_OBJECT (clazz, gBinderOffsets .mObject );
640
650
if (jbh != NULL ) {
641
- env-> SetIntField (clazz, gBinderOffsets .mObject , 0 );
651
+ SET_M_OBJECT (clazz, gBinderOffsets .mObject , 0 );
642
652
LOGV (" Java Binder %p: removing ref on holder %p" , clazz, jbh);
643
653
jbh->decStrong (clazz);
644
654
} else {
@@ -682,7 +692,7 @@ static int int_register_android_os_Binder(JNIEnv* env)
682
692
assert (gBinderOffsets .mExecTransact );
683
693
684
694
gBinderOffsets .mObject
685
- = env->GetFieldID (clazz, " mObject" , " I " );
695
+ = env->GetFieldID (clazz, " mObject" , M_OBJECT_TYPE );
686
696
assert (gBinderOffsets .mObject );
687
697
688
698
return AndroidRuntime::registerNativeMethods (
@@ -777,7 +787,7 @@ static int int_register_android_os_BinderInternal(JNIEnv* env)
777
787
static jboolean android_os_BinderProxy_pingBinder (JNIEnv* env, jobject obj)
778
788
{
779
789
IBinder* target = (IBinder*)
780
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
790
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
781
791
if (target == NULL ) {
782
792
return JNI_FALSE;
783
793
}
@@ -787,7 +797,7 @@ static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
787
797
788
798
static jstring android_os_BinderProxy_getInterfaceDescriptor (JNIEnv* env, jobject obj)
789
799
{
790
- IBinder* target = (IBinder*) env-> GetIntField (obj, gBinderProxyOffsets .mObject );
800
+ IBinder* target = (IBinder*) GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
791
801
if (target != NULL ) {
792
802
const String16& desc = target->getInterfaceDescriptor ();
793
803
return env->NewString (desc.string (), desc.size ());
@@ -800,7 +810,7 @@ static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobjec
800
810
static jboolean android_os_BinderProxy_isBinderAlive (JNIEnv* env, jobject obj)
801
811
{
802
812
IBinder* target = (IBinder*)
803
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
813
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
804
814
if (target == NULL ) {
805
815
return JNI_FALSE;
806
816
}
@@ -921,7 +931,7 @@ static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
921
931
}
922
932
923
933
IBinder* target = (IBinder*)
924
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
934
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
925
935
if (target == NULL ) {
926
936
jniThrowException (env, " java/lang/IllegalStateException" , " Binder has been finalized!" );
927
937
return JNI_FALSE;
@@ -964,7 +974,7 @@ static void android_os_BinderProxy_linkToDeath(JNIEnv* env, jobject obj,
964
974
}
965
975
966
976
IBinder* target = (IBinder*)
967
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
977
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
968
978
if (target == NULL ) {
969
979
LOGW (" Binder has been finalized when calling linkToDeath() with recip=%p)\n " , recipient);
970
980
assert (false );
@@ -994,7 +1004,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
994
1004
}
995
1005
996
1006
IBinder* target = (IBinder*)
997
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
1007
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
998
1008
if (target == NULL ) {
999
1009
LOGW (" Binder has been finalized when calling linkToDeath() with recip=%p)\n " , recipient);
1000
1010
return JNI_FALSE;
@@ -1026,9 +1036,9 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
1026
1036
static void android_os_BinderProxy_destroy (JNIEnv* env, jobject obj)
1027
1037
{
1028
1038
IBinder* b = (IBinder*)
1029
- env-> GetIntField (obj, gBinderProxyOffsets .mObject );
1039
+ GET_M_OBJECT (obj, gBinderProxyOffsets .mObject );
1030
1040
LOGV (" Destroying BinderProxy %p: binder=%p\n " , obj, b);
1031
- env-> SetIntField (obj, gBinderProxyOffsets .mObject , 0 );
1041
+ SET_M_OBJECT (obj, gBinderProxyOffsets .mObject , 0 );
1032
1042
b->decStrong (obj);
1033
1043
IPCThreadState::self ()->flushCommands ();
1034
1044
}
@@ -1075,7 +1085,7 @@ static int int_register_android_os_BinderProxy(JNIEnv* env)
1075
1085
assert (gBinderProxyOffsets .mSendDeathNotice );
1076
1086
1077
1087
gBinderProxyOffsets .mObject
1078
- = env->GetFieldID (clazz, " mObject" , " I " );
1088
+ = env->GetFieldID (clazz, " mObject" , M_OBJECT_TYPE );
1079
1089
assert (gBinderProxyOffsets .mObject );
1080
1090
gBinderProxyOffsets .mSelf
1081
1091
= env->GetFieldID (clazz, " mSelf" , " Ljava/lang/ref/WeakReference;" );
@@ -1453,19 +1463,19 @@ static void android_os_Parcel_init(JNIEnv* env, jobject clazz, jint parcelInt)
1453
1463
}
1454
1464
// LOGI("Initializing obj %p from C++ Parcel %p, own=%d\n", clazz, parcel, own);
1455
1465
env->SetIntField (clazz, gParcelOffsets .mOwnObject , own);
1456
- env-> SetIntField (clazz, gParcelOffsets .mObject , ( int ) parcel);
1466
+ SET_M_OBJECT (clazz, gParcelOffsets .mObject , parcel);
1457
1467
}
1458
1468
1459
1469
static void android_os_Parcel_destroy (JNIEnv* env, jobject clazz)
1460
1470
{
1461
1471
int32_t own = env->GetIntField (clazz, gParcelOffsets .mOwnObject );
1462
1472
if (own) {
1463
1473
Parcel* parcel = parcelForJavaObject (env, clazz);
1464
- env-> SetIntField (clazz, gParcelOffsets .mObject , 0 );
1474
+ SET_M_OBJECT (clazz, gParcelOffsets .mObject , 0 );
1465
1475
// LOGI("Destroying obj %p: deleting C++ Parcel %p\n", clazz, parcel);
1466
1476
delete parcel;
1467
1477
} else {
1468
- env-> SetIntField (clazz, gParcelOffsets .mObject , 0 );
1478
+ SET_M_OBJECT (clazz, gParcelOffsets .mObject , 0 );
1469
1479
// LOGI("Destroying obj %p: leaving C++ Parcel %p\n", clazz);
1470
1480
}
1471
1481
}
@@ -1666,7 +1676,7 @@ static int int_register_android_os_Parcel(JNIEnv* env)
1666
1676
LOG_FATAL_IF (clazz == NULL , " Unable to find class android.os.Parcel" );
1667
1677
1668
1678
gParcelOffsets .mObject
1669
- = env->GetFieldID (clazz, " mObject" , " I " );
1679
+ = env->GetFieldID (clazz, " mObject" , M_OBJECT_TYPE );
1670
1680
gParcelOffsets .mOwnObject
1671
1681
= env->GetFieldID (clazz, " mOwnObject" , " I" );
1672
1682
0 commit comments