Remove workaround to libbabeltrace 1.1.0 issue

When GDB uses recent version of babeltrace, such as 1.2.x, we'll see
such error emitted from babeltrace library,

 (gdb) target ctf .../gdb/testsuite/gdb.trace/actions.ctf
 [error] Invalid CTF stream: content size is smaller than packet headers.
 [error] Stream index creation error.
 [error] Open file stream error.

The problem can be reproduce out of GDB too, using babeltrace,

 $ babeltrace ./fake-packet.ctf/
 [error] Invalid CTF stream: content size is smaller than packet headers.
 [error] Stream index creation error.
 [error] Open file stream error.

Recent babeltrace library becomes more strict on CTF, and complains
about one "faked packet" GDB adds, when saving trace data in ctf
format from GDB.  babeltrace 1.1.0 has a bug that it can't read trace
data smaller than a certain size (see https://bugs.lttng.org/issues/450).
We workaround it in GDB to append some meaningless data in a faked
packet to make sure trace file is large enough (see ctf.c:ctf_end).
The babeltrace issue was fixed in 1.1.1 release.  However, babeltrace
recent release (since 1.1.2) starts to complain about such faked
packet.  Here is a table shows that whether faked packet or no faked
packet is "supported" by various babeltrace releases,

        faked packet      no faked packet
1.1.0      Yes                 No
1.1.1      Yes                 Yes
1.1.2      No                  Yes
1.2.0      No                  Yes

We decide to get rid of this workaround in GDB, and people can build GDB
with libbabeltrace >= 1.1.1.  In this way, both configure and ctf.c is
simpler.

Run gdb.trace/* tests in the following combinations:

 wo/ this pattch  1.1.0
 w/  this patch   1.1.1
 w/  this patch   1.1.2
 w/  this patch   1.2.0

No test results change.

gdb:

2014-08-22  Yao Qi  <yao@codesourcery.com>

	* ctf.c (CTF_FILE_MIN_SIZE): Remove.
	(ctf_end): Remove code.
This commit is contained in:
Yao Qi 2014-08-21 10:48:33 +08:00
parent 4564fb94da
commit 510db0520b
2 changed files with 5 additions and 49 deletions

View File

@ -1,3 +1,8 @@
2014-08-22 Yao Qi <yao@codesourcery.com>
* ctf.c (CTF_FILE_MIN_SIZE): Remove.
(ctf_end): Remove code.
2014-08-21 Jan Kratochvil <jan.kratochvil@redhat.com>
* linux-tdep.c (linux_corefile_thread_callback): Ignore THREAD_EXITED.

View File

@ -623,11 +623,6 @@ ctf_write_definition_end (struct trace_file_writer *self)
self->ops->frame_ops->end (self);
}
/* The minimal file size of data stream. It is required by
babeltrace. */
#define CTF_FILE_MIN_SIZE 4096
/* This is the implementation of trace_file_write_ops method
end. */
@ -637,50 +632,6 @@ ctf_end (struct trace_file_writer *self)
struct ctf_trace_file_writer *writer = (struct ctf_trace_file_writer *) self;
gdb_assert (writer->tcs.content_size == 0);
/* The babeltrace requires or assumes that the size of datastream
file is greater than 4096 bytes. If we don't generate enough
packets and events, create a fake packet which has zero event,
to use up the space. */
if (writer->tcs.packet_start < CTF_FILE_MIN_SIZE)
{
uint32_t u32;
/* magic. */
u32 = CTF_MAGIC;
ctf_save_write_uint32 (&writer->tcs, u32);
/* content_size. */
u32 = 0;
ctf_save_write_uint32 (&writer->tcs, u32);
/* packet_size. */
u32 = 12;
if (writer->tcs.packet_start + u32 < CTF_FILE_MIN_SIZE)
u32 = CTF_FILE_MIN_SIZE - writer->tcs.packet_start;
u32 *= TARGET_CHAR_BIT;
ctf_save_write_uint32 (&writer->tcs, u32);
/* tpnum. */
u32 = 0;
ctf_save_write (&writer->tcs, (gdb_byte *) &u32, 2);
/* Enlarge the file to CTF_FILE_MIN_SIZE is it is still less
than that. */
if (CTF_FILE_MIN_SIZE
> (writer->tcs.packet_start + writer->tcs.content_size))
{
gdb_byte b = 0;
/* Fake the content size to avoid assertion failure in
ctf_save_fseek. */
writer->tcs.content_size = (CTF_FILE_MIN_SIZE
- 1 - writer->tcs.packet_start);
ctf_save_fseek (&writer->tcs, CTF_FILE_MIN_SIZE - 1,
SEEK_SET);
ctf_save_write (&writer->tcs, &b, 1);
}
}
}
/* This is the implementation of trace_frame_write_ops method