xserver: Branch 'master' - 2 commits

Paulo Cesar Pereira de Andrade pcpa at kemper.freedesktop.org
Thu Nov 27 20:14:35 PST 2008


 configure.ac                       |   43 +++++++++++++++++++++++++
 exa/exa.c                          |   14 ++++----
 exa/exa_migration.c                |    2 -
 exa/exa_offscreen.c                |    8 ++--
 exa/exa_unaccel.c                  |    2 -
 fb/fbcmap.c                        |    2 -
 fb/fbcmap_mi.c                     |    2 -
 hw/xfree86/common/xf86Cursor.c     |    6 +--
 hw/xfree86/common/xf86Events.c     |    2 -
 hw/xfree86/common/xf86Globals.c    |    4 +-
 hw/xfree86/common/xf86xv.c         |    6 +--
 hw/xfree86/ddc/xf86DDC.c           |    6 +--
 hw/xfree86/dri/dri.c               |   54 +++++++++++++++----------------
 hw/xfree86/dri2/dri2.c             |   10 ++---
 hw/xfree86/dummylib/xf86info.c     |    2 -
 hw/xfree86/fbdevhw/fbdevhw.c       |   14 ++++----
 hw/xfree86/fbdevhw/fbdevhwstub.c   |   14 ++++----
 hw/xfree86/i2c/msp3430.c           |    2 -
 hw/xfree86/i2c/xf86i2c.c           |   16 ++++-----
 hw/xfree86/int10/helper_exec.c     |    2 -
 hw/xfree86/int10/stub.c            |    2 -
 hw/xfree86/modes/xf86Crtc.c        |    8 ++--
 hw/xfree86/modes/xf86EdidModes.c   |    2 -
 hw/xfree86/parser/Flags.c          |    2 -
 hw/xfree86/ramdac/BT.c             |    2 -
 hw/xfree86/ramdac/IBM.c            |    8 ++--
 hw/xfree86/ramdac/TI.c             |    6 +--
 hw/xfree86/ramdac/xf86Cursor.c     |    8 ++--
 hw/xfree86/ramdac/xf86RamDac.c     |   12 +++----
 hw/xfree86/ramdac/xf86RamDacCmap.c |    2 -
 hw/xfree86/shadowfb/shadow.c       |    4 +-
 hw/xfree86/vbe/vbe.c               |    8 ++--
 hw/xfree86/vgahw/vgaHW.c           |   63 ++++++++++++++++++++-----------------
 hw/xfree86/xaa/xaaBitOrder.c       |    3 +
 hw/xfree86/xaa/xaaFallback.c       |    2 -
 hw/xfree86/xaa/xaaFillRect.c       |    2 -
 hw/xfree86/xaa/xaaImage.c          |    2 -
 hw/xfree86/xaa/xaaInit.c           |   10 ++---
 hw/xfree86/xaa/xaaLine.c           |    2 -
 hw/xfree86/xaa/xaaOverlayDF.c      |    2 -
 hw/xfree86/xaa/xaaPCache.c         |    2 -
 hw/xfree86/xaa/xaaPict.c           |    2 -
 hw/xfree86/xaa/xaaROP.c            |   12 +++----
 hw/xfree86/xaa/xaaStipple.c        |    2 -
 hw/xfree86/xaa/xaaTEGlyph.c        |    2 -
 hw/xfree86/xaa/xaaWrapper.c        |    2 -
 xorg-server.pc.in                  |    2 -
 47 files changed, 218 insertions(+), 167 deletions(-)

New commits:
commit 45c8bd0fe54273039fdaa1eeeafb81b5774f2c75
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Fri Nov 28 02:01:57 2008 -0200

    Enable compiling the X Server and modules with hidden symbols by default.
    
      Note that it checks if support for symbol visibility is available by
    the compiler, not if it is functional. It may have problems on non x86
    architectures.
      To disable the feature, just pass the option "--disable-visibility"
    to the X Server configure script.
      Unless using an alternate build schema, drivers built from a git
    checkout will use the same "visibility" related CFLAGS used to compile
    the X Server.

