[Ffmpeg-devel] random crashes decoding MP3s

Jacob Meuser jakemsr
Tue Apr 4 09:14:23 CEST 2006


On Mon, Apr 03, 2006 at 01:44:58PM +0100, M??ns Rullg??rd wrote:
> 
> Jacob Meuser said:
> > On Mon, Apr 03, 2006 at 08:50:03AM +0100, M?ns Rullg?rd wrote:
> >> Jacob Meuser <jakemsr at jakemsr.com> writes:
> >>
> >> > On Sun, Apr 02, 2006 at 03:09:07AM -0400, Rich Felker wrote:
> >> >> On Sat, Apr 01, 2006 at 08:31:43PM -0800, Jacob Meuser wrote:
> >> >> > yes, there is no memlign() on OpenBSD.
> >> >> >
> >> >> > quoting malloc(3)
> >> >> >
> >> >> >     The allocated space is suitably aligned (after possible
> >> >> >     pointer coercion) for storage of any type of object.  If the
> >> >> >     space is of pagesize or larger, the memory returned will be
> >> >> >     page-aligned.
> >> >>
> >> >> This text is not meaningful to what we're talking about. ISO C
> >> >> requires that the return value of malloc be "suitably aligned for
> >> >> storage of any type of object", but "object" is defined as in ISO C,
> >> >> and this has nothing to do with the alignment requirements of various
> >> >> asm constructs. A true memalign is needed..
> >> >
> >> > I have always disabled MEMALIGN_HACK and never had any problems.
> >>
> >> Maybe OpenBSD malloc() aligns more than is required.
> >
> > not sure what you mean here.
> 
> The C standard requires malloc() to return memory suitably aligned for any
> data type.  On 32-bit machines the required alignment is usually 32 bits
> (or less).  On 64-bit machines it is typically 64 bits for 64-bit data
> types.  It is possible that some malloc() implementation always returns
> addresses aligned to, e.g., 64 bits even on 32-bit hardware.  IIRC, glibc
> malloc() does something like this.

OK.  perhaps I misunderstand, but it looks like you are saying the
problem here would be on x86 and not x86_64?  or is that just 
one possibility?

> > but anyway, that wouldn't explain why FFmpeg sources from a year ago
> > work consistently, but current ones don't.
> 
> Indeed.
> 
> > it looks like the only change in huffman_decode() that could matter
> > was the get_vlc -> get_vlc2 change.  this is consistent with gdb
> > giving line 1656 as the crash point, no?
> >
> > hmmm, that seems to be the problem.  putting the old get_vlc() back
> > into bitstream.h and changing the get_vlc2() to get_vlc() on line
> > 1653 of mpegaudiodec.c make the crashes stop.
> 
> OK, so does get_vlc2() use any mmx/sse instructions, or otherwise do
> something that might have stricter alignment requirements than whatever
> get_vlc() does?

not as far as I can see.  they both use GET_VLC, which uses asm.

and, the crashes do not go away if I enable the memalign hack.

-- 
<jakemsr at jakemsr.com>





More information about the ffmpeg-devel mailing list