@@ -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