-
Notifications
You must be signed in to change notification settings - Fork 63
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
dirent->d_type is Linux specific while 'stat' is part of POSIX Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Implement our own getline to remove dependency from glibc 2.10+ and to increase portability to other operating systems. Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
In compatibility mode, the babeltrace compat layer around memstream copies the file content into the buffer only at close. Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]>
Addresses out-of-tree build breakage introduced by commit 3842465 Reported-by: Nathan Lynch <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
When building out of tree, make check fails because the "tests" file is not found. Signed-off-by: Simon Marchi <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]>
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 <[email protected]> Reported-by: Milian Wolff <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Acked-by: Simon Marchi <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]> 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 <[email protected]> Change-Id: Ie1c2f7f59f605ac62d483aba67b3f70cef27bf21 Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]> Change-Id: I4d3c374e762888679474b3330bf959b87d3910d2
Signed-off-by: Jonathan Rajotte <[email protected]> Change-Id: Ieb7484ad0680483d7a7290ff688a161cc69925e3 Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jonathan Rajotte <[email protected]> Change-Id: Id17713b2683ea0bbe17388282557d2a75be8f177 Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Missing context put in iterator init error path. Signed-off-by: Mathieu Desnoyers <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]> Change-Id: I1fb3a8cebcba49ca0d4dfd0437380b574c71c39b
Signed-off-by: Christophe Bedard <[email protected]> Change-Id: I1b815d96ca03d2ce30a5c33881b340c9b73e0b9c Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Change-Id: I7f650593a013643b2fb0b77b0d388cf57bc2b765 Signed-off-by: Jérémie Galarneau <[email protected]>
My system is Centos, Linux 3.10.0, python3.6 |
Signed-off-by: Michael Jeanson <[email protected]> Change-Id: I3c1b16a94d7bcf2a2760fc51d66b40b868c5a63b Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Michael Jeanson <[email protected]> Change-Id: I5acd4e897f50e95d2517079c0845825951aa43b5 Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
Change-Id: Ib728aef44f18ffe178cead2aef5e25a02fbfc479 Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Change-Id: I78debba6f9749a2145275ee796bc97044b505c5c Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
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 <[email protected]> Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
See https://peps.python.org/pep-0632/ Change-Id: If1349cb455aeeb2c2f81bc045d3d275ed1ec32e2 Signed-off-by: Michael Jeanson <[email protected]> Signed-off-by: Jérémie Galarneau <[email protected]>
Signed-off-by: Jérémie Galarneau <[email protected]>
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,