forked from auracaster/openocd
181547327f
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>
66 lines
1.6 KiB
C
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;
|
|
}
|