Commit Graph

4 Commits

Author SHA1 Message Date
Marc Herbert 0b80998bb1 Revert __builtin_assume_aligned(4) probe packet, replace with aligned(4)
This reverts and replaces commit 2765b22049 ("probe-app: assume probe
packet aligned"). That commit applied a __builtin_assume_aligned(4) to
every pointer assignment of the following type:

  uint32_t *ptr = struct probe_data_packet *packet;

Instead of using __builtin_assume_aligned(4) every time a
probe_data_packet is used like this, the probe_data_packet type
definition is now 32 bits aligned in only one place thanks to (packed,
aligned(4)).

struct probe_data_packet is made entirely of uint32_t members. It
is (packed) to avoid a 64 bits compiler hypothetically padding and
aligning these 32 bits members to 64 bits. However, (packed) alone is
roughly equivalent to aligned(1) (neither is part of the C standard)
which causes some gcc versions to warn about this:

  sof/tools/probes/probes_main.c:228:5: error: converting a packed
  ‘struct probe_data_packet’ pointer (alignment 1) to a ‘uint32_t’
  {aka ‘unsigned int’} pointer (alignment 4) may result in an
  unaligned pointer value [-Werror=address-of-packed-member]

  228 |     w_ptr = (uint32_t *)packet;
      |     ^~~~~

Unlike "assuming" with __builtin_assume_aligned, (packed, aligned(4))
makes sure probe_data_packet are _actually_ 4 bytes aligned. As a
demontration, it stops the following _Static_assert() from failing:

modified   src/probe/probe.c
@ -64,9 +64,12 @ struct probe_pdata {
 	struct probe_dma_ext ext_dma;
 	struct probe_dma_ext inject_dma[CONFIG_PROBE_DMA_MAX];
 	struct probe_point probe_points[CONFIG_PROBE_POINTS_MAX];
+	uint8_t dummy;
 	struct probe_data_packet header; // aligned(4)?
 	struct task dmap_work;
 };
+_Static_assert(offsetof(struct probe_pdata, header) % 4 == 0 ,
+               "probe_data_packet is not 4 aligned");

In addition to gcc version 8 and 9, I tested and confirmed with
_Static_assert and pahole that the same attributes behave the same with
clang 9.0.1-2.fc31.

Signed-off-by: Marc Herbert <marc.herbert@intel.com>
2020-04-07 14:45:48 +01:00
Adrian Bonislawski f1fa3be980 probes-app: add allocation check
This will check if the allocation succeeded

Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
2020-03-18 21:58:03 +00:00
Adrian Bonislawski 2765b22049 probe-app: assume probe packet aligned
Thats because probe packet struct is packed and aligned to 1
which will generate a warning (error) with pointer assigning

Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
2020-03-18 21:58:03 +00:00
Adrian Bonislawski 1b2a6ef02e probe-app: initial code
Probes will extract data for several probe points in one stream
 with extra headers. This app will read the resulting file,
 strip the headers and create wave files for each extracted buffer.

 Usage to parse data and create wave files: ./sof-probes -p data.bin

Signed-off-by: Adrian Bonislawski <adrian.bonislawski@linux.intel.com>
2020-02-19 12:28:59 +00:00