[Mesa-dev] [PATCH 1/1] Fix runtime error with uClibc

Matt Turner mattst88 at gmail.com
Sun Mar 15 10:27:45 PDT 2015


On Sun, Mar 15, 2015 at 4:27 AM, Bernd Kuhls <bernd.kuhls at t-online.de> wrote:
> Patch inspired by
> https://www.winehq.org/pipermail/wine-bugs/2011-September/288987.html
> http://git.alpinelinux.org/cgit/aports/tree/main/wine/uclibc-fmaxf-fminf.patch?id=c9b491b6099eec02a835ffd05539b5c783c6c43a
>
> Starting an app using mesa3d 10.5.x, Kodi for example, fails:
>
> /usr/lib/kodi/kodi.bin: symbol 'fminf': can't resolve symbol in lib '/usr/lib/dri/i965_dri.so'.
> libGL error: unable to load driver: i965_dri.so
> libGL error: driver pointer missing
> libGL error: failed to load driver: i965
> libGL error: unable to load driver: swrast_dri.so
> libGL error: failed to load driver: swrast
>
> Here is some background information about the fminf/fmaxf situation in uClibc:
> http://thread.gmane.org/gmane.comp.lib.uclibc.general/24189
>
> Please backport this patch to the 10.5 branch.
>
> Signed-off-by: Bernd Kuhls <bernd.kuhls at t-online.de>
> ---
>  src/glsl/nir/nir_constant_expressions.py |   12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/src/glsl/nir/nir_constant_expressions.py b/src/glsl/nir/nir_constant_expressions.py
> index 22bc4f0..139c25a 100644
> --- a/src/glsl/nir/nir_constant_expressions.py
> +++ b/src/glsl/nir/nir_constant_expressions.py
> @@ -50,6 +50,18 @@ static double copysign(double x, double y)
>  }
>  #endif
>
> +#ifdef __UCLIBC__
> +float fmaxf(float a, float b)
> +{
> +       return (a > b) ? a : b;
> +}
> +
> +float fminf(float a, float b)
> +{
> +       return (a < b) ? a : b;
> +}
> +#endif
> +
>  /**
>   * Evaluate one component of packSnorm4x8.
>   */
> --
> 1.7.10.4

We're really trying to get rid of cruft like this. I'd really rather
not add more.

fminf(3) shows that it should be available if _XOPEN_SOURCE >= 600 ||
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L, which is true if
compiling with -std=c99, which we should be using if compiling with
gcc. Does uclibc not implement c99 functions?

I read the thread, but I didn't understand why uclibc doesn't provide
them. There's a comment in the code, quoted in that thread saying...

/* For the time being, do _NOT_ implement these functions
 * that are defined by SuSv3 [because we don't need them
 * and nobody asked to include them] */

so maybe uclibc just needs to add them.

Also, if we were going to add more cruft like this it should go in include/c99*.

The implementations are also wrong. The purpose of fmin/fmax is
precisely to avoid the problem of comparison with NaN. The man page
says "If one argument is a NaN, the other argument is returned.", but
your implementation does not do that.

But really, I think uclibc should be implementing this.


More information about the mesa-dev mailing list