a.write(ihex_line(i * self.line_length, 0, line_data))
a.flush()
+ self.gdb.command("shell cat %s" % a.name)
self.gdb.command("restore %s 0x%x" % (a.name, self.hart.ram))
- for offset in range(0, self.length, 19*4) + [self.length-4]:
+ increment = 19 * 4
+ for offset in range(0, self.length, increment) + [self.length-4]:
value = self.gdb.p("*((int*)0x%x)" % (self.hart.ram + offset))
written = ord(data[offset]) | \
(ord(data[offset+1]) << 8) | \
b = tempfile.NamedTemporaryFile(suffix=".ihex")
self.gdb.command("dump ihex memory %s 0x%x 0x%x" % (b.name,
self.hart.ram, self.hart.ram + self.length))
+ self.gdb.command("shell cat %s" % b.name)
for line in b:
record_type, address, line_data = ihex_parse(line)
if record_type == 0:
def test(self):
# Run to main
- # Hart 0 is the first to be resumed, so we have to set the breakpoint
- # there. gdb won't actually set the breakpoint until we tell it to
- # resume.
- self.gdb.select_hart(self.target.harts[0])
- self.gdb.b("main")
- self.gdb.c_all()
for hart in self.target.harts:
self.gdb.select_hart(hart)
+ self.gdb.b("main")
+ self.gdb.c()
assertIn("main", self.gdb.where())
- self.gdb.select_hart(self.target.harts[0])
- self.gdb.command("delete breakpoints")
+ self.gdb.command("delete breakpoints")
# Run through the entire loop.
- self.gdb.b("main_end")
- self.gdb.c_all()
+ for hart in self.target.harts:
+ self.gdb.select_hart(hart)
+ self.gdb.b("main_end")
+ self.gdb.c()
+ assertIn("main_end", self.gdb.where())
hart_ids = []
for hart in self.target.harts:
self.gdb.select_hart(hart)
- assertIn("main_end", self.gdb.where())
# Check register values.
hart_id = self.gdb.p("$x1")
assertNotIn(hart_id, hart_ids)
self.gdb.select_hart(hart)
self.gdb.p("$x1=0x%x" % (hart.index * 0x800))
self.gdb.p("$pc=main_post_csrr")
- self.gdb.c_all()
+ self.gdb.c()
for hart in self.target.harts:
self.gdb.select_hart(hart)
assertIn("main", self.gdb.where())