babeltrace.git
5 years agoRemove unused `src/lib/trace-ir/clock-snapshot-set.h`
Philippe Proulx [Fri, 18 Oct 2019 17:38:44 +0000 (13:38 -0400)] 
Remove unused `src/lib/trace-ir/clock-snapshot-set.h`

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I43fb1d20ef0e88748e70c034f77ce34c7eed0b8d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2219
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib: remove unused bt_graph_remove_unconnected_component()
Philippe Proulx [Fri, 18 Oct 2019 17:37:43 +0000 (13:37 -0400)] 
lib: remove unused bt_graph_remove_unconnected_component()

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ief672565ec2a597ae5e3d1bdfd46f7f12656d09b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2218
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoAlways evaluate BT_ASSERT(); add BT_ASSERT_DBG() for debug mode only
Philippe Proulx [Fri, 18 Oct 2019 15:59:27 +0000 (11:59 -0400)] 
Always evaluate BT_ASSERT(); add BT_ASSERT_DBG() for debug mode only

This patch makes BT_ASSERT() always evaluate its condition.

The goal is to make a lot of _slow path_ assertions evaluated whatever
the debug or non-debug mode. This will help detect project programming
errors and hopefully end users will report them.

What used to be BT_ASSERT() is now BT_ASSERT_DBG(), that is, only
evaluated in debug mode. This is similar to how BT_ASSERT_PRE() is
always evaluated while BT_ASSERT_PRE_DEV() is only evaluated in
developer mode.

I went over each single BT_ASSERT() statement in `src` and decided
whether to use BT_ASSERT() or BT_ASSERT_DBG(). My strategy is similar
to what we do for BT_ASSERT_PRE(), that is:

* Use BT_ASSERT_DBG() in anything potentially executed once or more per
  _event_ message.

  Other messages occur so infrequently compared to event messages that
  we don't care.

* Use BT_ASSERT_DBG() in property getters and object borrowing
  functions.

  We don't know how frequently the user can call those, so we don't take
  any chance.

Everything else uses BT_ASSERT(), for example:

* In the library and plugins, everything related to metadata objects.
* Everything related to graph topology.
* Everything in the CLI.
* Network communication functions in `src.ctf.lttng-live`.

I believe some BT_ASSERT_DBG() statements could still be converted
BT_ASSERT(), but this patch is a good starting point.

I left the whole CTF writer code with BT_ASSERT_DBG() for the moment
as this library is not a priority.

All the tests use BT_ASSERT() because they are not an end user use case;
we don't care if they are less efficient in production mode.

This change does not seem to affect the production build's performance;
I compared, before and after, and I do not get a run time difference
that's greater than the observed measurement error.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia74951a39b1fcc79579661562f6a98ed208fd9bb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2217
Tested-by: jenkins <jenkins@lttng.org>
5 years agolib: remove includes from logging.h
Simon Marchi [Tue, 22 Oct 2019 15:16:58 +0000 (11:16 -0400)] 
lib: remove includes from logging.h

Nothing in logging.h uses anything from those includes.

Removing them causes this failure in py-common.c:

  CC       py-common.lo
In file included from /home/smarchi/src/babeltrace/src/py-common/py-common.c:32:0:
/home/smarchi/src/babeltrace/src/py-common/py-common.h:44:18: error: unknown type name ‘bool’; did you mean ‘_Bool’?
   int log_level, bool chain);
                  ^~~~
                  _Bool

Doing this change revealed a few files that were using bool without
including stdbool.h, add the includes there.

Change-Id: Ica802312a21c2a28cfaa1011d0034f0d1f65594e
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2241
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agobt2: make log functions clear error indicator
Simon Marchi [Sat, 19 Oct 2019 03:57:30 +0000 (23:57 -0400)] 
bt2: make log functions clear error indicator

In all call sites of logw_exception and loge_exception_append_cause, we
clear the error indicator afterwards (call PyErr_Clear).  Make these
functions clear the error indicator themselves instead, and rename them
accordingly.  This could help avoid forgetting to clear the indicator in
the future.

Change-Id: I22855c1bb4af0e5b85bafc3f1009589ee08c0564
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2225
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: bt2: clear Python error indicator in trace and trace class destruction listeners
Simon Marchi [Fri, 18 Oct 2019 16:45:28 +0000 (12:45 -0400)] 
Fix: bt2: clear Python error indicator in trace and trace class destruction listeners

When an exception is raised in a trace or trace class destruction
listener, we hit this assert:

    LIB/TRACE-CLASS destroy_trace_class@trace-class.c:110 Babeltrace 2 library postcondition not satisfied; error is:
    LIB/TRACE-CLASS destroy_trace_class@trace-class.c:110 Destruction listener kept a reference to the trace class being destroyed: tc-addr=0x6080000027a0, tc-is-frozen=0, tc-stream-class-count=0, tc-assigns-auto-sc-id=1
    LIB/TRACE-CLASS destroy_trace_class@trace-class.c:110 Aborting...

The problem is that we don't clear the error indicator on the error code
path after running the user code.  The error indicator (the exception)
keeps a reference to the Python stack, which has a reference to the
trace or trace class Python object.  This, in turn has kept a reference
to the Babeltrace trace or trace class object.

The solution is to clear the error indicator, which releases all of
this.

Another problem is that calling loge_exception_append_cause appends an
error cause, even though it's not valid to leave an error cause when
exiting those functions, as they don't return an error status.  That
error cause is left dangling and might wrongfully appear on an eventual
future error stack.

To fix it, use logw_exception instead of loge_exception_append_cause.
This matches what we do in component_class_finalize and
component_class_message_iterator_finalize, which are very similar
situations.

Change-Id: Ib756461610366badb6384577ad7cdf6468944be9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2224
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agobt2: normalize the code to use some commonly used patterns
Simon Marchi [Fri, 18 Oct 2019 22:09:55 +0000 (18:09 -0400)] 
bt2: normalize the code to use some commonly used patterns

This patch changes some functions in the Python bindings native code to
use some error handling patterns that are used elsewhere in the project.
I think they help avoid some mistakes, and always using the same
patterns helps to spot mistakes more easily.

- Don't initialize status/ret variables to OK when declaring them.  If
we do this and forget to assign them in some error path, we'll
wrongfully return OK.  By not initializing them, if we forget to set
them on some error path, the compilers or static analyzers will be able
to identify it as a problem because the variable will be used without
being initialized on that path.
- When checking for Python API calls failure, check if the returned
pointer is NULL instead of checking PyErr_Occurred().  It is equivalent,
but it's preferable to do it the same way everywhere.
- After each API call, have an error check with a "goto end;".

Change-Id: I54e62a77a0a9ab3d778edceb85cbf280b134db88
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2223
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agobt2: rename exception handling functions
Simon Marchi [Fri, 18 Oct 2019 19:18:27 +0000 (15:18 -0400)] 
bt2: rename exception handling functions

It's currently not very clear if the Python exception handling functions
append a Babeltrace error cause or clear the Python error indicator.
It's therefore easy to mis-use them.

Rename them to better indicate what they do.

Change-Id: I7dc31264196c6410e715c620cf9e4cd48a2711f6
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2222
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agosrc.ctf.fs: error out when failing to create index
Simon Marchi [Thu, 17 Oct 2019 19:52:07 +0000 (15:52 -0400)] 
src.ctf.fs: error out when failing to create index

This patch makes src.ctf.fs fail if it is not able to build an index for
a data stream file.  This is generally a sign of a corrupted trace.

The plan is to be strict by default (abort if we find the trace looks
corrupted), but to later introduce a parameter to tell the component to
make those checks not fatal.

So for now, we can assume that the index will always be present, hence
the comment change in fs.h.

Without this patch, the trace provided as a test leads to this abort:

    10-17 15:59:00.749 14522 14522 W PLUGIN/SRC.CTF.FS/DS build_index_from_idx_file@data-stream-file.c:462 [auto-disc-source-ctf-fs] Invalid LTTng trace index file; indexed size != stream file size: file-size=16699392, total-packets-size=16896000
    10-17 15:59:00.749 14522 14522 W PLUGIN/SRC.CTF.FS/DS build_index_from_stream_file@data-stream-file.c:596 [auto-disc-source-ctf-fs] Invalid packet size reported in file: stream="/tmp/single/ch-1_17", packet-offset=12701696, packet-size-bytes=4194304, file-size=16699392
    10-17 15:59:00.749 14522 14522 W PLUGIN/SRC.CTF.FS add_ds_file_to_ds_file_group@fs.c:789 [auto-disc-source-ctf-fs] Failed to index CTF stream file '/tmp/single/ch-1_17'

     (╯°□°)╯︵ ┻━┻  /home/smarchi/src/babeltrace/src/plugins/ctf/fs-src/fs.c:1572: fix_index_lttng_event_after_packet_bug(): Assertion `index` failed.
    [1]    14522 abort      ./src/cli/babeltrace2 /tmp/single

The reason is that the index fails to build (the cumulative packet sizes
is larger than the data stream file size), but we keep going anyway.
The fix_index_lttng_event_after_packet_bug function, expecting an index
to always be present, hits that assert.

