-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stable 1.5 ImportError:undefined symbol: ctf_find_tc_stream_packet_intersection_union #112
Open
emperorlu
wants to merge
315
commits into
master
Choose a base branch
from
stable-1.5
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The Solaris base shell does not support subshells with $() Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
dirent->d_type is Linux specific while 'stat' is part of POSIX Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
It works by accident because getline() reallocates based on the initial pointer, but doing this falls into a blind spot of the Linux man pages. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Implement our own getline to remove dependency from glibc 2.10+ and to increase portability to other operating systems. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Reported by Coverity Scan: CID 1327417: API usage errors (CHAR_IO) Assigning the return value of "fgetc" to char "c" truncates its value. Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
The current implementation of the no-SIGPIPE send in the compatibility layer has side-effects on multithreaded processes due to use of sigaction(). Although multithread-safety is not strictly needed since Babeltrace is single-threaded for now, there is no reason to keep this limitation deeply rooted in a compatibility layer. Use the multithreaded-safe algorithm to catch SIGPIPE implemented in LTTng-UST for the write() system call for platforms that do not have MSG_NOSIGNAL. It was originally implented in LTTng-UST as part of the ring buffer wakeup. This is a re-implementation of this same algorithm under MIT license. It uses signal masks and sigtimedwait. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
In compatibility mode, the babeltrace compat layer around memstream copies the file content into the buffer only at close. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
On platforms that require extra libraries to link socket apps, running this macro before the function checks will lead to socket functions being correctly detected. Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Addresses out-of-tree build breakage introduced by commit 3842465 Reported-by: Nathan Lynch <Nathan_Lynch@mentor.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
In the event that the YACC variable is set to a full path this test fail even if it should not. Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
CTF Writer is using the stream id, which is really a "file id", to populate the packet header. The packet header's id should match a stream class declaration in the TSDL metadata file. Reported-by: Rocky Dunlap <rsdunlapiv@gmail.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
When building out of tree, make check fails because the "tests" file is not found. Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
We need to check for end of stream before updating the current packet index, else we access memory beyond the last stream packet index array element. This fixes valgrind errors which appear at commit 480ef05 Support ctf index version 1.1 due to change of the element size, but actually caused by commit 2654fe9 Fix: events discarded timing inaccuracy Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Python 3.5 changes the StopIteration exception clearing behaviour when a generator finishes its iteration. This causes the interpreter to errounously consider SWIG clean-up functions as having "set an error". This hack explicitly allocates and cleans up struct bt_iter_pos instead of relying on SWIG auto-generated code which manages the lifetime of temporary objects. An investigation of the cause of this change is under way, but at least this makes the bindings usable on Python 3.5 which is being rolled-out in some distros. Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
The data_size and cmd_version fields need to be sent in network byte order to the relay. These fields are currently ignored by the relay because the commands have a fix-sized payload so it does not cause any problem for now, but they may be used in the future, so we should avoid any confusion. Signed-off-by: Julien Desfossez <jdesfossez@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Commit b9e6498 removes the existence guarantee of the trace_id hash table key by moving the trace->in_use assignation before the assignation of trace_id and insertion into the hash table. Use the trade_id field value to validate if it should be removed from the hash table. A NULL trace_id field indicates that no insertion was performed. This is mostly a workaround to a problem found in, at least, glib 2.28 where g_hash_table_lookup_node() aborts on a SIGFPE signal due to modulo by zero. The exact cause for this is unknown for now, but a similar problem was reported against Nautilus [1]. There is little reason for "mod" to be 0 at that point, as explained in the bug report. Currently unable to reproduce. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1074401 Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Issue --- According to the CTF specification, the alignment of an enumeration is that of its container integer field declaration. However, an enumeration field's alignment is always initialized to 1. This causes babeltrace to fail to read traces produced by lttng-ust following a fix that causes it to generate extended event headers. The problem is observed on ARM platforms since lttng-ust will produce a layout that does not result in unaligned memory accesses. Solution --- The alignment of the enumeration declaration's container is sampled when the enumeration declaration is created. Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Issue --- The behaviour of a number of "rw" functions associated with array and sequence field types differ when their element's declaration meets the following criteria: - is an integer, - is byte-aligned, - is byte-sized, - is UTF-8 or ASCII encoded. Those criteria are used to determine if the elements of either arrays or sequences should be interpreted as characters. 1) The implementation of sequence and array definitions creation functions do not initialize their 'elems' member (a g_ptr_array), instead initializing a 'string' member (a g_string). 2) The 'ctf' format plug-in does not initialize the 'elems' array with the decoded integer definitions, instead only initializing the 'string' member with the field's contents. 3) The 'ctf-text' format plug-in uses the internal headers to access the 'string' member of those definitions directly. The 'string' member of both sequence and array definitions is meant as a helper to allow the access to their contents in textual form. However, while an array's content is made available under that form through the public bt_ctf_get_char_array() function, there is no equivalent accessor for the sequence type, as reported by a number of users [1][2]. The 'ctf-text' format implementation works around this limitation by making use of the internal headers to access the string member directly. Moreover, bypassing the creation and initialization of the 'elems' member of both array and sequence definitions results in a crash when bt_ctf_get_field_list() is used with these types when they contain character elements, as reported on the mailing list [1]. Solution --- This fix eliminates the bypass used by the definition creation functions and 'ctf' format plug-in, ensuring that both the 'string' and 'elems' members are initialized even if the elements fit the "character" criteria. This fixes the crash on a unchecked NULL pointer in bt_ctf_get_field_list() reported in [1] when trying to access the sequence's contents. The checks for the various criteria that make an integer a character have been moved to an internal function, bt_int_is_char() since their (incorrect) duplication obscured the underlying problem. For instance, a sequence's 'string' member is allocated if the elements are ASCII or UTF-8 encoded integers, but only used when the elements are byte-sized and byte-aligned (as opposed to the intended behaviour in types/array.c). With this fix applied, sequence elements can be accessed normally through the existing bt_ctf_get_field_list() or bt_ctf_get_index() functions. Example: ``` /* * Print a sequence's content if it is text. * Error handling omitted. */ void print_sequence(const struct bt_ctf_event *event, const struct bt_definition *sequence_definition) { int signedness, integer_len; unsigned int i, element_count; const struct bt_definition * const *elements; const struct bt_definition *element; const struct bt_declaration *element_declaration; enum ctf_string_encoding encoding; bt_ctf_get_field_list(event, sequence_definition, &elements, &element_count); if (element_count == 0) { return; } /* Is this a text sequence? */ element = elements[0]; element_declaration = bt_ctf_get_decl_from_def(element); if (bt_ctf_field_type(element_declaration) != CTF_TYPE_INTEGER) { /* Not a text sequence. */ return; } signedness = bt_ctf_get_int_signedness(element_declaration); encoding = bt_ctf_get_encoding(element_declaration); integer_len = bt_ctf_get_int_len(element_declaration); if (integer_len != 8 || (encoding != CTF_STRING_UTF8 && encoding != CTF_STRING_ASCII)) { /* Not a text sequence. */ return; } putchar('"'); for (i = 0; i < element_count; i++) { int val = signedness ? bt_ctf_get_int64(elements[i]) : bt_ctf_get_uint64(elements[i]); putchar(val); } putchar('"'); } ``` Notes --- Since it is not possible for a user of the public API to determine the alignment of a field in the ctf trace, it is not possible to check for the criteria that make an array a "character array". An array's element declaration could indicate that it is a byte-sized and UTF8/ASCII encoded integer. Yet, the 'string' member could be left NULL if the element's alignment is not '8'. Hence, while it is possible to use the bt_ctf_get_char_array() function on array definitions that look like "character arrays", users should be careful in doing so. bt_ctf_get_char_array() returning NULL should not be assumed to indicate that an array is empty. Under such circumstances, reader code should fall-back to using bt_ctf_get_field_list() to access the array's contents, as shown in the example above. [1] https://lists.lttng.org/pipermail/lttng-dev/2019-April/028704.html [2] #98 Reported-by: romendmsft <romend@microsoft.com> Reported-by: Milian Wolff <milian.wolff@kdab.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
bitfield.h uses the left shift operator with a left operand which may be negative. The C99 standard states that shifting a negative value is undefined. When building with -Wshift-negative-value, we get this gcc warning: In file included from /home/smarchi/src/babeltrace/include/babeltrace/ctfser-internal.h:44:0, from /home/smarchi/src/babeltrace/ctfser/ctfser.c:42: /home/smarchi/src/babeltrace/include/babeltrace/ctfser-internal.h: In function ‘bt_ctfser_write_unsigned_int’: /home/smarchi/src/babeltrace/include/babeltrace/bitfield-internal.h:116:24: error: left shift of negative value [-Werror=shift-negative-value] mask = ~((~(type) 0) << (__start % ts)); \ ^ /home/smarchi/src/babeltrace/include/babeltrace/bitfield-internal.h:222:2: note: in expansion of macro ‘_bt_bitfield_write_le’ _bt_bitfield_write_le(ptr, type, _start, _length, _v) ^~~~~~~~~~~~~~~~~~~~~ /home/smarchi/src/babeltrace/include/babeltrace/ctfser-internal.h:418:3: note: in expansion of macro ‘bt_bitfield_write_le’ bt_bitfield_write_le(mmap_align_addr(ctfser->base_mma) + ^~~~~~~~~~~~~~~~~~~~ This boils down to the fact that the expression ~((uint8_t)0) has type "signed int", which is used as an operand of the left shift. This is due to the integer promotion rules of C99 (6.3.3.1): If an int can represent all values of the original type, the value is converted to an int; otherwise, it is converted to an unsigned int. These are called the integer promotions. All other types are unchanged by the integer promotions. We also need to cast the result explicitly into the left hand side type to deal with: warning: large integer implicitly truncated to unsigned type [-Woverflow] The C99 standard states that a right shift has implementation-defined behavior when shifting a signed negative value. Add a preprocessor check that the compiler provides the expected behavior, else provide an alternative implementation which guarantees the intended behavior. A preprocessor check is also added to ensure that the compiler representation for signed values is two's complement, which is expected by this header. Document that this header strictly respects the C99 standard, with the exception of its use of __typeof__. Adapt use of _bt_piecewise_lshift in plugins/text/pretty/print.c to the new API. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Acked-by: Simon Marchi <simon.marchi@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com> Change-Id: Icf02c4a6d2b7fb955d36f2843eaf62b8ceef5679
Do not prefix macro arguments with underscores. Use one leading underscore as prefix for local variables defined within macros. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Change-Id: Ie1c2f7f59f605ac62d483aba67b3f70cef27bf21 Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com> Change-Id: I4d3c374e762888679474b3330bf959b87d3910d2
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> Change-Id: Ieb7484ad0680483d7a7290ff688a161cc69925e3 Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com> Change-Id: Id17713b2683ea0bbe17388282557d2a75be8f177 Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Running babeltrace under valgrind with a test-cases doing per-pid lttng tracing in live mode triggers this use-after-free in get_next_index() when stream is hung up. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
The trace collection should copy the trace clock object rather than take a reference to the first trace's trace clock, because it may be freed when the trace is removed (e.g. application going away in per-pid live tracing). Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Missing context put in iterator init error path. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
When get_next_index sets the index position to EOF, ctf_live_packet_seek() should in turn set the stream position to EOF to propagate the hung up state. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Attaching to a stream hung up before providing any trace packet causes ctf_open_mmap_stream_read() to return an error. This kind of scenario can happen with the upcoming "lttng clear" feature. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com> Change-Id: I1fb3a8cebcba49ca0d4dfd0437380b574c71c39b
Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com> Change-Id: I1b815d96ca03d2ce30a5c33881b340c9b73e0b9c Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Using the babeltrace Python module with Python 3.3-3.8 gives a warning: /usr/lib/python3/dist-packages/babeltrace/babeltrace.py:811: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working Therefore, for forward compability (Python 3.9+), try importing it using the new way first. Otherwise, fall back on the old way. Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com> Change-Id: I7f650593a013643b2fb0b77b0d388cf57bc2b765 Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
My system is Centos, Linux 3.10.0, python3.6 |
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Change-Id: I3c1b16a94d7bcf2a2760fc51d66b40b868c5a63b Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Change-Id: I5acd4e897f50e95d2517079c0845825951aa43b5 Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ib728aef44f18ffe178cead2aef5e25a02fbfc479 Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I78debba6f9749a2145275ee796bc97044b505c5c Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
In parse_options, we loop over all non-option arguments, adding them to opt_input_paths. Immediately after adding `ipath' to opt_input_paths, we call poptFreeContext. This has the affect of free'ing pc->leftovers, which is where these non-option arguments are stored. This is ultimately due to this upstream commit in popt 1.19: rpm-software-management/popt@7182e46 This is derived from a package patch: https://src.fedoraproject.org/rpms/babeltrace/c/d48452beff87b145c038f070e7182358db04336c?branch=rawhide Change-Id: Icf330e53c2f4fad1d98a1ae494f2664670a0828e Reported-by: Keith Seitz <keiths@redhat.com> Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
See https://peps.python.org/pep-0632/ Change-Id: If1349cb455aeeb2c2f81bc045d3d275ed1ec32e2 Signed-off-by: Michael Jeanson <mjeanson@efficios.com> Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When I import babeltrace in python3,