target/breakpoints.c: add breakpoint intersection detection

Modify the breakpoint insertion logic to include intersection detection
between breakpoints.

Change-Id: I294bea83b18335c2f304ddd99361872eadaaa684
Signed-off-by: Kulyatskaya Alexandra <a.kulyatskaya@syntacore.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/9146
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Kulyatskaya Alexandra
2025-06-24 15:37:48 +03:00
committed by Antonio Borneo
parent eef37df3aa
commit 181547327f
4 changed files with 34 additions and 0 deletions

View File

@@ -40,3 +40,26 @@ int util_init(struct command_context *cmd_ctx)
{
return register_commands(cmd_ctx, NULL, util_command_handlers);
}
bool is_memory_regions_overlap(target_addr_t start1,
unsigned int size1,
target_addr_t start2,
unsigned int size2)
{
/* Two memory regions: [S1,E1] and [S2,E2] where:
* E1 = S1 + size1 - 1, E2 = S2 + size2 - 1
*
* After normalization:
* Region 1: [0, size1 - 1]
* Region 2: [start2 - start1, (start2 - start1) + size2 - 1]
*
* Intersection cases:
* 1. Normalized region 2 wraps around 0 (unsigned overflow)
* 2. Start of normalized region 2 is within region 1
*/
start2 -= start1;
target_addr_t end1 = size1 - 1;
target_addr_t end2 = start2 + size2 - 1;
return start2 > end2 || start2 <= end1;
}

View File

@@ -10,5 +10,7 @@
struct command_context;
int util_init(struct command_context *cmd_ctx);
bool is_memory_regions_overlap(target_addr_t start1, unsigned int size1,
target_addr_t start2, unsigned int size2);
#endif /* OPENOCD_HELPER_UTIL_H */