Fix: invalid alignment of enumeration fields
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 30 Oct 2018 23:32:06 +0000 (00:32 +0100)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 30 Oct 2018 23:33:56 +0000 (00:33 +0100)
Issue
---

According to the CTF specification, the alignment of an enumeration is
that of its container integer field declaration. However, an
enumeration field's alignment is always initialized to 1.

This causes babeltrace to fail to read traces produced by lttng-ust
following a fix that causes it to generate extended event headers. The
problem is observed on ARM platforms since lttng-ust will produce a
layout that does not result in unaligned memory accesses.

Solution
---

The alignment of the enumeration declaration's container is sampled
when the enumeration declaration is created.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
types/enum.c

index 8394e1b35b70b4e2c58b2a9d9ed97d1293eb2c3c..157e21b364f0699095994f2cfb2b0a8c90d7f2d9 100644 (file)
@@ -408,7 +408,7 @@ struct declaration_enum *
        bt_declaration_ref(&integer_declaration->p);
        enum_declaration->integer_declaration = integer_declaration;
        enum_declaration->p.id = CTF_TYPE_ENUM;
-       enum_declaration->p.alignment = 1;
+       enum_declaration->p.alignment = integer_declaration->p.alignment;
        enum_declaration->p.declaration_free = _enum_declaration_free;
        enum_declaration->p.definition_new = _enum_definition_new;
        enum_declaration->p.definition_free = _enum_definition_free;
This page took 0.025828 seconds and 4 git commands to generate.