[vorbis-dev] Re: [vorbis] bug in glibc 2.1.2 and older

Monty xiphmont at xiph.org
Mon Jun 26 12:37:45 PDT 2000



> I have solved this problem in the splay mp3 decoder with this:
> 
> In the header:
> 
> #if (__GNUC__ < 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ < 91 ) )
> #warning "inline code disabled! (buggy egcs version)"
> #undef __NO_MATH_INLINES
> #define __NO_MATH_INLINES 1
> #endif

Insufficient!  The bug is *not* in the compiler.  It is in the glibc headers.
I can make bleededing edge GCC break very easily with the bad glibc.

> #include <math.h>
> 
> In the makefile:
> 
> CXXFLAGS=@CXXFLAGS@ -fno-strength-reduce 
> 
> (Opt level is 2)

Not needed in vorbis.  My code doesn't break in strength reduction (and this 
option is only needed if you're doing non-ANSI 'optimizations' in your C)

> and in the excutable:
> 
> pow(6.0,3.0);
> 
> Then it did work.

All you did was cause a shift in optimization that changed FPU stack usage, 
giving the illusion of the problem going away.  If you'd done none of that but 
just a printf() of the value after the pow() it would also appear to have 
fixed the bug (by forcing a float store, also reducing the stack usage).

Monty

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/



More information about the Vorbis-dev mailing list