]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove workaround to libbabeltrace 1.1.0 issue
authorYao Qi <yao@codesourcery.com>
Thu, 21 Aug 2014 02:48:33 +0000 (10:48 +0800)
committerYao Qi <yao@codesourcery.com>
Wed, 27 Aug 2014 08:14:49 +0000 (16:14 +0800)
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-27  Yao Qi  <yao@codesourcery.com>

* ctf.c (CTF_FILE_MIN_SIZE): Remove.
(ctf_end): Remove code.

gdb/ChangeLog
gdb/ctf.c

index 8cf8a0a0608022dbac89a8eab5462f8fe9d49f0d..250cd5be76e237a26d4d6b5690749f05f0f03ca6 100644 (file)
@@ -1,3 +1,8 @@
+2014-08-27  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.
index 84d0a4817cee6b126e2542c9202ea2a2390250d6..6e4189320a71a7face520308e61f85e50d607872 100644 (file)
--- a/gdb/ctf.c
+++ b/gdb/ctf.c
@@ -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