/* Memory ranges
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2010-2015 Free Software Foundation, Inc.
This file is part of GDB.
return (l < h);
}
-/* qsort comparison function, that compares mem_ranges. */
+/* See memrange.h. */
+
+int
+address_in_mem_range (CORE_ADDR address, const struct mem_range *r)
+{
+ return (r->start <= address
+ && (address - r->start) < r->length);
+}
+
+/* qsort comparison function, that compares mem_ranges. Ranges are
+ sorted in ascending START order. */
static int
compare_mem_ranges (const void *ap, const void *bp)
void
normalize_mem_ranges (VEC(mem_range_s) *ranges)
{
+ /* This function must not use any VEC operation on RANGES that
+ reallocates the memory block as that invalidates the RANGES
+ pointer, which callers expect to remain valid. */
+
if (!VEC_empty (mem_range_s, ranges))
{
struct mem_range *ra, *rb;
merge them. */
if (rb->start <= ra->start + ra->length)
{
- ra->length = (rb->start + rb->length) - ra->start;
+ ra->length = max (ra->length,
+ (rb->start - ra->start) + rb->length);
continue; /* next b, same a */
}
a++; /* next a */