Files
sw_openocd/src/helper/util.c
T
Kulyatskaya Alexandra 181547327f 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>
2025-11-30 10:22:54 +00:00

66 lines
1.6 KiB
C

// SPDX-License-Identifier: GPL-2.0-or-later
/***************************************************************************
* Copyright (C) 2010 by Øyvind Harboe *
***************************************************************************/
/* this file contains various functionality useful to standalone systems */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "log.h"
#include "time_support.h"
#include "util.h"
COMMAND_HANDLER(handler_util_ms)
{
if (CMD_ARGC != 0)
return ERROR_COMMAND_SYNTAX_ERROR;
command_print(CMD, "%" PRId64, timeval_ms());
return ERROR_OK;
}
static const struct command_registration util_command_handlers[] = {
{
.name = "ms",
.mode = COMMAND_ANY,
.handler = handler_util_ms,
.help =
"Returns ever increasing milliseconds. Used to calculate differences in time.",
.usage = "",
},
COMMAND_REGISTRATION_DONE
};
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;
}