Exemple #1
0
    def __init__(self,
                 rtyper,
                 stats,
                 opts,
                 translate_support_code=False,
                 gcdescr=None):
        assert type(opts) is not bool
        self.opts = opts

        from rpython.jit.backend.llsupport.gc import get_ll_description
        AbstractCPU.__init__(self)
        self.rtyper = rtyper
        self.stats = stats
        self.translate_support_code = translate_support_code
        if translate_support_code and rtyper is not None:
            translator = rtyper.annotator.translator
            self.remove_gctypeptr = translator.config.translation.gcremovetypeptr
        else:
            translator = None
        self.gc_ll_descr = get_ll_description(gcdescr, translator, rtyper)
        # support_guard_gc_type indicates if a gc type of an object can be read.
        # In some states (boehm or x86 untranslated) the type is not known just yet,
        # because there are cases where it is not guarded. The precise place where it's not
        # is while inlining short preamble.
        self.supports_guard_gc_type = self.gc_ll_descr.supports_guard_gc_type
        if translator and translator.config.translation.gcremovetypeptr:
            self.vtable_offset = None
        else:
            self.vtable_offset, _ = symbolic.get_field_token(
                rclass.OBJECT, 'typeptr', translate_support_code)
        self.subclassrange_min_offset, _ = symbolic.get_field_token(
            rclass.OBJECT_VTABLE, 'subclassrange_min', translate_support_code)
        if translate_support_code:
            self._setup_exception_handling_translated()
        else:
            self._setup_exception_handling_untranslated()
        self.asmmemmgr = asmmemmgr.AsmMemoryManager()
        if self.HAS_CODEMAP:
            self.codemap = codemap.CodemapStorage()
        self._setup_frame_realloc(translate_support_code)
        ad = self.gc_ll_descr.getframedescrs(self).arraydescr
        self.signedarraydescr = ad
        # the same as normal JITFRAME, however with an array of pointers
        self.refarraydescr = ArrayDescr(ad.basesize, ad.itemsize, ad.lendescr,
                                        FLAG_POINTER)
        if WORD == 4:
            self.floatarraydescr = ArrayDescr(ad.basesize, ad.itemsize * 2,
                                              ad.lendescr, FLAG_FLOAT)
        else:
            self.floatarraydescr = ArrayDescr(ad.basesize, ad.itemsize,
                                              ad.lendescr, FLAG_FLOAT)
        self.setup()
        self._debug_tls_errno_container = lltype.malloc(rffi.CArray(
            lltype.Signed),
                                                        7,
                                                        flavor='raw',
                                                        zero=True,
                                                        track_allocation=False)
        self._debug_tls_errno_container[1] = 1234  # dummy thread ident
Exemple #2
0
    def __init__(self, rtyper, stats, opts, translate_support_code=False,
                 gcdescr=None):
        assert type(opts) is not bool
        self.opts = opts

        from rpython.jit.backend.llsupport.gc import get_ll_description
        AbstractCPU.__init__(self)
        self.rtyper = rtyper
        self.stats = stats
        self.translate_support_code = translate_support_code
        if translate_support_code and rtyper is not None:
            translator = rtyper.annotator.translator
            self.remove_gctypeptr = translator.config.translation.gcremovetypeptr
        else:
            translator = None
        self.gc_ll_descr = get_ll_description(gcdescr, translator, rtyper)
        # support_guard_gc_type indicates if a gc type of an object can be read.
        # In some states (boehm or x86 untranslated) the type is not known just yet,
        # because there are cases where it is not guarded. The precise place where it's not
        # is while inlining short preamble.
        self.supports_guard_gc_type = self.gc_ll_descr.supports_guard_gc_type
        if translator and translator.config.translation.gcremovetypeptr:
            self.vtable_offset = None
        else:
            self.vtable_offset, _ = symbolic.get_field_token(rclass.OBJECT,
                                                             'typeptr',
                                                        translate_support_code)
        self.subclassrange_min_offset, _ = symbolic.get_field_token(
            rclass.OBJECT_VTABLE, 'subclassrange_min', translate_support_code)
        if translate_support_code:
            self._setup_exception_handling_translated()
        else:
            self._setup_exception_handling_untranslated()
        self.asmmemmgr = asmmemmgr.AsmMemoryManager()
        if self.HAS_CODEMAP:
            self.codemap = codemap.CodemapStorage()
        self._setup_frame_realloc(translate_support_code)
        ad = self.gc_ll_descr.getframedescrs(self).arraydescr
        self.signedarraydescr = ad
        # the same as normal JITFRAME, however with an array of pointers
        self.refarraydescr = ArrayDescr(ad.basesize, ad.itemsize, ad.lendescr,
                                        FLAG_POINTER)
        if WORD == 4:
            self.floatarraydescr = ArrayDescr(ad.basesize, ad.itemsize * 2,
                                              ad.lendescr, FLAG_FLOAT)
        else:
            self.floatarraydescr = ArrayDescr(ad.basesize, ad.itemsize,
                                              ad.lendescr, FLAG_FLOAT)
        self.setup()
        self._debug_errno_container = lltype.malloc(
            rffi.CArray(lltype.Signed), 7, flavor='raw', zero=True,
            track_allocation=False)
Exemple #3
0
        class FakeMetaInterpSd:
            cpu = AbstractCPU()
            cpu.ts = None
            jitdrivers_sd = [FakeJitDriver()]

            def get_name_from_address(self, addr):
                return 'Name'
Exemple #4
0
 def free_loop_and_bridges(self, compiled_loop_token):
     AbstractCPU.free_loop_and_bridges(self, compiled_loop_token)
     # turn off all gcreftracers
     tracers = compiled_loop_token.asmmemmgr_gcreftracers
     if tracers is not None:
         compiled_loop_token.asmmemmgr_gcreftracers = None
         for tracer in tracers:
             self.gc_ll_descr.clear_gcref_tracer(tracer)
     # then free all blocks of code and raw data
     blocks = compiled_loop_token.asmmemmgr_blocks
     if blocks is not None:
         compiled_loop_token.asmmemmgr_blocks = None
         for rawstart, rawstop in blocks:
             self.gc_ll_descr.freeing_block(rawstart, rawstop)
             self.asmmemmgr.free(rawstart, rawstop)
             if self.HAS_CODEMAP:
                 self.codemap.free_asm_block(rawstart, rawstop)
Exemple #5
0
 def free_loop_and_bridges(self, compiled_loop_token):
     AbstractCPU.free_loop_and_bridges(self, compiled_loop_token)
     # turn off all gcreftracers
     tracers = compiled_loop_token.asmmemmgr_gcreftracers
     if tracers is not None:
         compiled_loop_token.asmmemmgr_gcreftracers = None
         for tracer in tracers:
             self.gc_ll_descr.clear_gcref_tracer(tracer)
     # then free all blocks of code and raw data
     blocks = compiled_loop_token.asmmemmgr_blocks
     if blocks is not None:
         compiled_loop_token.asmmemmgr_blocks = None
         for rawstart, rawstop in blocks:
             self.gc_ll_descr.freeing_block(rawstart, rawstop)
             self.asmmemmgr.free(rawstart, rawstop)
             if self.HAS_CODEMAP:
                 self.codemap.free_asm_block(rawstart, rawstop)