Skip to content

Commit 51db0ca

Browse files
author
Biancaa Ramesh
committed
added the necessary tests for progbufsize
Added additional debug logs to verify correct retrieval and printing of progbufsize in various code paths within riscv-013.c. This helps in debugging hardware configurations that expose custom program buffer sizes. Signed-off-by: Biancaa Ramesh <[email protected]>
1 parent eb01c63 commit 51db0ca

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/target/riscv/riscv-013.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,11 @@ static int fpr_read_progbuf(struct target *target, uint64_t *value,
13851385
{
13861386
assert(target->state == TARGET_HALTED);
13871387
assert(number >= GDB_REGNO_FPR0 && number <= GDB_REGNO_FPR31);
1388+
if (!has_sufficient_progbuf(target, 2)) {
1389+
LOG_DEBUG("Skipping FPR read: insufficient progbuf (size=%d)",
1390+
get_info(target)->progbufsize);
1391+
return ERROR_FAIL;
1392+
}
13881393

13891394
const unsigned int freg = number - GDB_REGNO_FPR0;
13901395

@@ -1417,6 +1422,11 @@ static int csr_read_progbuf(struct target *target, uint64_t *value,
14171422
{
14181423
assert(target->state == TARGET_HALTED);
14191424
assert(number >= GDB_REGNO_CSR0 && number <= GDB_REGNO_CSR4095);
1425+
if (!has_sufficient_progbuf(target, 2)) {
1426+
LOG_DEBUG("Skipping CSR read: insufficient progbuf (size=%d)",
1427+
get_info(target)->progbufsize);
1428+
return ERROR_FAIL;
1429+
}
14201430

14211431
if (riscv013_reg_save(target, GDB_REGNO_S0) != ERROR_OK)
14221432
return ERROR_FAIL;
@@ -1484,6 +1494,11 @@ static int fpr_write_progbuf(struct target *target, enum gdb_regno number,
14841494
{
14851495
assert(target->state == TARGET_HALTED);
14861496
assert(number >= GDB_REGNO_FPR0 && number <= GDB_REGNO_FPR31);
1497+
if (!has_sufficient_progbuf(target, 2)) {
1498+
LOG_DEBUG("Skipping FPR Write: insufficient progbuf (size=%d)",
1499+
get_info(target)->progbufsize);
1500+
return ERROR_FAIL;
1501+
}
14871502
const unsigned int freg = number - GDB_REGNO_FPR0;
14881503

14891504
if (riscv013_reg_save(target, GDB_REGNO_S0) != ERROR_OK)
@@ -1559,6 +1574,11 @@ static int csr_write_progbuf(struct target *target, enum gdb_regno number,
15591574
{
15601575
assert(target->state == TARGET_HALTED);
15611576
assert(number >= GDB_REGNO_CSR0 && number <= GDB_REGNO_CSR4095);
1577+
if (!has_sufficient_progbuf(target, 2)) {
1578+
LOG_DEBUG("Skipping CSR write: insufficient progbuf (size=%d)",
1579+
get_info(target)->progbufsize);
1580+
return ERROR_FAIL;
1581+
}
15621582

15631583
if (riscv013_reg_save(target, GDB_REGNO_S0) != ERROR_OK)
15641584
return ERROR_FAIL;
@@ -5554,4 +5574,4 @@ static int riscv013_clear_abstract_error(struct target *target)
55545574
if (dm_write(target, DM_ABSTRACTCS, DM_ABSTRACTCS_CMDERR) != ERROR_OK)
55555575
result = ERROR_FAIL;
55565576
return result;
5557-
}
5577+
}

0 commit comments

Comments
 (0)