I added the problematic trace to our test trace collection, and a new
test script "test_fail" to test how the src.ctf.fs component class
handles invalid traces.

Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: I5320102352eb8ef5004f0555dec2cc2736297a4f

5 years agobt2: Force usage of MapValue object on component init
Francis Deslauriers [Mon, 21 Oct 2019 16:22:30 +0000 (12:22 -0400)] 
bt2: Force usage of MapValue object on component init

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I95c7402a28020467d06083d231f3b5bd6eb1fe70
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2226
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoFix: consider index of all files for data stream groups with multiple files
Simon Marchi [Wed, 16 Oct 2019 21:21:09 +0000 (17:21 -0400)] 
Fix: consider index of all files for data stream groups with multiple files

The indexes associated to data stream file groups (dsfg) with multiple
files are incorrect.

The first time we process a file for a given dsfg, the group is created
using the index of that file.  Up to that point, it's fine.  When
processing the other files for that dsfg, the index is never used.  The
result is that the index for that dsfg only covers the time range of the
first file that was parsed, instead of the whole data stream.

Fix it by merging the index of the added file in
add_ds_file_to_ds_file_group, in the case where we add the file to an
existing group.

A test is added for this, in the form of a trace infos query.  The
implementation of this query uses the index data directly.

Change-Id: If1afd68be347210d1e258f8115b50547bc773760
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2212
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoUse assertRegex instead of assertRegexpMatches
Simon Marchi [Thu, 17 Oct 2019 15:37:28 +0000 (11:37 -0400)] 
Use assertRegex instead of assertRegexpMatches

I get these warnings when running against Python 3.7.4:

    tests/plugins/src.ctf.fs/query/test_query_trace_info.py:192: DeprecationWarning: Please use assertRegex instead.

Change-Id: I77cf2efc7aa74c4e4138e08c3ac1b9e618b718cd
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2215
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: src.ctf.fs: use BT_COMP_OR_COMP_CLASS_LOGE_APPEND_CAUSE when applicable
Simon Marchi [Wed, 16 Oct 2019 21:58:13 +0000 (17:58 -0400)] 
Fix: src.ctf.fs: use BT_COMP_OR_COMP_CLASS_LOGE_APPEND_CAUSE when applicable

Some functions in src.ctf.fs use BT_COMP_LOGE_APPEND_CAUSE when they
encounter an error.  However, they can be called in component class
context (as part of query handling).  A NULL self_comp can therefore be
passed to BT_COMP_LOGE_APPEND_CAUSE, which results in assertions like:

    LIB/CUR-THREAD bt_current_thread_error_append_cause_from_component@current-thread.c:132 Babeltrace 2 library precondition not satisfied; error is:
    LIB/CUR-THREAD bt_current_thread_error_append_cause_from_component@current-thread.c:132 Component is NULL:
    LIB/CUR-THREAD bt_current_thread_error_append_cause_from_component@current-thread.c:132 Aborting...

These functions should use BT_COMP_OR_COMP_CLASS_LOGE_APPEND_CAUSE and
receive both a self_comp and a self_comp_class.  This requires adding a
self_comp_class field to ctf_fs_create, which is mutually exclusive with
the self_comp field (since we are only in one of these contexts, not
both).

Change-Id: I9fc3ed1ac03a6f3bdb5b7c25b38264015d073116
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2213
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoCleanup: Dead assignments
Francis Deslauriers [Thu, 17 Oct 2019 14:13:27 +0000 (10:13 -0400)] 
Cleanup: Dead assignments

Scan-build reports multiple:
  Value stored to 'ret' is never read

Reported-by: Scan-build
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I48212d9f13a2cc1f1f8372fe444ddbe417d342b9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2214
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoCleanup: flt.lttng-utils.debug-info: Dead assignment
Francis Deslauriers [Tue, 15 Oct 2019 19:01:14 +0000 (15:01 -0400)] 
Cleanup: flt.lttng-utils.debug-info: Dead assignment

Since the `event_get_payload_build_id_length()` and
`event_get_payload_build_id_value()` functions, can't fail, make them
return void.

Scan-build report:
  Value stored to 'ret' is never read

Reported-by: Scan-Build - Dead assignment
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I950d0d327c19578d9b715e67417afd05f2ac2645
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2201
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoUpdate version to v2.0.0-rc1 v2.0.0-rc1
Jérémie Galarneau [Thu, 17 Oct 2019 19:55:51 +0000 (15:55 -0400)] 
Update version to v2.0.0-rc1

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If7e0f8ba2b9699dd21ff74a7d742bed1c2e277d0

5 years agoFix: avoid double-free in build_index_from_idx_file
Simon Marchi [Wed, 16 Oct 2019 20:45:22 +0000 (16:45 -0400)] 
Fix: avoid double-free in build_index_from_idx_file

If the validation at the end of build_index_from_idx_file fails, the
index_entry variable will still point to the last processed index entry.
That same entry will also have been added to the index->entries array.

In the error path, we free index_entry and the index object, which frees
that index entry twice.

Fix it by clearing index_entry after adding the entry to the index
object (the ownership is conceptually transferred).

I don't add a test with this patch, because the file that triggers this
bug now hits a bug further in the processing.  That file will be added
in the testsuite when it will no longer make babeltrace crash.

Change-Id: I091785895541105273c5d07d49f35628c2682e30
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2211
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
CI-Build: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: ctf: query.c: Unchecked fclose() return value
Francis Deslauriers [Tue, 15 Oct 2019 23:06:43 +0000 (19:06 -0400)] 
Fix: ctf: query.c: Unchecked fclose() return value

