gdb/
* tracepoint.c (tfile_xfer_partial): If there's no traceframe selected, don't try iterating over the traceframe's blocks. (tfile_has_stack): If there's no traceframe selected, then there's no stack. (tfile_has_registers): If there's no traceframe selected, then there's no registers. gdb/testsuite/ * gdb.trace/tfile.exp: Test that with no traceframe selected, there's no stack or registers.
This commit is contained in:
parent
e8c9e0a18f
commit
ffd5ec2486
4 changed files with 55 additions and 29 deletions
|
@ -1,3 +1,12 @@
|
|||
2011-01-28 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* tracepoint.c (tfile_xfer_partial): If there's no traceframe
|
||||
selected, don't try iterating over the traceframe's blocks.
|
||||
(tfile_has_stack): If there's no traceframe selected, then there's
|
||||
no stack.
|
||||
(tfile_has_registers): If there's no traceframe selected, then
|
||||
there's no registers.
|
||||
|
||||
2011-01-28 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* target.c (memory_xfer_partial): No need to restore shadows if we
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-01-28 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* gdb.trace/tfile.exp: Test that with no traceframe selected,
|
||||
there's no stack or registers.
|
||||
|
||||
2011-01-26 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.python/py-prettyprint.exp (run_lang_tests): Ensure no blank
|
||||
|
|
|
@ -92,6 +92,14 @@ Trace buffer has 256 bytes of 4096 bytes free \\(93% full\\).*
|
|||
Looking at trace frame 0, tracepoint .*" \
|
||||
"tstatus on trace file"
|
||||
|
||||
gdb_test "tfind end" "No longer looking at any trace frame" "leave tfind mode"
|
||||
|
||||
gdb_test "backtrace" "No stack\." \
|
||||
"no stack if no traceframe selected"
|
||||
|
||||
gdb_test "info registers" "The program has no registers now\." \
|
||||
"no registers if no traceframe selected"
|
||||
|
||||
# Now start afresh, using only a trace file.
|
||||
|
||||
gdb_exit
|
||||
|
|
|
@ -3970,8 +3970,6 @@ tfile_xfer_partial (struct target_ops *ops, enum target_object object,
|
|||
const char *annex, gdb_byte *readbuf,
|
||||
const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
|
||||
{
|
||||
int pos;
|
||||
|
||||
/* We're only doing regular memory for now. */
|
||||
if (object != TARGET_OBJECT_MEMORY)
|
||||
return -1;
|
||||
|
@ -3979,36 +3977,42 @@ tfile_xfer_partial (struct target_ops *ops, enum target_object object,
|
|||
if (readbuf == NULL)
|
||||
error (_("tfile_xfer_partial: trace file is read-only"));
|
||||
|
||||
/* Iterate through the traceframe's blocks, looking for memory. */
|
||||
pos = 0;
|
||||
while ((pos = traceframe_find_block_type ('M', pos)) >= 0)
|
||||
if (traceframe_number != -1)
|
||||
{
|
||||
ULONGEST maddr, amt;
|
||||
unsigned short mlen;
|
||||
int pos = 0;
|
||||
|
||||
tfile_read ((gdb_byte *) &maddr, 8);
|
||||
maddr = extract_unsigned_integer ((gdb_byte *) &maddr, 8,
|
||||
gdbarch_byte_order (target_gdbarch));
|
||||
tfile_read ((gdb_byte *) &mlen, 2);
|
||||
mlen = (unsigned short)
|
||||
extract_unsigned_integer ((gdb_byte *) &mlen, 2,
|
||||
gdbarch_byte_order (target_gdbarch));
|
||||
|
||||
/* If the block includes the first part of the desired range,
|
||||
return as much it has; GDB will re-request the remainder,
|
||||
which might be in a different block of this trace frame. */
|
||||
if (maddr <= offset && offset < (maddr + mlen))
|
||||
/* Iterate through the traceframe's blocks, looking for
|
||||
memory. */
|
||||
while ((pos = traceframe_find_block_type ('M', pos)) >= 0)
|
||||
{
|
||||
amt = (maddr + mlen) - offset;
|
||||
if (amt > len)
|
||||
amt = len;
|
||||
ULONGEST maddr, amt;
|
||||
unsigned short mlen;
|
||||
enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch);
|
||||
|
||||
tfile_read (readbuf, amt);
|
||||
return amt;
|
||||
tfile_read ((gdb_byte *) &maddr, 8);
|
||||
maddr = extract_unsigned_integer ((gdb_byte *) &maddr, 8,
|
||||
byte_order);
|
||||
tfile_read ((gdb_byte *) &mlen, 2);
|
||||
mlen = (unsigned short)
|
||||
extract_unsigned_integer ((gdb_byte *) &mlen, 2, byte_order);
|
||||
|
||||
/* If the block includes the first part of the desired
|
||||
range, return as much it has; GDB will re-request the
|
||||
remainder, which might be in a different block of this
|
||||
trace frame. */
|
||||
if (maddr <= offset && offset < (maddr + mlen))
|
||||
{
|
||||
amt = (maddr + mlen) - offset;
|
||||
if (amt > len)
|
||||
amt = len;
|
||||
|
||||
tfile_read (readbuf, amt);
|
||||
return amt;
|
||||
}
|
||||
|
||||
/* Skip over this block. */
|
||||
pos += (8 + 2 + mlen);
|
||||
}
|
||||
|
||||
/* Skip over this block. */
|
||||
pos += (8 + 2 + mlen);
|
||||
}
|
||||
|
||||
/* It's unduly pedantic to refuse to look at the executable for
|
||||
|
@ -4095,13 +4099,13 @@ tfile_has_memory (struct target_ops *ops)
|
|||
static int
|
||||
tfile_has_stack (struct target_ops *ops)
|
||||
{
|
||||
return 1;
|
||||
return traceframe_number != -1;
|
||||
}
|
||||
|
||||
static int
|
||||
tfile_has_registers (struct target_ops *ops)
|
||||
{
|
||||
return 1;
|
||||
return traceframe_number != -1;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in a new issue