From a8a6d776f5650aeaabeb381f1d8c24c35e689969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20Andr=C3=A9=20Vadla=20Ravn=C3=A5s?= Date: Fri, 13 Dec 2024 10:00:45 +0100 Subject: [PATCH] jvmti: Fix Java.choose() on 32-bit systems A jlong is 64 bits wide. --- lib/class-factory.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/class-factory.js b/lib/class-factory.js index 2f16a769..0478e9bb 100644 --- a/lib/class-factory.js +++ b/lib/class-factory.js @@ -566,15 +566,16 @@ class ClassFactory { const JVMTI_HEAP_OBJECT_EITHER = 3; const h = classWrapper.$borrowClassHandle(env); + const tag = int64(h.value.toString()); try { const heapObjectCallback = new NativeCallback((classTag, size, tagPtr, userData) => { - tagPtr.writePointer(h.value); + tagPtr.writeS64(tag); return JVMTI_ITERATION_CONTINUE; - }, 'int', ['long', 'long', 'pointer', 'pointer']); + }, 'int', ['int64', 'int64', 'pointer', 'pointer']); jvmti.iterateOverInstancesOfClass(h.value, JVMTI_HEAP_OBJECT_EITHER, heapObjectCallback, h.value); - const tagPtr = Memory.alloc(pointerSize); - tagPtr.writePointer(h.value); + const tagPtr = Memory.alloc(8); + tagPtr.writeS64(tag); const countPtr = Memory.alloc(jsizeSize); const objectsPtr = Memory.alloc(pointerSize); jvmti.getObjectsWithTags(1, tagPtr, countPtr, objectsPtr, NULL);