Fix: common: uninitialized lttng::ctl:error field
[lttng-tools.git] / src / common / align.hpp
1 /*
2 * Copyright (C) 2010-2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
3 *
4 * SPDX-License-Identifier: MIT
5 *
6 */
7
8 #ifndef _LTTNG_ALIGN_H
9 #define _LTTNG_ALIGN_H
10
11 #include "bug.hpp"
12
13 /*
14 * Align value to the next multiple of align. Returns val if it already is a
15 * multiple of align. Align must be a power of two.
16 */
17 #define __lttng_align_ceil_mask(v, mask) (((v) + (mask)) & ~(mask))
18
19 #define lttng_align_ceil(v, align) \
20 __lttng_align_ceil_mask(v, (__typeof__(v)) (align) - 1)
21
22 /*
23 * Align value to the previous multiple of align. Returns val if it already is a
24 * multiple of align. Align must be a power of two.
25 */
26 #define __lttng_align_floor_mask(v, mask) ((v) & ~(mask))
27
28 #define lttng_align_floor(v, align) \
29 __lttng_align_floor_mask(v, (__typeof__(v)) (align) - 1)
30
31 /**
32 * lttng_offset_align - Calculate the offset needed to align an object on its natural
33 * alignment towards higher addresses.
34 * @align_drift: object offset from an "alignment"-aligned address.
35 * @alignment: natural object alignment. Must be non-zero, power of 2.
36 *
37 * Returns the offset that must be added to align towards higher
38 * addresses.
39 */
40 #define lttng_offset_align(align_drift, alignment) \
41 ({ \
42 LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \
43 || ((alignment) & ((alignment) - 1))); \
44 (((alignment) - (align_drift)) & ((alignment) - 1)); \
45 })
46
47 /**
48 * lttng_offset_align_floor - Calculate the offset needed to align an object
49 * on its natural alignment towards lower addresses.
50 * @align_drift: object offset from an "alignment"-aligned address.
51 * @alignment: natural object alignment. Must be non-zero, power of 2.
52 *
53 * Returns the offset that must be substracted to align towards lower addresses.
54 */
55 #define lttng_offset_align_floor(align_drift, alignment) \
56 ({ \
57 LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 \
58 || ((alignment) & ((alignment) - 1))); \
59 (((align_drift) - (alignment)) & ((alignment) - 1)); \
60 })
61
62 #endif /* _LTTNG_ALIGN_H */
This page took 0.031929 seconds and 4 git commands to generate.