WIP; doesn't work.
Change-Id: Ia407e82ccbd2044ad61e0845d285dd5765154476
This commit is contained in:
@@ -100,77 +100,6 @@ int riscv_program_exec(struct riscv_program *p, struct target *t)
|
||||
return ERROR_OK;
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_data(struct riscv_program *p, size_t bytes)
|
||||
{
|
||||
riscv_addr_t addr =
|
||||
riscv_debug_buffer_addr(p->target)
|
||||
+ riscv_debug_buffer_size(p->target) * sizeof(p->debug_buffer[0])
|
||||
- p->data_count * sizeof(p->debug_buffer[0])
|
||||
- bytes;
|
||||
while (addr % bytes != 0) addr--;
|
||||
|
||||
riscv_addr_t ptop =
|
||||
riscv_debug_buffer_addr(p->target)
|
||||
+ p->instruction_count * sizeof(p->debug_buffer[0]);
|
||||
|
||||
if (addr <= ptop) {
|
||||
LOG_ERROR("unable to allocate %d bytes", (int)bytes);
|
||||
return RISCV_PROGRAM_ALLOC_FAIL;
|
||||
}
|
||||
|
||||
p->data_count =
|
||||
+ riscv_debug_buffer_size(p->target)
|
||||
- (addr - riscv_debug_buffer_addr(p->target)) / sizeof(p->debug_buffer[0]);
|
||||
return addr;
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_x(struct riscv_program *p)
|
||||
{
|
||||
return riscv_program_alloc_data(p, p->target_xlen / 8);
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_d(struct riscv_program *p)
|
||||
{
|
||||
return riscv_program_alloc_data(p, 8);
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_w(struct riscv_program *p)
|
||||
{
|
||||
return riscv_program_alloc_data(p, 4);
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_h(struct riscv_program *p)
|
||||
{
|
||||
return riscv_program_alloc_data(p, 2);
|
||||
}
|
||||
|
||||
riscv_addr_t riscv_program_alloc_b(struct riscv_program *p)
|
||||
{
|
||||
return riscv_program_alloc_data(p, 1);
|
||||
}
|
||||
|
||||
riscv_insn_t riscv_program_read_ram(struct riscv_program *p, riscv_addr_t addr)
|
||||
{
|
||||
if (addr < riscv_debug_buffer_addr(p->target))
|
||||
return -1;
|
||||
if ((size_t)addr > riscv_debug_buffer_addr(p->target) + (riscv_debug_buffer_size(p->target) * sizeof(p->debug_buffer[0])))
|
||||
return -1;
|
||||
|
||||
int off = (addr - riscv_debug_buffer_addr(p->target)) / sizeof(p->debug_buffer[0]);
|
||||
return p->debug_buffer[off];
|
||||
}
|
||||
|
||||
void riscv_program_write_ram(struct riscv_program *p, riscv_addr_t addr, uint64_t d)
|
||||
{
|
||||
if (addr < riscv_debug_buffer_addr(p->target))
|
||||
return;
|
||||
if ((size_t)addr > riscv_debug_buffer_addr(p->target) + (riscv_debug_buffer_size(p->target) * sizeof(p->debug_buffer[0])))
|
||||
return;
|
||||
|
||||
int off = (addr - riscv_debug_buffer_addr(p->target)) / sizeof(p->debug_buffer[0]);
|
||||
p->debug_buffer[off] = d;
|
||||
}
|
||||
|
||||
int riscv_program_swr(struct riscv_program *p, enum gdb_regno d, enum gdb_regno b, int offset)
|
||||
{
|
||||
p->writes_memory = 1;
|
||||
|
||||
Reference in New Issue
Block a user