Francis Deslauriers [Mon, 27 Apr 2020 19:11:38 +0000 (15:11 -0400)]
Add `interpreter_funcs` to `lttng_bytecode_runtime`
Background
==========
The current filter interpreter function signature looks like this:
uint64_t lttng_bytecode_filter_interpret(void *filter_data,
const char *filter_stack_data);
The upcoming capture interpreter function will need an output parameter
to extract the top of stack register. It will look like this:
uint64_t lttng_bytecode_capture_interpret(void *capture_data,
const char *capture_stack_data,
struct output_register *output);
Problems
========
We can't reuse the same function pointer field in `struct
lttng_bytecode_runtime` as the two interpreter functions will have
different signatures.
We can't change the signature of this existing filter function because
it's used in the tracepoint probes.
Solution
========
Add a union of callbacks to hold both interpreter functions. This also
doesn't change the layout of the `struct lttng_bytecode_runtime`
objects.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I9fcd6def9ce7783087b9648ddbf5ec71fb7b997a
Francis Deslauriers [Mon, 27 Apr 2020 21:31:50 +0000 (17:31 -0400)]
bytecode: rename `lttng_filter_sync_state()` -> `lttng_bytecode_filter_sync_state()`
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I8d6386a087d5df1844bd157af571c08f41d54a9b
Francis Deslauriers [Wed, 15 Apr 2020 20:45:07 +0000 (16:45 -0400)]
Implement enum and sequence capture serialization functions
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I9dff84b7213c68fbef1be582301d834720706726
Francis Deslauriers [Mon, 13 Apr 2020 19:25:20 +0000 (15:25 -0400)]
Extract `handle_bytecode_recv()` function
A lot of this code will be reused for capture bytecode.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ib095033ae2b9dae6e8284ea4def0f7c69f688c63
Francis Deslauriers [Wed, 15 Apr 2020 15:03:53 +0000 (11:03 -0400)]
Rename filter bytecode types and files
File renames:
- filter-bytecode.h -> bytecode.h
- lttng-filter-interpreter.c -> lttng-bytecode-interpreter.c
- lttng-filter-specialize.c -> lttng-bytecode-specialize.c
- lttng-filter-validator.c -> lttng-bytecode-validator.c
- lttng-filter.c -> lttng-bytecode.c
- lttng-filter.h -> lttng-bytecode.h
Function renames:
- `lttng_filter_interpret_bytecode_false()` -> `lttng_bytecode_filter_interpret_false()`
- `lttng_filter_interpret_bytecode()` -> `lttng_bytecode_filter_interpret()`
- `lttng_filter_specialize_bytecode()` -> `lttng_bytecode_specialize()`
- `lttng_filter_validate_bytecode()` -> `lttng_bytecode_validate()`
Type renames
- `filter_opcode_t` to `bytecode_opcode_t`
Enum renames:
- `enum filter_op` to `enum bytecode_op`
- `FILTER_OP_*` to `BYTECODE_OP_*`
- `enum lttng_filter_ret` -> `enum lttng_bytecode_interpreter_ret`
- `LTTNG_FILTER_DISCARD` -> `LTTNG_INTERPRETER_DISCARD`
- `LTTNG_FILTER_RECORD_FLAG` -> `LTTNG_INTERPRETER_RECORD_FLAG`
Define renames:
- `FILTER_STACK_EMPTY` -> `INTERPRETER_STACK_EMPTY`
- `FILTER_STACK_LEN`-> `INTERPRETER_STACK_LEN`
- `FILTER_MAX_DATA_LEN` -> `BYTECODE_MAX_DATA_LEN`
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Iaab55116da5a3a8562b0f9e5b6033b556292f55b
Francis Deslauriers [Mon, 13 Apr 2020 16:24:09 +0000 (12:24 -0400)]
bytecode: generalize `struct lttng_ust_filter_bytecode_node`
Rename `struct lttng_ust_filter_bytecode_node` to `struct
lttng_ust_bytecode_node` so it can be used by capture bytecode as well.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I0bb4ba4962601f1c83bf92494be4c47032f47db3
Francis Deslauriers [Tue, 17 Mar 2020 14:55:43 +0000 (10:55 -0400)]
Cleanup: Rename filter functions/fields to mention "filter"
This will be cleaner when we introduce the capture bytecode functions
and fields.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I81a986386908212bf7a6814413204b54da6950c8
Francis Deslauriers [Mon, 30 Mar 2020 21:45:15 +0000 (17:45 -0400)]
Add `patient_writev()` function
This function wraps the `writev()` function to make it EINTR-aware.
We are going to use this function to send multiple structs in a single
call when dealing with event notifier captures.
This function also supports partial writes even though this should never
happen with event notifier notification. We assert that the data sent is less
then PIPE_BUF in size so to take advantage of the POSIX guarantee for
write atomicity as explained in pipe(7).
The implementation was inspired by this stackoverflow.com post:
https://stackoverflow.com/questions/
5853675/techniques-for-handling-short-reads-writes-with-scatter-gather
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ifd1def23f38ab95411fd4550858466451d0468ea
Francis Deslauriers [Fri, 20 Mar 2020 16:12:30 +0000 (12:12 -0400)]
Add `libmsgpack` for serializing captures
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ice8ed791a0452ea9e659ffcaf9e081f47288e8d5
Francis Deslauriers [Mon, 27 Apr 2020 22:02:44 +0000 (18:02 -0400)]
bytecode: allow interpreter to return any type
The bytecode interpreter when used by capture bytecode needs to return
types other than an integer or dynamic type.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ib93aaa8285ddd615b16dd6ebbf038f79880e25e8
Francis Deslauriers [Mon, 27 Apr 2020 21:59:58 +0000 (17:59 -0400)]
bytecode: propagate `rev_bo` of element
When specializing and executing bytecode.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I9fc7381b397acdae02f87e941128ed89e12f7350
Francis Deslauriers [Tue, 14 Apr 2020 21:07:23 +0000 (17:07 -0400)]
bytecode: set register type to `REG_PTR` even if not used
There was no need to set the field when using filter as the next
instruction would assume that the top of stack is a `REG_PTR`.
With the upcoming capture feature, we need to ensure this field is
consistent for extraction.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I8790618ddde23b29ef2a55698524c45b39ef4793
Francis Deslauriers [Wed, 18 Mar 2020 21:24:53 +0000 (17:24 -0400)]
Add `lttng_bytecode_interpret_format_output()` for top of stack extraction
This new static function will be used to extract the register on the top of
stack after the execution of the bytecode. This is currently not used by the
filter bytecode but will be used by capture bytecode in the future.
The returned value is saved in a tagged union struct named `struct
lttng_interpreter_output` and can be used by the caller of the interpreter
function.
Typically, this struct will be allocated on the stack to avoid dynamic
allocation inside the tracepoint probes.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id8a64d55f2bfb1af1657634a36d34dba5325777f
Mathieu Desnoyers [Mon, 23 Mar 2020 13:57:56 +0000 (09:57 -0400)]
bytecode: add `REG_U64` interpreter register type
This will be used by the capture bytecode for unsigned integer
extraction.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I8ff7ec22eddcf3acb4a359ad398f97476dd079f2
Francis Deslauriers [Fri, 29 Nov 2019 21:35:45 +0000 (16:35 -0500)]
Implement event notifier
The event notifier feature allows the user to get notify through a pipe
that an callsite was reached. It's really similar to a regular UST event
in that firing can be controlled by filters and exclusions. It diverges
because firing a event notifier does not end up writing to the tracing
buffers. In fact, event notifiers live outside of any sessions (i.e. no
session is needed).
Definitions
===========
A `Event notifier` is defined as an event description (event name, log level,
etc.) and a unique event notifier token.
A `Event notifier group` is a set of event notifiers sharing the same
pipe to the liblttng-ust-ctl user.
Sequence of operations
======================
event_notifier_group_handle = ustctl_create_event_notifier_group(notification_fd)
event_notifier_handle = ustctl_create_event_notifier(event_notifier_group_handle, event_notifier_id);
ustctl_set_filter(event_notifier_handle, filter)
ustctl_set_exclusion(event_notifier_handle, exclusion)
ustctl_enable(event_notifier_handle)
...
ustctl_disable(event_notifier_handle)
ustctl_release_object(event_notifier_handle)
ustctl_release_object(event_notifier_group_handle)
Highlevel changes
=================
- Add the event notifier probe generation macros,
- Add event notifier enabling/disabling machinery,
- Add event notifier filter machinery,
- Add event notifier exclusion machinery,
- Expose ABI structures
- Expose ABI enums
- Expose ABI cmds
- Expose ustctl functions
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I493d784cc6830cd6c7979f6f08b209521676f05c
Francis Deslauriers [Tue, 17 Nov 2020 23:15:14 +0000 (18:15 -0500)]
Add token to `struct lttng_ust_event`
This token is provided by the user when registering an event rule to
UST. It is going to used to identify messages from event notifiers in
the upcoming event notifier feature.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I780c681a6775cf61a2f805b7c6aed6ff2e321ea9
Francis Deslauriers [Tue, 17 Dec 2019 17:06:15 +0000 (12:06 -0500)]
Create `_for_each` function to unregister probe providers
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ic09169fb81c6ee420c60a63045532831efaa0806
Francis Deslauriers [Tue, 3 Dec 2019 22:52:36 +0000 (17:52 -0500)]
Cleanup: extract function to borrow hashlist bucket
This is going to reused by the event notifier system.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5132273ae79a84afdfbf0f88c8042c2b3828d782
Francis Deslauriers [Fri, 29 Nov 2019 21:35:01 +0000 (16:35 -0500)]
Decouple `struct lttng_event` from filter code
The filter infrastructure will be used by event notifiers and decoupling
this will allow for massive code reuse.
Of all `struct lttng_event`'s fields, filter code needs:
1. The `const struct lttng_event_desc *desc` field,
2. The `struct cds_list_head bytecode_runtime_head` list.
These fields are used to do the tracepoint field relocation
(`apply_field_reloc()` and `specialize_event_payload_lookup()`).
Given that only these two fields are needed, we can pass them directly
to these functions.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I25cb6fba5ba3cb74dbc4ee9f1fa1026171a6599a
Francis Deslauriers [Tue, 28 Apr 2020 20:19:24 +0000 (16:19 -0400)]
Cleanup: hide `lttng_ust_{filter_bytecode,excluder}_node`
Those two structs are not used in the external API so we better hide
them in internal files.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I9fee32ab4cc4ac7a440ad57d344b1a369a121313
Francis Deslauriers [Fri, 22 Nov 2019 21:44:28 +0000 (16:44 -0500)]
Abstract base `lttng_enabler` to support other types of enablers
Future commits will introduce the concept of event notifier enablers
which are similar to the event enablers already present with a few
differences.
To prepare the ground, this commit moves event dependent fields from the
`struct lttng_enabler` struct to a specialized `struct
lttng_event_enabler`.
The `lttng_enabler_*()` functions cannot be renamed because they are
currently exported. These are only used internally, so we can stop using
them and add new `lttng_event_enabler_*()` functions marked as hidden
which won't be exported (see liblttng-ust/ust-events-internal.h).
`lttng_enabler_*()` functions are kept in the ust-events.h file but
moved to the bottom of the file with other deprecated symbols.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I6d0af091c257a9ad297d17fca8993956279eb848
Francis Deslauriers [Fri, 13 Dec 2019 21:57:45 +0000 (16:57 -0500)]
Rename `enum lttng_enabler_type` to `_format_type`
Currently, the `_type` field is used to express in what format the event
rule was provided, either the full event name or a glob pattern.
Future commit will introduce the concept event notifier enabler that
will be along side regular event enabler.
The use of the `_type` suffix might become confusing with this new class
of enablers.
So this commit rename the `_type` field to `_format_type`.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I4d1e97da03df3983cba8b65c35d42818e0a967a5
Francis Deslauriers [Thu, 28 Nov 2019 19:15:02 +0000 (14:15 -0500)]
Decouple `struct lttng_session` from filter code
Use `struct lttng_ctx` directly so that the future event notifier
infrastructure, which will be outside any session, can use it.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I84109a0c01636bc5206f43e7abdceee27124c520
Michael Jeanson [Fri, 6 Nov 2020 19:49:10 +0000 (14:49 -0500)]
port: FreeBSD 12.2 added pthread_setname_np
With a minor difference that it doesn't return an error when the name is
too long, add this check in the wrapper to have the same behavior on
all platforms.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id6fa0970b011867424a215e5d7ba69e9fe617389
Michael Jeanson [Thu, 5 Nov 2020 18:37:41 +0000 (13:37 -0500)]
port: tests: Add a simple unit test for shm operations
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Idf347eb2985cac2216da0bb13aee5b09884c8b48
Michael Jeanson [Wed, 4 Nov 2020 20:42:15 +0000 (15:42 -0500)]
port: fsync(2) on a POSIX shm fd returns EINVAL on FreeBSD
The POSIX shared memory object implementation on FreeBSD is not file
based and doesn't support fsync(2).
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ie170254122aeab858a12c0522dc4e78075f243f9
Michael Jeanson [Wed, 4 Nov 2020 15:00:31 +0000 (10:00 -0500)]
port: set shm size with ftruncate before writing
According to POSIX, the size of shared memory object must be set with
ftruncate before writing to it. This happenen to work on Linux because
the implementation simply creates files on a tmpfs but on FreeBSD it is
implemented using actual shared memory objects and as such requires the
size to be set first.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I048f65104d7c34142025337ec1f6777650bfd62f
Michael Jeanson [Thu, 29 Oct 2020 05:48:56 +0000 (01:48 -0400)]
fix: pass the detected CFLAGS to the C++ compiler
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I8f76c87c1acb772d93292ca36bd9b7d56a147b5e
Michael Jeanson [Wed, 22 Jul 2020 18:51:36 +0000 (14:51 -0400)]
Cleanup: silent rules are always available in automake >= 1.12
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ib0acb195594e1b788c8c6d1b2cd879c3c271aef3
Michael Jeanson [Tue, 1 Sep 2020 19:19:08 +0000 (15:19 -0400)]
Cleanup: Use pkg-config to detect liburcu
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Iddfc721318e3ac06f2403876c1aa196da797d113
Michael Jeanson [Thu, 23 Jul 2020 16:27:13 +0000 (12:27 -0400)]
tests: Move tap-driver.sh out of the autotools aux directory
We have made local modifications to this script, move it to the test
suite directory so it doesn't get overwritten by an updated version from
autotools.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ie46f0c39fe4d196b2bab3978ac02c2b1fed883c7
Michael Jeanson [Wed, 22 Jul 2020 18:48:00 +0000 (14:48 -0400)]
Enable autotools warnings as errors
Enable all autotools warnings and error out to help catch all the
wonderful, shall we say, pecularities of M4sh.
And fix some associated errors in configure.ac.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Icc693a1913a003f2c5b299e82084252c5735603f
Michael Jeanson [Thu, 16 Jul 2020 19:09:45 +0000 (15:09 -0400)]
Cleanup: separate tests between 'unit' and 'compile'
Change-Id: Ib4326540609dc464b9a89ba9b891cf9c410d902b
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Fri, 17 Jul 2020 19:15:55 +0000 (15:15 -0400)]
Cleanup: Bump autoconf required version to 2.69
We already depend on automake 1.12 released in 2012, set the minimum
autoconf version to 2.69 which was released on the same year.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ib3c8bb5fccca3eacb80e78f361bc1b3fddbe00e1
Michael Jeanson [Thu, 16 Jul 2020 18:24:44 +0000 (14:24 -0400)]
Cleanup: Remove obsolete and unused tests
These tests have not been built in years and are not compatible with the
current API.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I6e18ba701d5deec72102e9b652ec9dfc9f08a9c2
Michael Jeanson [Fri, 16 Oct 2020 19:45:43 +0000 (15:45 -0400)]
fix: pthread_setname_np tests to match compat behavior
Adjust the test to expect an error when setting a thread name of more
than 16 bytes. Also don't override global AM_CPPFLAGS in
pthread_name/Makefile.am so that we get the proper include
configuration.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Iee41d8ea845836d273f01e890ea4196ae2ed43ef
Michael Jeanson [Fri, 16 Oct 2020 19:44:36 +0000 (15:44 -0400)]
fix: pthread_setname_np fails on longer tread names
When supplied with a thread name of more than 16 bytes including the
null terminating byte pthread_setname_np will fail with ERANGE,
replicate this behavior in the compat wrappers.
Change-Id: I91ac35a400a39c297e49fcab83b4f345b7ad92d0
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Thu, 15 Oct 2020 21:50:50 +0000 (17:50 -0400)]
Namespace lttng/align.h macros
These macros are part of the API and should have been namespaced
initialy. Namespace them and add backwards compatibility defines, make
sure to include the relevant system headers first for platforms that
have conflicting defines.
Change-Id: If2929ec2202dbde896614a25440ab200514ef4ad
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Fri, 16 Oct 2020 14:26:39 +0000 (10:26 -0400)]
Fix: remove redefinition of _GNU_SOURCE
Now that _GNU_SOURCE is defined by the compiler command line, no need to
redefine it.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5a02dd945f0dfec778779a8c5806cc9f45960520
Michael Jeanson [Thu, 15 Oct 2020 21:12:30 +0000 (17:12 -0400)]
Add pthread_setname_np tests
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5999ecddf62be9ad25cd67a61ff7315b48f3306a
Michael Jeanson [Thu, 15 Oct 2020 21:11:21 +0000 (17:11 -0400)]
port: fix pthread_setname_np integration
The detection was broken and initialy went undetected because of the
failover code. Replace it with a hard fail and fix the detection for
each platform.
Also, replace the private LTTNG_UST_PROCNAME_LEN with
LTTNG_UST_ABI_PROCNAME_LEN from the public headers. The limit of 16
bytes does in fact include the terminating null byte contrary to what
was defined in LTTNG_UST_PROCNAME_LEN. This was not catched before since
the string is silently truncated if it exceeds 16 bytes.
Change-Id: I1ea95dfd882dfeb80fdc3d71ebec6618b1324a79
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Fri, 17 Jul 2020 19:08:41 +0000 (15:08 -0400)]
Cleanup: standardise include path
Use the same include setup as our other projects, set the default
includes globally in configure.ac by exporting AM_CPPFLAGS. Move the
local config.h to the include directory and include it by default on the
command line.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I28b48dc47cfc923d588a0033b97c2917a9c893a5
Michael Jeanson [Wed, 14 Oct 2020 17:27:41 +0000 (13:27 -0400)]
port: no libnuma on FreeBSD
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I1c5b376de188a8f23ae90c2a6ab72fb1ecc42ace
Michael Jeanson [Tue, 13 Oct 2020 20:44:04 +0000 (16:44 -0400)]
port: use /bin/sh in test_ust_elf
The script doesn't use any bash extensions, use the default shell.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I7f7c843087400938f1e4d0de140d5deaff4efcd9
Michael Jeanson [Tue, 13 Oct 2020 20:43:44 +0000 (16:43 -0400)]
port: fix typo 'lttng_ust_safe_closefrom' -> 'lttng_ust_safe_closefrom_fd'
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I6f9ddd4b46e83c379ed76dd435ce44c49393f7cf
Michael Jeanson [Tue, 13 Oct 2020 20:43:13 +0000 (16:43 -0400)]
port: include limits.h first for CHAR_BIT
On FreeBSD, CHAR_BIT is defined in limits.h, include it first so we
don't get redifinition errors.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I694cc906d801bcd9b1e82dcbcf1163cdb3c41100
Michael Jeanson [Tue, 13 Oct 2020 20:42:23 +0000 (16:42 -0400)]
port: fix endian and byteswap compat on FreeBSD
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I8edd89df2c99406b10b846eb1a8bcf959e8bbde4
Michael Jeanson [Tue, 13 Oct 2020 20:41:00 +0000 (16:41 -0400)]
port: Silence macro redefinition warnings on FreeBSD
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I32473a65116fd9e4120a852a8cbc5c145e9609f7
Michael Jeanson [Tue, 13 Oct 2020 19:28:23 +0000 (15:28 -0400)]
port: fix pthread autoconf detection to support FreeBSD
Use the same autoconf pthread code as lttng-tools to handle pthread
compat on FreeBSD.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I713446b1f5ec2eaab96cdfc7e9888ab543e8a67f
Michael Jeanson [Thu, 23 Jul 2020 16:40:37 +0000 (12:40 -0400)]
Set version to 2.13-pre
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id17c197aa437f0cf7a5d489f62f5f6b5cffb22e0
Mathieu Desnoyers [Tue, 22 Sep 2020 20:38:51 +0000 (16:38 -0400)]
Fix: ustctl_release_object: eliminate double-close/free on error
When ustctl_release_object returns an error, it is unclear to the caller
what close/free side effects were effectively performed and which were
not. So the only courses of action are to either leak file descriptors
or memory, or call ustctl_release_object again which can trigger double
close or double free.
Fix this by setting the file descriptors to -1 after successful close,
and pointers to NULL after successful free.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Mon, 13 Jul 2020 19:22:35 +0000 (15:22 -0400)]
tests: return the proper TAP exit code
The C TAP library provides the 'exit_status()' function that will return
the proper exit code according to the number of tests that succeeded or
failed.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I786527dfa9cfe2d1a7c8bc80086d54186f60b4d9
Michael Jeanson [Mon, 6 Jul 2020 15:48:16 +0000 (11:48 -0400)]
Add userspace time namespace context
This was introduced in kernel v5.6.0, on a system running an older kernel,
zero will be returned.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I1ea66a98c96a4de084c02521f6982e8c7d1b53bb
Michael Jeanson [Thu, 26 Mar 2020 21:18:41 +0000 (17:18 -0400)]
Use libtool syntax in LDADD
Use .la files to add link dependencies between libraries, linking
directly to the content of '.libs' is relying on an implementation
detail of libtool.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I6fe0157e23f13cd69c436111a2e743fa1c763d64
Michael Jeanson [Thu, 26 Mar 2020 20:49:45 +0000 (16:49 -0400)]
Add missing files to distribution
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5b0be9c7c87dc7fef1c6f46f15091d4e3c2a09a8
Jonathan Rajotte [Wed, 17 Jun 2020 22:40:22 +0000 (18:40 -0400)]
Fix: python agent: 'time' has no attribute 'clock'
The time.clock() function was removed in python 3.8 and is marked as
deprecated since python 3.3. See PEP 418 for more details [1].
Solution
=====
When the python version is greater than 3.2 use the
`time.perf_counter()` function [2]. Otherwise, fall back to
`time.clock()`.
Introduce a compat module to the lttngust agent package providing the
`_clock` function.
[1] https://www.python.org/dev/peps/pep-0418/
[2] https://docs.python.org/3/library/time.html#time.perf_counter
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I3d6d8b24309d45d43b634dc2a6b4d5dbc12da3aa
Christophe Bedard [Mon, 1 Jun 2020 20:11:08 +0000 (16:11 -0400)]
Fix: libc-wrapper: undef temporary token rather than value
The lttng-ust malloc wrapper defines pthread_mutex_lock/unlock
preprocessor tokens to ust_malloc_spin_lock/unlock around the definition
of a TLS variable, which uses pthread mutexes when relying on the
pthread key fallback. Undefining those tokens should be done on the
preprocessor token, rather than its value.
Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I2053b79c88000e272c29b25ca105b1352ecfabd7
Michael Jeanson [Fri, 26 Jun 2020 19:44:20 +0000 (15:44 -0400)]
Fix: support compile units including 'sys/sdt.h' without defining SDT_USE_VARIADIC
Instead of using SDT_USE_VARIADIC from 'sys/sdt.h', use our own namespaced
macros since the instrumented application might already have included
'sys/sdt.h' without variadic support.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Idfece1a65a5296a90d33370bc8d73ea554c14b0f
Francis Deslauriers [Tue, 12 May 2020 15:38:15 +0000 (11:38 -0400)]
Cleanup: have interpreter functions return _DISCARD instead of 0
It's easier to understand the meaning of the zero return value of these
function using the enum. It makes it obvious.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id8f199d82b17228fdc882e3ccbab8b3535840984
Francis Deslauriers [Fri, 8 May 2020 18:52:20 +0000 (14:52 -0400)]
Cleanup: bytecode: typo: "s16" -> "u16"
Signed-off-by: Francis Deslauriers <fdeslaur@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: If3a0e0422ce91d26c33b2e040a1463879e8d8505
Francis Deslauriers [Mon, 20 Apr 2020 21:33:48 +0000 (17:33 -0400)]
doc: Explain `struct lttng_bytecode_runtime` layout restrictions
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I875b11c644917a3b9f15bf88ab44098813e59db0
Francis Deslauriers [Tue, 5 May 2020 15:51:58 +0000 (11:51 -0400)]
Fix: event probes attached before event enabled
Background
==========
When userspace events with exclusions are enabled by the CLI user, the
session daemon enables the events in a 3-steps process using the
following ustctl commands:
1. `LTTNG_UST_EVENT` to create an event and get an handle on it,
2. `LTTNG_UST_EXCLUSION` to attach exclusions, and
3. `LTTNG_UST_ENABLE` to activate the tracing of this event.
Also, the session daemon uses the `LTTNG_UST_SESSION_START` to start the
tracing of events. In various use cases, this can happen before OR after
the 3-steps process above.
Scenario
========
If the`LTTNG_UST_SESSION_START` is done before the 3-steps process the
tracer will end up not considering the exclusions and trace all events
matching the event name glob pattern provided at step #1.
This is due to the fact that when we do step #1, we end up calling
`lttng_session_lazy_sync_enablers()`. This function will sync the event
enablers if the session is active (which it is in our scenario because
of the _SESSION_START).
Syncing the enablers will then match event name glob patterns provided
by the user to the event descriptors of the tracepoints and attach
probes in their corresponding callsite on matches.
All of this is done before we even received the exclusions in step #2.
Problem
=======
The problem is that we attach probes to tracepoints before being sure we
received the entire description of the events.
Step #2 may reduced the set of tracepoints to trace so we must wait
until exclusions are all received to attached probes to tracepoints.
Solution
========
Only match event names and exclusions (and ultimately, register probes)
on enabled enablers to ensure that no other modifications will be
applied to the event.
Event enablers are enabled when at step #3.
Note
====
Filters are not causing problems here because adding a filter won't
change what tracepoints are to be traced.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id984f266d976f346b001db81cd8a2b74965b5ef2
Mathieu Desnoyers [Mon, 27 Apr 2020 07:12:11 +0000 (03:12 -0400)]
Fix: use underlying types for array and sequence assertion
Based on https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html:
"Built-in Function: int __builtin_types_compatible_p (type1, type2)
[...] two types that are typedefed are considered compatible if
their underlying types are compatible."
This definition explains why listing all the {u,}intX_t types misses
the underlying type "long" on 32-bit architectures which rely on
"long long" for 64-bit integers. Therefore, list all the underlying
integer types.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Francis Deslauriers [Fri, 24 Apr 2020 16:30:22 +0000 (12:30 -0400)]
Add compile time assertion that array and sequence have integer elements
Currently, LTTng-UST only supports ctf_arrays(and ctf_sequences) of
integers and chars but there is nothing preventing the user of compiling
an array of double. This is problematic because the resulting metadata
for that array will end up being erroneous.
This commit adds a new stage in the probe building process that asserts
that the element type of arrays or sequences are supported. This stage
adds a compile time static assertion, so the probes won't build if the
type is not supported.
Here is the error message the user will get when compiling with a C99
compiler:
gcc -c -sdt=c99 -I. tp.c
In file included from /usr/local/include/lttng/tracepoint-event.h:58:0,
from tp.h:77,
from tp.c:4:
././tp.h:71:9: error: size of array ‘lttng_static_assert_Non_integer_type__my_array__not_supported_as_element_of_CTF_ARRAY_or_CTF_SEQUENCE’ is negative
ctf_array(double, my_array_for_double, my_array_for_double, 3)
Here is the error message the user will get when compiling with a C++ or
C11 compiler or above:
g++ -c -std=c11 -I. tp.c
In file included from /usr/local/include/lttng/tracepoint-event.h:58:0,
from tp.h:77,
from tp.c:4:
././tp.h:71:9: error: static assertion failed: Non-integer type `my_array` not supported as element of CTF_ARRAY or CTF_SEQUENCE
ctf_array(double, my_array, my_array_for_double, 3)
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ie958635a8dc6262793d45c5f7458d50a0fecf7ab
Francis Deslauriers [Fri, 24 Apr 2020 19:58:26 +0000 (15:58 -0400)]
Implement compile time assertion macro wrapper
Starting from C++11[1] and C11[2] both C++ and C standards implement the
`static_assert()` macro that allows the compile time evaluation of an
expression and emitting of a compiler error when the expression
evaluates to false.
This commit implements a wrapper for compile time assertions on C
compilers implementing C standards prior C11.
On such compilers, we emulate a static assert by typedef'ing an array of
negative size in case of predicate failure.
The downside of this method is that error messages are a bit cryptic as
it mentions the negative-sized array. We overcome this issue by using a
user-provided message as part of variable name that gets printed on
error. For this reason, we decide to require 2 different messages in
addition of the predicate.
Here is the signature of the macro:
#define lttng_static_assert(predicate, msg, c_identifier_msg)
The first message, `msg`, is the used with C++/C11 compilers can be any
string. The second message, `c_identifier_msg`, is used with older
standards and MUST be a valid C identifier as it's will be concatenated
to a typedef name.
For example:
If the user uses the macro such as:
lttng_static_assert(false, "My assert message", MY_ASSERT_MSG);
The C99 user will get an error looking like this:
error: size of array ‘lttng_static_assert_MY_ASSERT_MSG’ is negative
The C11 or C++ user will get an error looking like this:
error: static assertion failed: "My assert message"
[1] https://en.cppreference.com/w/cpp/language/static_assert
[2] https://en.cppreference.com/w/c/language/_Static_assert
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I725f6e77f1858b8d88ffae781b648ac5b5c64b28
Mathieu Desnoyers [Thu, 23 Apr 2020 16:51:40 +0000 (12:51 -0400)]
Fix: agent: read: end of loop condition should exclude 0
Causes the agent to hang endlessly waiting for completion of the
loop.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Wed, 22 Apr 2020 20:32:51 +0000 (16:32 -0400)]
fix: Java examples CLASSPATH override
Variables provided to make as arguments, called 'command variables' can't
be reassigned a new value in the Makefile. Since the CLASSPATH is now
passed this way in the glue between automake and the example makefiles,
use different names for the internal variables.
Change-Id: Id6289273f211f544a66d933a96f06df75243415f
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Michael Jeanson [Wed, 22 Apr 2020 18:07:46 +0000 (14:07 -0400)]
Add missing files to .gitignore
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5050772c58342d3eb956e0cbd56983fbb1ed3b70
Michael Jeanson [Wed, 22 Apr 2020 18:37:55 +0000 (14:37 -0400)]
fix: Add CLASSPATH to autoconf precious variables
This will record the value of CLASSPATH in the autoconf cache and ensure
it's used when calling make even if it's not exported to the
environment.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ia06070dd352f9d3b6956a1ec0f4eb1d024f73179
Mathieu Desnoyers [Wed, 22 Apr 2020 18:05:41 +0000 (14:05 -0400)]
Fix: Java agent: close session daemon socket on error
When catching an error, close the socket used to communicate with the
session daemon rather than leaking it, before retrying to connect.
Also, when sleep is interrupted, there is no point in printing
out the stack trace. Just retry connection immediately.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Wed, 22 Apr 2020 18:14:36 +0000 (14:14 -0400)]
Java agent: Use inequality for read bound check
Don't continue looping if bytesLeft becomes negative for unforeseen
reasons.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Wed, 22 Apr 2020 17:30:40 +0000 (13:30 -0400)]
Fix: Java agent: handle partial payload read
When reading from a TCP socket, there is no guarantee that the
read will return all the requested data. We need to loop and continue
reading until we gather all the expected data.
This fixes flakiness of the lttng-ust-java-tests.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Wed, 22 Apr 2020 16:22:19 +0000 (12:22 -0400)]
Fix: incorrect field accounting for dynamic type
Two field accounting issues were introduced by
commit
218deb69baab "tracepoint: Refactor representation of nested
types" which affect the dynamic types used by Java application contexts.
The structure types should account 1 for the structure per se, in
addition to the nested fields.
The atype_dynamic includes an implicit enumeration, which now has two
fields instead of 1.
This was causing memory corruption issues in the lttng-ust-java-tests.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Mon, 20 Apr 2020 18:27:31 +0000 (14:27 -0400)]
ust-compiler.h: Allocate compound literals on heap with gcc <= 4.8
g++ 4.8 and prior do not support C99 compound literals. Therefore,
force allocating those on the heap with these C++ compilers.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Mon, 20 Apr 2020 18:12:51 +0000 (14:12 -0400)]
Require C++11 for building probe providers with C++ compiler
The __LTTNG_COMPOUND_LITERAL(), in C++, requires either that the
compiler supports C99 compound literals (which is not the case for
g++ 4.8), or that LTTNG_ALLOCATE_COMPOUND_LITERAL_ON_HEAP is
defined so the compiler allocates the compound literal on the
heap with "new", which is available since c++11.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Francis Deslauriers [Thu, 16 Apr 2020 23:44:06 +0000 (19:44 -0400)]
filter: bytecode already in the list should go before
Background
==========
This `seqnum` (sequence number) feature is currently unused. It was
designed so that the session daemon could tell the tracer the order in
which the bytecode should be run.
Issue
=====
The current implementation of the session daemon doesn't use this
feature so there is only ever a single bytecode to execute per callsite.
During work on an upcoming feature uses this `seqnum` became useful and
it was realized that the current bytecode linking code would reverse the
order in which the bytecode were executed when all bytecodes have the
same `seqnum` value.
This is due to the fact that the `cds_list_for_each_entry_reverse` loops
until it finds a `seqnum` smaller than the new one.
So if all bytecodes have the same `seqnum`, the new bytecode will be
added at the beginning of the list.
This is not technically a problem since it's the session daemon's job to
set the sequence number if it wants a particular ordering. Even
considering that, we found it counterintuitive that new bytecodes are
added at the beginning of the list in those cases.
Solution
========
This commit makes it so that on equality, the insertion is done after
the existing bytecodes.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ie323b3ff5df346f222e22abfb9bbad6c5b7e4a27
Mathieu Desnoyers [Thu, 2 Apr 2020 20:57:48 +0000 (16:57 -0400)]
Bump LTTNG_UST_ABI version from 8.1 to 9.0
Ensure an older liblttng-ust communicating with a newer liblttng-ust
will refuse the handshake, so older session daemon do not get to
interact with more recent lttng-ust which implements nested arrays and
sequences.
Introduce LTTNG_UST_ABI_MAJOR_VERSION_OLDEST_COMPATIBLE to allow
liblttng-ust to be backward compatible with a range of major versions.
In this case, liblttng-ust ABI 9.0 is fully backward compatible with
8.x, given that none of the existing ABI in 8.x has changed in 9.0.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 2 Apr 2020 17:37:17 +0000 (13:37 -0400)]
tracepoint: Refactor representation of nested types
Refactor enumeration, sequence, array, structure, and variant types.
Implement internal data structures to support nested types.
All probe providers using ctf_enum(), ctf_array*() and ctf_sequence*()
are switched to this new binary layout, and the prior enum, array and
sequence abstract types are kept only for backward compatibility with
probe providers generated by older lttng-ust headers.
Each of sequence, array, struct and variant gain a "alignment" property,
which is a feature which was needed in lttng-modules to express
alignment for an array or sequence of bits.
The ust-ctl protocol with session daemon is extended to support those
new types.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 2 Apr 2020 20:38:58 +0000 (16:38 -0400)]
Remove has_strcpy check following probe provider version bump
Bumping the probe provider major version from 1 to 2 allows us to
remove a dynamic check within ctf_string() in the probe providers.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 2 Apr 2020 20:32:15 +0000 (16:32 -0400)]
Bump LTTNG_UST_PROVIDER_MAJOR from 1 to 2
The introduction of nested arrays and sequences requires to bump the
provider major version from 1 to 2. Newer lttng-ust are backward
compatible with older probes, but newer probes cannot be used by
older lttng-ust versions.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 2 Apr 2020 17:29:45 +0000 (13:29 -0400)]
ust-compiler.h: Implement __LTTNG_COMPOUND_LITERAL
Implement __LTTNG_COMPOUND_LITERAL to allow defining a compound literal
with static storage.
Compound literals with static storage are needed by LTTng to implement
nested arrays and sequences in TRACEPOINT_EVENT.
Compound literals are part of the C99 and C11 standards, but not
part of the C++ standards. However, those are supported by both g++ and
clang as C99 extensions when compiling C++ code.
Strict C++11 compliance can be obtained by defining
LTTNG_ALLOCATE_COMPOUND_LITERAL_ON_HEAP before including this header
to allocate those on the heap in C++.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 9 Apr 2020 19:02:57 +0000 (15:02 -0400)]
Document dependency on liburcu >= 0.12
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 9 Apr 2020 15:40:55 +0000 (11:40 -0400)]
configure: add check for DEFINE_URCU_TLS_INIT
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 9 Apr 2020 15:33:48 +0000 (11:33 -0400)]
Cleanup: use DEFINE_URCU_TLS_INIT for all CONFIG_RCU_TLS configurations
Introduce a dependency on DEFINE_URCU_TLS_INIT for all CONFIG_RCU_TLS
configurations.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Thu, 9 Apr 2020 15:29:18 +0000 (11:29 -0400)]
Fix: namespace contexts !CONFIG_RCU_TLS variable initialization
The namespace contexts introduced in lttng-ust 2.12 require to
initialize TLS variable to nonzero values. However, in !CONFIG_RCU_TLS
(compatibility mode using pthread setspecific), this initialization
does not build.
Use the new DEFINE_URCU_TLS_INIT from liburcu when building
!CONFIG_RCU_TLS to fix this issue. Since this requires a dependency on
a new liburcu version, only !CONFIG_RCU_TLS adds this dependency in the
fix. A followup cleanup patch will use DEFINE_URCU_TLS_INIT as we add
a strict version dependency.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Francis Deslauriers [Fri, 20 Mar 2020 14:52:21 +0000 (10:52 -0400)]
Record event as soon as one filters evaluates to TRUE
This is a tiny optimization but it can reduce tracing cost in cases
where multiple filters are attached to a probe.
Since we want to trace the event if any of its filter expressions
evaluates to TRUE, there is no need to keep on evaluating expression
once one is found to be TRUE.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I2bb8fafb3052fce02b10f541e025a9a74ffa1895
Francis Deslauriers [Wed, 18 Mar 2020 21:29:36 +0000 (17:29 -0400)]
Cleanup: ust-tracepoint-event.h: extract `__num_fields` in a variable
This makes it easier to understand what the `_TP_ARRAY_SIZE()` macro
expands to in this context.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I6b44e1e444df1dab0496282af4cea260ae895ca0
Jonathan Rajotte [Mon, 9 Mar 2020 23:24:07 +0000 (19:24 -0400)]
Fix: v.u.d might be uninitialized
lttng-filter-interpreter.c:301:17: warning: ‘v.u.d’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ptr->u.d = v.u.d;
Indeed it seems that the value is never fetched if we compare to other
call sites and the dynamic call site further below.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I542d6db7514a2c39afe3613228577f34f194d672
Mathieu Desnoyers [Wed, 4 Mar 2020 16:33:26 +0000 (11:33 -0500)]
Fix: Add missing vtracelog demo to make dist
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Wed, 4 Mar 2020 16:32:52 +0000 (11:32 -0500)]
Fix: Add missing vtracef demo to make dist
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Maxime Roussin-Belanger [Tue, 3 Mar 2020 23:10:31 +0000 (18:10 -0500)]
Introduce vtracelog
vtracelog works the same as vtracef, but takes a log level
as a parameter and has the same limitations.
Signed-off-by: Maxime Roussin-Belanger <maxime.roussinbelanger@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Maxime Roussin-Belanger [Tue, 3 Mar 2020 23:10:30 +0000 (18:10 -0500)]
Introduce vtracef
vtracef accepts a va_list argument to simplify
tracing functions which use a va_list
Here's an example from wpa_supplicant that I wanted to
trace:
void wpa_debug(int level, const char* fmt, ...)
{
va_list ap;
va_start(ap, fmt);
...
// The call I want to easily trace with vtracef
vprintf(fmt, ap);
...
va_end(ap);
}
wpa_debug is used a fair amount and it would be annoying to
replace all the wpa_debug calls with tracef.
With vtracef, it simplifies the find and replace effort by
only changing it at one place.
Signed-off-by: Maxime Roussin-Belanger <maxime.roussinbelanger@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Jonathan Rajotte [Mon, 2 Mar 2020 19:21:33 +0000 (14:21 -0500)]
Fix: set FD_CLOEXEC on incoming FDs.
The stream shm FDs are allocated by the consumer process, and then
passed to the applications over unix sockets. When opening those
file descriptors on reception, the FD_CLOEXEC flag is not set.
In a fork + exec scenario, parent process streams shm FDs and channel
wake FDs are present in the resulting child process.
Set FD_CLOEXEC on reception (ustcomm_recv_fds_unix_sock) to
prevent such scenario.
Change-Id: Id58077b272be9c1ab239846639ffd8103b3d50f1
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Tue, 18 Feb 2020 00:25:01 +0000 (19:25 -0500)]
Fix: tracepoint.h: Disable address sanitizer on pointer array section variables
The tracepoint header declares pointer global variables meant to be
placed contiguously within the __tracepoints_ptrs section, and then used
as an array of pointers when loading an executable or shared object.
Clang Address Sanitizer adds redzones around each variable, thus leading to
detection of a global buffer overflow.
Those redzones should not be placed within this section, because it
defeats its purpose. Therefore, teach asan not to add redzones
around those variables with an attribute.
Note that there does not appear to be any issue with gcc (tested with
gcc-8 with address sanitization enabled), and gcc ignores the
no_sanitize_address attribute when applied to a global variable.
Fixes: #1238
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mathieu Desnoyers [Tue, 18 Feb 2020 00:31:41 +0000 (19:31 -0500)]
Fix: jhash.h: remove out-of-bound reads
jhash.h implements "special" code for valgrind because it reads memory
out-of-bound (and then applies a mask) when reading strings.
Considering that lttng-ust does not use jhash.h in a fast-path, remove
this "optimization" and use the verifiable VALGRIND code instead. This
fixes an ASan splat.
Fixes: #1238
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Simon Marchi [Thu, 6 Feb 2020 15:06:45 +0000 (10:06 -0500)]
Fix: generation of man pages with multiple refnames
In this proposed patch [1], we're trying to make a man page with two
command names in the NAME section, like this:
tracef, vtracef - LTTng-UST printf(3)-like interface
Doing so causes the intermediary XML (what asciidoc outputs) to contain
this:
<refnamediv>
<refname>tracef, vtracef</refname>
<refpurpose>LTTng-UST printf(3)-like interface</refpurpose>
</refnamediv>
The refname is used by the docbook XSL to determine the output
filename. This therefore results in an output file named
`tracef,_vtracef.3`, which is not desirable.
The problem is in the asciidoc pass, more specifically the part of
asciidoc.conf removed by this patch. Is is there to override the
`source`, `version` and `manual` fields, but it also inadvertently
affects the refname generation.
Instead of playing with the asciidoc output template, this patch sets
the same `source`, `version` and `manual` attributes on the asciidoc
command line. With the present patch applied, the XML output contains:
<refnamediv>
<refname>tracef</refname>
<refname>vtracef</refname>
<refpurpose>LTTng-UST printf(3)-like interface</refpurpose>
</refnamediv>
The xmlto pass (docbook XML -> man page) then generates two files,
`tracef.3` and `vtracef.3`, where `vtracef.3` simply sources `tracef.3`
(which is what we want).
[1] https://lists.lttng.org/pipermail/lttng-dev/2020-February/029524.html
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Francis Deslauriers [Mon, 17 Feb 2020 15:46:45 +0000 (10:46 -0500)]
Cleanup: remove trailing white spaces across project
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I15202338465ee56d33316cbc632d9e3bf44ee31e
Francis Deslauriers [Tue, 26 Nov 2019 16:16:30 +0000 (11:16 -0500)]
Fix: lttng-ust-comm.c: return number of fd rather size of array
There are two conflicting comments for this function. One says it
returns the size of the received data and the other says it returns the
number of fd received.
It's more useful to receive the number of fd.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I74084b461d396c3e623fa55100e6dd7e59dbea83
Francis Deslauriers [Thu, 12 Dec 2019 14:32:00 +0000 (09:32 -0500)]
liblttng-ust-comm: move `_unlock_fd_tracker()` after `close()` on error paths
Right now, receiving an error from `lttng_ust_add_fd_to_tracker()` means that
the fd was _not_ added to the fd set. So the `lttng_ust_safe_close_fd()`
(overriding `close()`) call will indeed close the fd as expected. So, it
doesn't matter if the `close()` is before or after the `_unlock_`.
Even considering that, I believe that it's clearer and more common to
have all related operations within the `_lock_` and `_unlock_`
functions. Also, `lttng_ust_add_fd_to_tracker()` might be modified in
the future and fail for some other reason.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Id29a6ab004cfd5ca601615e1a70c74cf754b12e2
Francis Deslauriers [Fri, 13 Dec 2019 22:24:25 +0000 (17:24 -0500)]
Cleanup: liblttng-ust: change `int` flag to `bool`
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I78b35b6b99afe8a84aba6c836df3bce8d2532760
This page took 0.047055 seconds and 4 git commands to generate.