diff options
author | Thomas Hellstrom <[email protected]> | 2010-11-08 17:10:02 +0100 |
---|---|---|
committer | Thomas Hellstrom <[email protected]> | 2010-11-09 12:31:25 +0100 |
commit | 0d5b4b320cf1acde5ff02e9fca696239f5dd3fe4 (patch) | |
tree | c4faef8774d953b54ef392b7ecce2ad13d8eb648 /src | |
parent | 8e630fad7260ea9e0c2792f4424a0c1ab0353cc9 (diff) |
svga/drm: Optionally resolve calls to powf during link-time
When linked with certain builds of libstdc++, it appears like powf is resolved
by a symbol in that library. Other builds of libstdc++ doesn't contain that
symbol resulting in a linker / loader error. Optionally
resolve that symbol and replace it with calls to logf and expf.
Signed-off-by: Thomas Hellstrom <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/targets/dri-vmwgfx/Makefile | 1 | ||||
-rw-r--r-- | src/gallium/targets/dri-vmwgfx/vmw_powf.c | 17 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/gallium/targets/dri-vmwgfx/Makefile b/src/gallium/targets/dri-vmwgfx/Makefile index 97c703b3739..38f78932e13 100644 --- a/src/gallium/targets/dri-vmwgfx/Makefile +++ b/src/gallium/targets/dri-vmwgfx/Makefile @@ -12,6 +12,7 @@ PIPE_DRIVERS = \ C_SOURCES = \ target.c \ + vmw_powf.c \ $(COMMON_GALLIUM_SOURCES) DRIVER_DEFINES = \ diff --git a/src/gallium/targets/dri-vmwgfx/vmw_powf.c b/src/gallium/targets/dri-vmwgfx/vmw_powf.c new file mode 100644 index 00000000000..ca5e39b389a --- /dev/null +++ b/src/gallium/targets/dri-vmwgfx/vmw_powf.c @@ -0,0 +1,17 @@ +/** + * Powf may leave an unresolved symbol pointing to a libstdc++.so powf. + * However, not all libstdc++.so include this function, so optionally + * replace the powf function with calls to expf and logf. + */ + +#ifdef VMW_RESOLVE_POWF + +extern float expf(float x); +extern float logf(float x); +extern float powf(float x, float y); + +float powf(float x, float y) { + return expf(logf(x)*y); +} + +#endif |