2011-02-16 Pedro Alves <pedro@codesourcery.com>

Jan Kratochvil  <jan.kratochvil@redhat.com>

	gdb/
	* tracepoint.c (memrange_sortmerge): Fix list A's end calculation.

2011-02-16  Pedro Alves  <pedro@codesourcery.com>

	gdb/testsuite/
	* collection.c (globalarr2): New global.
	(main): Initialize it before collecting, and and clear it
	afterwards.
	* collection.exp (gdb_collect_globals_test): Test collecting
	overlapping memory ranges.
This commit is contained in:
Pedro Alves 2011-02-16 12:59:05 +00:00
parent fb68ae733b
commit 08807d5afd
5 changed files with 45 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2011-02-16 Pedro Alves <pedro@codesourcery.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
gdb/
* tracepoint.c (memrange_sortmerge): Fix list A's end calculation.
2011-02-16 Pedro Alves <pedro@codesourcery.com>
Jan Kratochvil <jan.kratochvil@redhat.com>

View File

@ -1,3 +1,11 @@
2011-02-16 Pedro Alves <pedro@codesourcery.com>
* collection.c (globalarr2): New global.
(main): Initialize it before collecting, and and clear it
afterwards.
* collection.exp (gdb_collect_globals_test): Test collecting
overlapping memory ranges.
2011-02-15 Michael Snyder <msnyder@vmware.com>
* gdb.base/default.exp: Add tests for thread commands.

View File

@ -26,6 +26,7 @@ double globald;
test_struct globalstruct;
test_struct *globalp;
int globalarr[16];
int globalarr2[4];
struct global_pieces {
unsigned int a;
@ -237,6 +238,9 @@ main (argc, argv, envp)
for (i = 0; i < 15; i++)
globalarr[i] = i;
for (i = 0; i < 4; i++)
globalarr2[i] = i;
mystruct.memberc = 101;
mystruct.memberi = 102;
mystruct.memberf = 103.3;
@ -283,6 +287,8 @@ main (argc, argv, envp)
globalp = 0;
for (i = 0; i < 15; i++)
globalarr[i] = 0;
for (i = 0; i < 4; i++)
globalarr2[i] = 0;
end ();
return 0;

View File

@ -457,13 +457,29 @@ proc gdb_collect_globals_test { } {
}
}
# Use use this to test collecting overlapping memory ranges
# (making use of UNOP_MEMVAL, as objects don't usually overlap
# other objects). Note that globalarr2 should not be collected in
# any other way so that a regression test below can be effective.
set globalarr2_addr ""
set test "get address of globalarr2"
gdb_test_multiple "p /x &globalarr2" $test {
-re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
set globalarr2_addr $expect_out(1,string)
pass $test
}
}
gdb_test "trace $testline" \
"Tracepoint \[0-9\]+ at .*" \
"collect globals: set tracepoint"
gdb_trace_setactions "collect globals: define actions" \
"" \
"collect globalc, globali, globalf, globald" "^$" \
"collect globalstruct, globalp, globalarr" "^$"
"collect globalstruct, globalp, globalarr" "^$" \
"collect \{int \[4\]\}$globalarr2_addr" "^$" \
"collect \{int \[2\]\}$globalarr2_addr" "^$"
# Begin the test.
run_trace_experiment "globals" globals_test_func
@ -508,6 +524,12 @@ proc gdb_collect_globals_test { } {
"\\$\[0-9\]+ = 3$cr" \
"collect globals: collected global array element #3"
# Check that we didn't mess up sort&merging memory ranges to
# collect.
gdb_test "print globalarr2" \
"\\$\[0-9\]+ = \\{0, 1, 2, 3\\}$cr" \
"collect globals: collected global array 2"
gdb_test "tfind none" \
"#0 end .*" \
"collect globals: cease trace debugging"

View File

@ -846,7 +846,8 @@ memrange_sortmerge (struct collection_list *memranges)
if (memranges->list[a].type == memranges->list[b].type
&& memranges->list[b].start <= memranges->list[a].end)
{
memranges->list[a].end = memranges->list[b].end;
if (memranges->list[b].end > memranges->list[a].end)
memranges->list[a].end = memranges->list[b].end;
continue; /* next b, same a */
}
a++; /* next a */