def load_binary(self): p = self.bin if p!=None: # create text and data segments according to elf header: for s in p.Phdr: ms = p.loadsegment(s,PAGESIZE) if ms!=None: vaddr,data = ms.popitem() self.state.mmap.write(vaddr,data) # create the stack zone: self.state.mmap.newzone(cpu.sp) self.state[cpu.pc] = cpu.cst(self.bin.entrypoints[0],16) for r in cpu.R : self.state[r] = cpu.cst(0,8)
def load_binary(self, bprm): p = Task(bprm, cpu) p.OS = self # map the CODE area: p.code.mmap.write(bprm.entrypoints[0], self.dataio.read()) # define registers: for r in cpu.registers: p.state[r] = cpu.cst(0, r.size()) p.state[cpu.pc] = cpu.cst(bprm.entrypoints[0] / 2, cpu.pc.size()) RAMEND = 0x0900 p.state[cpu.sp] = cpu.cst(RAMEND, 16) # map the DATA area: p.state.mmap.write(0x100, b'\0' * (RAMEND - 0x100)) # map the BIOS functions as external symbols: self.load_bios(p.code.mmap) self.tasks.append(p) return p
def use_avr(self): from amoco.arch.avr import cpu self.cpu = cpu self.state[cpu.pc] = cpu.cst(0,32)
def initenv(self): from amoco.cas.mapper import mapper m = mapper() m[cpu.pc] = cpu.cst(self.bin.entrypoints[0],16) for r in cpu.R : m[r] = cpu.cst(0,8) return m