Skip to content

Commit 308b120

Browse files
lukasstadlerfangerer
authored andcommitted
fix for allocations in sulong mode
1 parent 9ff8d7b commit 308b120

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

graalpython/com.oracle.graal.python.cext/src/capi.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,10 @@ PyAPI_FUNC(void) truffle_memcpy_bytes(void *dest, size_t dest_offset, void *src,
715715
memcpy(dest + dest_offset, src + src_offset, len);
716716
}
717717

718+
PyAPI_FUNC(void*) truffle_calloc(size_t size) {
719+
return calloc(1, size);
720+
}
721+
718722
PyAPI_FUNC(void) register_native_slots(PyTypeObject* managed_class, PyGetSetDef* getsets, PyMemberDef* members) {
719723
if (getsets || members) {
720724
GraalPyTruffle_Set_Native_Slots(managed_class, getsets, members);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/NativeCAPISymbol.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
172172
FUN_FREE("free", ArgDescriptor.Void, Pointer),
173173
FUN_MEMMOVE("memmove", Pointer, Pointer, Pointer, SIZE_T),
174174
FUN_MEMSET("memset", Pointer, Pointer, Int, SIZE_T),
175-
FUN_CALLOC("calloc", Pointer, SIZE_T, SIZE_T),
175+
FUN_CALLOC("truffle_calloc", Pointer, SIZE_T),
176176
FUN_STRING_AT("string_at"),
177177
FUN_CAST("cast"),
178178
FUN_WSTRING_AT("wstring_at");

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PythonReplacingNativeWrapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343

4444
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PCallCapiFunction;
4545
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
46+
import com.oracle.graal.python.builtins.objects.cext.common.NativePointer;
4647
import com.oracle.graal.python.util.PythonUtils;
4748
import com.oracle.truffle.api.CompilerDirectives;
4849
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -81,7 +82,7 @@ protected final void setReplacement(Object pointer, InteropLibrary lib) {
8182
} else {
8283
replacement = pointer;
8384
if (lib.isPointer(pointer)) {
84-
assert pointer.getClass().getSimpleName().contains("NFIPointer") || pointer.getClass().getSimpleName().contains("LLVMPointer");
85+
assert pointer.getClass() == NativePointer.class || pointer.getClass().getSimpleName().contains("NFIPointer") || pointer.getClass().getSimpleName().contains("LLVMPointer");
8586
try {
8687
CApiTransitions.firstToNative(this, lib.asPointer(pointer));
8788
} catch (UnsupportedMessageException e) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/structs/CStructAccess.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PointerContainer;
5454
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNewRefNode;
5555
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNode;
56+
import com.oracle.graal.python.builtins.objects.cext.common.NativePointer;
5657
import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccessFactory.FreeNodeGen;
5758
import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccessFactory.ReadCharPtrNodeGen;
5859
import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccessFactory.ReadObjectNodeGen;
@@ -111,18 +112,18 @@ protected boolean nativeAccess() {
111112
}
112113

113114
@Specialization(guards = {"!allocatePyMem", "nativeAccess()"})
114-
static long allocLong(long size, @SuppressWarnings("unused") boolean allocatePyMem) {
115+
static Object allocLong(long size, @SuppressWarnings("unused") boolean allocatePyMem) {
115116
assert size >= 0;
116117
long memory = UNSAFE.allocateMemory(size);
117118
UNSAFE.setMemory(memory, size, (byte) 0);
118-
return memory;
119+
return new NativePointer(memory);
119120
}
120121

121122
@Specialization(guards = {"!allocatePyMem", "!nativeAccess()"})
122123
static Object allocLong(long size, @SuppressWarnings("unused") boolean allocatePyMem,
123124
@Cached PCallCapiFunction call) {
124125
assert size >= 0;
125-
return call.call(NativeCAPISymbol.FUN_CALLOC, size, 1);
126+
return call.call(NativeCAPISymbol.FUN_CALLOC, size);
126127
}
127128

128129
@Specialization(guards = "allocatePyMem")

0 commit comments

Comments
 (0)