From c0f61f9c377a278ce83259cbf2251e178bbc0e85 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 14 Feb 2011 19:19:18 +0000 Subject: [PATCH] gdb/ * memrange.c (compare_mem_ranges): Mention sort order in describing comment. (normalize_mem_ranges): Add comment. Fix ra->length calculation. * tracepoint.c (traceframe_available_memory): Extend comment to mention what happens to RESULT when the target does not support the query. --- gdb/ChangeLog | 9 +++++++++ gdb/memrange.c | 10 ++++++++-- gdb/tracepoint.c | 9 +++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 03b16fdd028..523220c7356 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2011-02-14 Pedro Alves + + * memrange.c (compare_mem_ranges): Mention sort order in + describing comment. + (normalize_mem_ranges): Add comment. Fix ra->length calculation. + * tracepoint.c (traceframe_available_memory): Extend comment to + mention what happens to RESULT when the target does not support + the query. + 2011-02-14 Pedro Alves Jan Kratochvil diff --git a/gdb/memrange.c b/gdb/memrange.c index 4ffe6bdd6dd..dcacff665eb 100644 --- a/gdb/memrange.c +++ b/gdb/memrange.c @@ -31,7 +31,8 @@ mem_ranges_overlap (CORE_ADDR start1, int len1, return (l < h); } -/* qsort comparison function, that compares mem_ranges. */ +/* 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) @@ -50,6 +51,10 @@ 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; @@ -68,7 +73,8 @@ normalize_mem_ranges (VEC(mem_range_s) *ranges) 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 */ diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 3eae9376bd0..4389f12048d 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -4635,10 +4635,11 @@ get_traceframe_info (void) return traceframe_info; } -/* Return in RESULT, the set of collected memory in the current - traceframe, found within the LEN bytes range starting at MEMADDR. - Returns true if the target supports the query, otherwise returns - false. */ +/* If the target supports the query, return in RESULT the set of + collected memory in the current traceframe, found within the LEN + bytes range starting at MEMADDR. Returns true if the target + supports the query, otherwise returns false, and RESULT is left + undefined. */ int traceframe_available_memory (VEC(mem_range_s) **result, -- 2.30.2