[lttng-dev] [PATCH barectf 1/1] Fix: bitfield: shift undefined/implementation defined behaviors
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Wed May 15 17:53:19 EDT 2019
----- On May 14, 2019, at 4:42 PM, Mathieu Desnoyers mathieu.desnoyers at efficios.com wrote:
[...]
>
> #define _$prefix$bt_bitfield_write_be(_ptr, type, _start, _length, _vtype, _v)
> \\
> do { \\
> - _vtype __v = (_v); \\
> + _vtype __v = (_v); \\
> type *__ptr = CAST_PTR(type *, _ptr); \\
> unsigned long __start = (_start), __length = (_length); \\
> type mask, cmask; \\
> @@ -740,15 +859,15 @@ do { \\
> \\
> /* Trim v high bits */ \\
> if (__length < sizeof(__v) * CHAR_BIT) \\
> - __v &= ~((~(_vtype) 0) << __length); \\
> + __v &= _$prefix$bt_make_mask(_vtype, __length); \\
> \\
> /* We can now append v with a simple "or", shift it piece-wise */ \\
> this_unit = end_unit - 1; \\
> if (start_unit == end_unit - 1) { \\
> - mask = ~((~(type) 0) << ((ts - (end % ts)) % ts)); \\
> + mask = _$prefix$bt_make_mask(type, (ts - (end % ts)) % ts); \\
> if (__start % ts) \\
> - mask |= (~((type) 0)) << (ts - (__start % ts)); \\
> - cmask = (type) __v << ((ts - (end % ts)) % ts); \\
> + mask |= _$prefix$bt_make_mask_complement(type, ts - (__start % ts)); \\
> + cmask = _$prefix$bt_lshift(type, (type) (__v), (ts - (end % ts)) % ts); \\
> cmask &= ~mask; \\
> __ptr[this_unit] &= mask; \\
> __ptr[this_unit] |= cmask; \\
> @@ -756,8 +875,8 @@ do { \\
> } \\
> if (end % ts) { \\
> cshift = end % ts; \\
> - mask = ~((~(type) 0) << (ts - cshift)); \\
> - cmask = (type) __v << (ts - cshift); \\
> + mask = _$prefix$bt_make_mask(type, ts - cshift); \\
> + cmask = _$prefix$bt_lshift(type, (type) (__v), ts - cshift); \\
> cmask &= ~mask; \\
> __ptr[this_unit] &= mask; \\
> __ptr[this_unit] |= cmask; \\
> @@ -771,7 +890,7 @@ do { \\
> end -= ts; \\
> } \\
> if (__start % ts) { \\
> - mask = (~(type) 0) << (ts - (__start % ts)); \\
> + mask = _$prefix$bt_make_mask(type, ts - (__start % ts)); \\
Should be:
+ mask = _$prefix$bt_make_mask_complement(type, ts - (__start % ts)); \\
Will send an updated patch.
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list