Revert "target/riscv: Reject size 2 soft breakpoints when C extension not supported"

This commit is contained in:
Tim Newsome 2023-10-20 15:37:28 -07:00 committed by GitHub
parent aad90d8989
commit 912de786a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 6 additions and 8 deletions

View File

@ -1237,17 +1237,15 @@ static int riscv_add_breakpoint(struct target *target, struct breakpoint *breakp
LOG_TARGET_DEBUG(target, "@0x%" TARGET_PRIxADDR, breakpoint->address);
assert(breakpoint);
if (breakpoint->type == BKPT_SOFT) {
const bool c_extension_supported = riscv_supports_extension(target, 'C');
if (!(breakpoint->length == 4 || (breakpoint->length == 2 && c_extension_supported))) {
LOG_TARGET_ERROR(target, "Invalid breakpoint length %d, supported lengths: %s", breakpoint->length,
c_extension_supported ? "2, 4" : "4");
/** @todo check RVC for size/alignment */
if (!(breakpoint->length == 4 || breakpoint->length == 2)) {
LOG_TARGET_ERROR(target, "Invalid breakpoint length %d", breakpoint->length);
return ERROR_FAIL;
}
const unsigned int required_align = c_extension_supported ? 2 : 4;
if ((breakpoint->address % required_align) != 0) {
LOG_TARGET_ERROR(target, "Invalid breakpoint alignment for address 0x%" TARGET_PRIxADDR
", required alignment: %u", breakpoint->address, required_align);
if (0 != (breakpoint->address % 2)) {
LOG_TARGET_ERROR(target, "Invalid breakpoint alignment for address 0x%" TARGET_PRIxADDR,
breakpoint->address);
return ERROR_FAIL;
}