def __init__(self, addr): super(Label, self).__init__('label', [operand.AddressConstant(addr)]) self.addr = address.fromVirtual(0) self.gotos = set() self.breaks = set() self.continues = set() self.needed = regutil.ALL_REGS - set(['FZ', 'FC', 'FN', 'FH']) self.depset = depend.unknown()
def __init__(self, addr, result=None): c = connection.cursor() c.execute('select type, depset, has_switch, suspicious_switch, has_suspicious_instr, has_nop, has_ambig_calls, length from procs where addr=?', (str(addr),)) assert c.rowcount <= 1 result = c.fetchone() self.addr = addr if result: self.type = result[0] self.depset = depend.decode(result[1]) self.has_switch = result[2] self.suspicious_switch = result[3] self.has_suspicious_instr = result[4] self.has_nop = result[5] self.has_ambig_calls = result[6] self.length = result[7] else: self.type = "proc" self.depset = depend.unknown() self.has_switch = False self.suspicious_switch = False self.has_suspicious_instr = False self.has_nop = False self.has_ambig_calls = True self.length = 0 self.calls = set() self.tail_calls = set() c.execute('select destination, type from calls where source=?', (str(addr),)) for x in c.fetchall(): if x[1] == 'tail': self.tail_calls.add(address.fromConventional(x[0])) else: self.calls.add(address.fromConventional(x[0])) self.memreads = set() self.memwrites = set() c.execute('select addr, type from memref where proc=?', (str(addr),)) for x in c.fetchall(): if x[1] == 'read': self.memreads.add(address.fromConventional(x[0])) else: self.memwrites.add(address.fromConventional(x[0])) self.callers = set() c.execute('select source from calls where destination=?', (str(addr),)) for x in c.fetchall(): self.callers.add(address.fromConventional(x[0])) c.close()
def getDependencySet(self): return depend.unknown()