def __init__(self): GcCache.__init__(self, False, None) self._generated_functions = [] self.gcrootmap = MockShadowStackRootMap() self.write_barrier_descr = WriteBarrierDescr(self) self.nursery_ptrs = lltype.malloc(rffi.CArray(lltype.Signed), 2, flavor='raw') self._initialize_for_tests() self.frames = [] def malloc_slowpath(size): self._collect() res = self.nursery_ptrs[0] self.nursery_ptrs[0] += size return res self.malloc_slowpath_fnptr = llhelper_args(malloc_slowpath, [lltype.Signed], lltype.Signed) def malloc_array(itemsize, tid, num_elem): import pdb pdb.set_trace() self.malloc_slowpath_array_fnptr = llhelper_args(malloc_array, [lltype.Signed] * 3, lltype.Signed) self.all_nurseries = []
def __init__(self, callback): GcLLDescription.__init__(self, None) # create a nursery NTP = rffi.CArray(lltype.Char) self.nursery = lltype.malloc(NTP, 64, flavor='raw') for i in range(64): self.nursery[i] = NOT_INITIALIZED self.nursery_words = rffi.cast(rffi.CArrayPtr(lltype.Signed), self.nursery) self.addrs = lltype.malloc(rffi.CArray(lltype.Signed), 2, flavor='raw') self.addrs[0] = rffi.cast(lltype.Signed, self.nursery) self.addrs[1] = self.addrs[0] + 64 self.calls = [] def malloc_slowpath(size, frame): if callback is not None: callback(frame) if self.gcrootmap is not None: # hook self.gcrootmap.hook_malloc_slowpath() self.calls.append(size) # reset the nursery nadr = rffi.cast(lltype.Signed, self.nursery) self.addrs[0] = nadr + size return nadr self.generate_function('malloc_nursery', malloc_slowpath, [lltype.Signed, jitframe.JITFRAMEPTR], lltype.Signed) def malloc_array(itemsize, tid, num_elem): self.calls.append((itemsize, tid, num_elem)) return 13 self.malloc_slowpath_array_fnptr = llhelper_args( malloc_array, [lltype.Signed] * 3, lltype.Signed) def malloc_str(size): self.calls.append(('str', size)) return 13 self.generate_function('malloc_str', malloc_str, [lltype.Signed], lltype.Signed)
def __init__(self, callback): GcLLDescription.__init__(self, None) # create a nursery NTP = rffi.CArray(lltype.Char) self.nursery = lltype.malloc(NTP, 64, flavor='raw') for i in range(64): self.nursery[i] = NOT_INITIALIZED self.nursery_words = rffi.cast(rffi.CArrayPtr(lltype.Signed), self.nursery) self.addrs = lltype.malloc(rffi.CArray(lltype.Signed), 2, flavor='raw') self.addrs[0] = rffi.cast(lltype.Signed, self.nursery) self.addrs[1] = self.addrs[0] + 64 self.calls = [] def malloc_slowpath(size, frame): if callback is not None: callback(frame) if self.gcrootmap is not None: # hook self.gcrootmap.hook_malloc_slowpath() self.calls.append(size) # reset the nursery nadr = rffi.cast(lltype.Signed, self.nursery) self.addrs[0] = nadr + size return nadr self.generate_function('malloc_nursery', malloc_slowpath, [lltype.Signed, jitframe.JITFRAMEPTR], lltype.Signed) def malloc_array(itemsize, tid, num_elem): self.calls.append((itemsize, tid, num_elem)) return 13 self.malloc_slowpath_array_fnptr = llhelper_args(malloc_array, [lltype.Signed] * 3, lltype.Signed) def malloc_str(size): self.calls.append(('str', size)) return 13 self.generate_function('malloc_str', malloc_str, [lltype.Signed], lltype.Signed)
def __init__(self, gc_ll_descr): def write_barrier(frame): gc_ll_descr.write_barrier_on_frame_called = frame self.write_barrier_fn = llhelper_args(write_barrier, [lltype.Signed], lltype.Void)