Bug#786438: libmp3lame0: general protection error in libmp3lame.so.0.0.0
Bernhard Übelacker
bernhardu at vr-web.de
Tue Jun 2 11:46:39 UTC 2015
Hello Fabian,
Am 02.06.2015 um 12:11 schrieb Fabian Greffrath:
> but that shouldn't make a difference, because the code already worked
> correctly when you forced it to 16-bit boundaries by using
> posix_memalign().
I just wanted to have a less invasive change.
> What happens if you re-arrange the definition of the vecfloat_union so
> that _m128 is its first member, i.e.
>
> typedef union {
> __m128 _m128;
> int32_t _i_32[4]; /* unions are initialized by its first member */
> float _float[4];
> } vecfloat_union;
>
> This is how these unions are used in most examples that I found.
With _m128 being the first line the crash still happens with
or without the attribute.
> Also, do you have any idea what this comment in there wants to tell us?
I guess this is a hint for this initialization:
- const vecfloat_union fabs_mask = {{ 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }};
This could be probably more explicit (but less portable)
by doing something like this:
+ const vecfloat_union fabs_mask = { ._i_32 = { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF } };
With this, reordering the members of the union does not affect audio output.
> You could even drop the _i_32[] member, it is not used in the code.
> Maybe the compiler recognized that and somehow optimized that out,
> messing the alignment thereby?
Removing _i_32 seems to initialize the union differently and therefore
the result is different.
With _i_32 removed (and the alignment 0x20) audio is not working anymore.
Kind regards,
Bernhard
More information about the pkg-multimedia-maintainers
mailing list