Ejemplo n.º 1
0
 def trace_mem(self, mode, width, addr, val):
     # a possible trap?
     if mode == "R" and addr < self.lib_base and width == 1:
         # is it trapped?
         if val == self.op_reset:
             delta = self.lib_base - addr
             off = delta / 6
             addon = "-%d [%d]  " % (delta, off)
             addon += self._get_fd_str(delta)
             self.trace_mem_int(mode, width, addr, val, text="TRAP", level=logging.INFO, addon=addon)
         # return to caller after trap
         elif val == self.op_rts:
             self.trace_mem_int(mode, width, addr, val, text="T_RTS")
         # native lib jump
         elif val == self.op_jmp:
             delta = self.lib_base - addr
             addon = "-%d  " % delta
             addon += self._get_fd_str(delta)
             self.trace_mem_int(mode, width, addr, val, text="JUMP", level=logging.INFO, addon=addon)
         # something strange
         else:
             self.trace_mem_int(mode, width, addr, val, text="LIB?!", level=logging.WARN)
     else:
         # no use regular access
         LabelStruct.trace_mem(self, mode, width, addr, val)
     return True
Ejemplo n.º 2
0
 def __init__(self, name, addr, size, lib_base, struct, lib):
     LabelStruct.__init__(self,
                          name,
                          addr,
                          struct,
                          size=size,
                          offset=lib_base - addr)
     self.lib_base = lib_base
     self.lib = lib
Ejemplo n.º 3
0
 def alloc_struct(self, name, struct):
   size = struct.get_size()
   addr = self.alloc_mem(size)
   label = LabelStruct(name, addr, struct)
   self.label_mgr.add_label(label)
   access = AccessStruct(self.mem, struct, addr)
   mem = Memory(addr,size,label,access)
   log_mem_alloc.info("alloc struct: %s",mem)
   self.mem_objs[addr] = mem
   return mem
Ejemplo n.º 4
0
 def trace_mem(self, mode, width, addr, val):
     # a possible trap?
     if mode == 'R' and addr < self.lib_base and width == 1:
         # is it trapped?
         if val & 0xa000 == 0xa000:
             delta = self.lib_base - addr
             off = delta / 6
             addon = "-%d [%d]  " % (delta, off)
             addon += self._get_fd_str(delta)
             self.trace_mem_int(mode,
                                width,
                                addr,
                                val,
                                text="TRAP",
                                level=logging.INFO,
                                addon=addon)
         # native lib jump
         elif val == self.op_jmp:
             delta = self.lib_base - addr
             addon = "-%d  " % delta
             addon += self._get_fd_str(delta)
             self.trace_mem_int(mode,
                                width,
                                addr,
                                val,
                                text="JUMP",
                                level=logging.INFO,
                                addon=addon)
         # something inside jump table
         else:
             self.trace_mem_int(mode,
                                width,
                                addr,
                                val,
                                text="LIB?!",
                                level=logging.WARN)
     else:
         # no use regular access
         LabelStruct.trace_mem(self, mode, width, addr, val)
     return True
Ejemplo n.º 5
0
 def trace_mem(self, mode, width, addr, val):
   # a possible trap?
   if mode == 'R' and addr < self.lib_base and width == 1:
     # is it trapped?
     if val == self.op_reset:
       delta = self.lib_base - addr
       off = delta / 6
       addon = "-%d [%d]" % (delta,off)
       self.trace_mem_int(mode, width, addr, val, text="TRAP", level=logging.INFO, addon=addon)
     # return to caller after trap
     elif val == self.op_rts:
       self.trace_mem_int(mode, width, addr, val, text="T_RTS")
     # native lib jump
     elif val == self.op_jmp:
       delta = self.lib_base - addr
       addon = "-%d" % delta
       self.trace_mem_int(mode, width, addr, val, text="JUMP", level=logging.INFO, addon=addon)
     # something strange
     else:
       self.trace_mem_int(mode, width, addr, val, text="LIB?!", level=logging.WARN)      
   else:
     # no use regular access
     LabelStruct.trace_mem(self, mode, width, addr, val)
   return True
Ejemplo n.º 6
0
 def __str__(self):
     return "%s base=%06x" % (LabelStruct.__str__(self), self.lib_base)
Ejemplo n.º 7
0
 def __init__(self, name, addr, size, lib_base, struct):
     LabelStruct.__init__(self, name, addr, struct, size=size, offset=lib_base - addr)
     self.lib_base = lib_base
Ejemplo n.º 8
0
 def __str__(self):
     return "%s base=%06x" % (LabelStruct.__str__(self), self.lib_base)