summaryrefslogtreecommitdiff
path: root/src/stubs/errorf.c
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowitz@users.sourceforge.net>2014-04-06 14:18:32 -0500
committerYaakov Selkowitz <yselkowitz@users.sourceforge.net>2014-06-27 18:31:56 -0500
commit0dcdd82059c69ec417bb094f4da2afef7cc1426a (patch)
tree2c6fb577baf6d252e728864d75b1be486e1bb364 /src/stubs/errorf.c
parent783a406d6258509abfbdc54c0b32366dcaf13044 (diff)
Make shared library work on Cygwin/MinGW
Weak symbols on PE platforms do not work the same way as on ELF platforms, hence we have been unable to have a fully functional shared libXfont until now. This patch works around these issues so that we can fix that. In summary, only when compiling shared libraries on NO_WEAK_SYMBOLS platforms, when the first stub is called, the invoking program is first checked to determine if it exports the stubbed functions. Then, for every stub call, if the function is exported by the loader, it is called instead of the stub code. serverClient and serverGeneration are data pointers, and therefore are replaced by getter functions. ErrorF is variadic, so the override is routed through VErrorF instead. FatalError has no va_list equivalent, but it is not actually used in libXfont and therefore should be safe to remove. This requires all X servers to export their symbols, which requires forthcoming patches for hw/xwin and xfs; the other xservers (including tigervnc) already do this via LD_EXPORT_SYMBOLS_FLAG. Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Reviewed-by: Colin Harrison <colin.harrison@virgin.net> Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com> Tested-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
Diffstat (limited to 'src/stubs/errorf.c')
-rw-r--r--src/stubs/errorf.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/stubs/errorf.c b/src/stubs/errorf.c
index fd32965..d2de6c6 100644
--- a/src/stubs/errorf.c
+++ b/src/stubs/errorf.c
@@ -10,4 +10,5 @@
weak void
ErrorF(const char *f, ...)
{
+ OVERRIDE_VA_SYMBOL(VErrorF, f);
}