Thanks! It is relevant:
Looks like one line is missed when making the change:
- watchpoint->set = wp_num + 1;
+ watchpoint->number = wp_num;
+ watchpoint->is_set = true;
Or maybe better to use:
static inline void watchpoint_set(struct watchpoint *watchpoint, unsigned int
number)
{
watchpoint->is_set = true;
watchpoint->number = number;
}
If is_set remains false, watchpoint is never unset because of below check:
static int mips_m4k_remove_watchpoint(struct target *target,
struct watchpoint *watchpoint)
{
/* get pointers to arch-specific information */
struct mips32_common *mips32 = target_to_mips32(target);
if (target->state != TARGET_HALTED) {
LOG_WARNING("target not halted");
return ERROR_TARGET_NOT_HALTED;
}
if (watchpoint->is_set)
mips_m4k_unset_watchpoint(target, watchpoint);
mips32->num_data_bpoints_avail++;
return ERROR_OK;
}
Best/Nima.
From: Tommy Murphy <[email protected]>
Sent: Thursday, December 1, 2022 8:56 AM
To: Nima Palizban - C68739 <[email protected]>;
[email protected]
Subject: Re: mips_m4k watchpoint issue.
You don't often get email from
[email protected]<mailto:[email protected]>. Learn why this is
important<https://aka.ms/LearnAboutSenderIdentification>
EXTERNAL EMAIL: Do not click links or open attachments unless you know the
content is safe
This PR seems to have changed how watchpoints are set and may be relevant here?
https://github.com/openocd-org/openocd/commit/fb43f1ff4e2f0638110ffcc4e63bee8b5361db64#diff-18b6c875f0bfee773f2a5e6e0a100e4d9c641fec9c870d4da22ca0aa957259c8L914
- watchpoint->set = wp_num + 1;
+ watchpoint->number = wp_num;