diff --git a/configure.ac b/configure.ac
index ea3d0fa..9beeca1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -504,6 +504,9 @@ AC_ARG_ENABLE(builtin-fonts,  AS_HELP_STRING([--enable-builtin-fonts], [Use only
 AC_ARG_ENABLE(null-root-cursor, AS_HELP_STRING([--enable-null-root-cursor], [Use an empty root cursor (default: use core cursor)]),
                                  [NULL_ROOT_CURSOR=$enableval],
                                  [NULL_ROOT_CURSOR=no])
+AC_ARG_ENABLE(visibility,     AC_HELP_STRING([--enable-visibility], [Enable symbol visibility (default: auto)]),
+				[SYMBOL_VISIBILITY=$enableval],
+				[SYMBOL_VISIBILITY=auto])
 
 dnl GLX build options
 AC_ARG_WITH(mesa-source,     AS_HELP_STRING([--with-mesa-source=MESA_SOURCE], [Path to Mesa source tree]),
@@ -1229,6 +1232,46 @@ if test "x$XORG" = xyes; then
 	XORG_CFLAGS="$XORGSERVER_CFLAGS -DHAVE_XORG_CONFIG_H"
 	XORG_LIBS="$COMPOSITE_LIB $FIXES_LIB $XEXTXORG_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $SELINUX_LIB"
 
+	dnl ==================================================================
+	dnl symbol visibility
+	symbol_visibility=
+	have_visibility=disabled
+	if test x$SYMBOL_VISIBILITY != xno; then
+	    AC_MSG_CHECKING(for symbol visibility support)
+	    if test x$GCC = xyes; then
+		VISIBILITY_CFLAGS="-fvisibility=hidden"
+	    else
+		AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+		if test x$SUNCC = xyes; then
+		    VISIBILITY_CFLAGS="-xldscope=hidden"
+		else
+		    have_visibility=no
+		fi
+	    fi
+	    if test x$have_visibility != xno; then
+		save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
+		AC_TRY_COMPILE(
+		    [#include <X11/Xfuncproto.h>
+		     extern _X_HIDDEN int hidden_int;
+		     extern _X_EXPORT int public_int;
+		     extern _X_HIDDEN int hidden_int_func(void);
+		     extern _X_EXPORT int public_int_func(void);],
+		    [],
+		    have_visibility=yes,
+		    have_visibility=no)
+		CFLAGS=$save_CFLAGS
+	    fi
+	    AC_MSG_RESULT([$have_visibility])
+	    if test x$have_visibility != xno; then
+		symbol_visibility=$VISIBILITY_CFLAGS
+		XORG_CFLAGS="$XORG_CFLAGS $VISIBILITY_CFLAGS"
+	    fi
+	fi
+	dnl added to xorg-server.pc
+	AC_SUBST([symbol_visibility])
+	dnl ===================================================================
+
 	PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.8.0])
 	SAVE_LIBS=$LIBS
 	SAVE_CFLAGS=$CFLAGS
diff --git a/xorg-server.pc.in b/xorg-server.pc.in
index 139adf4..7547aa3 100644
--- a/xorg-server.pc.in
+++ b/xorg-server.pc.in
@@ -15,5 +15,5 @@ Name: xorg-server
 Description: Modular X.Org X Server
 Version: @PACKAGE_VERSION@
 Requires: pixman-1 pciaccess
-Cflags: -I${sdkdir}
+Cflags: -I${sdkdir} @symbol_visibility@
 Libs: -L${libdir}
commit 31285d063ec4623cb0764437d6d57e244f20460d
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Fri Nov 28 01:55:11 2008 -0200

    Make visible symbols required by xorg modules.
    
      This patch exports all symbols required by the compilable
    (in a x86 linux computer) xorg/driver/* modules.
      Still missing symbols worth mentioning are:
    
    sunleo
    	miFindMaxBand no longer available
    
    intel	(uxa/uxa-accel.c)
    	fbShmPutImage no longer available (and should have been static)
    
    mga
    	MGAGetClientPointer (should come from matrox's libhal)
    
      This is not a definitive "visibility" patch, as all it does is to
    export missing symbols, but the modules that current don't compile,
    may require more symbols once fixed, and third party drivers should
    also require more symbols exported.
      A "definitive" patch should export symbols defined in the sdk.

diff --git a/exa/exa.c b/exa/exa.c
index 6dfde4c..f7dbbcd 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -67,7 +67,7 @@ ExaGetPixmapAddress(PixmapPtr p)
  * support for having multiple card-accessible offscreen, such as an AGP memory
  * pool alongside the framebuffer pool.
  */
-unsigned long
+_X_EXPORT unsigned long
 exaGetPixmapOffset(PixmapPtr pPix)
 {
     ExaScreenPriv (pPix->drawable.pScreen);
@@ -90,7 +90,7 @@ exaGetPixmapDriverPrivate(PixmapPtr pPix)
  * This is a helper to make driver code more obvious, due to the rather obscure
  * naming of the pitch field in the pixmap.
  */
-unsigned long
+_X_EXPORT unsigned long
 exaGetPixmapPitch(PixmapPtr pPix)
 {
     return pPix->devKind;
@@ -776,7 +776,7 @@ exaCloseScreen(int i, ScreenPtr pScreen)
  *
  * @return a newly allocated, zero-filled driver structure
  */
-ExaDriverPtr
+_X_EXPORT ExaDriverPtr
 exaDriverAlloc(void)
 {
     return xcalloc(1, sizeof(ExaDriverRec));
@@ -792,7 +792,7 @@ exaDriverAlloc(void)
  *
  * @return TRUE if EXA was successfully initialized.
  */
-Bool
+_X_EXPORT Bool
 exaDriverInit (ScreenPtr		pScreen,
                ExaDriverPtr	pScreenInfo)
 {
@@ -1012,7 +1012,7 @@ exaDriverInit (ScreenPtr		pScreen,
  *
  * @param pScreen screen being torn down.
  */
-void
+_X_EXPORT void
 exaDriverFini (ScreenPtr pScreen)
 {
     /*right now does nothing*/
@@ -1029,7 +1029,7 @@ exaDriverFini (ScreenPtr pScreen)
  * driver MarkSync() callback, the return value of which may be used to do partial
  * synchronization with the hardware in the future.
  */
-void exaMarkSync(ScreenPtr pScreen)
+_X_EXPORT void exaMarkSync(ScreenPtr pScreen)
 {
     ExaScreenPriv(pScreen);
 
@@ -1048,7 +1048,7 @@ void exaMarkSync(ScreenPtr pScreen)
  * It should always be called before relying on the framebuffer contents
  * reflecting previous drawing, from a CPU perspective.
  */
-void exaWaitSync(ScreenPtr pScreen)
+_X_EXPORT void exaWaitSync(ScreenPtr pScreen)
 {
     ExaScreenPriv(pScreen);
 
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index 571650c..7b41f4d 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -348,7 +348,7 @@ exaDoMoveInPixmap (ExaMigrationPtr migrate)
     pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
 }
 
-void
+_X_EXPORT void
 exaMoveInPixmap (PixmapPtr pPixmap)
 {
     static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c
index 4aaa2c1..95656bf 100644
--- a/exa/exa_offscreen.c
+++ b/exa/exa_offscreen.c
@@ -164,7 +164,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align)
  * requested version 2.1 or newer behavior.  In that case, the save callback is
  * still called.
  */
-ExaOffscreenArea *
+_X_EXPORT ExaOffscreenArea *
 exaOffscreenAlloc (ScreenPtr pScreen, int size, int align,
                    Bool locked,
                    ExaOffscreenSaveProc save,
@@ -365,7 +365,7 @@ ExaOffscreenSwapIn (ScreenPtr pScreen)
  * many drivers that could otherwise handle the lack of FB access while
  * swapped out.
  */
-void
+_X_EXPORT void
 exaEnableDisableFBAccess (int index, Bool enable)
 {
     ScreenPtr pScreen = screenInfo.screens[index];
@@ -412,7 +412,7 @@ ExaOffscreenMerge (ExaOffscreenArea *area)
  * @return pointer to the newly freed area. This behavior should not be relied
  * on.
  */
-ExaOffscreenArea *
+_X_EXPORT ExaOffscreenArea *
 exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area)
 {
     ExaScreenPriv(pScreen);
@@ -453,7 +453,7 @@ exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area)
     return area;
 }
 
-void
+_X_EXPORT void
 ExaOffscreenMarkUsed (PixmapPtr pPixmap)
 {
     ExaPixmapPriv (pPixmap);
diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c
index 64c06c7..6e75d78 100644
--- a/exa/exa_unaccel.c
+++ b/exa/exa_unaccel.c
@@ -373,7 +373,7 @@ ExaCheckAddTraps (PicturePtr	pPicture,
  *
  * XXX This really belongs in fb, so it can be aware of tiling and etc.
  */
-CARD32
+_X_EXPORT CARD32
 exaGetPixmapFirstPixel (PixmapPtr pPixmap)
 {
     CARD32 pixel;
diff --git a/fb/fbcmap.c b/fb/fbcmap.c
index c29a513..0ec0e85 100644
--- a/fb/fbcmap.c
+++ b/fb/fbcmap.c
@@ -278,7 +278,7 @@ fbExpandDirectColors (ColormapPtr   pmap,
     return nresult;
 }
 
-Bool
+_X_EXPORT Bool
 fbCreateDefColormap(ScreenPtr pScreen)
 {
     unsigned short	zero = 0, ones = 0xFFFF;
diff --git a/fb/fbcmap_mi.c b/fb/fbcmap_mi.c
index 188decd..0747972 100644
--- a/fb/fbcmap_mi.c
+++ b/fb/fbcmap_mi.c
@@ -85,7 +85,7 @@ fbExpandDirectColors (ColormapPtr   pmap,
     return miExpandDirectColors(pmap, ndef, indefs, outdefs);
 }
 
-Bool
+_X_EXPORT Bool
 fbCreateDefColormap(ScreenPtr pScreen)
 {
     return miCreateDefColormap(pScreen);
diff --git a/hw/xfree86/common/xf86Cursor.c b/hw/xfree86/common/xf86Cursor.c
index c6f6039..4336ca5 100644
--- a/hw/xfree86/common/xf86Cursor.c
+++ b/hw/xfree86/common/xf86Cursor.c
@@ -133,7 +133,7 @@ xf86InitViewport(ScrnInfoPtr pScr)
  *      Scroll the visual part of the screen so the pointer is visible.
  */
 
-void
+_X_EXPORT void
 xf86SetViewport(ScreenPtr pScreen, int x, int y)
 {
   ScrnInfoPtr   pScr = XF86SCRNINFO(pScreen);
@@ -197,7 +197,7 @@ xf86LockZoom(ScreenPtr pScreen, Bool lock)
  *	set a new mode.
  */
 
-Bool
+_X_EXPORT Bool
 xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
 {
   ScrnInfoPtr pScr = XF86SCRNINFO(pScreen);
@@ -845,7 +845,7 @@ xf86InitOrigins(void)
     }
 }
 
-void
+_X_EXPORT void
 xf86ReconfigureLayout(void)
 {
     int i;
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index d6ef93a..0ddee4b 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -182,7 +182,7 @@ ProcessInputEvents ()
  * Handle keyboard events that cause some kind of "action"
  * (i.e., server termination, video mode changes, VT switches, etc.)
  */
-void
+_X_EXPORT void
 xf86ProcessActionEvent(ActionEvent action, void *arg)
 {
 #ifdef DEBUG
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index 57142be..e479557 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -97,7 +97,7 @@ InputInfoPtr xf86InputDevs = NULL;
 
 /* Globals that video drivers may not access */
 
-xf86InfoRec xf86Info = {
+_X_EXPORT xf86InfoRec xf86Info = {
     .consoleFd                  = -1,
     .vtno                       = -1,
     .vtSysreq                   = FALSE,
@@ -200,7 +200,7 @@ Bool xf86VidModeAllowNonLocal = FALSE;
 #endif
 RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
 _X_EXPORT Bool xf86inSuspend = FALSE;
-Bool xorgHWAccess = FALSE;
+_X_EXPORT Bool xorgHWAccess = FALSE;
 
 struct pci_slot_match xf86IsolateDevice = {
     PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 02d6e37..4791f1b 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -116,9 +116,9 @@ static int XF86XvScreenKeyIndex;
 DevPrivateKey XF86XvScreenKey = &XF86XvScreenKeyIndex;
 static unsigned long PortResource = 0;
 
-DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
-unsigned long (*XvGetRTPortProc)(void) = NULL;
-int (*XvScreenInitProc)(ScreenPtr) = NULL;
+_X_EXPORT DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
+_X_EXPORT unsigned long (*XvGetRTPortProc)(void) = NULL;
+_X_EXPORT int (*XvScreenInitProc)(ScreenPtr) = NULL;
 
 #define GET_XV_SCREEN(pScreen) \
     ((XvScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, XF86XvScreenKey))
diff --git a/hw/xfree86/ddc/xf86DDC.c b/hw/xfree86/ddc/xf86DDC.c
index 0d86776..da7b34e 100644
--- a/hw/xfree86/ddc/xf86DDC.c
+++ b/hw/xfree86/ddc/xf86DDC.c
@@ -63,7 +63,7 @@ static const OptionInfoRec DDCOptions[] = {
  * @return pointer to a new xf86MonPtr containing the EDID information.
  * @return NULL if no monitor attached or failure to interpret the EDID.
  */
-xf86MonPtr 
+_X_EXPORT xf86MonPtr 
 xf86DoEDID_DDC1(
     int scrnIndex, DDC1SetSpeedProc DDC1SetSpeed, 
     unsigned int (*DDC1Read)(ScrnInfoPtr)
@@ -206,7 +206,7 @@ DDC2Read(I2CDevPtr dev, int block, unsigned char *R_Buffer)
  * @return pointer to a new xf86MonPtr containing the EDID information.
  * @return NULL if no monitor attached or failure to interpret the EDID.
  */
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
 {
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -267,7 +267,7 @@ xf86DoEEDID(int scrnIndex, I2CBusPtr pBus, Bool complete)
  * @return pointer to a new xf86MonPtr containing the EDID information.
  * @return NULL if no monitor attached or failure to interpret the EDID.
  */
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 xf86DoEDID_DDC2(int scrnIndex, I2CBusPtr pBus)
 {
     return xf86DoEEDID(scrnIndex, pBus, FALSE);
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index 1a3e091..35b1fcf 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -315,7 +315,7 @@ dri_crtc_notify(ScreenPtr pScreen)
     pDRIPriv->xf86_crtc_notify = xf86_wrap_crtc_notify(pScreen, dri_crtc_notify);
 }
 
-Bool
+_X_EXPORT Bool
 DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
 {
     DRIScreenPrivPtr    pDRIPriv;
@@ -594,7 +594,7 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfoPtr pDRIInfo, int *pDRMFD)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIFinishScreenInit(ScreenPtr pScreen)
 {
     DRIScreenPrivPtr  pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -640,7 +640,7 @@ DRIFinishScreenInit(ScreenPtr pScreen)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 DRICloseScreen(ScreenPtr pScreen)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -812,7 +812,7 @@ DRIReset(void)
      */
 }
 
-Bool
+_X_EXPORT Bool
 DRIQueryDirectRenderingCapable(ScreenPtr pScreen, Bool* isCapable)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -825,7 +825,7 @@ DRIQueryDirectRenderingCapable(ScreenPtr pScreen, Bool* isCapable)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIOpenConnection(ScreenPtr pScreen, drm_handle_t * hSAREA, char **busIdString)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -836,7 +836,7 @@ DRIOpenConnection(ScreenPtr pScreen, drm_handle_t * hSAREA, char **busIdString)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -845,13 +845,13 @@ DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRICloseConnection(ScreenPtr pScreen)
 {
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIGetClientDriverName(ScreenPtr pScreen,
                        int *ddxDriverMajorVersion,
                        int *ddxDriverMinorVersion,
@@ -1014,7 +1014,7 @@ DRIDestroyDummyContext(ScreenPtr pScreen, Bool hasCtxPriv)
     pDRIPriv->dummyCtxPriv = NULL;
 }
 
-Bool
+_X_EXPORT Bool
 DRICreateContext(ScreenPtr pScreen, VisualPtr visual,
                  XID context, drm_context_t * pHWContext)
 {
@@ -1050,7 +1050,7 @@ DRICreateContext(ScreenPtr pScreen, VisualPtr visual,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIDestroyContext(ScreenPtr pScreen, XID context)
 {
     FreeResourceByType(context, DRIContextPrivResType, FALSE);
@@ -1233,7 +1233,7 @@ DRIDecreaseNumberVisible(ScreenPtr pScreen)
     DRIDriverClipNotify(pScreen);
 }
 
-Bool
+_X_EXPORT Bool
 DRICreateDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable,
 		  drm_drawable_t * hHWDrawable)
 {
@@ -1345,7 +1345,7 @@ DRIDestroyDrawableCB(pointer value, XID id, pointer data)
     return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIDestroyDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable)
 {
     if (pDrawable->type == DRAWABLE_WINDOW) {
@@ -1386,7 +1386,7 @@ DRIDrawablePrivDelete(pointer pResource, XID id)
     }
 }
 
-Bool
+_X_EXPORT Bool
 DRIGetDrawableInfo(ScreenPtr pScreen,
                    DrawablePtr pDrawable,
                    unsigned int* index,
@@ -1558,7 +1558,7 @@ DRIGetDrawableInfo(ScreenPtr pScreen,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIGetDeviceInfo(ScreenPtr pScreen,
                  drm_handle_t * hFrameBuffer,
                  int* fbOrigin,
@@ -1579,7 +1579,7 @@ DRIGetDeviceInfo(ScreenPtr pScreen,
     return TRUE;
 }
 
-DRIInfoPtr
+_X_EXPORT DRIInfoPtr
 DRICreateInfoRec(void)
 {
     DRIInfoPtr inforec = (DRIInfoPtr)xcalloc(1, sizeof(DRIInfoRec));
@@ -1605,7 +1605,7 @@ DRICreateInfoRec(void)
     return inforec;
 }
 
-void
+_X_EXPORT void
 DRIDestroyInfoRec(DRIInfoPtr DRIInfo)
 {
     if (DRIInfo->busIdString) xfree(DRIInfo->busIdString);
@@ -1613,7 +1613,7 @@ DRIDestroyInfoRec(DRIInfoPtr DRIInfo)
 }
 
 
-void
+_X_EXPORT void
 DRIWakeupHandler(pointer wakeupData, int result, pointer pReadmask)
 {
     int i;
@@ -1629,7 +1629,7 @@ DRIWakeupHandler(pointer wakeupData, int result, pointer pReadmask)
     }
 }
 
-void
+_X_EXPORT void
 DRIBlockHandler(pointer blockData, OSTimePtr pTimeout, pointer pReadmask)
 {
     int i;
@@ -2156,7 +2156,7 @@ DRIClipNotify(WindowPtr pWin, int dx, int dy)
     }
 }
 
-CARD32
+_X_EXPORT CARD32
 DRIGetDrawableIndex(WindowPtr pWin)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -2190,7 +2190,7 @@ DRIPrintDrawableLock(ScreenPtr pScreen, char *msg)
     ErrorF("%s: %d\n", msg,  pDRIPriv->pSAREA->drawable_lock.lock);
 }
 
-void
+_X_EXPORT void
 DRILock(ScreenPtr pScreen, int flags)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2211,7 +2211,7 @@ DRILock(ScreenPtr pScreen, int flags)
     (*pDRIPriv->pLockRefCount)++;
 }
 
-void
+_X_EXPORT void
 DRIUnlock(ScreenPtr pScreen)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2236,7 +2236,7 @@ DRIUnlock(ScreenPtr pScreen)
         DRM_UNLOCK(pDRIPriv->drmFD, pDRIPriv->pLSAREA, pDRIPriv->myContext);
 }
 
-void *
+_X_EXPORT void *
 DRIGetSAREAPrivate(ScreenPtr pScreen)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2245,7 +2245,7 @@ DRIGetSAREAPrivate(ScreenPtr pScreen)
     return (void *)(((char*)pDRIPriv->pSAREA)+sizeof(XF86DRISAREARec));
 }
 
-drm_context_t
+_X_EXPORT drm_context_t
 DRIGetContext(ScreenPtr pScreen)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2254,7 +2254,7 @@ DRIGetContext(ScreenPtr pScreen)
     return pDRIPriv->myContext;
 }
 
-void
+_X_EXPORT void
 DRIGetTexOffsetFuncs(ScreenPtr pScreen,
 		     DRITexOffsetStartProcPtr *texOffsetStartFunc,
 		     DRITexOffsetFinishProcPtr *texOffsetFinishFunc)
@@ -2278,7 +2278,7 @@ DRIGetWrappedFuncs(ScreenPtr pScreen)
 }
 
 /* note that this returns the library version, not the protocol version */
-void
+_X_EXPORT void
 DRIQueryVersion(int *majorVersion,
                 int *minorVersion,
                 int *patchVersion)
@@ -2349,7 +2349,7 @@ DRIAdjustFrame(int scrnIndex, int x, int y, int flags)
  * REGION_VALIDATE on it, or better yet, save a copy first.
  */
 
-void
+_X_EXPORT void
 DRIMoveBuffersHelper(
    ScreenPtr pScreen, 
    int dx,
@@ -2415,7 +2415,7 @@ DRIMoveBuffersHelper(
 
 }
 
-char *
+_X_EXPORT char *
 DRICreatePCIBusID(const struct pci_device * dev)
 {
     char *busID;
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 3c852a4..5db2629 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -96,7 +96,7 @@ DRI2GetDrawable(DrawablePtr pDraw)
     }
 }
 
-int
+_X_EXPORT int
 DRI2CreateDrawable(DrawablePtr pDraw)
 {
     WindowPtr	    pWin;
@@ -134,7 +134,7 @@ DRI2CreateDrawable(DrawablePtr pDraw)
     return Success;
 }
 
-DRI2BufferPtr
+_X_EXPORT DRI2BufferPtr
 DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
 	       unsigned int *attachments, int count, int *out_count)
 {
@@ -160,7 +160,7 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
     return pPriv->buffers;
 }
 
-int
+_X_EXPORT int
 DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
 	       unsigned int dest, unsigned int src)
 {
@@ -190,7 +190,7 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
     return Success;
 }
 
-void
+_X_EXPORT void
 DRI2DestroyDrawable(DrawablePtr pDraw)
 {
     DRI2ScreenPtr   ds = DRI2GetScreen(pDraw->pScreen);
@@ -221,7 +221,7 @@ DRI2DestroyDrawable(DrawablePtr pDraw)
     }
 }
 
-Bool
+_X_EXPORT Bool
 DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
 	    const char **driverName, const char **deviceName)
 {
diff --git a/hw/xfree86/dummylib/xf86info.c b/hw/xfree86/dummylib/xf86info.c
index 7db6817..6becb06 100644
--- a/hw/xfree86/dummylib/xf86info.c
+++ b/hw/xfree86/dummylib/xf86info.c
@@ -8,5 +8,5 @@
 #include "xf86Priv.h"
 
 /* Dummy variables */
-xf86InfoRec xf86Info;
+_X_EXPORT xf86InfoRec xf86Info;
 
diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 27951a8..119bed3 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -141,7 +141,7 @@ fbdevHWGetRec(ScrnInfoPtr pScrn)
 	return TRUE;
 }
 
-void
+_X_EXPORT void
 fbdevHWFreeRec(ScrnInfoPtr pScrn)
 {
 	if (fbdevHWPrivateIndex < 0)
@@ -721,7 +721,7 @@ fbdevHWUnmapVidmem(ScrnInfoPtr pScrn)
 	return TRUE;
 }
 
-void*
+_X_EXPORT void*
 fbdevHWMapMMIO(ScrnInfoPtr pScrn)
 {
 	unsigned int mmio_off;
@@ -754,7 +754,7 @@ fbdevHWMapMMIO(ScrnInfoPtr pScrn)
 	return fPtr->mmio;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWUnmapMMIO(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
@@ -885,7 +885,7 @@ fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 	return MODE_OK;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -916,7 +916,7 @@ fbdevHWAdjustFrame(int scrnIndex, int x, int y, int flags)
 			   "FBIOPAN_DISPLAY: %s\n", strerror(errno));
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWEnterVT(int scrnIndex, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -928,7 +928,7 @@ fbdevHWEnterVT(int scrnIndex, int flags)
 	return TRUE;
 }
 
-void
+_X_EXPORT void
 fbdevHWLeaveVT(int scrnIndex, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -937,7 +937,7 @@ fbdevHWLeaveVT(int scrnIndex, int flags)
 	fbdevHWRestore(pScrn);
 }
 
-void
+_X_EXPORT void
 fbdevHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
 {
 	fbdevHWPtr fPtr = FBDEVHWPTR(pScrn);
diff --git a/hw/xfree86/fbdevhw/fbdevhwstub.c b/hw/xfree86/fbdevhw/fbdevhwstub.c
index 5d18f9e..58f93b7 100644
--- a/hw/xfree86/fbdevhw/fbdevhwstub.c
+++ b/hw/xfree86/fbdevhw/fbdevhwstub.c
@@ -15,7 +15,7 @@ fbdevHWGetRec(ScrnInfoPtr pScrn)
 	return FALSE;
 }
 
-void
+_X_EXPORT void
 fbdevHWFreeRec(ScrnInfoPtr pScrn)
 {
 }
@@ -98,13 +98,13 @@ fbdevHWUnmapVidmem(ScrnInfoPtr pScrn)
 	return FALSE;
 }
 
-void*
+_X_EXPORT void*
 fbdevHWMapMMIO(ScrnInfoPtr pScrn)
 {
 	return NULL;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWUnmapMMIO(ScrnInfoPtr pScrn)
 {
 	return FALSE;
@@ -138,7 +138,7 @@ fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 	return MODE_ERROR;
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
 {
 	return FALSE;
@@ -149,18 +149,18 @@ fbdevHWAdjustFrame(int scrnIndex, int x, int y, int flags)
 {
 }
 
-Bool
+_X_EXPORT Bool
 fbdevHWEnterVT(int scrnIndex, int flags)
 {
 	return FALSE;
 }
 
-void
+_X_EXPORT void
 fbdevHWLeaveVT(int scrnIndex, int flags)
 {
 }
 
-void
+_X_EXPORT void
 fbdevHWDPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
 {
 }
diff --git a/hw/xfree86/i2c/msp3430.c b/hw/xfree86/i2c/msp3430.c
index e19dda3..0116db3 100644
--- a/hw/xfree86/i2c/msp3430.c
+++ b/hw/xfree86/i2c/msp3430.c
@@ -106,7 +106,7 @@ xf86DrvMsg(m->d.pI2CBus->scrnIndex, X_INFO, "MSP34xx: control=0x%02x%02x\n",
 #endif
 
 /* wrapper */
-void InitMSP3430(MSP3430Ptr m)
+_X_EXPORT void InitMSP3430(MSP3430Ptr m)
 {
   #if __MSPDEBUG__ > 1
   xf86DrvMsg(m->d.pI2CBus->scrnIndex,X_INFO,"InitMSP3430(m->connector=%d, m->standard=%d, m->chip_family=%d)\n",
diff --git a/hw/xfree86/i2c/xf86i2c.c b/hw/xfree86/i2c/xf86i2c.c
index 30b8f6f..0993699 100644
--- a/hw/xfree86/i2c/xf86i2c.c
+++ b/hw/xfree86/i2c/xf86i2c.c
@@ -460,7 +460,7 @@ xf86I2CReadStatus(I2CDevPtr d, I2CByte *pbyte)
 /* Read a byte from one of the registers determined by its sub-address.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CReadByte(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte)
 {
     return xf86I2CWriteRead(d, &subaddr, 1, pbyte, 1);
@@ -470,7 +470,7 @@ xf86I2CReadByte(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte)
  * sub-address of the first register.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CReadBytes(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte, int n)
 {
     return xf86I2CWriteRead(d, &subaddr, 1, pbyte, n);
@@ -495,7 +495,7 @@ xf86I2CReadWord(I2CDevPtr d, I2CByte subaddr, unsigned short *pword)
 /* Write a byte to one of the registers determined by its sub-address.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CWriteByte(I2CDevPtr d, I2CByte subaddr, I2CByte byte)
 {
     I2CByte wb[2];
@@ -555,7 +555,7 @@ xf86I2CWriteWord(I2CDevPtr d, I2CByte subaddr, unsigned short word)
  * remain uninitialized.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CWriteVec(I2CDevPtr d, I2CByte *vec, int nValues)
 {
     I2CBusPtr b = d->pI2CBus;
@@ -605,7 +605,7 @@ xf86CreateI2CDevRec(void)
  * you should set <unalloc> to free it.
  */
 
-void
+_X_EXPORT void
 xf86DestroyI2CDevRec(I2CDevPtr d, Bool unalloc) 
 {
     if (d) {
@@ -666,7 +666,7 @@ xf86I2CDevInit(I2CDevPtr d)
     return TRUE;
 }
 
-I2CDevPtr
+_X_EXPORT I2CDevPtr
 xf86I2CFindDev(I2CBusPtr b, I2CSlaveAddr addr) 
 {
     I2CDevPtr d;
@@ -822,7 +822,7 @@ xf86I2CBusInit(I2CBusPtr b)
     return TRUE;
 }
 
-I2CBusPtr
+_X_EXPORT I2CBusPtr
 xf86I2CFindBus(int scrnIndex, char *name) 
 {
     I2CBusPtr p;
@@ -840,7 +840,7 @@ xf86I2CFindBus(int scrnIndex, char *name)
  * Return an array of I2CBusPtr's related to a screen.  The caller is
  * responsible for freeing the array.
  */
-int
+_X_EXPORT int
 xf86I2CGetScreenBuses(int scrnIndex, I2CBusPtr **pppI2CBus)
 {
     I2CBusPtr pI2CBus;
diff --git a/hw/xfree86/int10/helper_exec.c b/hw/xfree86/int10/helper_exec.c
index 1c89ce5..e01e80b 100644
--- a/hw/xfree86/int10/helper_exec.c
+++ b/hw/xfree86/int10/helper_exec.c
@@ -724,7 +724,7 @@ xf86Int10SaveRestoreBIOSVars(xf86Int10InfoPtr pInt, Bool save)
 }
 #endif
 
-xf86Int10InfoPtr
+_X_EXPORT xf86Int10InfoPtr
 xf86InitInt10(int entityIndex)
 {
     return xf86ExtendedInitInt10(entityIndex, 0);
diff --git a/hw/xfree86/int10/stub.c b/hw/xfree86/int10/stub.c
index ac858d5..80b619b 100644
--- a/hw/xfree86/int10/stub.c
+++ b/hw/xfree86/int10/stub.c
@@ -13,7 +13,7 @@
 #define _INT10_PRIVATE
 #include "xf86int10.h"
 
-xf86Int10InfoPtr
+_X_EXPORT xf86Int10InfoPtr
 xf86InitInt10(int entityIndex)
 {
     return xf86ExtendedInitInt10(entityIndex, 0);
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index fe9d7b0..e9652e1 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -53,7 +53,7 @@
  * Initialize xf86CrtcConfig structure
  */
 
-int xf86CrtcConfigPrivateIndex = -1;
+_X_EXPORT int xf86CrtcConfigPrivateIndex = -1;
 
 _X_EXPORT void
 xf86CrtcConfigInit (ScrnInfoPtr scrn,
@@ -2913,7 +2913,7 @@ xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
     return ret;
 }
 
-xf86_crtc_notify_proc_ptr
+_X_EXPORT xf86_crtc_notify_proc_ptr
 xf86_wrap_crtc_notify (ScreenPtr screen, xf86_crtc_notify_proc_ptr new)
 {
     ScrnInfoPtr		scrn = xf86Screens[screen->myNum];
@@ -2925,7 +2925,7 @@ xf86_wrap_crtc_notify (ScreenPtr screen, xf86_crtc_notify_proc_ptr new)
     return old;
 }
 
-void
+_X_EXPORT void
 xf86_unwrap_crtc_notify(ScreenPtr screen, xf86_crtc_notify_proc_ptr old)
 {
     ScrnInfoPtr		scrn = xf86Screens[screen->myNum];
@@ -2934,7 +2934,7 @@ xf86_unwrap_crtc_notify(ScreenPtr screen, xf86_crtc_notify_proc_ptr old)
     config->xf86_crtc_notify = old;
 }
 
-void
+_X_EXPORT void
 xf86_crtc_notify(ScreenPtr screen)
 {
     ScrnInfoPtr		scrn = xf86Screens[screen->myNum];
diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 5ed61c1..2ce4e13 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -693,7 +693,7 @@ xf86DDCDetectQuirks(int scrnIndex, xf86MonPtr DDC, Bool verbose)
  * Note that some quirks applying to the mode list are still implemented in
  * xf86DDCGetModes.
  */
-void
+_X_EXPORT void
 xf86DDCApplyQuirks(int scrnIndex, xf86MonPtr DDC)
 {
     ddc_quirk_t quirks = xf86DDCDetectQuirks (scrnIndex, DDC, FALSE);
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index 19b9d14..d97a199 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -232,7 +232,7 @@ xf86freeFlags (XF86ConfFlagsPtr flags)
 	xf86conffree (flags);
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86optionListDup (XF86OptionPtr opt)
 {
 	XF86OptionPtr newopt = NULL;
diff --git a/hw/xfree86/ramdac/BT.c b/hw/xfree86/ramdac/BT.c
index 5aa27a1..dc1bcd5 100644
--- a/hw/xfree86/ramdac/BT.c
+++ b/hw/xfree86/ramdac/BT.c
@@ -65,7 +65,7 @@ BTramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 	    ramdacReg->DacRegs[i] = (*ramdacPtr->ReadDAC)(pScrn, i);
 }
 
-RamDacHelperRecPtr
+_X_EXPORT RamDacHelperRecPtr
 BTramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs/*, RamDacRecPtr ramdacPtr*/)
 {
     RamDacRecPtr ramdacPtr = RAMDACSCRPTR(pScrn);
diff --git a/hw/xfree86/ramdac/IBM.c b/hw/xfree86/ramdac/IBM.c
index 2d9fe4d..a789b69 100644
--- a/hw/xfree86/ramdac/IBM.c
+++ b/hw/xfree86/ramdac/IBM.c
@@ -39,7 +39,7 @@
 
 #define INITIALFREQERR 100000
 
-unsigned long
+_X_EXPORT unsigned long
 IBMramdac640CalculateMNPCForClock(
     unsigned long RefClock,	/* In 100Hz units */
     unsigned long ReqClock,	/* In 100Hz units */
@@ -105,7 +105,7 @@ IBMramdac640CalculateMNPCForClock(
   return (ActualClock);
 }
 
-unsigned long
+_X_EXPORT unsigned long
 IBMramdac526CalculateMNPCForClock(
     unsigned long RefClock,	/* In 100Hz units */
     unsigned long ReqClock,	/* In 100Hz units */
@@ -225,7 +225,7 @@ IBMramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 	    ramdacReg->DacRegs[i] = (*ramdacPtr->ReadDAC)(pScrn, i);
 }
 
-RamDacHelperRecPtr
+_X_EXPORT RamDacHelperRecPtr
 IBMramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs/* , RamDacRecPtr ramdacPtr*/)
 {
     RamDacRecPtr ramdacPtr = RAMDACSCRPTR(pScrn);
@@ -376,7 +376,7 @@ IBMramdac526SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
     }
 }
 
-IBMramdac526SetBppProc *IBMramdac526SetBppWeak(void) {
+_X_EXPORT IBMramdac526SetBppProc *IBMramdac526SetBppWeak(void) {
     return IBMramdac526SetBpp;
 }
 
diff --git a/hw/xfree86/ramdac/TI.c b/hw/xfree86/ramdac/TI.c
index f421fc3..c77121b 100644
--- a/hw/xfree86/ramdac/TI.c
+++ b/hw/xfree86/ramdac/TI.c
@@ -42,7 +42,7 @@
 #define TI_MIN_VCO_FREQ  110000
 #define TI_MAX_VCO_FREQ  220000
 
-unsigned long
+_X_EXPORT unsigned long
 TIramdacCalculateMNPForClock(
     unsigned long RefClock,	/* In 100Hz units */
     unsigned long ReqClock,	/* In 100Hz units */
@@ -280,7 +280,7 @@ TIramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
     TISAVE(TIDAC_ind_curs_ctrl);
 }
 
-RamDacHelperRecPtr
+_X_EXPORT RamDacHelperRecPtr
 TIramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs)
 {
     RamDacRecPtr ramdacPtr = RAMDACSCRPTR(pScrn);
@@ -714,6 +714,6 @@ void TIramdacLoadPalette(
 }
 }
 
-TIramdacLoadPaletteProc *TIramdacLoadPaletteWeak(void) {
+_X_EXPORT TIramdacLoadPaletteProc *TIramdacLoadPaletteWeak(void) {
     return TIramdacLoadPalette;
 }
diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
index aea1d33..9d9839e 100644
--- a/hw/xfree86/ramdac/xf86Cursor.c
+++ b/hw/xfree86/ramdac/xf86Cursor.c
@@ -52,7 +52,7 @@ static void xf86CursorQueryBestSize(int, unsigned short*, unsigned short*,
 static void xf86CursorEnableDisableFBAccess(int, Bool);
 static Bool xf86CursorSwitchMode(int, DisplayModePtr,int);
 
-Bool
+_X_EXPORT Bool
 xf86InitCursor(
    ScreenPtr pScreen,
    xf86CursorInfoPtr infoPtr
@@ -394,7 +394,7 @@ xf86CursorMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
         (*ScreenPriv->spriteFuncs->MoveCursor)(pDev, pScreen, x, y);
 }
 
-void
+_X_EXPORT void
 xf86ForceHWCursor (ScreenPtr pScreen, Bool on)
 {
     DeviceIntPtr pDev = inputInfo.pointer;
@@ -426,13 +426,13 @@ xf86ForceHWCursor (ScreenPtr pScreen, Bool on)
     }
 }
 
-xf86CursorInfoPtr
+_X_EXPORT xf86CursorInfoPtr
 xf86CreateCursorInfoRec(void)
 {
     return xcalloc(1, sizeof(xf86CursorInfoRec));
 }
 
-void
+_X_EXPORT void
 xf86DestroyCursorInfoRec(xf86CursorInfoPtr infoPtr)
 {
     xfree(infoPtr);
diff --git a/hw/xfree86/ramdac/xf86RamDac.c b/hw/xfree86/ramdac/xf86RamDac.c
index 1dd3daf..ee191d3 100644
--- a/hw/xfree86/ramdac/xf86RamDac.c
+++ b/hw/xfree86/ramdac/xf86RamDac.c
@@ -36,7 +36,7 @@
 int RamDacHWPrivateIndex = -1;
 int RamDacScreenPrivateIndex = -1;
 
-RamDacRecPtr
+_X_EXPORT RamDacRecPtr
 RamDacCreateInfoRec()
 {
     RamDacRecPtr infoRec;
@@ -46,7 +46,7 @@ RamDacCreateInfoRec()
     return infoRec;
 }
 
-RamDacHelperRecPtr
+_X_EXPORT RamDacHelperRecPtr
 RamDacHelperCreateInfoRec()
 {
     RamDacHelperRecPtr infoRec;
@@ -56,7 +56,7 @@ RamDacHelperCreateInfoRec()
     return infoRec;
 }
 
-void 
+_X_EXPORT void 
 RamDacDestroyInfoRec(RamDacRecPtr infoRec)
 {
     xfree(infoRec);
@@ -68,7 +68,7 @@ RamDacHelperDestroyInfoRec(RamDacHelperRecPtr infoRec)
     xfree(infoRec);
 }
 
-Bool
+_X_EXPORT Bool
 RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPriv)
 {
     RamDacScreenRecPtr ramdacScrPtr;
@@ -116,7 +116,7 @@ RamDacGetRec(ScrnInfoPtr scrp)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 RamDacFreeRec(ScrnInfoPtr pScrn)
 {
     RamDacHWRecPtr ramdacHWPtr;
@@ -141,7 +141,7 @@ RamDacFreeRec(ScrnInfoPtr pScrn)
     ramdacScrPtr = NULL;
 }
 
-int
+_X_EXPORT int
 RamDacGetHWIndex()
 {
     return RamDacHWPrivateIndex;
diff --git a/hw/xfree86/ramdac/xf86RamDacCmap.c b/hw/xfree86/ramdac/xf86RamDacCmap.c
index 600fe3f..f4fdb18 100644
--- a/hw/xfree86/ramdac/xf86RamDacCmap.c
+++ b/hw/xfree86/ramdac/xf86RamDacCmap.c
@@ -58,7 +58,7 @@ RamDacLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors,
     }
 }
 
-Bool
+_X_EXPORT Bool
 RamDacHandleColormaps(ScreenPtr pScreen, int maxColors, int sigRGBbits,
 		      unsigned int flags)
 {
diff --git a/hw/xfree86/shadowfb/shadow.c b/hw/xfree86/shadowfb/shadow.c
index ff775ef..7d20a65 100644
--- a/hw/xfree86/shadowfb/shadow.c
+++ b/hw/xfree86/shadowfb/shadow.c
@@ -159,7 +159,7 @@ static DevPrivateKey ShadowGCKey = &ShadowGCKeyIndex;
 
 
 
-Bool
+_X_EXPORT Bool
 ShadowFBInit2 (
     ScreenPtr		pScreen,
     RefreshAreaFuncPtr  preRefreshArea,
@@ -212,7 +212,7 @@ ShadowFBInit2 (
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 ShadowFBInit (
     ScreenPtr		pScreen,
     RefreshAreaFuncPtr  refreshArea
diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c
index 533710b..9a80f23 100644
--- a/hw/xfree86/vbe/vbe.c
+++ b/hw/xfree86/vbe/vbe.c
@@ -41,7 +41,7 @@ static Bool vbeProbeDDC(vbeInfoPtr pVbe);
 
 static const char vbeVersionString[] = "VBE2";
 
-vbeInfoPtr
+_X_EXPORT vbeInfoPtr
 VBEInit(xf86Int10InfoPtr pInt, int entityIndex)
 {
     return VBEExtendedInit(pInt, entityIndex, 0);
@@ -423,7 +423,7 @@ VBEGetVBEInfo(vbeInfoPtr pVbe)
     return (block);
 }
 
-void
+_X_EXPORT void
 VBEFreeVBEInfo(VbeInfoBlock *block)
 {
     xfree(block->OEMStringPtr);
@@ -501,7 +501,7 @@ VBEGetVBEMode(vbeInfoPtr pVbe, int *mode)
     return (FALSE);
 }
 
-VbeModeInfoBlock *
+_X_EXPORT VbeModeInfoBlock *
 VBEGetModeInfo(vbeInfoPtr pVbe, int mode)
 {
     VbeModeInfoBlock *block = NULL;
@@ -596,7 +596,7 @@ VBEGetModeInfo(vbeInfoPtr pVbe, int mode)
     return (block);
 }
 
-void
+_X_EXPORT void
 VBEFreeModeInfo(VbeModeInfoBlock *block)
 {
     xfree(block);
diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c
index ccbd195..1703c6a 100644
--- a/hw/xfree86/vgahw/vgaHW.c
+++ b/hw/xfree86/vgahw/vgaHW.c
@@ -328,7 +328,7 @@ stdWriteEnable(vgaHWPtr hwp, CARD8 value)
     outb(hwp->PIOOffset + VGA_ENABLE, value);
 }
 
-void
+_X_EXPORT void
 vgaHWSetStdFuncs(vgaHWPtr hwp)
 {
     hwp->writeCrtc		= stdWriteCrtc;
@@ -535,7 +535,7 @@ mmioWriteEnable(vgaHWPtr hwp, CARD8 value)
     moutb(VGA_ENABLE, value);
 }
 
-void
+_X_EXPORT void
 vgaHWSetMmioFuncs(vgaHWPtr hwp, CARD8 *base, int offset)
 {
     hwp->writeCrtc		= mmioWriteCrtc;
@@ -571,7 +571,7 @@ vgaHWSetMmioFuncs(vgaHWPtr hwp, CARD8 *base, int offset)
  *	Protect VGA registers and memory from corruption during loads.
  */
 
-void
+_X_EXPORT void
 vgaHWProtect(ScrnInfoPtr pScrn, Bool on)
 {
   vgaHWPtr hwp = VGAHWPTR(pScrn);
@@ -604,7 +604,7 @@ vgaHWProtect(ScrnInfoPtr pScrn, Bool on)
   }
 }
 
-vgaHWProtectProc *vgaHWProtectWeak(void) {
+_X_EXPORT vgaHWProtectProc *vgaHWProtectWeak(void) {
   return vgaHWProtect;
 }
 
@@ -612,7 +612,7 @@ vgaHWProtectProc *vgaHWProtectWeak(void) {
  * vgaHWBlankScreen -- blank the screen.
  */
 
-void
+_X_EXPORT void
 vgaHWBlankScreen(ScrnInfoPtr pScrn, Bool on)
 {
   vgaHWPtr hwp = VGAHWPTR(pScrn);
@@ -631,7 +631,7 @@ vgaHWBlankScreen(ScrnInfoPtr pScrn, Bool on)
   vgaHWSeqReset(hwp, FALSE);
 }
 
-vgaHWBlankScreenProc *vgaHWBlankScreenWeak(void) {
+_X_EXPORT vgaHWBlankScreenProc *vgaHWBlankScreenWeak(void) {
   return vgaHWBlankScreen;
 }  
 
@@ -639,7 +639,7 @@ vgaHWBlankScreenProc *vgaHWBlankScreenWeak(void) {
  * vgaHWSaveScreen -- blank the screen.
  */
 
-Bool
+_X_EXPORT Bool
 vgaHWSaveScreen(ScreenPtr pScreen, int mode)
 {
    ScrnInfoPtr pScrn = NULL;
@@ -670,7 +670,7 @@ vgaHWSaveScreen(ScreenPtr pScreen, int mode)
  * for this function must be written.
  */
 
-void
+_X_EXPORT void
 vgaHWDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags)
 {
   unsigned char seq1 = 0, crtc17 = 0;
@@ -715,7 +715,7 @@ vgaHWDPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags)
  *      perform a sequencer reset.
  */
 
-void
+_X_EXPORT void
 vgaHWSeqReset(vgaHWPtr hwp, Bool start)
 {
   if (start)
@@ -897,7 +897,7 @@ vgaHWRestoreColormap(ScrnInfoPtr scrninfp, vgaRegPtr restore)
  *      restore the VGA state
  */
 
-void
+_X_EXPORT void
 vgaHWRestore(ScrnInfoPtr scrninfp, vgaRegPtr restore, int flags)
 {
     if (flags & VGA_SR_MODE)
@@ -1156,7 +1156,7 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save)
  *      save the current VGA state
  */
 
-void
+_X_EXPORT void
 vgaHWSave(ScrnInfoPtr scrninfp, vgaRegPtr save, int flags)
 {
     if (save == NULL)
@@ -1179,7 +1179,7 @@ vgaHWSave(ScrnInfoPtr scrninfp, vgaRegPtr save, int flags)
  *      Return FALSE on failure.
  */
 
-Bool
+_X_EXPORT Bool
 vgaHWInit(ScrnInfoPtr scrninfp, DisplayModePtr mode)
 {
     unsigned int       i;
@@ -1399,7 +1399,7 @@ vgaHWInit(ScrnInfoPtr scrninfp, DisplayModePtr mode)
      * --  TSI @ UQV,  1998.08.21
      */
 
-CARD32
+_X_EXPORT CARD32
 vgaHWHBlankKGA(DisplayModePtr mode, vgaRegPtr regp, int nBits, 
 	       unsigned int Flags)
 {
@@ -1440,7 +1440,7 @@ vgaHWHBlankKGA(DisplayModePtr mode, vgaRegPtr regp, int nBits,
      * very first scanline in a double- or multi-scanned mode.  This last case
      * needs further investigation.
      */
-CARD32
+_X_EXPORT CARD32
 vgaHWVBlankKGA(DisplayModePtr mode, vgaRegPtr regp, int nBits, 
 	       unsigned int Flags)
 {
@@ -1532,7 +1532,7 @@ vgaHWAllocRegs(vgaRegPtr regp)
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWAllocDefaultRegs(vgaRegPtr regp)
 {
     regp->numCRTC = VGA_NUM_CRTC;
@@ -1614,7 +1614,7 @@ vgaHWSetRegCounts(ScrnInfoPtr scrp, int numCRTC, int numSequencer,
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWCopyReg(vgaRegPtr dst, vgaRegPtr src)
 {
     vgaHWFreeRegs(dst);
@@ -1633,7 +1633,7 @@ vgaHWCopyReg(vgaRegPtr dst, vgaRegPtr src)
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWGetHWRec(ScrnInfoPtr scrp)
 {
     vgaRegPtr regp;
@@ -1729,7 +1729,7 @@ vgaHWGetHWRec(ScrnInfoPtr scrp)
 }
 
 
-void
+_X_EXPORT void
 vgaHWFreeHWRec(ScrnInfoPtr scrp)
 {
     if (vgaHWPrivateIndex >= 0) {
@@ -1751,7 +1751,7 @@ vgaHWFreeHWRec(ScrnInfoPtr scrp)
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWMapMem(ScrnInfoPtr scrp)
 {
     vgaHWPtr hwp = VGAHWPTR(scrp);
@@ -1781,7 +1781,7 @@ vgaHWMapMem(ScrnInfoPtr scrp)
 }
 
 
-void
+_X_EXPORT void
 vgaHWUnmapMem(ScrnInfoPtr scrp)
 {
     vgaHWPtr hwp = VGAHWPTR(scrp);
@@ -1797,14 +1797,14 @@ vgaHWUnmapMem(ScrnInfoPtr scrp)
     hwp->Base = NULL;
 }
 
-int
+_X_EXPORT int
 vgaHWGetIndex()
 {
     return vgaHWPrivateIndex;
 }
 
 
-void
+_X_EXPORT void
 vgaHWGetIOBase(vgaHWPtr hwp)
 {
     hwp->IOBase = (hwp->readMiscOut(hwp) & 0x01) ?
@@ -1815,14 +1815,14 @@ vgaHWGetIOBase(vgaHWPtr hwp)
 }
 
 
-void
+_X_EXPORT void
 vgaHWLock(vgaHWPtr hwp)
 {
     /* Protect CRTC[0-7] */
     hwp->writeCrtc(hwp, 0x11, hwp->readCrtc(hwp, 0x11) | 0x80);
 }
 
-void
+_X_EXPORT void
 vgaHWUnlock(vgaHWPtr hwp)
 {
     /* Unprotect CRTC[0-7] */
@@ -1830,7 +1830,7 @@ vgaHWUnlock(vgaHWPtr hwp)
 }
 
 
-void
+_X_EXPORT void
 vgaHWEnable(vgaHWPtr hwp)
 {
     hwp->writeEnable(hwp, hwp->readEnable(hwp) | 0x01);
@@ -1897,7 +1897,7 @@ vgaHWSetOverscan(ScrnInfoPtr pScrn, int overscan)
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWHandleColormaps(ScreenPtr pScreen)
 {
     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
@@ -1999,6 +1999,13 @@ vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed)
     }
 }
 
-DDC1SetSpeedProc  vgaHWddc1SetSpeedWeak(void) { return vgaHWddc1SetSpeed; }
+_X_EXPORT DDC1SetSpeedProc
+vgaHWddc1SetSpeedWeak(void)
+{
+    return vgaHWddc1SetSpeed;
+}
 
-SaveScreenProcPtr vgaHWSaveScreenWeak(void) { return vgaHWSaveScreen; }
+_X_EXPORT SaveScreenProcPtr vgaHWSaveScreenWeak(void)
+{
+    return vgaHWSaveScreen;
+}
diff --git a/hw/xfree86/xaa/xaaBitOrder.c b/hw/xfree86/xaa/xaaBitOrder.c
index 9dbd00f..22e8261 100644
--- a/hw/xfree86/xaa/xaaBitOrder.c
+++ b/hw/xfree86/xaa/xaaBitOrder.c
@@ -4,9 +4,10 @@
 #endif
 
 #include <X11/Xmd.h>
+#include <X11/Xfuncproto.h>
 CARD32 XAAReverseBitOrder(CARD32 v);
 
-CARD32
+_X_EXPORT CARD32
 XAAReverseBitOrder(CARD32 v)
 {
  return (((0x01010101 & v) << 7) | ((0x02020202 & v) << 5) | 
diff --git a/hw/xfree86/xaa/xaaFallback.c b/hw/xfree86/xaa/xaaFallback.c
index 7ab4031..fd2adbd 100644
--- a/hw/xfree86/xaa/xaaFallback.c
+++ b/hw/xfree86/xaa/xaaFallback.c
@@ -346,7 +346,7 @@ GCOps XAAFallbackOps = {
     {NULL}		/* devPrivate */
 };
 
-GCOps *XAAGetFallbackOps(void)
+_X_EXPORT GCOps *XAAGetFallbackOps(void)
 {
     return &XAAFallbackOps;
 }
diff --git a/hw/xfree86/xaa/xaaFillRect.c b/hw/xfree86/xaa/xaaFillRect.c
index 55a30bb..cccd1fc 100644
--- a/hw/xfree86/xaa/xaaFillRect.c
+++ b/hw/xfree86/xaa/xaaFillRect.c
@@ -372,7 +372,7 @@ XAARenderPixmapCopyRects(
 	|   Solid    |
 	\************/
 
-void
+_X_EXPORT void
 XAAFillSolidRects(
     ScrnInfoPtr pScrn,
     int	fg, int rop,
diff --git a/hw/xfree86/xaa/xaaImage.c b/hw/xfree86/xaa/xaaImage.c
index 910c7e1..28bec7a 100644
--- a/hw/xfree86/xaa/xaaImage.c
+++ b/hw/xfree86/xaa/xaaImage.c
@@ -38,7 +38,7 @@ void XAAMoveDWORDS_FixedBase(
      *dest = *(src + 2);
 }
 
-void XAAMoveDWORDS(
+_X_EXPORT void XAAMoveDWORDS(
    register CARD32* dest,
    register CARD32* src,
    register int dwords )
diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
index 8d3833e..331945b 100644
--- a/hw/xfree86/xaa/xaaInit.c
+++ b/hw/xfree86/xaa/xaaInit.c
@@ -49,11 +49,11 @@ static DevPrivateKey XAAGCKey = &XAAGCKeyIndex;
 static int XAAPixmapKeyIndex;
 static DevPrivateKey XAAPixmapKey = &XAAPixmapKeyIndex;
 
-DevPrivateKey XAAGetScreenKey(void) {
+_X_EXPORT DevPrivateKey XAAGetScreenKey(void) {
     return XAAScreenKey;
 }
 
-DevPrivateKey XAAGetGCKey(void) {
+_X_EXPORT DevPrivateKey XAAGetGCKey(void) {
     return XAAGCKey;
 }
 
@@ -64,7 +64,7 @@ DevPrivateKey XAAGetPixmapKey(void) {
 /* temp kludge */
 static Bool SwitchedOut = FALSE;
 
-XAAInfoRecPtr
+_X_EXPORT XAAInfoRecPtr
 XAACreateInfoRec()
 {
     XAAInfoRecPtr infoRec;
@@ -76,7 +76,7 @@ XAACreateInfoRec()
     return infoRec;
 }
 
-void 
+_X_EXPORT void 
 XAADestroyInfoRec(XAAInfoRecPtr infoRec)
 {
     if(!infoRec) return;
@@ -94,7 +94,7 @@ XAADestroyInfoRec(XAAInfoRecPtr infoRec)
 }
 
 
-Bool 
+_X_EXPORT Bool 
 XAAInit(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
 {
     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
diff --git a/hw/xfree86/xaa/xaaLine.c b/hw/xfree86/xaa/xaaLine.c
index 7469de1..093d65f 100644
--- a/hw/xfree86/xaa/xaaLine.c
+++ b/hw/xfree86/xaa/xaaLine.c
@@ -18,7 +18,7 @@
 #include "xaalocal.h"
 
 
-void
+_X_EXPORT void
 #ifdef POLYSEGMENT
 XAAPolySegment(
     DrawablePtr	pDrawable,
diff --git a/hw/xfree86/xaa/xaaOverlayDF.c b/hw/xfree86/xaa/xaaOverlayDF.c
index 8db816e..f860c99 100644
--- a/hw/xfree86/xaa/xaaOverlayDF.c
+++ b/hw/xfree86/xaa/xaaOverlayDF.c
@@ -164,7 +164,7 @@ static DevPrivateKey XAAOverlayKey = &XAAOverlayKeyIndex;
    }
 
 
-Bool
+_X_EXPORT Bool
 XAAInitDualFramebufferOverlay(
     ScreenPtr pScreen, 
     DepthChangeFuncPtr callback
diff --git a/hw/xfree86/xaa/xaaPCache.c b/hw/xfree86/xaa/xaaPCache.c
index d05aaf2..069d818 100644
--- a/hw/xfree86/xaa/xaaPCache.c
+++ b/hw/xfree86/xaa/xaaPCache.c
@@ -1657,7 +1657,7 @@ XAACachePlanarMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
    return pCache;
 }
 
-XAACachePlanarMonoStippleProc
+_X_EXPORT XAACachePlanarMonoStippleProc
 XAAGetCachePlanarMonoStipple(void) { return XAACachePlanarMonoStipple; }
 
 XAACacheInfoPtr
diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c
index 784c649..e7d62a6 100644
--- a/hw/xfree86/xaa/xaaPict.c
+++ b/hw/xfree86/xaa/xaaPict.c
@@ -154,7 +154,7 @@ XAAGetRGBAFromPixel(
 
 /* 8:8:8 + PICT_a8 -> 8:8:8:8 texture */
 
-void
+_X_EXPORT void
 XAA_888_plus_PICT_a8_to_8888 (
     CARD32 color,
     CARD8  *alphaPtr,   /* in bytes */
diff --git a/hw/xfree86/xaa/xaaROP.c b/hw/xfree86/xaa/xaaROP.c
index 155daa4..b315e02 100644
--- a/hw/xfree86/xaa/xaaROP.c
+++ b/hw/xfree86/xaa/xaaROP.c
@@ -95,27 +95,27 @@ int XAAPatternROP_PM[16] =
    ROP_DPo
 };
 
-int XAAGetCopyROP(int i)
+_X_EXPORT int XAAGetCopyROP(int i)
 {
     return XAACopyROP[i];
 }
 
-int XAAGetCopyROP_PM(int i)
+_X_EXPORT int XAAGetCopyROP_PM(int i)
 {
     return XAACopyROP_PM[i];
 }
 
-int XAAGetPatternROP(int i)
+_X_EXPORT int XAAGetPatternROP(int i)
 {
     return XAAPatternROP[i];
 }
 
-int XAAGetPatternROP_PM(int i)
+_X_EXPORT int XAAGetPatternROP_PM(int i)
 {
     return XAAPatternROP_PM[i];
 }
 
-int
+_X_EXPORT int
 XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
@@ -150,7 +150,7 @@ XAAHelpPatternROP(ScrnInfoPtr pScrn, int *fg, int *bg, int pm, int *rop)
 }
 
 
-int
+_X_EXPORT int
 XAAHelpSolidROP(ScrnInfoPtr pScrn, int *fg, int pm, int *rop)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
diff --git a/hw/xfree86/xaa/xaaStipple.c b/hw/xfree86/xaa/xaaStipple.c
index 0dd8e9f..4735f78 100644
--- a/hw/xfree86/xaa/xaaStipple.c
+++ b/hw/xfree86/xaa/xaaStipple.c
@@ -32,7 +32,7 @@ StippleScanlineProcPtr stipple_scanline_func[6] = {
    StippleOver32_Inverted
 };
 
-StippleScanlineProcPtr *stipple_get_scanline_func(void) {
+_X_EXPORT StippleScanlineProcPtr *stipple_get_scanline_func(void) {
    return stipple_scanline_func;
 }
 
diff --git a/hw/xfree86/xaa/xaaTEGlyph.c b/hw/xfree86/xaa/xaaTEGlyph.c
index cb60266..d1d12c7 100644
--- a/hw/xfree86/xaa/xaaTEGlyph.c
+++ b/hw/xfree86/xaa/xaaTEGlyph.c
@@ -126,7 +126,7 @@ GlyphScanlineFuncPtr glyph_scanline_func[32] = {
    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric
 };
 
-GlyphScanlineFuncPtr *glyph_get_scanline_func(void) {
+_X_EXPORT GlyphScanlineFuncPtr *glyph_get_scanline_func(void) {
    return glyph_scanline_func;
 }
 
diff --git a/hw/xfree86/xaa/xaaWrapper.c b/hw/xfree86/xaa/xaaWrapper.c
index 8841894..e8f36ff 100644
--- a/hw/xfree86/xaa/xaaWrapper.c
+++ b/hw/xfree86/xaa/xaaWrapper.c
@@ -265,7 +265,7 @@ xaaWrapperListInstalledColormaps(ScreenPtr pScreen, Colormap *pCmapIds)
     return n;
 }
 
-Bool
+_X_EXPORT Bool
 xaaSetupWrapper(ScreenPtr pScreen, XAAInfoRecPtr infoPtr, int depth, SyncFunc *func)
 {
     Bool ret;


More information about the xorg-commit mailing list