Coverity report:
  CID 1382583 (#1 of 1): Unchecked return value (CHECKED_RETURN)12.
  check_return: Calling fclose without checking return value (as is done
  elsewhere 9 out of 11 times).

Reported-by: Coverity (1382583) Unchecked return value
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: Ic5f7d46992b823bcb0571853da4ca23dcefe3d35
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2207
CI-Build: Jonathan Rajotte Julien <jonathan.rajotte-julien@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoBump required glib version to 2.28
Simon Marchi [Wed, 16 Oct 2019 19:27:11 +0000 (15:27 -0400)] 
Bump required glib version to 2.28

While investigating a hang in the lttng-live source component when
running with glib 2.22.5, we have found that this version had a bug in
g_ptr_array_remove_index_fast.  When removing the last element of the
array, the free func is not called.

It was fixed in the following commit:

https://github.com/GNOME/glib/commit/5fffa39b6ae8f8faf1036fbf07de02ffe84ef099

The first major release where this is fixed is 2.26.  We went through
the platforms we need to support, and the oldest glib version we need to
support is 2.28.6, on Solaris 11.  Therefore, fix the issue with
lttng-live by bumping the required glib version to 2.28.

Change-Id: Ib56ac221dfc5ecf45eb62b837fe0b6f54032cf31
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2210
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Jonathan Rajotte Julien <jonathan.rajotte-julien@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: test eq and ne operators of fields and values against arbitrary objects and...
Simon Marchi [Tue, 15 Oct 2019 22:29:05 +0000 (18:29 -0400)] 
tests: test eq and ne operators of fields and values against arbitrary objects and None

The binary operator tests that test comparing fields and values against
arbitrary objects and None are skipped for the eq and ne operators.
This patch modifies the tests to test those operators too.  Unlike other
operators, we don't expect them to raise an Exception.

Change-Id: Ia5f3c64d8223addc436ac23909e36f81814befee
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2206
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agotests: test_field.py: enable tests using _test_binop_lhs_value_same
Simon Marchi [Tue, 15 Oct 2019 21:13:36 +0000 (17:13 -0400)] 
tests: test_field.py: enable tests using _test_binop_lhs_value_same

Tests using _test_binop_lhs_value_same, that make sure that using a
binary operator on a field doesn't change that field's value, are
currently disabled.  The problem is this line, that tries to copy the
field:

    value_before = copy.copy(self._def)

Since we have removed everything related to copy of fields, this is
unsupported.  However, the same test but for unary operators copies the
Python value instead.  Change _test_binop_lhs_value_same to do the same.

It's not clear to me if copying the value is really necessary, but I
prefer to leave it like this at the moment.

Change-Id: Ib35cbb44c000293e7e8ba42c020b5ace649a268d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2205
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agobabeltrace2-intro(7): refer to `babeltrace2(1)` i/o `babeltrace2-convert(1)`
Philippe Proulx [Wed, 16 Oct 2019 18:19:13 +0000 (14:19 -0400)] 
babeltrace2-intro(7): refer to `babeltrace2(1)` i/o `babeltrace2-convert(1)`

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I3aafc3ca85d228ecb8c185871ab51bd5c25764f9

5 years agobabeltrace2-intro(7): add more changes since Babeltrace 1
Philippe Proulx [Wed, 16 Oct 2019 16:32:12 +0000 (12:32 -0400)] 
babeltrace2-intro(7): add more changes since Babeltrace 1

Also: categorize the changes into general, CLI, CTF, LTTng live, and
library changes.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibbe9c52583d45aa0fce543da3691fcb7e82fe87f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2209

5 years agoCleanup: src.ctf.lttng-live: Dead assignment
Francis Deslauriers [Tue, 15 Oct 2019 18:57:15 +0000 (14:57 -0400)] 
Cleanup: src.ctf.lttng-live: Dead assignment

scan-build report:
  Value stored to 'ret' is never read

Reported-by: Scan-Build - Dead assignment
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I9ee4163e6268cd96591723a5e4f04321fa86de2f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2180
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agotests: remove test_ctf_writer_clock.py
Simon Marchi [Tue, 15 Oct 2019 20:48:40 +0000 (16:48 -0400)] 
tests: remove test_ctf_writer_clock.py

Commit 0fd756a43bce605875565a14c1ed1b070fa3ad94 ("Remove everything
related to the `bt2.ctf_writer` Python module") removed the Python
bindings for the CTF writer.

A corresponding test is still there, but skipped.  I think it can be
removed as well.

Change-Id: I04091a0bc3f04a87c01947956108d83006d9330b
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2204
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: flt.lttng-utils.debug-info: Dereference after null check
Francis Deslauriers [Thu, 10 Oct 2019 15:23:55 +0000 (11:23 -0400)] 
Fix: flt.lttng-utils.debug-info: Dereference after null check

Coverity report:
  CID 1401218 (#1 of 1): Dereference after null check (FORWARD_NULL)
  4. var_deref_op: Dereferencing null pointer bin.

Reported-by: Coverity (1401218) Dereference after null check
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I1821a4f2e39096cb3dca75033ab9ce25f4b63127
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2167
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
CI-Build: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agodoc/man/common-footer.txt: fix Git repository and bug tracker resources
Philippe Proulx [Tue, 15 Oct 2019 21:52:50 +0000 (17:52 -0400)] 
doc/man/common-footer.txt: fix Git repository and bug tracker resources

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9a33508514fc5d3bf2c991105e6c17e3014db664

5 years agoUpdate project's README
Philippe Proulx [Fri, 11 Oct 2019 19:41:44 +0000 (15:41 -0400)] 
Update project's README

This patch rewrites the README file as `README.adoc`.

`README.adoc` indicates:

* What Babeltrace 2 is.
* How Babeltrace 2 is different from Babeltrace 1.
* What are the project's build-time and run-time requirements.
* How to build Babeltrace 2.
* How to build Babeltrace 2 for development.
* Where the Babeltrace community is.

The file refers to the Babeltrace website for the reader to learn more
about the project.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I1b7ce8e949fb91616f2672f94b7e8d346a6a368b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2177

5 years agodoc/man/common-footer.txt: refer to `#lttng` IRC channel only
Philippe Proulx [Tue, 15 Oct 2019 21:33:31 +0000 (17:33 -0400)] 
doc/man/common-footer.txt: refer to `#lttng` IRC channel only

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I4c3246024184dbc024b56c98ec1162e984894cbc

5 years agodoc/man/common-footer.txt: update bug tracker resource
Philippe Proulx [Tue, 15 Oct 2019 20:08:16 +0000 (16:08 -0400)] 
doc/man/common-footer.txt: update bug tracker resource

Jérémie Galarneau, the current Babeltrace maintainer, decided that we
officially use the LTTng bug tracker instead of the LF one.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If7df7bae7b99dac80257f1fc45672f424569b68b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2202

5 years agolib, plugins: use bt_field_class_type_is() where suitable
Philippe Proulx [Thu, 10 Oct 2019 21:35:13 +0000 (17:35 -0400)] 
lib, plugins: use bt_field_class_type_is() where suitable

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I0cf5c50ab1a0a526678a50a34b2401ac16094eb0
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2172
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agolib: use powers of two for object type enumerators
Philippe Proulx [Thu, 10 Oct 2019 16:03:36 +0000 (12:03 -0400)] 
lib: use powers of two for object type enumerators

For all object type enumerators, that is, enumerators containing
`_TYPE`, use powers of two instead of sequential values.

This makes it possible to test that a given object has one or more
given types with a single bitwise operation, for example:

    bt_field_class_type fc_type = bt_field_class_get_type(my_fc);

    if (fc_type &
            (BT_FIELD_CLASS_TYPE_STATIC_ARRAY |
             BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD |
             BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD)) {
        /* `my_fc` is an array */
    }

To make things easier, I'm also introducing one type enumerator per
"abstract" field class type. For example:

* `BT_FIELD_CLASS_TYPE_SIGNED_INTEGER`
* `BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION`
* `BT_FIELD_CLASS_TYPE_REAL`
* `BT_FIELD_CLASS_TYPE_ARRAY`
* `BT_FIELD_CLASS_TYPE_OPTION_WITH_SELECTOR_FIELD`

No field class object has those exact types, but their type can have
those bits set. For example, all the integer field class types have
bit 2 set. Then, if you need to know if a given type is conceptually
a given type, use bt_field_class_type_is(), which
returns:

    (type & type_to_check) == type_to_check

Each `BT_FIELD_CLASS_TYPE_*` enumerator conceptually matches, more or
less, a field class `bt2` Python class. For example:

* `BT_FIELD_CLASS_TYPE_ARRAY` → `bt2._ArrayFieldClass`
* `BT_FIELD_CLASS_TYPE_REAL` → `bt2._RealFieldClass`

The C to Python equivalent expressions are:

Object has a specific type:
    C:

        bt_field_class_get_type(fc) == BT_FIELD_CLASS_TYPE_X

    Python:

        type(fc) is bt2._XFieldClassConst

Object is an instance of a conceptual type:
    C:

        bt_field_class_type_is(bt_field_class_get_type(obj),
                               BT_FIELD_CLASS_TYPE_ABC)

    Python:

        isinstance(fc, bt2._AbcFieldClassConst)

Of course it's more natural in Python, but Python was not developed in
1972.

All `BT_FIELD_CLASS_TYPE_*` enumerators are `unsigned long long` values
and the non-API `__BT_FIELD_CLASS_TYPE_BIG_VALUE` is `1ULL << 62`
because we could have more than 32 enumerators eventually so I want to
make sure the `bt_field_class_type` type is a 64-bit integer for ABI
compatibility reasons.

Because the enumerators are not sequential anymore, we can't use them
directly as the indexes of lookup tables. This is why bt_field_create()
and bt_field_destroy() now check the FC type explicitly instead of using
lookup tables. Those functions are not called often anyway as field
objects are always created and destroyed from object pools.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I1b5110f691e1eabc0ce9291c0281755a3c6a755b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2171
CI-Build: Simon Marchi <simon.marchi@efficios.com>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agolib: rename option/var. "selector" to "selector field"
Philippe Proulx [Thu, 10 Oct 2019 15:47:06 +0000 (11:47 -0400)] 
lib: rename option/var. "selector" to "selector field"

This is to be parallel with the "length field" API of dynamic array FCs.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I41d53ca7aa110cd6db5c827020af3c8d67b2392c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2170
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib: have dedicated "dynamic array FC with/without length field" types
Philippe Proulx [Thu, 10 Oct 2019 15:35:29 +0000 (11:35 -0400)] 
lib: have dedicated "dynamic array FC with/without length field" types

This is to match what is already done for option and variant field
classes: you can know with their type enumerator whether or not they
have a selector and which type it is.

Now, when you pass `NULL` as the length FC to
bt_field_class_array_dynamic_create(), you get a FC with the type
`BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD`. Otherwise
it is `BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD`.

Now you can only call
bt_field_class_array_dynamic_with_length_field_borrow_length_field_path_const()
with a FC having the type
`BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD`. The way to know
whether or not the dynamic array FC has a length field path is to check
its type.

In the Python bindings, there are dedicated
`_DynamicArrayWithLengthFieldFieldClass` and
`_DynamicArrayWithLengthFieldFieldClassConst` classes to match the
library changes. The `length_field_path` property is only available in
those.

A `sink.text.details` component now writes

    Dynamic array (no length field)

and

    Dynamic array (with length field)

depending on the dynamic array FC's type.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibdc0ef1110bf05d517b241ba4f6a9a631ade8a0c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2169
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: destroy_pretty_data: move NULL check earlier
Simon Marchi [Tue, 15 Oct 2019 18:32:00 +0000 (14:32 -0400)] 
Fix: destroy_pretty_data: move NULL check earlier

Move the NULL check for pretty before we dereference it.

Reported-by: Coverity
Change-Id: I2e598e734d4503ec17754dabf915d8264edcf4a7
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2179
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: make test_intersection use bt_cli, test error cases
Simon Marchi [Thu, 19 Sep 2019 19:45:53 +0000 (15:45 -0400)] 
tests: make test_intersection use bt_cli, test error cases

The way test_intersection is written doesn't make it check whether the
babeltrace2 binary exits with success or failure.  In two cases
(nointersect and nostream), the babeltrace2 binary errors out, but it
isn't explicitly validated by the test, so it's unclear whether this is
the behavior we want.  The test just validates that nothing is output on
stdout, but that could happen because the process prints nothing and
exits with success, or because it prints an error on stderr and exits
with a failure status code.

This patch improves the test by making it use bt_cli instead of running
the babeltrace2 binary directly.  This helps when troubleshooting the
test, since bt_cli prints the full command line with which it invokes
babeltrace2.

Then, it makes the test check the exit status of babeltrace2.  In the
cases nointersect and nostream, we validate that it exits with a
non-zero status code, and that it prints an expected error string on
stderr.  It adds a relatively trivial call to
BT_COMP_CLASS_LOGE_APPEND_CAUSE in the src.ctf.fs query code to make the
error message clearer in the nostream case.

I don't know if the current behavior of babeltrace2 in these two cases
is the one we want, but the goal of this patch is merely to update the
test to better test the current behavior.  If we'd like a different
behavior, we can always modify babeltrace2 and the test later.

Change-Id: I1d6e616005369e397c98bdb1e40407e4e3959cc9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2068
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: check for NULL in destroy_pretty_data
Simon Marchi [Sun, 13 Oct 2019 03:11:57 +0000 (23:11 -0400)] 
Fix: check for NULL in destroy_pretty_data

In pretty_init, if create_pretty fails, we go to the `error` label and
call destroy_pretty_data.  However, destroy_pretty_data does not accept
a NULL pointer.

My understanding is that our "destroy" functions generally check for a
NULL pointer, and return early in that case.

Change destroy_pretty_data to do just that.

Fixes Coverity:

    *** CID 1405908:  Null pointer dereferences  (FORWARD_NULL)
    /src/plugins/text/pretty/pretty.c: 588 in pretty_init()
    582      bt_self_component_set_data(self_comp, pretty);
    583
    584      status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
    585      goto end;
    586
    587     error:
    >>>     CID 1405908:  Null pointer dereferences  (FORWARD_NULL)
    >>>     Passing null pointer "pretty" to "destroy_pretty_data", which dereferences it.
    588      destroy_pretty_data(pretty);
    589
    590     end:
    591      return status;

Reported-by: Coverity
Change-Id: I65ec6f8b2781c0a3a1166a1e68da1f47dc2da452
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2178
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoCleanup: src.ctf.lttng-live: coding style
Francis Deslauriers [Thu, 10 Oct 2019 19:23:49 +0000 (15:23 -0400)] 
Cleanup: src.ctf.lttng-live: coding style

This commit fixes a few annoying coding style violations. Mainly number
of tabs when breaking line.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: If09f57c6f864c3446fc9f9d36c7fce7eb21990ae
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2168
Tested-by: jenkins <jenkins@lttng.org>
5 years agoCleanup: flt.lttng-utils.debug-info: coding style fixes
Francis Deslauriers [Fri, 11 Oct 2019 14:00:50 +0000 (10:00 -0400)] 
Cleanup: flt.lttng-utils.debug-info: coding style fixes

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I184e9beb2be0f8205a3ba604d8a1bac5fa4fc42c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2173
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoFix: avoid -Wmaybe-uninitialized warning in validate_map_value_entry
Simon Marchi [Fri, 11 Oct 2019 19:12:33 +0000 (15:12 -0400)] 
Fix: avoid -Wmaybe-uninitialized warning in validate_map_value_entry

We get this warning when building with gcc at -Og:

    /home/smarchi/src/babeltrace/src/plugins/common/param-validation/param-validation.c: In function ‘validate_map_value_entry’:
    /home/smarchi/src/babeltrace/src/plugins/common/param-validation/param-validation.c:182:18: error: ‘candidate’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
       data->status = validate_value(value, &candidate->value_descr,
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        data->ctx);
        ~~~~~~~~~~

Even though the code looks safe, we can modify it a little bit to avoid
that warning, and maybe even be a bit more readable.

Change-Id: I7a87d8125732744c4ff45fc0c0863c6dc9c26173
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2176
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: actually run the param validation test
Simon Marchi [Fri, 11 Oct 2019 16:23:56 +0000 (12:23 -0400)] 
Fix: actually run the param validation test

And fix the number of expected tests.

Change-Id: I4cd5cad27b3ae142d0c9a35b04c46241408677d3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2175
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: don't use BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_MEMORY_ERROR
Simon Marchi [Fri, 11 Oct 2019 14:56:39 +0000 (10:56 -0400)] 
Fix: don't use BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_MEMORY_ERROR

BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_MEMORY_ERROR has been removed,
so don't use it in validate_map_value.

Fixes the following compilation error:

    /home/smarchi/src/babeltrace/src/plugins/common/param-validation/param-validation.c: In function ‘validate_map_value’:
    /home/smarchi/src/babeltrace/src/plugins/common/param-validation/param-validation.c:226:30: error: ‘BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_MEMORY_ERROR’ undeclared (first use in this function); did you mean ‘BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_INTERRUPTED’?
      if (foreach_entry_status == BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_MEMORY_ERROR) {
                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                  BT_VALUE_MAP_FOREACH_ENTRY_CONST_STATUS_INTERRUPTED

Change-Id: Idc4ed1b198bfa40c9b3ba9d9532d69795f893c90
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2174
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agofilter.utils.trimmer: validate parameters using param-validation
Simon Marchi [Tue, 8 Oct 2019 20:59:14 +0000 (16:59 -0400)] 
filter.utils.trimmer: validate parameters using param-validation

This patch makes filter.utils.trimmer validate its parameters using the
param-validation utility.

Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ie127b424fed046cf6c4c6d043c84297982270fea
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2157
Tested-by: jenkins <jenkins@lttng.org>
5 years agofilter.utils.muxer: validate parameters using param-validation
Simon Marchi [Tue, 8 Oct 2019 20:59:03 +0000 (16:59 -0400)] 
filter.utils.muxer: validate parameters using param-validation

This patch makes filter.utils.muxer validate its parameters using the
param-validation utility.  The muxer component doesn't accept any
parameters, but at least this makes it verify that it doesn't receive
any unexpected parameter.

Change-Id: Ia89313c9b9b1fddd244b757a235be201ff5eb230
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2156

5 years agosink.utils.dummy: validate parameters using param-validation
Simon Marchi [Tue, 8 Oct 2019 19:27:43 +0000 (15:27 -0400)] 
sink.utils.dummy: validate parameters using param-validation

This patch makes sink.utils.counter validate its parameters using the
param-validation utility.  The dummy component doesn't accept any
parameters, but at least this makes it verify that it doesn't receive
any unexpected parameter.

Change-Id: I58493af30b04015d53c367487d294ded981539d2
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2155
Tested-by: jenkins <jenkins@lttng.org>
5 years agosink.utils.counter: validate parameters using param-validation
Simon Marchi [Tue, 8 Oct 2019 19:21:55 +0000 (15:21 -0400)] 
sink.utils.counter: validate parameters using param-validation

This patch makes sink.utils.counter validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: I0355eef4f1d7ecdfe4b943ff5f71af429b9419fa
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2154
CI-Build: Francis Deslauriers <francis.deslauriers@efficios.com>

5 years agosink.text.pretty: validate parameters using param-validation
Simon Marchi [Mon, 7 Oct 2019 20:26:53 +0000 (16:26 -0400)] 
sink.text.pretty: validate parameters using param-validation

This patch makes sink.text.pretty validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: I38235df6c7582928e96c06512a2630763cd2759f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2148
Tested-by: jenkins <jenkins@lttng.org>
5 years agosrc.text.dmesg: validate parameters using param-validation
Simon Marchi [Mon, 7 Oct 2019 19:52:33 +0000 (15:52 -0400)] 
src.text.dmesg: validate parameters using param-validation

This patch makes src.text.dmesg validate its parameters using the
param-validation utility, instead of doing it by hand.

The

   Cannot specify both `read-from-stdin` and `path` parameters.

error seems unreachable, as there's no way that read_from_stdin can be
true when we read the path parameter.  I presume that there used to be a
read-from-stdin parameter, making this situation possible, but that it
was eventually removed.

Change-Id: Ie4c82968ba0aae24fc479a0f4442c92d50c489e4
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2147

5 years agosink.text.details: validate parameters using param-validation
Simon Marchi [Mon, 7 Oct 2019 19:21:14 +0000 (15:21 -0400)] 
sink.text.details: validate parameters using param-validation

This patch makes sink.text.details validate its parameters using the
param-validation utility, instead of doing it by hand.

To be able to re-use the parameter names in the statically defined
array, I had to change them to macros, to avoid this warning:

/home/smarchi/src/babeltrace/src/plugins/text/details/details.c:244:4: error: initializer element is not constant
  { color_param_name, BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { BT_VALUE_TYPE_STRING, .string = {
    ^~~~~~~~~~~~~~~~

Change-Id: I4279348e8441c22afe1ae47a6650d0a118cfa42a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2146
Tested-by: jenkins <jenkins@lttng.org>
5 years agoflt.lttng-utils.debug-info: validate parameters using param-validation
Simon Marchi [Sat, 5 Oct 2019 05:14:21 +0000 (01:14 -0400)] 
flt.lttng-utils.debug-info: validate parameters using param-validation

This patch makes sink.ctf.fs validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: Iaa8cc02bd82ad7e1af2d18e1f1f7b73c5c5c8f19
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2142
CI-Build: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoflt.lttng-utils.debug-info: tidy up component initialization
Simon Marchi [Sat, 5 Oct 2019 05:01:34 +0000 (01:01 -0400)] 
flt.lttng-utils.debug-info: tidy up component initialization

Assign add_port_status to status directly, as has been the accepted
pattern in the rest of the project for a while.  This is less verbose
than using a switch-case.

Make init_from_params return a
bt_component_class_initialize_method_status, since it's only used in the
context of component initialization.  The alert reader will notice that
this function can't fail, making it pointless to have it return a
status.  However, it will be able to fail in the next patch, so I chose
to leave a non-void return type.

Change-Id: I41c1f6dc9dea5cbda4ef33f336d4b2cff216a568
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2141
Tested-by: jenkins <jenkins@lttng.org>
5 years agosrc.ctf.lttng-live: validate parameters using param-validation
Simon Marchi [Sat, 5 Oct 2019 03:17:29 +0000 (23:17 -0400)] 
src.ctf.lttng-live: validate parameters using param-validation

This patch makes src.ctf.lttng-live validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: I4abbf7a9e44bd04c1ecc620ab19b5084af2c68ef
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2140
Tested-by: jenkins <jenkins@lttng.org>
5 years agosink.ctf.fs: validate parameters using param-validation
Simon Marchi [Fri, 4 Oct 2019 21:19:35 +0000 (17:19 -0400)] 
sink.ctf.fs: validate parameters using param-validation

This patch makes sink.ctf.fs validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: I2d5433793a695f33935f7d2c3942c917145687db
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2137
Tested-by: jenkins <jenkins@lttng.org>
5 years agosrc.ctf.fs: validate parameters using param-validation
Simon Marchi [Fri, 4 Oct 2019 20:17:00 +0000 (16:17 -0400)] 
src.ctf.fs: validate parameters using param-validation

This patch makes src.ctf.fs validate its parameters using the
param-validation utility, instead of doing it by hand.

Change-Id: I3da43ba86417cc5bffb4b58e3052c38a1d08c602
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2136
Tested-by: jenkins <jenkins@lttng.org>
5 years agoAdd parameter validation utility
Simon Marchi [Fri, 4 Oct 2019 20:16:47 +0000 (16:16 -0400)] 
Add parameter validation utility

This patch adds a utility to help component classes validate the
parameters they receive (either for component initialization or query).

The definition of what constitutes valid parameters for a component
class is done by filling C structures describing each expected value
(see included test for examples).

Since this is made for parameter validation, and not general-purpose
value validation, the entry point bt_param_validation_validate assumes
that the root value is a map (and is therefore validated as a map, as
described below).

For parameters that have simple validation rules, it is enough to fill
the `type` field of bt_param_validation_value_descr, and perhaps the
additional fields associated to the type.

For array values, the description includes the minimum and maximum sizes
the array can have (use BT_PARAM_VALIDATION_INFINITE if there's no max).
It also includes a pointer to the description of its element values.

For map values, the description includes a list of possible map entries.
For each entry, we have the key, whether the entry is mandatory and the
description of the value.

For string values, the description may include a list of choices.  If it
does, the string value must be in this list.

For parameters that have more complex validation rules, for example
parameters whose value can be of different types, it is possible to set
the `validation_func` field.  If it is set, this function will be called
and is responsible for validating the value.

If the validation fails, an error message is produced, which includes
the full scope where the error occured (again, see the test for an
example).

Change-Id: If729415fdd8ce97fa94b79e8bf79461e46ebf2bc
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2119
Tested-by: jenkins <jenkins@lttng.org>
5 years agocli: ensure queries always receive a map
Francis Deslauriers [Thu, 10 Oct 2019 14:50:57 +0000 (10:50 -0400)] 
cli: ensure queries always receive a map

Note that with this commit it's possible to have multiple `--params`
options for the same query object. Before, that the last `--params`
would overwrite any previous ones.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: Id63354024a4464cc65ddab2e2e0a168c36dc377d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2164
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoCleanup: ctf: logically dead code
Francis Deslauriers [Thu, 10 Oct 2019 15:11:06 +0000 (11:11 -0400)] 
Cleanup: ctf: logically dead code

The `iter_status` variable is guaranteed to be equal to
`BT_MSG_ITER_STATUS_OK` when breaking from the `do-while` loop above.

Coverity report:
  CID 1401337 (#1 of 1): Logically dead code (DEADCODE) dead_error_line:
  Execution cannot reach this statement: goto error;

Reported-by: Coverity (1401337) - Logically dead code
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I51448d800b8ed37e80ce64b77df3905c8042b1bf
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2166
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: rename PRINT_FORMAT to TAP_PRINTF_FORMAT
Simon Marchi [Thu, 10 Oct 2019 15:14:36 +0000 (11:14 -0400)] 
tests: rename PRINT_FORMAT to TAP_PRINTF_FORMAT

Use a namespace, so we can define our own for the rest of babeltrace
(will be called BT_PRINTF_FORMAT) without colliding.

Change-Id: I03f5d4cf050f94de294bb179450876b300d53b91
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2165
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agovalues: make `bt_value_map_extend()` extend the provided base map
Francis Deslauriers [Wed, 9 Oct 2019 19:36:22 +0000 (15:36 -0400)] 
values: make `bt_value_map_extend()` extend the provided base map

The current behavior of this function is to create a new extended map
leaving the two provided maps untouched. I can see cases where that
would be useful, but I believe the user is going to expect the
`_extend()` function to extend an existing map.

If a user want to get a new map, she could still copy the base map using
`bt_value_copy()` before extending it.

So this commit changes the behavior of `bt_value_map_extend()` so that
it takes two arguments: the base map, and the extension map. The entries
of the extension map are added to the base map, overwriting any existing
keys.

Also, remove the `_MEMORY_ERROR` status from the
`bt_value_map_foreach_entry_status` and
`bt_value_map_foreach_entry_const_status` enums since those two are not
used at the moment.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I8fa7d4591da90dae50316d6db86af5ab1b76203c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2162
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agotests: make test names in plugins/flt.utils.trimmer/test_trimming unique
Simon Marchi [Wed, 9 Oct 2019 19:45:51 +0000 (15:45 -0400)] 
tests: make test names in plugins/flt.utils.trimmer/test_trimming unique

Change-Id: I1f1e4ef2a8eaa79704848a765f0bc209e7ee4b92
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2163
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: format string warnings on mingw
Simon Marchi [Wed, 9 Oct 2019 19:10:00 +0000 (15:10 -0400)] 
Fix: format string warnings on mingw

Since we have added format string attributes in the tap.h file, we get
these diagnostics on Windows:

      CC       test_bitfield.o
    test_bitfield.c: In function 'run_test_unsigned_write':
    test_bitfield.c:51:36: error: unknown conversion type character 'l' in format [-Werror=format=]
       51 | #define DIAG_FMT_STR(val_type_fmt) "Failed reading value written \"%s\"-wise, with start=%i" \
          |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    test_bitfield.c:51:36: note: in definition of macro 'DIAG_FMT_STR'
       51 | #define DIAG_FMT_STR(val_type_fmt) "Failed reading value written \"%s\"-wise, with start=%i" \
          |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    test_bitfield.c:173:8: note: in expansion of macro 'check_result'
      173 |    if (check_result(src_ui, readval, target.c, unsigned char,
          |        ^~~~~~~~~~~~
    test_bitfield.c:175:9: note: format string is defined here
      175 |      "%llX")) {
          |         ^

By default, printf on Windows doesn't know about the `ll` format string
length modifier (as in %llx).  However, we build Babeltrace with the
__USE_MINGW_ANSI_STDIO macro defined, which makes mingw use a
replacement printf implementation that knows about `ll`.

When we define our own functions with a format attribute, we must then
use __MINGW_PRINTF_FORMAT instead of `printf`.  __MINGW_PRINTF_FORMAT
will take the right value, depending on __USE_MINGW_ANSI_STDIO, so it
will validate the format string according to the selected printf
implementation.

Change-Id: I89b194e915250a0e0a617817a1cd10fedb156639
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2161
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: lib: field-class.c: memory leak on error
Francis Deslauriers [Wed, 9 Oct 2019 14:05:18 +0000 (10:05 -0400)] 
Fix: lib: field-class.c: memory leak on error

scan-build report:
  Potential leak of memory pointed to by 'var_with_sel_fc'
  File: src/lib/trace-ir/field-class.c Line: 1524

Reported-by: scan-build
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I6f52562c8549810ffb82c6ae4b34707ad6a32576
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2158
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoCleanup: lib: field-class.c: fix logging message for variant FC
Francis Deslauriers [Wed, 9 Oct 2019 15:19:33 +0000 (11:19 -0400)] 
Cleanup: lib: field-class.c: fix logging message for variant FC

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I5b23f843493d7c68121c262e5cbd795503996ad9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2159
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoRequire automake >= 1.12
Michael Jeanson [Tue, 8 Oct 2019 18:25:36 +0000 (14:25 -0400)] 
Require automake >= 1.12

The test suite LOG_DRIVER statement requires that automake >= 1.12 be used
during bootstrap.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I848324bfabcf158f53bed5ed4c1045546e9a8ce5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2152
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoFix: fix wint_t warning on MSYS2/mingw
Simon Marchi [Wed, 9 Oct 2019 16:12:38 +0000 (12:12 -0400)] 
Fix: fix wint_t warning on MSYS2/mingw

We get the following warning when compiling on Windows:

    common.c: In function 'handle_conversion_specifier_std':
    common.c:1419:30: warning: 'wint_t' {aka 'short unsigned int'} is promoted to 'int' when passed through '...'
     1419 |    BUF_STD_APPEND_SINGLE_ARG(wint_t);
          |                              ^
    common.c:1419:4: note: in expansion of macro 'BUF_STD_APPEND_SINGLE_ARG'
     1419 |    BUF_STD_APPEND_SINGLE_ARG(wint_t);
          |    ^~~~~~~~~~~~~~~~~~~~~~~~~
    common.c:1419:30: note: (so you should pass 'int' not 'wint_t' {aka 'short unsigned int'} to 'va_arg')
     1419 |    BUF_STD_APPEND_SINGLE_ARG(wint_t);
          |                              ^

When expanded, this problematic macro usage contains:

    wint_t _arg = va_arg(*args, wint_t);

I think the suggestion of passing `int`, not `wint_t` makes sense.  This
is because any integral argument smaller than an int would have already
been promoted to int when passed to the variable arguments function
that eventually called handle_conversion_specifier_std.  So it makes
sense to fetch this variable as an int.

We don't see this warning on x86-64 Linux because there, sizeof(wint_t)
is 4, the same as an int.

Change-Id: Ia1519b15a56a58022254be98597c1f3e020db9b9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2160
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agosrc.ctf.lttng-live: make lttng_live_component_create static
Simon Marchi [Sat, 5 Oct 2019 02:46:17 +0000 (22:46 -0400)] 
src.ctf.lttng-live: make lttng_live_component_create static

This function is not used outside this file, so make it static.

Change-Id: If2836f7eea7c8243d26088b4e026b31a4ed8c82d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2139
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoCleanup: flt.lttng-utils.debug-info: coding style
Francis Deslauriers [Fri, 4 Oct 2019 18:58:26 +0000 (14:58 -0400)] 
Cleanup: flt.lttng-utils.debug-info: coding style

When I first wrote this component class, I was using the wrong coding
style standard. More specifically, the main problem is that the number
of tabs on breaking lines is wrong at bunch places in the debug-info
files.

I am currently working on this code and it annoyed me. So I fixed most
of it.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I41b3d6b3a35546e5ce4f65470bed1303966523c4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2134
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoport: fix link order of babeltrace2.exe
Michael Jeanson [Tue, 8 Oct 2019 19:20:39 +0000 (15:20 -0400)] 
port: fix link order of babeltrace2.exe

On both Cygwin and MINGW, the link order of static libraries in an exe
requires the dependent libraries to come first. In this case
'libbabeltrace2-param-parse.la' depends on 'libbabeltrace2.la' for the
'bt_value_bool_create_init' symbol and thus has to be listed before.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I64df3dddcc65233c63f61af3fe7a6a093990c203
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2153
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: lib: field.c: calling _PUT_REF() on unique objects on error
Francis Deslauriers [Tue, 8 Oct 2019 13:50:47 +0000 (09:50 -0400)] 
Fix: lib: field.c: calling _PUT_REF() on unique objects on error

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I91b22cc4afa492f56cf2a1f460bb29dd61c96c08
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2150
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agolib: rename `bt_*_compare()` to `bt_*_is_equal()`
Francis Deslauriers [Mon, 7 Oct 2019 19:22:58 +0000 (15:22 -0400)] 
lib: rename `bt_*_compare()` to `bt_*_is_equal()`

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I7782ad5c7b5374e88d5f0e31c4fe3fec4e4bea6c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2145
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agoCleanup: lib: graph.c: dead assignment
Francis Deslauriers [Tue, 8 Oct 2019 01:54:21 +0000 (21:54 -0400)] 
Cleanup: lib: graph.c: dead assignment

Reported-by: Scan-build - Dead assignment
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I512551f8ca951eeb004c0a819e7123c363eb5036
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2149
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
5 years agoFix: fix some warnings shown with -Wextra on gcc 9.1.0
Simon Marchi [Sat, 5 Oct 2019 04:02:59 +0000 (00:02 -0400)] 
Fix: fix some warnings shown with -Wextra on gcc 9.1.0

Fix this:

    /home/simark/src/babeltrace/src/ctf-writer/event.c: In function ‘bt_ctf_event_create’:
    /home/simark/src/babeltrace/src/ctf-writer/event.c:626:3: error: cast between incompatible function types from ‘void (*)(struct bt_ctf_field_wrapper *)’ to ‘void (*)(void *, void *)’ [-Werror=cast-function-type]
      626 |   (release_header_field_func) destroy_event_header_field);
          |   ^

by adding a second parameter, stream_class, to destroy_event_header_field, to
match the release_header_field_func type (which takes two pointers).

Fix this:

    /home/simark/src/babeltrace/src/lib/trace-ir/clock-class.c: In function ‘bt_clock_class_create’:
    /home/simark/src/babeltrace/src/lib/trace-ir/clock-class.c:125:3: error: cast between incompatible function types from ‘void (*)(struct bt_clock_snapshot *, struct bt_clock_class *)’ to ‘void * (*)(void *, void *)’ [-Werror=cast-function-type]
      125 |   (bt_object_pool_destroy_object_func)
          |   ^

by making bt_object_pool_destroy_object_func return `void` instead of `void *`
(none of the implementations actually return anything, it seems like a copy
paste error from the typedef above).

Change-Id: I8707a4a3b3eb34d84604f9b8117a20eaa5f50c83
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2138
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: test_output_path_ctf_non_lttng_trace_output small improvements
Simon Marchi [Sat, 5 Oct 2019 05:37:25 +0000 (01:37 -0400)] 
tests: test_output_path_ctf_non_lttng_trace_output small improvements

- Give a name to temporary directories
- Use bt_cli, so the executed command lines are printed

Change-Id: Ife9cadbabeca86a58ac976dc61b7c4c8d25c6efb
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2143
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agoMove CLI params parsing to its own lib
Simon Marchi [Fri, 4 Oct 2019 19:00:01 +0000 (15:00 -0400)] 
Move CLI params parsing to its own lib

This will allow using it for parameter parsing in a test, for
convenience.

The sharp-eyed reader will have noticed that this patch also removes
unused structures from src/cli/babeltrace2-cfg-cli-args.c.  These were
likely forgotten there when the parameter parsing code was moved to its
own file.

Change-Id: Ibc7ecb238905051492718f1d176c0fb5f0c172a8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2135
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoCleanup: flt.lttng-utils.debug-info: remove leftover comments
Francis Deslauriers [Thu, 3 Oct 2019 20:48:00 +0000 (16:48 -0400)] 
Cleanup: flt.lttng-utils.debug-info: remove leftover comments

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I98412f2f27d8b3c7611f26021b1e8dca12062b87
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2131
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agoFix: tests: remove unused imports
Simon Marchi [Mon, 7 Oct 2019 18:48:54 +0000 (14:48 -0400)] 
Fix: tests: remove unused imports

Change-Id: I5969e33915073d9638dbdcc0ec6c49afec81d5e7
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2144

5 years agocli: update error message in set_stream_intersections
Simon Marchi [Wed, 2 Oct 2019 15:33:03 +0000 (11:33 -0400)] 
cli: update error message in set_stream_intersections

The error message printed when the `babeltrace.trace-infos` query fails,
regardless of the reason, is "Component class does not support the
`babeltrace.trace-infos` query".  I think it's misleading, because this
is just one particular error case.  It could be that the component class
supports the query, but failed because it didn't like the parameters we
passed.

Update the message to be a bit more generic.  The fail_reason printed
just after gives a bit more precision about the error.

Change-Id: If556129b612cb6aa9c480b3f863368e48e8a6d4a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2115
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agotests: get rid of missing-field-initializers warning in test_bin_info.c
Simon Marchi [Fri, 4 Oct 2019 18:39:09 +0000 (14:39 -0400)] 
tests: get rid of missing-field-initializers warning in test_bin_info.c

This is not super important, and the current code looks correct, but
clang produces this warning:

    /home/smarchi/src/babeltrace/tests/plugins/flt.lttng-utils.debug-info/test_bin_info.c:93:7:
    error: missing field 'short_name' initializer
    [-Werror,-Wmissing-field-initializers]
            {NULL}};

I'd like to have this warning enabled, since it can catch some
legitimate mistakes, so I thought it would be useful to change the code
to avoid having a warning.

Change-Id: Icb5d3227b87ba1bbf405cd320f13886bf313492f
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2133
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agotests: constify format strings in tap.h
Simon Marchi [Fri, 4 Oct 2019 16:44:05 +0000 (12:44 -0400)] 
tests: constify format strings in tap.h

Format strings are typically read-only data (literal strings), and they
are not modified by the functions receiving them, so it makes no sense
for them not to be const.

This helps avoid some "passing value to function foo discards const
qualifier" kind of warnings.

Change-Id: Ibaaaf5690bed21e1d541f1b676627dfd70541219
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2130
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: add format attributes to functions receiving format strings in tap.h
Simon Marchi [Fri, 4 Oct 2019 16:27:04 +0000 (12:27 -0400)] 
tests: add format attributes to functions receiving format strings in tap.h

This makes the compiler validate the format strings against the types of
the passed arguments.  It found a few (minor) issues, which are also
fixed by this patch.

Note that in test_bitfield.c, the format string now includes "0x" before
printing the number in hexadecimal, to avoid any confusion when the user
reads it.

Change-Id: I07cac88aa3cdd445d79f2c12bc0f9333f6a768a9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2129
Tested-by: jenkins <jenkins@lttng.org>
5 years agotrace{-class}.c: BT_ASSERT_PRE() -> BT_ASSERT_POST() (ref. count check)
Philippe Proulx [Fri, 4 Oct 2019 10:54:29 +0000 (06:54 -0400)] 
trace{-class}.c: BT_ASSERT_PRE() -> BT_ASSERT_POST() (ref. count check)

Those are postcondition assertions because they check some state after a
user function returns.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I3705ee451ff8ae024a2eb17fbe6ae9cc2b11d05e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2127
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib: rename `bt_object_{get,put}_no` -> `bt_object_{get,put}_ref_no`
Philippe Proulx [Thu, 3 Oct 2019 21:14:10 +0000 (17:14 -0400)] 
lib: rename `bt_object_{get,put}_no` -> `bt_object_{get,put}_ref_no`

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5747bdb748d585b25e0ffbe4701b9aef5434728e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2126
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agotest_package.py: use list of public names instead of dedicated methods
Philippe Proulx [Thu, 3 Oct 2019 21:10:06 +0000 (17:10 -0400)] 
test_package.py: use list of public names instead of dedicated methods

This patch changes `test_package.py` so that the public names to verify
are listed in the `_public_names` list. The code creates the
corresponding test methods.

This makes it less cumbersome to add public name tests in the future.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I0d370d4b5fd4564000e1e0f273d3b1b36a8acc43
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2125
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agofield_class.py: normalize field class names (`_NAME`)
Philippe Proulx [Thu, 3 Oct 2019 21:06:30 +0000 (17:06 -0400)] 
field_class.py: normalize field class names (`_NAME`)

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ib51e612dc3c6b2610bf9dc0c987ce4816e3bdd9f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2124
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib, bt2: rename "signed/unsigned sel." -> "integer signed/unsigned sel."
Philippe Proulx [Thu, 3 Oct 2019 20:59:06 +0000 (16:59 -0400)] 
lib, bt2: rename "signed/unsigned sel." -> "integer signed/unsigned sel."

This matches the option field class terminology and makes it possible to
add other types of variant selectors in the future.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8b1d5b10ffb9062b09ac5ce2ef6607045cdfb5cb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2123
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib: add option field classes with integer selectors
Philippe Proulx [Wed, 2 Oct 2019 18:30:17 +0000 (14:30 -0400)] 
lib: add option field classes with integer selectors

This patch adds two new option field classes which have unsigned and
signed integer field classes as selectors. The purpose of this patch is
to be able to use the same selector for an option field class and a
contained, optional variant field class so that you can save space. For
example (pseudo-TSDL):

    enum : integer { size = 8; } {
        NONE,
        BANANA,
        APPLE,
    } tag;

    option <tag> {
        variant <tag> {
            string BANANA <1>;
            int APPLE <2>;
        } <1...0xff>;
    } opt_var;

Above, the optional variant field does not exist when the `tag` field is
0. If `tag` is anything else, then the variant field exists, and the
selected variant field's option also depends on this same value (1 and 2
select existing options).

Library changes
===============
There are now four option field classes:

Option without selector:
    Create with:

        bt_field_class *bt_field_class_option_without_selector_create(
            bt_trace_class *trace_class,
            bt_field_class *content_field_class);

Option with boolean selector:
    Create with:

        bt_field_class *bt_field_class_option_with_selector_bool_create(
            bt_trace_class *trace_class,
            bt_field_class *content_field_class,
            bt_field_class *selector_field_class);

    `selector_field_class` must be a boolean field class.

    By default, the selector is not reversed, in that when the selector
    boolean field is true, the option's field exists.

    You can reverse this logic with:

        void bt_field_class_option_with_selector_bool_set_selector_is_reversed(
            bt_field_class *field_class, bt_bool selector_is_reversed);

    You can get this property with:

        bt_bool
        bt_field_class_option_with_selector_bool_selector_is_reversed(
            const bt_field_class *field_class);

Option with unsigned integer selector:
Option with signed integer selector:
    Create with one of:

        bt_field_class *
        bt_field_class_option_with_selector_integer_unsigned_create(
            bt_trace_class *trace_class,
            bt_field_class *content_field_class,
            bt_field_class *selector_field_class,
            const bt_integer_range_set_unsigned *range_set);

        bt_field_class *
        bt_field_class_option_with_selector_integer_signed_create(
            bt_trace_class *trace_class,
            bt_field_class *content_field_class,
            bt_field_class *selector_field_class,
            const bt_integer_range_set_signed *range_set);

    For both versions:

    * `selector_field_class` must be an integer field class.

    * `range_set` tells, for such an option field, which values of the
      selector field make it contain the optional field.

    * `range_set` must contain at least one integer range.

    * On success, the function freezes `range_set`.

    You can borrow the integer range sets with:

        const bt_integer_range_set_unsigned *
        bt_field_class_option_with_selector_integer_unsigned_borrow_ranges_const(
            const bt_field_class *field_class);

        const bt_integer_range_set_signed *
        bt_field_class_option_with_selector_integer_signed_borrow_ranges_const(
            const bt_field_class *field_class);

Python bindings changes
=======================
There are new Python classes in `field_class.py` to wrap the new field
classes.

To create the new field classes, use:

* _TraceClass.create_option_without_selector_field_class()
* _TraceClass.create_option_with_bool_selector_field_class()
* _TraceClass.create_option_with_integer_selector_field_class()

_TraceClass.create_option_with_integer_selector_field_class() relies on
the type of `selector_fc` to create either an option with unsigned
integer selector field class or an option with signed integer selector
field class.

Notable component class changes
===============================
`flt.lttng-utils.debug-info`:
    Copies all option field classes and their properties.

`sink.text.details`:
    Writes all the option field class properties:

    * Whether or not the selector is reversed for an option with boolean
      selector field class.

      It looks like this:

          opt: Option (boolean selector) (Selector field path [Event payload: 2]):
            Selector is reversed: Yes
            Content: Unsigned integer (64-bit, Base 10)

    * The sorted integer ranges for an option with integer selector
      field class.

      It looks like this:

          opt: Option (signed integer selector) (Selector field path [Event payload: 1]):
            Selector ranges: [1, 1548] [1634] [2960, 3505]
            Content: Unsigned integer (64-bit, Base 10)

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I31e1deba974bf30274d567a73a00ea80d028f7ae
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2122
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agofs-sink-trace.c: lttng_validate_datetime(): ignore deprecated decl.
Philippe Proulx [Wed, 2 Oct 2019 18:25:49 +0000 (14:25 -0400)] 
fs-sink-trace.c: lttng_validate_datetime(): ignore deprecated decl.

Disable `deprecated-declarations` compiler warnings for
lttng_validate_datetime() because we're using `GTimeVal` and
g_time_val_from_iso8601() which are deprecated since GLib 2.56
(Babeltrace supports older versions too).

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I4da3bda550b3fd7d7ede13ff3b78ec78ad6f7839
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2121
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agoFix: iterator.c: initialize `status` (may be used uninitialized)
Philippe Proulx [Tue, 1 Oct 2019 18:17:44 +0000 (14:17 -0400)] 
Fix: iterator.c: initialize `status` (may be used uninitialized)

From this GCC warning:

    iterator.c: In function ‘find_message_ge_ns_from_origin’:
    iterator.c:1611:9: error: ‘status’ may be used uninitialized in this
                              function [-Werror=maybe-uninitialized]
     1611 |  return status;
          |

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If6f5f8a63d5a530284a08b9c6dd7f67ecfc9a818
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2120
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agom4: sync ax_pthread.m4 with autoconf archive
Simon Marchi [Fri, 4 Oct 2019 16:18:05 +0000 (12:18 -0400)] 
m4: sync ax_pthread.m4 with autoconf archive

Sync with [1].

In particular, this lets us configure with -Wunused-but-set-parameter.

[1] https://raw.githubusercontent.com/autoconf-archive/autoconf-archive/62e8491dbc174113a04fe910cad1e92e8a9e2164/m4/ax_pthread.m4

Change-Id: I496e3d9a8e896b04bf3cc87ddd41b1b144d23ee5
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2128
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agobt2: add `IntegerRangeSet` const classes
Francis Deslauriers [Thu, 3 Oct 2019 12:30:05 +0000 (08:30 -0400)] 
bt2: add `IntegerRangeSet` const classes

Outside of simple rename and splitting, this commit changes the `__eq__`
methods so that it's possible to compare const and non-const objects
together.

I also renamed the `_range_type` to `_range_pycls` to follow what is
done in other files and `_borrow_range_by_index_ptr` to
`_borrow_range_ptr_by_index` to increase readability.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I04b4027d297d088c6531be04681598653601579d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2118
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoTests: bt2: move `_create_const_field()` to utils.py
Francis Deslauriers [Thu, 3 Oct 2019 12:27:58 +0000 (08:27 -0400)] 
Tests: bt2: move `_create_const_field()` to utils.py

So it can be used by other test cases. It will be used by the
`test_integer_range_set.py` file in a following commit.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: Ic64a60e9d1a7bca11292c824531949602d567a6f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2117
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agoCleanup: bt2: typo "nsigned" -> "unsigned"
Francis Deslauriers [Thu, 3 Oct 2019 11:40:43 +0000 (07:40 -0400)] 
Cleanup: bt2: typo "nsigned" -> "unsigned"

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: Id349adc7d4b1dfedadad2a1c014141b5e408b9bb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2116
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agolib: make it mandatory to have seek_X if can_seek_X is defined
Simon Marchi [Thu, 26 Sep 2019 18:26:29 +0000 (14:26 -0400)] 
lib: make it mandatory to have seek_X if can_seek_X is defined

It's currently possible for a component class to provide can_seek_X
(can_seek_beginning or can_seek_ns_from_origin) without the
corresponding seek_X.  This doesn't make much sense, as if can_seek_X
returns true, Babeltrace assumes that seek_X can be called (which is
inconvenient if it's not provided).  That only leaves room for the case
where can_seek_X always returns false, which is not useful.

This patch makes it only possible to provide a can_seek_X if the
corresponding seek_X is provided, for both C and Python user component
classes.  It's still possible, however, to provide seek_X without
can_seek_X, in which case Babeltrace assumes that it's always possible
to call seek_X.

In the C API, component class method setters for seek_X and can_seek_X
are merged in a single function that sets both.  Since we assert that
seek_X is not NULL, this ensures that can_seek_X can only provided along
with a seek_X.

In the Python API, this verification is done dynamically when a user
message iterator class is assigned to a source or filter component
class.

Change-Id: If596d35dc3327bfd6e3f1e59f74c43dce3a722e1
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2100
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
5 years agolib: make can_seek_ns_from_origin logic use `can_seek_forward` property of iterator
Simon Marchi [Wed, 18 Sep 2019 20:22:16 +0000 (16:22 -0400)] 
lib: make can_seek_ns_from_origin logic use `can_seek_forward` property of iterator

This patch changes the behavior of
bt_self_component_port_input_message_iterator_can_seek_ns_from_origin to
make use of the new `can_seek_forward` property of iterators.

The current iterator "can seek ns from origin" logic works like this:

- If the iterator provides a `can_seek_ns_from_origin` method, call it
  and return that result.
- Otherwise, check if we can autoseek: if the iterator can seek
  beginning return true, else return false.

An issue with this is that if:

- an iterator doesn't provide the can_seek_ns_from_origin and
  seek_ns_from_origin methods
- the streams (and thus event messages) produced by this iterator don't
  have a timestamp
- the iterator can seek beginning

then
bt_self_component_port_input_message_iterator_can_seek_ns_from_origin
will report that this iterator can seek ns from origin, presumably
because it can use autoseek.  However, since the event messages don't
have a timestamp, we'll be able to seek beginning, but fast forwarding
to the desired point won't work.

To solve this, we need an additional property on message iterators,
whether the messages it produces have a timestamp, and therefore if the
"fast-forward" portion of autoseek will work.

This patch also brings another behavior change.  Previously, if the
can_seek_ns_from_origin method of the iterator was provided and returned
false, that was it.  With this patch, if that happens, we fall back to
checking if autoseek is supported.  That change is primarily in
bt_self_component_port_input_message_iterator_can_seek_ns_from_origin.
However,
bt_self_component_port_input_message_iterator_seek_ns_from_origin is
also updated accordingly, because we need to query the iterator to know
if it can seek ns from origin by itself, or if we should fall back on
autoseek.

Change-Id: I1848c87acf8ed75d4020a51e3be41dec2f144843
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2066
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
5 years agotests: remove CR characters from expected file in test_live
Simon Marchi [Tue, 1 Oct 2019 22:21:54 +0000 (18:21 -0400)] 
tests: remove CR characters from expected file in test_live

Tests done by test_compare_to_ctf_fs in test_live don't work on Windows.
When comparing the expected and actual files, the expected file has CRLF
end of lines while the actual file has LF end of lines.  This can be
unexpected, as both are produced by sink.text.details.

The reason is that bt_diff strips CR characters from the actual file.
This is done so actual files match the expect files, which typically are
static (not generated) and don't contain CR characters.

This patch makes test_live also strip CR characters from the expected
files it generates.

One might wonder, why not just make bt_diff strip both files of their CR
characters.  I prefer not to do that, because most files passed as
"expect" files to that function are files from the source tree.  These
files should not be modified by building and testing.  In other words,
it should be possible to run a make check while the source tree is on a
read-only filesystem.

Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ie5fac78260e5bb8102d3c7f9cc3b4a1b21cf773d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2114
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
5 years agotests: use os.rename instead of os.replace in lttng_live_server.py
Simon Marchi [Tue, 1 Oct 2019 22:22:10 +0000 (18:22 -0400)] 
tests: use os.rename instead of os.replace in lttng_live_server.py

On Windows, os.rename fails if the destination file exists, which is the
case for the port file in lttng_live_server.py.  The file is created by
the bash test script.

This results in the following error:

    # Starting LTTng live server mockup
    Traceback (most recent call last):
      File "C:/Users/smarchi/babeltrace/tests/data/plugins/src.ctf.lttng-live/lttng_live_server.py", line 1449, in <module>
        args.port_filename, args.sessions, args.max_query_data_response_size
      File "C:/Users/smarchi/babeltrace/tests/data/plugins/src.ctf.lttng-live/lttng_live_server.py", line 1229, in __init__
        self._write_port_to_file(port_filename)
      File "C:/Users/smarchi/babeltrace/tests/data/plugins/src.ctf.lttng-live/lttng_live_server.py", line 1342, in _write_port_to_file
        os.rename(tmp_port_file.name, port_filename)
    FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'C:/Users/smarchi/AppData/Local/Temp/tmpi8ihb0ck' -> 'test_live_list_sessions_server_port.5iod4m'

Use os.replace instead.

Change-Id: I8d7a28da66f11975bb0e2d355084a8a336500cc0
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2113
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
5 years agotests: convert paths passed to lttng_live_server.py
Simon Marchi [Tue, 1 Oct 2019 22:16:25 +0000 (18:16 -0400)] 
tests: convert paths passed to lttng_live_server.py

On Windows, the MSYS2 bash tries to convert paths in the Unix form
(/c/foo/bar) to the Windows form (C:\foo\bar).  However, some paths are
embedded in some complex arguments we pass to lttng_live_server.py, and
bash does not convert them.  This causes the file open in Python to
fail, because it doesn't find that file.  We therefore need to convert
them by hand using cygpath before passing them to the Python script.

Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: I108e6dc2a690042bf727335fc5af5294bf928590
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2112
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agotests: name temporary files in test_live
Simon Marchi [Tue, 1 Oct 2019 22:16:13 +0000 (18:16 -0400)] 
tests: name temporary files in test_live

I find it nice for debugging to have file names that have a little bit
of meaning.

Change-Id: I2505d5b363c2ea5f0c62255585e8898592d5ead0
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2111
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
5 years agoFix: ctf: open metadata file using mode "rb"
Simon Marchi [Tue, 1 Oct 2019 20:04:03 +0000 (16:04 -0400)] 
Fix: ctf: open metadata file using mode "rb"

In the handling of the support info query, we open the metadata file
using the "r" mode.  On Windows, this is a problem when opening
packetized metadata files, which may contain bytes that Windows will
treat as end of lines and transorm.  Use "rb" instead.

This makes the test_trace_copy test pass on Windows.  It currently fails
with the "session-rotation" trace.

Change-Id: Iaa7a3b8def1c07335c5e7e094d82121df56de268
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2110
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
5 years agocli: print map value in ASCII-betical order of keys
Simon Marchi [Mon, 30 Sep 2019 19:13:25 +0000 (15:13 -0400)] 
cli: print map value in ASCII-betical order of keys

The test plugins/src.ctf.fs/query/test_query_metadata_info (and maybe
others that I don't know about) relies on the CLI outputting query
results in a constant way.  However, it isn't currently the case, as the
map entries are printed in the order that
bt_value_map_foreach_entry_const, therefore g_hash_table_iter_next,
provides them.  This test currently fails on the CI Windows machine for
this reason.

This patch makes the CLI print map values in a sorted order (defined by
comparing keys with strcmp).  This makes the tests stable, but it is
also convenient for the user, as the results will be sorted and in a
stable order.

Change-Id: I034b295bc238e146337844ac5d2c43a305fb90e0
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2109
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
This page took 0.066196 seconds and 4 git commands to generate.