예제 #1
0
파일: macros.py 프로젝트: yanok/camkes-tool
 def size_of(obj):
     '''
     This function logic is clagged from the CapDL translator's `sizeOf`.
     '''
     if isinstance(obj, Frame):
         return obj.size
     elif isinstance(obj, Untyped):
         return 2**obj.size_bits
     elif isinstance(obj, CNode):
         if obj.size_bits == 'auto':
             return calculate_cnode_size(obj)
         return 16 * 2**obj.size_bits
     elif isinstance(obj, Endpoint):
         return 16
     elif isinstance(obj, Notification):
         return 16
     elif isinstance(obj, ASIDPool):
         return 4 * 2**10
     elif isinstance(obj, IOPageTable):
         return 4 * 2**10
     elif isinstance(obj, IODevice):
         return 1
     elif isinstance(obj, TCB):
         if arch in ('aarch32', 'arm_hyp'):
             return 512
         elif arch == 'ia32':
             return 2**10
         raise NotImplementedError('size_of TCB for arch: %s' % arch)
     elif isinstance(obj, PageDirectory):
         if arch in ('aarch32', 'arm_hyp'):
             return 16 * 2**10
         elif arch == 'ia32':
             return 4 * 2**10
         raise NotImplementedError('size_of PageDirectory for arch: %s' %
                                   arch)
     elif isinstance(obj, PageTable):
         if arch == 'aarch32':
             return 2**10
         elif arch == 'arm_hyp':
             return 2 * 2**10
         elif arch == 'ia32':
             return 4 * 2**10
         raise NotImplementedError('size_of PageTable for arch: %s' % arch)
     raise NotImplementedError('size_of for type: %s' % type(obj))
예제 #2
0
 def size_of(obj):
     '''
     This function logic is clagged from the CapDL translator's `sizeOf`.
     '''
     if isinstance(obj, Frame):
         return obj.size
     elif isinstance(obj, Untyped):
         return 2 ** obj.size_bits
     elif isinstance(obj, CNode):
         if obj.size_bits == 'auto':
             return calculate_cnode_size(obj)
         return 16 * 2 ** obj.size_bits
     elif isinstance(obj, Endpoint):
         return 16
     elif isinstance(obj, Notification):
         return 16
     elif isinstance(obj, ASIDPool):
         return 4 * 2 ** 10
     elif isinstance(obj, IOPageTable):
         return 4 * 2 ** 10
     elif isinstance(obj, IODevice):
         return 1
     elif isinstance(obj, TCB):
         if arch in ('aarch32', 'arm_hyp'):
             return 512
         elif arch == 'ia32':
             return 2 ** 10
         raise NotImplementedError('size_of TCB for arch: %s' % arch)
     elif isinstance(obj, PageDirectory):
         if arch in ('aarch32', 'arm_hyp'):
             return 16 * 2 ** 10
         elif arch == 'ia32':
             return 4 * 2 ** 10
         raise NotImplementedError('size_of PageDirectory for arch: %s' % arch)
     elif isinstance(obj, PageTable):
         if arch == 'aarch32':
             return 2 ** 10
         elif arch == 'arm_hyp':
             return 2 * 2 ** 10
         elif arch == 'ia32':
             return 4 * 2 ** 10
         raise NotImplementedError('size_of PageTable for arch: %s' % arch)
     raise NotImplementedError('size_of for type: %s' % type(obj))