Skip to content

Commit

Permalink
android: Fix art::Thread::DecodeJObject for Android >= 15 (#327)
Browse files Browse the repository at this point in the history
  • Loading branch information
esauvisky authored Jul 22, 2024
1 parent bf6bc50 commit 3586145
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions lib/android.js
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,11 @@ function _getApi () {
},
// Android >= 6
_ZN3art9JavaVMExt12DecodeGlobalEPNS_6ThreadEPv: ['art::JavaVMExt::DecodeGlobal', 'pointer', ['pointer', 'pointer', 'pointer']],
// Android < 6: makeDecodeGlobalFallbackForAndroid5() fallback uses:

// makeDecodeGlobalFallback() uses:
// Android >= 15
_ZNK3art6Thread19DecodeGlobalJObjectEP8_jobject: ['art::Thread::DecodeJObject', 'pointer', ['pointer', 'pointer']],
// Android < 6
_ZNK3art6Thread13DecodeJObjectEP8_jobject: ['art::Thread::DecodeJObject', 'pointer', ['pointer', 'pointer']],

// Android >= 6
Expand Down Expand Up @@ -314,6 +318,7 @@ function _getApi () {
'_ZN3art9JavaVMExt12AddGlobalRefEPNS_6ThreadEPNS_6mirror6ObjectE',
'_ZN3art9JavaVMExt12DecodeGlobalEPv',
'_ZN3art9JavaVMExt12DecodeGlobalEPNS_6ThreadEPv',
'_ZNK3art6Thread19DecodeGlobalJObjectEP8_jobject',
'_ZNK3art6Thread13DecodeJObjectEP8_jobject',
'_ZN3art10ThreadList10SuspendAllEPKcb',
'_ZN3art10ThreadList10SuspendAllEv',
Expand Down Expand Up @@ -489,7 +494,7 @@ function _getApi () {
temporaryApi['art::JavaVMExt::AddGlobalRef'] = makeAddGlobalRefFallbackForAndroid5(temporaryApi);
}
if (temporaryApi['art::JavaVMExt::DecodeGlobal'] === undefined) {
temporaryApi['art::JavaVMExt::DecodeGlobal'] = makeDecodeGlobalFallbackForAndroid5(temporaryApi);
temporaryApi['art::JavaVMExt::DecodeGlobal'] = makeDecodeGlobalFallback(temporaryApi);
}
if (temporaryApi['art::ArtMethod::PrettyMethod'] === undefined) {
temporaryApi['art::ArtMethod::PrettyMethod'] = temporaryApi['art::ArtMethod::PrettyMethodNullSafe'];
Expand Down Expand Up @@ -3848,8 +3853,15 @@ function makeAddGlobalRefFallbackForAndroid5 (api) {
};
}

function makeDecodeGlobalFallbackForAndroid5 (api) {
function makeDecodeGlobalFallback (api) {
/*
* Fallback for art::JavaVMExt::DecodeGlobal, which is
* unavailable in Android versions <= 5 and >= 15.
*/
const decode = api['art::Thread::DecodeJObject'];
if (decode === undefined) {
throw new Error('art::Thread::DecodeJObject is not available; please file a bug');
}

return function (vm, thread, ref) {
return decode(thread, ref);
Expand Down

0 comments on commit 3586145

Please sign in to comment.