xserver: Branch 'master'

Paulo Cesar Pereira de Andrade pcpa at kemper.freedesktop.org
Sat Nov 29 18:08:36 PST 2008


 Xext/geext.c                                        |   24 +--
 Xext/shape.c                                        |    8 -
 Xext/xvdisp.c                                       |    4 
 Xext/xvmain.c                                       |   58 ++++----
 Xext/xvmc.c                                         |    8 -
 Xi/exevents.c                                       |   48 +++---
 Xi/extinit.c                                        |   20 +-
 Xi/stubs.c                                          |   16 +-
 Xi/xiproperty.c                                     |   14 +-
 config/config.c                                     |    4 
 dbe/dbe.c                                           |    2 
 dix/atom.c                                          |    6 
 dix/colormap.c                                      |   14 +-
 dix/cursor.c                                        |    6 
 dix/devices.c                                       |   44 +++---
 dix/dispatch.c                                      |   26 +--
 dix/dixfonts.c                                      |   38 ++---
 dix/dixutils.c                                      |   24 +--
 dix/events.c                                        |  114 ++++++++--------
 dix/extension.c                                     |    4 
 dix/ffs.c                                           |    2 
 dix/gc.c                                            |   12 -
 dix/getevents.c                                     |   10 -
 dix/globals.c                                       |   48 +++---
 dix/glyphcurs.c                                     |    4 
 dix/grabs.c                                         |   10 -
 dix/initatoms.c                                     |    2 
 dix/main.c                                          |    8 -
 dix/pixmap.c                                        |    4 
 dix/privates.c                                      |    2 
 dix/property.c                                      |    4 
 dix/ptrveloc.c                                      |   10 -
 dix/registry.c                                      |   16 +-
 dix/resource.c                                      |   14 +-
 dix/selection.c                                     |    8 -
 dix/swaprep.c                                       |  138 ++++++++++----------
 dix/swapreq.c                                       |  134 +++++++++----------
 dix/tables.c                                        |    8 -
 dix/window.c                                        |   48 +++---
 exa/exa.c                                           |    6 
 exa/exa_migration.c                                 |    2 
 fb/fb24_32.c                                        |   16 +-
 fb/fballpriv.c                                      |   12 -
 fb/fbarc.c                                          |    2 
 fb/fbblt.c                                          |    6 
 fb/fbbltone.c                                       |   22 +--
 fb/fbcmap.c                                         |   20 +-
 fb/fbcmap_mi.c                                      |   16 +-
 fb/fbcopy.c                                         |   14 +-
 fb/fbfill.c                                         |    4 
 fb/fbfillrect.c                                     |    2 
 fb/fbfillsp.c                                       |    2 
 fb/fbgc.c                                           |   10 -
 fb/fbgetsp.c                                        |    2 
 fb/fbglyph.c                                        |    6 
 fb/fbimage.c                                        |    8 -
 fb/fbline.c                                         |   10 -
 fb/fboverlay.c                                      |   22 +--
 fb/fbpict.c                                         |   12 -
 fb/fbpixmap.c                                       |   14 +-
 fb/fbpoint.c                                        |    4 
 fb/fbpush.c                                         |    8 -
 fb/fbscreen.c                                       |   18 +-
 fb/fbseg.c                                          |   14 +-
 fb/fbsetsp.c                                        |    2 
 fb/fbsolid.c                                        |    4 
 fb/fbstipple.c                                      |    8 -
 fb/fbtile.c                                         |    6 
 fb/fbtrap.c                                         |    6 
 fb/fbutil.c                                         |   30 ++--
 fb/fbwindow.c                                       |   18 +-
 hw/xfree86/common/xf86Bus.c                         |   44 +++---
 hw/xfree86/common/xf86Config.c                      |    4 
 hw/xfree86/common/xf86Configure.c                   |    6 
 hw/xfree86/common/xf86Cursor.c                      |    8 -
 hw/xfree86/common/xf86DGA.c                         |   14 +-
 hw/xfree86/common/xf86Events.c                      |   12 -
 hw/xfree86/common/xf86Globals.c                     |   88 ++++++------
 hw/xfree86/common/xf86Helper.c                      |   14 +-
 hw/xfree86/common/xf86Init.c                        |   24 +--
 hw/xfree86/common/xf86Option.c                      |    2 
 hw/xfree86/common/xf86PM.c                          |    6 
 hw/xfree86/common/xf86RAC.c                         |    2 
 hw/xfree86/common/xf86RandR.c                       |    2 
 hw/xfree86/common/xf86ShowOpts.c                    |    2 
 hw/xfree86/common/xf86Xinput.c                      |   14 +-
 hw/xfree86/common/xf86cmap.c                        |    2 
 hw/xfree86/common/xf86fbBus.c                       |    4 
 hw/xfree86/common/xf86pciBus.c                      |    2 
 hw/xfree86/common/xf86sbusBus.c                     |    4 
 hw/xfree86/common/xf86xv.c                          |    2 
 hw/xfree86/common/xorgHelper.c                      |    2 
 hw/xfree86/ddc/interpret_edid.c                     |    2 
 hw/xfree86/dixmods/extmod/xf86dga2.c                |    6 
 hw/xfree86/dixmods/xkbKillSrv.c                     |    2 
 hw/xfree86/dixmods/xkbPrivate.c                     |    2 
 hw/xfree86/dixmods/xkbVT.c                          |    2 
 hw/xfree86/dri/dri.c                                |   54 +++----
 hw/xfree86/dri2/dri2.c                              |    6 
 hw/xfree86/dummylib/xalloc.c                        |    2 
 hw/xfree86/dummylib/xf86servisinit.c                |    2 
 hw/xfree86/dummylib/xf86verbose.c                   |    2 
 hw/xfree86/fbdevhw/fbdevhw.c                        |    6 
 hw/xfree86/fbdevhw/fbdevhwstub.c                    |    6 
 hw/xfree86/i2c/xf86i2c.c                            |    8 -
 hw/xfree86/int10/generic.c                          |    2 
 hw/xfree86/int10/helper_exec.c                      |   60 ++++----
 hw/xfree86/int10/helper_mem.c                       |   22 +--
 hw/xfree86/int10/stub.c                             |    4 
 hw/xfree86/int10/xf86int10.c                        |    4 
 hw/xfree86/int10/xf86x86emu.c                       |    2 
 hw/xfree86/loader/loadext.c                         |    2 
 hw/xfree86/loader/loadmod.c                         |    2 
 hw/xfree86/modes/xf86Modes.c                        |    2 
 hw/xfree86/os-support/bsd/bsd_VTsw.c                |    8 -
 hw/xfree86/os-support/bsd/bsd_apm.c                 |    2 
 hw/xfree86/os-support/bsd/bsd_init.c                |    8 -
 hw/xfree86/os-support/bsd/bsd_kqueue_apm.c          |    2 
 hw/xfree86/os-support/bsd/i386_video.c              |    4 
 hw/xfree86/os-support/bsd/ppc_video.c               |    4 
 hw/xfree86/os-support/bus/Pci.c                     |    2 
 hw/xfree86/os-support/bus/Sbus.c                    |   20 +-
 hw/xfree86/os-support/bus/linuxPci.c                |    2 
 hw/xfree86/os-support/hurd/hurd_init.c              |    8 -
 hw/xfree86/os-support/hurd/hurd_video.c             |   12 -
 hw/xfree86/os-support/linux/int10/linux.c           |    2 
 hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c |    2 
 hw/xfree86/os-support/linux/lnx_apm.c               |    2 
 hw/xfree86/os-support/linux/lnx_init.c              |    8 -
 hw/xfree86/os-support/linux/lnx_pci.c               |    2 
 hw/xfree86/os-support/sco/VTsw_sco.c                |    8 -
 hw/xfree86/os-support/sco/sco_init.c                |    8 -
 hw/xfree86/os-support/shared/VTsw_noop.c            |    6 
 hw/xfree86/os-support/shared/VTsw_usl.c             |    8 -
 hw/xfree86/os-support/shared/pm_noop.c              |    2 
 hw/xfree86/os-support/shared/sigio.c                |    4 
 hw/xfree86/os-support/shared/sigiostubs.c           |    4 
 hw/xfree86/os-support/shared/stdResource.c          |    2 
 hw/xfree86/os-support/shared/vidmem.c               |    4 
 hw/xfree86/os-support/solaris/sun_apm.c             |    2 
 hw/xfree86/os-support/solaris/sun_init.c            |    8 -
 hw/xfree86/os-support/sysv/sysv_init.c              |    8 -
 hw/xfree86/parser/Device.c                          |    4 
 hw/xfree86/parser/Flags.c                           |   24 +--
 hw/xfree86/parser/Input.c                           |    4 
 hw/xfree86/parser/Layout.c                          |    2 
 hw/xfree86/parser/Monitor.c                         |    6 
 hw/xfree86/parser/Screen.c                          |    2 
 hw/xfree86/parser/Video.c                           |    2 
 hw/xfree86/parser/read.c                            |    8 -
 hw/xfree86/parser/scan.c                            |   12 -
 hw/xfree86/parser/write.c                           |    2 
 hw/xfree86/parser/xf86Optrec.h                      |    2 
 hw/xfree86/ramdac/BT.c                              |    6 
 hw/xfree86/ramdac/IBM.c                             |   12 -
 hw/xfree86/ramdac/TI.c                              |   12 -
 hw/xfree86/ramdac/xf86RamDac.c                      |    8 -
 hw/xfree86/vbe/vbe.c                                |   10 -
 hw/xfree86/vgahw/vgaHW.c                            |   18 +-
 hw/xfree86/xaa/xaaBitBlt.c                          |    2 
 hw/xfree86/xaa/xaaBitmap.c                          |    4 
 hw/xfree86/xaa/xaaCpyArea.c                         |   10 -
 hw/xfree86/xaa/xaaCpyPlane.c                        |    4 
 hw/xfree86/xaa/xaaCpyWin.c                          |    2 
 hw/xfree86/xaa/xaaDashLine.c                        |    2 
 hw/xfree86/xaa/xaaFallback.c                        |    2 
 hw/xfree86/xaa/xaaFillArc.c                         |    2 
 hw/xfree86/xaa/xaaFillPoly.c                        |   10 -
 hw/xfree86/xaa/xaaFillRect.c                        |   20 +-
 hw/xfree86/xaa/xaaGC.c                              |    4 
 hw/xfree86/xaa/xaaGCmisc.c                          |   16 +-
 hw/xfree86/xaa/xaaImage.c                           |   10 -
 hw/xfree86/xaa/xaaInit.c                            |    2 
 hw/xfree86/xaa/xaaInitAccel.c                       |    2 
 hw/xfree86/xaa/xaaLineMisc.c                        |    8 -
 hw/xfree86/xaa/xaaNonTEGlyph.c                      |    4 
 hw/xfree86/xaa/xaaNonTEText.c                       |   14 +-
 hw/xfree86/xaa/xaaOffscreen.c                       |    8 -
 hw/xfree86/xaa/xaaOverlay.c                         |    2 
 hw/xfree86/xaa/xaaPCache.c                          |   49 +++----
 hw/xfree86/xaa/xaaPict.c                            |   12 -
 hw/xfree86/xaa/xaaROP.c                             |    8 -
 hw/xfree86/xaa/xaaRect.c                            |    2 
 hw/xfree86/xaa/xaaSpans.c                           |   18 +-
 hw/xfree86/xaa/xaaStateChange.c                     |    2 
 hw/xfree86/xaa/xaaStipple.c                         |   12 -
 hw/xfree86/xaa/xaaTEGlyph.c                         |   10 -
 hw/xfree86/xaa/xaaTEText.c                          |   12 -
 hw/xfree86/xaa/xaaTables.c                          |    4 
 hw/xfree86/xaa/xaaWideLine.c                        |    2 
 mi/mibank.c                                         |    2 
 mi/mibitblt.c                                       |    4 
 mi/micursor.c                                       |    2 
 mi/midash.c                                         |    2 
 mi/mieq.c                                           |   12 -
 mi/miexpose.c                                       |    6 
 mi/mifpolycon.c                                     |    2 
 mi/miinitext.c                                      |    6 
 mi/mipointer.c                                      |    4 
 mi/mipolycon.c                                      |    2 
 mi/mipolygen.c                                      |    2 
 mi/mipushpxl.c                                      |    2 
 mi/miregion.c                                       |   10 -
 mi/miscrinit.c                                      |    4 
 mi/mispans.c                                        |    8 -
 mi/mivaltree.c                                      |    6 
 mi/miwindow.c                                       |   18 +-
 mi/mizerline.c                                      |    2 
 miext/damage/damage.c                               |   16 +-
 miext/shadow/shadow.c                               |   10 -
 miext/shadow/shalloc.c                              |    2 
 miext/shadow/shpacked.c                             |    7 -
 miext/shadow/shplanar.c                             |    6 
 miext/shadow/shplanar8.c                            |    2 
 miext/shadow/shrotate.c                             |    4 
 os/WaitFor.c                                        |   12 -
 os/access.c                                         |   36 ++---
 os/auth.c                                           |   16 +-
 os/backtrace.c                                      |    6 
 os/connection.c                                     |   32 ++--
 os/io.c                                             |   10 -
 os/log.c                                            |   16 +-
 os/oscolor.c                                        |    2 
 os/osinit.c                                         |   10 -
 os/strcasecmp.c                                     |    4 
 os/strcasestr.c                                     |    2 
 os/strlcat.c                                        |    2 
 os/strlcpy.c                                        |    2 
 os/utils.c                                          |   44 +++---
 os/xprintf.c                                        |    8 -
 randr/mirandr.c                                     |   14 +-
 randr/randr.c                                       |   22 +--
 randr/rrcrtc.c                                      |   48 +++---
 randr/rrdispatch.c                                  |    4 
 randr/rrinfo.c                                      |   12 -
 randr/rrmode.c                                      |   18 +-
 randr/rroutput.c                                    |   30 ++--
 randr/rrpointer.c                                   |    4 
 randr/rrproperty.c                                  |   26 +--
 randr/rrscreen.c                                    |   20 +-
 randr/rrsdispatch.c                                 |    2 
 randr/rrtransform.c                                 |   12 -
 randr/rrxinerama.c                                  |    2 
 render/animcur.c                                    |    4 
 render/filter.c                                     |   14 +-
 render/glyph.c                                      |   34 ++--
 render/miindex.c                                    |    6 
 render/mipict.c                                     |   24 +--
 render/mitrap.c                                     |    6 
 render/mitri.c                                      |   10 -
 render/picture.c                                    |   72 +++++-----
 render/render.c                                     |   10 -
 xkb/XKBAlloc.c                                      |   16 +-
 xkb/XKBMAlloc.c                                     |   18 +-
 xkb/XKBMisc.c                                       |   10 -
 xkb/ddxBeep.c                                       |    2 
 xkb/ddxCtrls.c                                      |    6 
 xkb/ddxDevBtn.c                                     |    2 
 xkb/ddxFakeMtn.c                                    |    2 
 xkb/ddxInit.c                                       |    2 
 xkb/ddxKeyClick.c                                   |    2 
 xkb/ddxKillSrv.c                                    |    2 
 xkb/ddxLEDs.c                                       |    2 
 xkb/ddxList.c                                       |    2 
 xkb/ddxLoad.c                                       |    4 
 xkb/ddxPrivate.c                                    |    2 
 xkb/ddxVT.c                                         |    2 
 xkb/maprules.c                                      |   26 +--
 xkb/xkb.c                                           |    8 -
 xkb/xkbAccessX.c                                    |   14 +-
 xkb/xkbActions.c                                    |   14 +-
 xkb/xkbEvents.c                                     |   30 ++--
 xkb/xkbInit.c                                       |   16 +-
 xkb/xkbLEDs.c                                       |   24 +--
 xkb/xkbPrKeyEv.c                                    |    4 
 xkb/xkbSwap.c                                       |    2 
 xkb/xkbUtils.c                                      |   44 +++---
 xkb/xkbfmisc.c                                      |   12 -
 xkb/xkbout.c                                        |   10 -
 xkb/xkbtext.c                                       |   36 ++---
 xkb/xkmread.c                                       |   10 -
 281 files changed, 1681 insertions(+), 1673 deletions(-)

New commits:
commit d6cbd4511e35a89a0353f11834c6fdb8d4d2189f
Author: Paulo Cesar Pereira de Andrade <pcpa at mandriva.com.br>
Date:   Sat Nov 29 23:56:06 2008 -0200

    Export symbols defined in the sdk.
    
      This is the biggest "visibility" patch. Instead of doing a "export"
    symbol on demand, export everything in the sdk, so that if some module
    fails due to an unresolved symbol, it is because it is using a symbol
    not in the sdk.
    
      Most exported symbols shouldn't really be made visible, neither
    advertised in the sdk, as they are only used by a single shared object.
    
      Symbols in the sdk (or referenced in sdk macros), but not defined
    anywhere include:
    XkbBuildCoreState()
    XkbInitialMap
    XkbXIUnsupported
    XkbCheckActionVMods()
    XkbSendCompatNotify()
    XkbDDXFakePointerButton()
    XkbDDXApplyConfig()
    _XkbStrCaseCmp()
    _XkbErrMessages[]
    _XkbErrCode
    _XkbErrLocation
    _XkbErrData
    XkbAccessXDetailText()
    XkbNKNDetailMaskText()
    XkbLookupGroupAndLevel()
    XkbInitAtoms()
    XkbGetOrderedDrawables()
    XkbFreeOrderedDrawables()
    XkbConvertXkbComponents()
    XkbWriteXKBSemantics()
    XkbWriteXKBLayout()
    XkbWriteXKBKeymap()
    XkbWriteXKBFile()
    XkbWriteCFile()
    XkbWriteXKMFile()
    XkbWriteToServer()
    XkbMergeFile()
    XkmFindTOCEntry()
    XkmReadFileSection()
    XkmReadFileSectionName()
    InitExtInput()
    xf86CheckButton()
    xf86SwitchCoreDevice()
    RamDacSetGamma()
    RamDacRestoreDACValues()
    xf86Bpp
    xf86ConfigPix24
    xf86MouseCflags[]
    xf86SupportedMouseTypes[]
    xf86NumMouseTypes
    xf86ChangeBusIndex()
    xf86EntityEnter()
    xf86EntityLeave()
    xf86WrapperInit()
    xf86RingBell()
    xf86findOptionBoolean()
    xf86debugListOptions()
    LoadSubModuleLocal()
    LoaderSymbolLocal()
    getInt10Rec()
    xf86CurrentScreen
    xf86ReallocatePciResources()
    xf86NewSerialNumber()
    xf86RandRSetInitialMode()
    fbCompositeSolidMask_nx1xn
    fbCompositeSolidMask_nx8888x0565C
    fbCompositeSolidMask_nx8888x8888C
    fbCompositeSolidMask_nx8x0565
    fbCompositeSolidMask_nx8x0888
    fbCompositeSolidMask_nx8x8888
    fbCompositeSrc_0565x0565
    fbCompositeSrc_8888x0565
    fbCompositeSrc_8888x0888
    fbCompositeSrc_8888x8888
    fbCompositeSrcAdd_1000x1000
    fbCompositeSrcAdd_8000x8000
    fbCompositeSrcAdd_8888x8888
    fbGeneration
    fbIn
    fbOver
    fbOver24
    fbOverlayGeneration
    fbRasterizeEdges
    fbRestoreAreas
    fbSaveAreas
    composeFunctions
    VBEBuildVbeModeList()
    VBECalcVbeModeIndex()
    TIramdac3030CalculateMNPForClock()
    shadowBufPtr
    shadowFindBuf()
    miRRGetScreenInfo()
    RRSetScreenConfig()
    RRModePruneUnused()
    PixmanImageFromPicture()
    extern int miPointerGetMotionEvents()
    miClipPicture()
    miRasterizeTriangle()
    fbPush1toN()
    fbInitializeBackingStore()
    ddxBeforeReset()
    SetupSprite()
    InitSprite()
    DGADeliverEvent()
    
      SPECIAL CASES
    o defined as _X_INTERNAL
    	xf86NewInputDevice()
    o defined as static
    	fbGCPrivateKey
    	fbOverlayScreenPrivateKey
    	fbScreenPrivateKey
    	fbWinPrivateKey
    o defined in libXfont.so, but declared in xorg/dixfont.h
    	GetGlyphs()
    	QueryGlyphExtents()
    	QueryTextExtents()
    	ParseGlyphCachingMode()
    	InitGlyphCaching()
    	SetGlyphCachingMode()

diff --git a/Xext/geext.c b/Xext/geext.c
index a58db03..91a3b7e 100644
--- a/Xext/geext.c
+++ b/Xext/geext.c
@@ -39,16 +39,16 @@
 
 #define rClient(obj) (clients[CLIENT_ID((obj)->resource)])
 
-int GEEventBase;
-int GEErrorBase;
+_X_EXPORT int GEEventBase;
+_X_EXPORT int GEErrorBase;
 static int GEClientPrivateKeyIndex;
-DevPrivateKey GEClientPrivateKey = &GEClientPrivateKeyIndex;
-int GEEventType; /* The opcode for all GenericEvents will have. */
+_X_EXPORT DevPrivateKey GEClientPrivateKey = &GEClientPrivateKeyIndex;
+_X_EXPORT int GEEventType; /* The opcode for all GenericEvents will have. */
 
 int RT_GECLIENT  = 0;
 
 
-GEExtension GEExtensions[MAXEXTENSIONS];
+_X_EXPORT GEExtension GEExtensions[MAXEXTENSIONS];
 
 /* Major available requests */
 static const int version_requests[] = {
@@ -101,7 +101,7 @@ ProcGEQueryVersion(ClientPtr client)
     return(client->noClientException);
 }
 
-int (*ProcGEVector[GENumberRequests])(ClientPtr) = {
+_X_EXPORT int (*ProcGEVector[GENumberRequests])(ClientPtr) = {
     /* Version 1.0 */
     ProcGEQueryVersion
 };
@@ -122,7 +122,7 @@ SProcGEQueryVersion(ClientPtr client)
     return(*ProcGEVector[stuff->ReqType])(client);
 }
 
-int (*SProcGEVector[GENumberRequests])(ClientPtr) = {
+_X_EXPORT int (*SProcGEVector[GENumberRequests])(ClientPtr) = {
     /* Version 1.0 */
     SProcGEQueryVersion
 };
@@ -258,7 +258,7 @@ GEClientGone(WindowPtr pWin, XID id)
  * Since other extensions may rely on XGE (XInput does already), it is a good
  * idea to init XGE first, before any other extension.
  */
-void
+_X_EXPORT void
 GEExtensionInit(void)
 {
     ExtensionEntry *extEntry;
@@ -300,7 +300,7 @@ GEExtensionInit(void)
  * @param ev_fill Called for an event before delivery. The extension now has
  * the chance to fill in necessary fields for the event.
  */
-void
+_X_EXPORT void
 GERegisterExtension(int extension,
                     void (*ev_swap)(xGenericEvent* from, xGenericEvent* to),
                     void (*ev_fill)(xGenericEvent* ev, DeviceIntPtr pDev,
@@ -318,7 +318,7 @@ GERegisterExtension(int extension,
 /* Sets type and extension field for a generic event. This is just an
  * auxiliary function, extensions could do it manually too.
  */
-void
+_X_EXPORT void
 GEInitEvent(xGenericEvent* ev, int extension)
 {
     ev->type = GenericEvent;
@@ -356,7 +356,7 @@ GERecalculateWinMask(WindowPtr pWin)
 }
 
 /* Set generic event mask for given window. */
-void
+_X_EXPORT void
 GEWindowSetMask(ClientPtr pClient, DeviceIntPtr pDev,
                 WindowPtr pWin, int extension, Mask mask)
 {
@@ -443,7 +443,7 @@ GEWindowSetMask(ClientPtr pClient, DeviceIntPtr pDev,
  * @param extension Extension ID
  * @param mask Event mask
  */
-BOOL
+_X_EXPORT BOOL
 GEDeviceMaskIsSet(WindowPtr pWin, DeviceIntPtr pDev,
                   int extension, Mask mask)
 {
diff --git a/Xext/shape.c b/Xext/shape.c
index aaef0cb..b26d60e 100644
--- a/Xext/shape.c
+++ b/Xext/shape.c
@@ -136,7 +136,7 @@ typedef struct _ShapeEvent {
  *
  ****************/
 
-void
+_X_EXPORT void
 ShapeExtensionInit(void)
 {
     ExtensionEntry *extEntry;
@@ -238,7 +238,7 @@ RegionOperate (client, pWin, kind, destRgnp, srcRgn, op, xoff, yoff, create)
     return Success;
 }
 
-RegionPtr
+_X_EXPORT RegionPtr
 CreateBoundingShape (pWin)
     WindowPtr	pWin;
 {
@@ -251,7 +251,7 @@ CreateBoundingShape (pWin)
     return REGION_CREATE(pWin->drawable.pScreen, &extents, 1);
 }
 
-RegionPtr
+_X_EXPORT RegionPtr
 CreateClipShape (pWin)
     WindowPtr	pWin;
 {
@@ -895,7 +895,7 @@ ProcShapeSelectInput (client)
  * deliver the event
  */
 
-void
+_X_EXPORT void
 SendShapeNotify (pWin, which)
     WindowPtr	pWin;
     int		which;
diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c
index de0128e..ab6c11f 100644
--- a/Xext/xvdisp.c
+++ b/Xext/xvdisp.c
@@ -1349,7 +1349,7 @@ static int (*XvProcVector[xvNumRequests])(ClientPtr) = {
     ProcXvShmPutImage,
 };
 
-int
+_X_EXPORT int
 ProcXvDispatch(ClientPtr client)
 {
   REQUEST(xReq);
@@ -1673,7 +1673,7 @@ static int (*SXvProcVector[xvNumRequests])(ClientPtr) = {
     SProcXvShmPutImage,
 };
 
-int
+_X_EXPORT int
 SProcXvDispatch(ClientPtr client)
 {
   REQUEST(xReq);
diff --git a/Xext/xvmain.c b/Xext/xvmain.c
index fcca724..d2f46ec 100644
--- a/Xext/xvmain.c
+++ b/Xext/xvmain.c
@@ -107,20 +107,20 @@ SOFTWARE.
 
 static int XvScreenKeyIndex;
 static DevPrivateKey XvScreenKey = &XvScreenKeyIndex;
-unsigned long XvExtensionGeneration = 0;
-unsigned long XvScreenGeneration = 0;
-unsigned long XvResourceGeneration = 0;
+_X_EXPORT unsigned long XvExtensionGeneration = 0;
+_X_EXPORT unsigned long XvScreenGeneration = 0;
+_X_EXPORT unsigned long XvResourceGeneration = 0;
 
-int XvReqCode;
-int XvEventBase;
-int XvErrorBase;
+_X_EXPORT int XvReqCode;
+_X_EXPORT int XvEventBase;
+_X_EXPORT int XvErrorBase;
 
-unsigned long XvRTPort;
-unsigned long XvRTEncoding;
-unsigned long XvRTGrab;
-unsigned long XvRTVideoNotify;
-unsigned long XvRTVideoNotifyList;
-unsigned long XvRTPortNotify;
+_X_EXPORT unsigned long XvRTPort;
+_X_EXPORT unsigned long XvRTEncoding;
+_X_EXPORT unsigned long XvRTGrab;
+_X_EXPORT unsigned long XvRTVideoNotify;
+_X_EXPORT unsigned long XvRTVideoNotifyList;
+_X_EXPORT unsigned long XvRTPortNotify;
 
 
 
@@ -153,7 +153,7 @@ static int XvdiSendVideoNotify(XvPortPtr, DrawablePtr, int);
 **
 */
 
-void 
+_X_EXPORT void 
 XvExtensionInit(void)
 {
   ExtensionEntry *extEntry;
@@ -445,7 +445,7 @@ XvDestroyWindow(WindowPtr pWin)
    stopped in a port for reasons that the di layer had no control over; note
    that it doesn't call back into the dd layer */
 
-int
+_X_EXPORT int
 XvdiVideoStopped(XvPortPtr pPort, int reason)
 {
   
@@ -553,7 +553,7 @@ int reason;
 }
 
 
-int
+_X_EXPORT int
 XvdiSendPortNotify(
   XvPortPtr pPort,
   Atom attribute,
@@ -593,7 +593,7 @@ XvdiSendPortNotify(
 }
 
 
-int
+_X_EXPORT int
 XvdiPutVideo(   
    ClientPtr client,
    DrawablePtr pDraw,
@@ -646,7 +646,7 @@ XvdiPutVideo(
 
 }
 
-int
+_X_EXPORT int
 XvdiPutStill(   
    ClientPtr client,
    DrawablePtr pDraw,
@@ -684,7 +684,7 @@ XvdiPutStill(
 
 }
 
-int
+_X_EXPORT int
 XvdiPutImage(   
    ClientPtr client, 
    DrawablePtr pDraw, 
@@ -723,7 +723,7 @@ XvdiPutImage(
 }
 
 
-int
+_X_EXPORT int
 XvdiGetVideo(
    ClientPtr client,
    DrawablePtr pDraw,
@@ -776,7 +776,7 @@ XvdiGetVideo(
 
 }
 
-int
+_X_EXPORT int
 XvdiGetStill(
    ClientPtr client,
    DrawablePtr pDraw,
@@ -814,7 +814,7 @@ XvdiGetStill(
 
 }
 
-int
+_X_EXPORT int
 XvdiGrabPort(
    ClientPtr client,
    XvPortPtr pPort,
@@ -871,7 +871,7 @@ XvdiGrabPort(
 
 }
 
-int
+_X_EXPORT int
 XvdiUngrabPort(
   ClientPtr client,
   XvPortPtr pPort,
@@ -905,7 +905,7 @@ XvdiUngrabPort(
 }
 
 
-int
+_X_EXPORT int
 XvdiSelectVideoNotify(
   ClientPtr client,
   DrawablePtr pDraw,
@@ -983,7 +983,7 @@ XvdiSelectVideoNotify(
 
 }
 
-int
+_X_EXPORT int
 XvdiSelectPortNotify(
    ClientPtr client,
    XvPortPtr pPort,
@@ -1036,7 +1036,7 @@ XvdiSelectPortNotify(
 
 }
 
-int
+_X_EXPORT int
 XvdiStopVideo(
   ClientPtr client,
   XvPortPtr pPort,
@@ -1073,7 +1073,7 @@ XvdiStopVideo(
 
 }
 
-int
+_X_EXPORT int
 XvdiPreemptVideo(
   ClientPtr client,
   XvPortPtr pPort,
@@ -1097,7 +1097,7 @@ XvdiPreemptVideo(
 
 }
 
-int
+_X_EXPORT int
 XvdiMatchPort(
   XvPortPtr pPort,
   DrawablePtr pDraw
@@ -1130,7 +1130,7 @@ XvdiMatchPort(
 
 }
 
-int
+_X_EXPORT int
 XvdiSetPortAttribute(
   ClientPtr client,
   XvPortPtr pPort,
@@ -1145,7 +1145,7 @@ XvdiSetPortAttribute(
 
 }
 
-int
+_X_EXPORT int
 XvdiGetPortAttribute(
   ClientPtr client,
   XvPortPtr pPort,
diff --git a/Xext/xvmc.c b/Xext/xvmc.c
index ad1b8ab..ad223d9 100644
--- a/Xext/xvmc.c
+++ b/Xext/xvmc.c
@@ -664,7 +664,7 @@ SProcXvMCDispatch (ClientPtr client)
     return BadImplementation;
 }
 
-void 
+_X_EXPORT void
 XvMCExtensionInit(void)
 {
    ExtensionEntry *extEntry;
@@ -705,7 +705,7 @@ XvMCCloseScreen (int i, ScreenPtr pScreen)
 }
 
 
-int
+_X_EXPORT int
 XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
 {
    XvMCScreenPtr pScreenPriv;
@@ -731,7 +731,7 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt)
    return Success;
 }
 
-XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
+_X_EXPORT XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
 {
     XvImagePtr pImage = NULL;
     ScreenPtr pScreen = pPort->pAdaptor->pScreen;
@@ -763,7 +763,7 @@ XvImagePtr XvMCFindXvImage(XvPortPtr pPort, CARD32 id)
     return pImage;
 }
 
-int
+_X_EXPORT int
 xf86XvMCRegisterDRInfo(ScreenPtr pScreen, char *name,
 		       char *busID, int major, int minor,
 		       int patchLevel)
diff --git a/Xi/exevents.c b/Xi/exevents.c
index c520c7d..025dcd7 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -100,14 +100,14 @@ static Bool MakeInputMasks(WindowPtr	/* pWin */
 extern DevPrivateKey UnusedClassesPrivateKey;
 
 
-void
+_X_EXPORT void
 RegisterOtherDevice(DeviceIntPtr device)
 {
     device->public.processInputProc = ProcessOtherEvent;
     device->public.realInputProc = ProcessOtherEvent;
 }
 
-Bool
+_X_EXPORT Bool
 IsPointerEvent(xEvent* xE)
 {
     switch(xE->u.u.type)
@@ -137,7 +137,7 @@ IsPointerEvent(xEvent* xE)
  * @return the device matching the deviceid of the device set in the event, or
  * NULL if the event is not an XInput event.
  */
-DeviceIntPtr
+_X_EXPORT DeviceIntPtr
 XIGetDevice(xEvent* xE)
 {
     DeviceIntPtr pDev = NULL;
@@ -521,7 +521,7 @@ DeepCopyFeedbackClasses(DeviceIntPtr from, DeviceIntPtr to)
  * Saves a few memory allocations.
  */
 
-void
+_X_EXPORT void
 DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to)
 {
     ClassesPtr classes;
@@ -789,7 +789,7 @@ ChangeMasterDeviceClasses(DeviceIntPtr device,
 #define DEFAULT 0
 #define DONT_PROCESS 1
 #define IS_REPEAT 2
-int
+_X_EXPORT int
 UpdateDeviceState(DeviceIntPtr device, xEvent* xE, int count)
 {
     int i;
@@ -994,7 +994,7 @@ UpdateDeviceState(DeviceIntPtr device, xEvent* xE, int count)
  * Called from when processing the events from the event queue.
  *
  */
-void
+_X_EXPORT void
 ProcessOtherEvent(xEventPtr xE, DeviceIntPtr device, int count)
 {
     int i;
@@ -1233,7 +1233,7 @@ FixDeviceValuator(DeviceIntPtr dev, deviceValuator * ev, ValuatorClassPtr v,
     first += ev->num_valuators;
 }
 
-void
+_X_EXPORT void
 DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
 		 WindowPtr pWin)
 {
@@ -1355,7 +1355,7 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
     }
 }
 
-int
+_X_EXPORT int
 GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
 	   BYTE other_devices_mode, CARD16 modifiers,
 	   DeviceIntPtr modifier_device, CARD8 button, Window grabWindow,
@@ -1422,7 +1422,7 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
     return AddPassiveGrabToList(client, grab);
 }
 
-int
+_X_EXPORT int
 GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
 	BYTE other_devices_mode, CARD16 modifiers,
 	DeviceIntPtr modifier_device, CARD8 key, Window grabWindow,
@@ -1477,7 +1477,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
     return AddPassiveGrabToList(client, grab);
 }
 
-int
+_X_EXPORT int
 SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
 		Mask mask, Mask exclusivemasks, Mask validmasks)
 {
@@ -1538,7 +1538,7 @@ SelectForWindow(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client,
     return Success;
 }
 
-int
+_X_EXPORT int
 AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
 {
     InputClientsPtr others;
@@ -1571,7 +1571,7 @@ MakeInputMasks(WindowPtr pWin)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 RecalculateDeviceDeliverableEvents(WindowPtr pWin)
 {
     InputClientsPtr others;
@@ -1609,7 +1609,7 @@ RecalculateDeviceDeliverableEvents(WindowPtr pWin)
     }
 }
 
-int
+_X_EXPORT int
 InputClientGone(WindowPtr pWin, XID id)
 {
     InputClientsPtr other, prev;
@@ -1648,7 +1648,7 @@ InputClientGone(WindowPtr pWin, XID id)
     FatalError("client not on device event list");
 }
 
-int
+_X_EXPORT int
 SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
 	  xEvent * ev, Mask mask, int count)
 {
@@ -1707,7 +1707,7 @@ SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
     return Success;
 }
 
-int
+_X_EXPORT int
 SetButtonMapping(ClientPtr client, DeviceIntPtr dev, int nElts, BYTE * map)
 {
     int i;
@@ -1730,7 +1730,7 @@ SetButtonMapping(ClientPtr client, DeviceIntPtr dev, int nElts, BYTE * map)
     return Success;
 }
 
-int
+_X_EXPORT int
 SetModifierMapping(ClientPtr client, DeviceIntPtr dev, int len, int rlen,
 		   int numKeyPerModifier, KeyCode * inputMap, KeyClassPtr * k)
 {
@@ -1810,7 +1810,7 @@ SetModifierMapping(ClientPtr client, DeviceIntPtr dev, int len, int rlen,
     return (MappingSuccess);
 }
 
-void
+_X_EXPORT void
 SendDeviceMappingNotify(ClientPtr client, CARD8 request,
 			KeyCode firstKeyCode, CARD8 count, DeviceIntPtr dev)
 {
@@ -1834,7 +1834,7 @@ SendDeviceMappingNotify(ClientPtr client, CARD8 request,
     SendEventToAllWindows(dev, DeviceMappingNotifyMask, (xEvent *) ev, 1);
 }
 
-int
+_X_EXPORT int
 ChangeKeyMapping(ClientPtr client,
 		 DeviceIntPtr dev,
 		 unsigned len,
@@ -1935,7 +1935,7 @@ DeleteDeviceFromAnyExtEvents(WindowPtr pWin, DeviceIntPtr dev)
 	    dev->valuator->motionHintWindow = NullWindow;
 }
 
-void
+_X_EXPORT void
 DeleteWindowFromAnyExtEvents(WindowPtr pWin, Bool freeResources)
 {
     int i;
@@ -1961,7 +1961,7 @@ DeleteWindowFromAnyExtEvents(WindowPtr pWin, Bool freeResources)
 	}
 }
 
-int
+_X_EXPORT int
 MaybeSendDeviceMotionNotifyHint(deviceKeyButtonPointer * pEvents, Mask mask)
 {
     DeviceIntPtr dev;
@@ -1984,7 +1984,7 @@ MaybeSendDeviceMotionNotifyHint(deviceKeyButtonPointer * pEvents, Mask mask)
     return (0);
 }
 
-void
+_X_EXPORT void
 CheckDeviceGrabAndHintWindow(WindowPtr pWin, int type,
 			     deviceKeyButtonPointer * xE, GrabPtr grab,
 			     ClientPtr client, Mask deliveryMask)
@@ -2033,7 +2033,7 @@ DeviceEventMaskForClient(DeviceIntPtr dev, WindowPtr pWin, ClientPtr client)
     return 0;
 }
 
-void
+_X_EXPORT void
 MaybeStopDeviceHint(DeviceIntPtr dev, ClientPtr client)
 {
     WindowPtr pWin;
@@ -2052,7 +2052,7 @@ MaybeStopDeviceHint(DeviceIntPtr dev, ClientPtr client)
 	dev->valuator->motionHintWindow = NullWindow;
 }
 
-int
+_X_EXPORT int
 DeviceEventSuppressForWindow(WindowPtr pWin, ClientPtr client, Mask mask,
 			     int maskndx)
 {
@@ -2123,7 +2123,7 @@ FindInterestedChildren(DeviceIntPtr dev, WindowPtr p1, Mask mask,
  *
  */
 
-void
+_X_EXPORT void
 SendEventToAllWindows(DeviceIntPtr dev, Mask mask, xEvent * ev, int count)
 {
     int i;
diff --git a/Xi/extinit.c b/Xi/extinit.c
index 673a7ee..76fed76 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -304,11 +304,11 @@ Mask DeviceEnterWindowMask;
 Mask DeviceLeaveWindowMask;
 
 int DeviceValuator;
-int DeviceKeyPress;
-int DeviceKeyRelease;
-int DeviceButtonPress;
-int DeviceButtonRelease;
-int DeviceMotionNotify;
+_X_EXPORT int DeviceKeyPress;
+_X_EXPORT int DeviceKeyRelease;
+_X_EXPORT int DeviceButtonPress;
+_X_EXPORT int DeviceButtonRelease;
+_X_EXPORT int DeviceMotionNotify;
 int DeviceFocusIn;
 int DeviceFocusOut;
 int ProximityIn;
@@ -320,8 +320,8 @@ int DeviceMappingNotify;
 int ChangeDeviceNotify;
 int DevicePresenceNotify;
 int DevicePropertyNotify;
-int DeviceEnterNotify;
-int DeviceLeaveNotify;
+_X_EXPORT int DeviceEnterNotify;
+_X_EXPORT int DeviceLeaveNotify;
 
 int RT_INPUTCLIENT;
 
@@ -982,7 +982,7 @@ IResetProc(ExtensionEntry * unused)
  *
  */
 
-Bool
+_X_EXPORT Bool
 DeviceIsPointerType(DeviceIntPtr dev)
 {
     if (dev_type[1].type == dev->type)
@@ -998,7 +998,7 @@ DeviceIsPointerType(DeviceIntPtr dev)
  *
  */
 
-void
+_X_EXPORT void
 AssignTypeAndName(DeviceIntPtr dev, Atom type, char *name)
 {
     dev->type = type;
@@ -1127,7 +1127,7 @@ XIGEEventFill(xGenericEvent* ev, DeviceIntPtr pDev,
  * XI is mandatory nowadays, so if we fail to init XI, we die.
  */
 
-void
+_X_EXPORT void
 XInputExtensionInit(void)
 {
     ExtensionEntry *extEntry;
diff --git a/Xi/stubs.c b/Xi/stubs.c
index d01927c..d88d914 100644
--- a/Xi/stubs.c
+++ b/Xi/stubs.c
@@ -80,7 +80,7 @@ SOFTWARE.
  *
  */
 
-void
+_X_EXPORT void
 CloseInputDevice(DeviceIntPtr d, ClientPtr client)
 {
 }
@@ -111,7 +111,7 @@ CloseInputDevice(DeviceIntPtr d, ClientPtr client)
  *
  */
 
-void
+_X_EXPORT void
 AddOtherInputDevices(void)
 {
     /**********************************************************************
@@ -151,7 +151,7 @@ AddOtherInputDevices(void)
  *
  */
 
-void
+_X_EXPORT void
 OpenInputDevice(DeviceIntPtr dev, ClientPtr client, int *status)
 {
     *status = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess);
@@ -169,7 +169,7 @@ OpenInputDevice(DeviceIntPtr dev, ClientPtr client, int *status)
  *
  */
 
-int
+_X_EXPORT int
 SetDeviceMode(ClientPtr client, DeviceIntPtr dev, int mode)
 {
     return BadMatch;
@@ -187,7 +187,7 @@ SetDeviceMode(ClientPtr client, DeviceIntPtr dev, int mode)
  *
  */
 
-int
+_X_EXPORT int
 SetDeviceValuators(ClientPtr client, DeviceIntPtr dev,
 		   int *valuators, int first_valuator, int num_valuators)
 {
@@ -202,7 +202,7 @@ SetDeviceValuators(ClientPtr client, DeviceIntPtr dev,
  *
  */
 
-int
+_X_EXPORT int
 ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
 		    xDeviceCtl * control)
 {
@@ -227,7 +227,7 @@ ChangeDeviceControl(ClientPtr client, DeviceIntPtr dev,
  * Add a new device with the specified options.
  *
  */
-int
+_X_EXPORT int
 NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
 {
     return BadValue;
@@ -240,7 +240,7 @@ NewInputDeviceRequest(InputOption *options, DeviceIntPtr *pdev)
  * Remove the specified device previously added.
  *
  */
-void
+_X_EXPORT void
 DeleteInputDeviceRequest(DeviceIntPtr dev)
 {
 }
diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
index 2ff5cae..2d72fa6 100644
--- a/Xi/xiproperty.c
+++ b/Xi/xiproperty.c
@@ -93,7 +93,7 @@ XIInitKnownProperties(void)
  * property handler again.
  * @return The handler's identifier or 0 if an error occured.
  */
-long
+_X_EXPORT long
 XIRegisterPropertyHandler(DeviceIntPtr         dev,
                           int (*SetProperty) (DeviceIntPtr dev,
                                               Atom property,
@@ -120,7 +120,7 @@ XIRegisterPropertyHandler(DeviceIntPtr         dev,
     return new_handler->id;
 }
 
-void
+_X_EXPORT void
 XIUnRegisterPropertyHandler(DeviceIntPtr dev, long id)
 {
     XIPropertyHandlerPtr curr, prev = NULL;
@@ -186,7 +186,7 @@ XIDestroyDeviceProperty (XIPropertyPtr prop)
  * including removing all device handlers.
  * DO NOT CALL FROM THE DRIVER.
  */
-void
+_X_EXPORT void
 XIDeleteAllDeviceProperties (DeviceIntPtr device)
 {
     XIPropertyPtr               prop, next;
@@ -219,7 +219,7 @@ XIDeleteAllDeviceProperties (DeviceIntPtr device)
 }
 
 
-int
+_X_EXPORT int
 XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
 {
     XIPropertyPtr               prop, *prev;
@@ -263,7 +263,7 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
     return Success;
 }
 
-int
+_X_EXPORT int
 XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
                         int format, int mode, unsigned long len,
                         pointer value, Bool sendevent)
@@ -400,7 +400,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
     return(Success);
 }
 
-int
+_X_EXPORT int
 XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value)
 {
     XIPropertyPtr   prop = XIFetchDeviceProperty (dev, property);
@@ -435,7 +435,7 @@ XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value)
     return Success;
 }
 
-int
+_X_EXPORT int
 XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable)
 {
     XIPropertyPtr prop = XIFetchDeviceProperty(dev, property);
diff --git a/config/config.c b/config/config.c
index 882b699..b4737f8 100644
--- a/config/config.c
+++ b/config/config.c
@@ -31,7 +31,7 @@
 #include "hotplug.h"
 #include "config-backends.h"
 
-void
+_X_EXPORT void
 config_init()
 {
 #if defined(CONFIG_DBUS_API) || defined(CONFIG_HAL)
@@ -51,7 +51,7 @@ config_init()
 #endif
 }
 
-void
+_X_EXPORT void
 config_fini()
 {
 #if defined(CONFIG_DBUS_API) || defined(CONFIG_HAL)
diff --git a/dbe/dbe.c b/dbe/dbe.c
index ff9df7f..c5293fa 100644
--- a/dbe/dbe.c
+++ b/dbe/dbe.c
@@ -1553,7 +1553,7 @@ DbeDestroyWindow(WindowPtr pWin)
  *
  *****************************************************************************/
 
-void
+_X_EXPORT void
 DbeExtensionInit(void)
 {
     ExtensionEntry	*extEntry;
diff --git a/dix/atom.c b/dix/atom.c
index c968c1e..bcf212d 100644
--- a/dix/atom.c
+++ b/dix/atom.c
@@ -166,7 +166,7 @@ NameForAtom(Atom atom)
     return node->string;
 }
 
-void
+_X_EXPORT void
 AtomError(void)
 {
     FatalError("initializing atoms");
@@ -184,7 +184,7 @@ FreeAtom(NodePtr patom)
     xfree(patom);
 }
 
-void
+_X_EXPORT void
 FreeAllAtoms(void)
 {
     if(atomRoot == (NodePtr)NULL)
@@ -196,7 +196,7 @@ FreeAllAtoms(void)
     lastAtom = None;
 }
 
-void
+_X_EXPORT void
 InitAtoms(void)
 {
     FreeAllAtoms();
diff --git a/dix/colormap.c b/dix/colormap.c
index 8b1bad8..c8f4c71 100644
--- a/dix/colormap.c
+++ b/dix/colormap.c
@@ -420,7 +420,7 @@ CreateColormap (Colormap mid, ScreenPtr pScreen, VisualPtr pVisual,
  *
  * \param value  must conform to DeleteType
  */
-int
+_X_EXPORT int
 FreeColormap (pointer value, XID mid)
 {
     int	i;
@@ -552,7 +552,7 @@ TellGainedMap (WindowPtr pwin, pointer value)
 }
 
   
-int
+_X_EXPORT int
 CopyColormapAndFree (Colormap mid, ColormapPtr pSrc, int client)
 {
     ColormapPtr	pmap = (ColormapPtr) NULL;
@@ -1203,7 +1203,7 @@ FindColorInRootCmap (ColormapPtr pmap, EntryPtr pentFirst, int size,
  * Starts looking at pentFirst + *pPixel, so if you want a specific pixel,
  * load *pPixel with that value, otherwise set it to 0
  */
-int
+_X_EXPORT int
 FindColor (ColormapPtr pmap, EntryPtr pentFirst, int size, xrgb *prgb, 
            Pixel *pPixel, int channel, int client, 
            ColorCompareProcPtr comp)
@@ -1548,7 +1548,7 @@ FreePixels(ColormapPtr pmap, int client)
  *  \param value  must conform to DeleteType
  *  \unused fakeid
  */
-int
+_X_EXPORT int
 FreeClientPixels (pointer value, XID fakeid)
 {
     ColormapPtr pmap;
@@ -1561,7 +1561,7 @@ FreeClientPixels (pointer value, XID fakeid)
     return Success;
 }
 
-int
+_X_EXPORT int
 AllocColorCells (int client, ColormapPtr pmap, int colors, int planes, 
                  Bool contig, Pixel *ppix, Pixel *masks)
 {
@@ -1633,7 +1633,7 @@ AllocColorCells (int client, ColormapPtr pmap, int colors, int planes,
 }
 
 
-int
+_X_EXPORT int
 AllocColorPlanes (int client, ColormapPtr pmap, int colors, 
                   int r, int g, int b, Bool contig, Pixel *pixels, 
                   Pixel *prmask, Pixel *pgmask, Pixel *pbmask)
@@ -2667,7 +2667,7 @@ StoreColors (ColormapPtr pmap, int count, xColorItem *defs)
     return (errVal);
 }
 
-int
+_X_EXPORT int
 IsMapInstalled(Colormap map, WindowPtr pWin)
 {
     Colormap	*pmaps;
diff --git a/dix/cursor.c b/dix/cursor.c
index 81540fd..9e2506a 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -166,7 +166,7 @@ CheckForEmptyMask(CursorBitsPtr bits)
  *  \param pmaskbits server-defined padding
  *  \param argb      no padding
  */
-int
+_X_EXPORT int
 AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
 		CARD32 *argb, CursorMetricPtr cm,
 		unsigned foreRed, unsigned foreGreen, unsigned foreBlue, 
@@ -280,7 +280,7 @@ AllocARGBCursor(unsigned char *psrcbits, unsigned char *pmaskbits,
     return rc;
 }
 
-int
+_X_EXPORT int
 AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
                 unsigned foreRed, unsigned foreGreen, unsigned foreBlue, 
                 unsigned backRed, unsigned backGreen, unsigned backBlue,
@@ -515,7 +515,7 @@ AllocGlyphCursor(Font source, unsigned sourceChar, Font mask, unsigned maskChar,
  * add the cursor to the resource table
  *************************************************************/
 
-CursorPtr 
+_X_EXPORT CursorPtr 
 CreateRootCursor(char *unused1, unsigned int unused2)
 {
     CursorPtr 	curs;
diff --git a/dix/devices.c b/dix/devices.c
index f85e875..220b895 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -94,7 +94,7 @@ SOFTWARE.
  */
 
 static int CoreDevicePrivateKeyIndex;
-DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
+_X_EXPORT DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
 /* Used to sture classes currently not in use by an MD */
 static int UnusedClassesPrivateKeyIndex;
 DevPrivateKey UnusedClassesPrivateKey = &UnusedClassesPrivateKeyIndex;
@@ -184,7 +184,7 @@ NextFreePointerDevice(void)
  * @param deviceProc Callback for device control function (switch dev on/off).
  * @return The newly created device.
  */
-DeviceIntPtr
+_X_EXPORT DeviceIntPtr
 AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
 {
     DeviceIntPtr dev, *prev; /* not a typo */
@@ -258,7 +258,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
  * @param The device to be enabled.
  * @return TRUE on success or FALSE otherwise.
  */
-Bool
+_X_EXPORT Bool
 EnableDevice(DeviceIntPtr dev)
 {
     DeviceIntPtr *prev;
@@ -356,7 +356,7 @@ EnableDevice(DeviceIntPtr dev)
  *
  * @return TRUE on success or FALSE otherwise.
  */
-Bool
+_X_EXPORT Bool
 DisableDevice(DeviceIntPtr dev)
 {
     DeviceIntPtr *prev, other;
@@ -433,7 +433,7 @@ DisableDevice(DeviceIntPtr dev)
  *
  * @return Success or an error code on failure.
  */
-int
+_X_EXPORT int
 ActivateDevice(DeviceIntPtr dev)
 {
     int ret = Success;
@@ -598,7 +598,7 @@ CorePointerProc(DeviceIntPtr pDev, int what)
  * Note that the server MUST have two core devices at all times, even if there
  * is no physical device connected.
  */
-void
+_X_EXPORT void
 InitCoreDevices(void)
 {
     if (AllocMasterDevice(serverClient, "Virtual core",
@@ -625,7 +625,7 @@ InitCoreDevices(void)
  *
  * @return Success or error code on failure.
  */
-int
+_X_EXPORT int
 InitAndStartDevices()
 {
     DeviceIntPtr dev, next;
@@ -890,7 +890,7 @@ CloseDevice(DeviceIntPtr dev)
  * Shut down all devices, free all resources, etc.
  * Only useful if you're shutting down the server!
  */
-void
+_X_EXPORT void
 CloseDownDevices(void)
 {
     DeviceIntPtr dev, next;
@@ -930,7 +930,7 @@ CloseDownDevices(void)
  * Remove the cursor sprite for all devices. This needs to be done before any
  * resources are freed or any device is deleted.
  */
-void
+_X_EXPORT void
 UndisplayDevices()
 {
     DeviceIntPtr dev;
@@ -951,7 +951,7 @@ UndisplayDevices()
  * dev->init is FALSE it means the client never received a DeviceAdded event,
  * so let's not send a DeviceRemoved event either.
  */
-int
+_X_EXPORT int
 RemoveDevice(DeviceIntPtr dev)
 {
     DeviceIntPtr prev,tmp,next;
@@ -1018,7 +1018,7 @@ RemoveDevice(DeviceIntPtr dev)
     return ret;
 }
 
-int
+_X_EXPORT int
 NumMotionEvents(void)
 {
     /* only called to fill data in initial connection reply.
@@ -1026,19 +1026,19 @@ NumMotionEvents(void)
     return inputInfo.pointer->valuator->numMotionEvents;
 }
 
-void
+_X_EXPORT void
 RegisterPointerDevice(DeviceIntPtr device)
 {
     RegisterOtherDevice(device);
 }
 
-void
+_X_EXPORT void
 RegisterKeyboardDevice(DeviceIntPtr device)
 {
     RegisterOtherDevice(device);
 }
 
-int
+_X_EXPORT int
 dixLookupDevice(DeviceIntPtr *pDev, int id, ClientPtr client, Mask access_mode)
 {
     DeviceIntPtr dev;
@@ -1062,7 +1062,7 @@ found:
     return rc;
 }
 
-void
+_X_EXPORT void
 QueryMinMaxKeyCodes(KeyCode *minCode, KeyCode *maxCode)
 {
     if (inputInfo.keyboard) {
@@ -1071,7 +1071,7 @@ QueryMinMaxKeyCodes(KeyCode *minCode, KeyCode *maxCode)
     }
 }
 
-Bool
+_X_EXPORT Bool
 SetKeySymsMap(KeySymsPtr dst, KeySymsPtr src)
 {
     int i, j;
@@ -1600,7 +1600,7 @@ SendMappingNotify(DeviceIntPtr pDev, unsigned request, unsigned firstKeyCode,
  *
  * @return TRUE if the device map is invalid, FALSE otherwise.
  */
-Bool
+_X_EXPORT Bool
 BadDeviceMap(BYTE *buff, int length, unsigned low, unsigned high, XID *errval)
 {
     int i;
@@ -1617,7 +1617,7 @@ BadDeviceMap(BYTE *buff, int length, unsigned low, unsigned high, XID *errval)
     return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 AllModifierKeysAreUp(dev, map1, per1, map2, per2)
     DeviceIntPtr dev;
     CARD8 *map1, *map2;
@@ -1987,7 +1987,7 @@ ProcGetPointerMapping(ClientPtr client)
     return Success;
 }
 
-void
+_X_EXPORT void
 NoteLedState(DeviceIntPtr keybd, int led, Bool on)
 {
     KeybdCtrl *ctrl = &keybd->kbdfeed->ctrl;
@@ -2392,7 +2392,7 @@ ProcGetPointerControl(ClientPtr client)
     return Success;
 }
 
-void
+_X_EXPORT void
 MaybeStopHint(DeviceIntPtr dev, ClientPtr client)
 {
     GrabPtr grab = dev->deviceGrab.grab;
@@ -2509,7 +2509,7 @@ ProcQueryKeymap(ClientPtr client)
  * We don't allow multi-layer hierarchies right now. You can't attach a slave
  * to another slave.
  */
-int
+_X_EXPORT int
 AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master)
 {
     ScreenPtr screen;
@@ -2613,7 +2613,7 @@ GetPairedDevice(DeviceIntPtr dev)
  * Only allocates the devices, you will need to call ActivateDevice() and
  * EnableDevice() manually.
  */
-int
+_X_EXPORT int
 AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd)
 {
     DeviceIntPtr pointer;
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 66f8f79..14d4a7e 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -168,7 +168,7 @@ static ClientPtr grabClient;
 static int grabState = GrabNone;
 static long grabWaiters[mskcnt];
 _X_EXPORT CallbackListPtr ServerGrabCallback = NULL;
-HWEventQueuePtr checkForInput[2];
+_X_EXPORT HWEventQueuePtr checkForInput[2];
 extern int connBlockScreenStart;
 
 static void KillAllClients(void);
@@ -197,7 +197,7 @@ XID clientErrorValue;   /* XXX this is a kludge */
 #define SAME_SCREENS(a, b) (\
     (a.pScreen == b.pScreen))
 
-void
+_X_EXPORT void
 SetInputCheck(HWEventQueuePtr c0, HWEventQueuePtr c1)
 {
     checkForInput[0] = c0;
@@ -242,11 +242,11 @@ UpdateCurrentTimeIf(void)
 #define SMART_SCHEDULE_DEFAULT_INTERVAL	20	    /* ms */
 #define SMART_SCHEDULE_MAX_SLICE	200	    /* ms */
 
-Bool	    SmartScheduleDisable = FALSE;
-long	    SmartScheduleSlice = SMART_SCHEDULE_DEFAULT_INTERVAL;
-long	    SmartScheduleInterval = SMART_SCHEDULE_DEFAULT_INTERVAL;
-long	    SmartScheduleMaxSlice = SMART_SCHEDULE_MAX_SLICE;
-long	    SmartScheduleTime;
+_X_EXPORT Bool SmartScheduleDisable = FALSE;
+_X_EXPORT long SmartScheduleSlice = SMART_SCHEDULE_DEFAULT_INTERVAL;
+_X_EXPORT long SmartScheduleInterval = SMART_SCHEDULE_DEFAULT_INTERVAL;
+_X_EXPORT long SmartScheduleMaxSlice = SMART_SCHEDULE_MAX_SLICE;
+_X_EXPORT long SmartScheduleTime;
 static ClientPtr   SmartLastClient;
 static int	   SmartLastIndex[SMART_MAX_PRIORITY-SMART_MIN_PRIORITY+1];
 
@@ -1239,7 +1239,7 @@ ProcListFontsWithInfo(ClientPtr client)
  *
  *  \param value must conform to DeleteType
  */
-int
+_X_EXPORT int
 dixDestroyPixmap(pointer value, XID pid)
 {
     PixmapPtr pPixmap = (PixmapPtr)value;
@@ -3356,9 +3356,9 @@ InitProcVectors(void)
  *  then killed again, the client is really destroyed.
  *********************/
 
-char dispatchExceptionAtReset = DE_RESET;
+_X_EXPORT char dispatchExceptionAtReset = DE_RESET;
 
-void
+_X_EXPORT void
 CloseDownClient(ClientPtr client)
 {
     Bool really_close_down = client->clientGone ||
@@ -3458,7 +3458,7 @@ KillAllClients(void)
         }
 }
 
-void InitClient(ClientPtr client, int i, pointer ospriv)
+_X_EXPORT void InitClient(ClientPtr client, int i, pointer ospriv)
 {
     client->index = i;
     client->sequence = 0; 
@@ -3504,7 +3504,7 @@ void InitClient(ClientPtr client, int i, pointer ospriv)
  * Returns NULL if there are no free clients.
  *************************/
 
-ClientPtr NextAvailableClient(pointer ospriv)
+_X_EXPORT ClientPtr NextAvailableClient(pointer ospriv)
 {
     int i;
     ClientPtr client;
@@ -3720,7 +3720,7 @@ SendErrorToClient(ClientPtr client, unsigned majorCode, unsigned minorCode,
     WriteEventsToClient (client, 1, (xEvent *)&rep);
 }
 
-void
+_X_EXPORT void
 MarkClientException(ClientPtr client)
 {
     client->noClientException = -1;
diff --git a/dix/dixfonts.c b/dix/dixfonts.c
index 97352ba..57469bd 100644
--- a/dix/dixfonts.c
+++ b/dix/dixfonts.c
@@ -130,7 +130,7 @@ LoadGlyphs(ClientPtr client, FontPtr pfont, unsigned nchars, int item_size,
 /*
  * adding RT_FONT prevents conflict with default cursor font
  */
-Bool
+_X_EXPORT Bool
 SetDefaultFont(char *defaultfontname)
 {
     int         err;
@@ -158,7 +158,7 @@ SetDefaultFont(char *defaultfontname)
  * init_fpe() and free_fpe(), there shouldn't be any problem in using
  * freed data.
  */
-void
+_X_EXPORT void
 QueueFontWakeup(FontPathElementPtr fpe)
 {
     int         i;
@@ -182,7 +182,7 @@ QueueFontWakeup(FontPathElementPtr fpe)
     num_slept_fpes++;
 }
 
-void
+_X_EXPORT void
 RemoveFontWakeup(FontPathElementPtr fpe)
 {
     int         i,
@@ -199,7 +199,7 @@ RemoveFontWakeup(FontPathElementPtr fpe)
     }
 }
 
-void
+_X_EXPORT void
 FontWakeup(pointer data, int count, pointer LastSelectMask)
 {
     int         i;
@@ -389,7 +389,7 @@ bail:
     return TRUE;
 }
 
-int
+_X_EXPORT int
 OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname, char *pfontname)
 {
     OFclosurePtr c;
@@ -479,7 +479,7 @@ OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname, char *pfontna
  *
  *  \param value must conform to DeleteType
  */
-int
+_X_EXPORT int
 CloseFont(pointer value, XID fid)
 {
     int         nscr;
@@ -522,7 +522,7 @@ CloseFont(pointer value, XID fid)
  *
  *  \param pReply caller must allocate this storage
   */
-void
+_X_EXPORT void
 QueryFont(FontPtr pFont, xQueryFontReply *pReply, int nProtoCCIStructs)
 {
     FontPropPtr      pFP;
@@ -840,7 +840,7 @@ bail:
     return TRUE;
 }
 
-int
+_X_EXPORT int
 ListFonts(ClientPtr client, unsigned char *pattern, unsigned length, 
           unsigned max_names)
 {
@@ -894,7 +894,7 @@ ListFonts(ClientPtr client, unsigned char *pattern, unsigned length,
     return Success;
 }
 
-int
+_X_EXPORT int
 doListFontsWithInfo(ClientPtr client, LFWIclosurePtr c)
 {
     FontPathElementPtr fpe;
@@ -1175,7 +1175,7 @@ badAlloc:
 static XID clearGC[] = { CT_NONE };
 #define clearGCmask (GCClipMask)
 
-int
+_X_EXPORT int
 doPolyText(ClientPtr client, PTclosurePtr c)
 {
     FontPtr pFont = c->pGC->font, oldpFont;
@@ -1442,7 +1442,7 @@ bail:
     return TRUE;
 }
 
-int
+_X_EXPORT int
 PolyText(ClientPtr client, DrawablePtr pDraw, GC *pGC, unsigned char *pElt, 
          unsigned char *endReq, int xorg, int yorg, int reqType, XID did)
 {
@@ -1477,7 +1477,7 @@ PolyText(ClientPtr client, DrawablePtr pDraw, GC *pGC, unsigned char *pElt,
 #undef TextEltHeader
 #undef FontShiftSize
 
-int
+_X_EXPORT int
 doImageText(ClientPtr client, ITclosurePtr c)
 {
     int err = Success, lgerr;	/* err is in X error, not font error, space */
@@ -1598,7 +1598,7 @@ bail:
     return TRUE;
 }
 
-int
+_X_EXPORT int
 ImageText(ClientPtr client, DrawablePtr pDraw, GC *pGC, int nChars, 
           unsigned char *data, int xorg, int yorg, int reqType, XID did)
 {
@@ -1796,7 +1796,7 @@ bail:
 }
 
 /* XXX -- do we need to pass error down to each renderer? */
-int
+_X_EXPORT int
 SetFontPath(ClientPtr client, int npaths, unsigned char *paths, int *error)
 {
     int err = XaceHook(XACE_SERVER_ACCESS, client, DixManageAccess);
@@ -1812,7 +1812,7 @@ SetFontPath(ClientPtr client, int npaths, unsigned char *paths, int *error)
     return err;
 }
 
-int
+_X_EXPORT int
 SetDefaultFontPath(char *path)
 {
     unsigned char *cp,
@@ -1853,7 +1853,7 @@ SetDefaultFontPath(char *path)
     return err;
 }
 
-int
+_X_EXPORT int
 GetFontPath(ClientPtr client, int *count, int *length, unsigned char **result)
 {
     int			i;
@@ -1888,7 +1888,7 @@ GetFontPath(ClientPtr client, int *count, int *length, unsigned char **result)
     return Success;
 }
 
-void
+_X_EXPORT void
 DeleteClientFontStuff(ClientPtr client)
 {
     int			i;
@@ -1902,7 +1902,7 @@ DeleteClientFontStuff(ClientPtr client)
     }
 }
 
-void
+_X_EXPORT void
 InitFonts (void)
 {
     patternCache = MakeFontPatternCache();
@@ -2003,7 +2003,7 @@ RegisterFPEFunctions(NameCheckFunc name_func,
     return num_fpe_types++;
 }
 
-void
+_X_EXPORT void
 FreeFonts(void)
 {
     if (patternCache) {
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 1dfb346..6d7c512 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -175,7 +175,7 @@ CopyISOLatin1Lowered(unsigned char *dest, unsigned char *source, int length)
     *dest = '\0';
 }
 
-int
+_X_EXPORT int
 CompareISOLatin1Lowered(unsigned char *s1, int s1len, 
 			unsigned char *s2, int s2len)
 {
@@ -276,7 +276,7 @@ bad:
     return rc;
 }
 
-int
+_X_EXPORT int
 AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
                       Bool toRoot, Bool map)
 {
@@ -332,7 +332,7 @@ AlterSaveSetForClient(ClientPtr client, WindowPtr pWin, unsigned mode,
     return(Success);
 }
 
-void
+_X_EXPORT void
 DeleteWindowFromAnySaveSet(WindowPtr pWin)
 {
     int i;
@@ -374,7 +374,7 @@ static Bool		handlerDeleted;
  *  \param pTimeout   DIX doesn't want to know how OS represents time
  *  \param pReadMask  nor how it represents the det of descriptors
  */
-void
+_X_EXPORT void
 BlockHandler(pointer pTimeout, pointer pReadmask)
 {
     int i, j;
@@ -408,7 +408,7 @@ BlockHandler(pointer pTimeout, pointer pReadmask)
  *  \param result    32 bits of undefined result from the wait
  *  \param pReadmask the resulting descriptor mask
  */
-void
+_X_EXPORT void
 WakeupHandler(int result, pointer pReadmask)
 {
     int i, j;
@@ -492,7 +492,7 @@ RemoveBlockAndWakeupHandlers (BlockHandlerProcPtr blockHandler,
 	}
 }
 
-void
+_X_EXPORT void
 InitBlockAndWakeupHandlers (void)
 {
     xfree (handlers);
@@ -509,7 +509,7 @@ InitBlockAndWakeupHandlers (void)
 WorkQueuePtr		workQueue;
 static WorkQueuePtr	*workQueueLast = &workQueue;
 
-void
+_X_EXPORT void
 ProcessWorkQueue(void)
 {
     WorkQueuePtr    q, *p;
@@ -537,7 +537,7 @@ ProcessWorkQueue(void)
     workQueueLast = p;
 }
 
-void
+_X_EXPORT void
 ProcessWorkQueueZombies(void)
 {
     WorkQueuePtr    q, *p;
@@ -653,7 +653,7 @@ ClientWakeup (ClientPtr client)
     }
 }
 
-Bool
+_X_EXPORT Bool
 ClientIsAsleep (ClientPtr client)
 {
     SleepQueuePtr   q;
@@ -869,21 +869,21 @@ DeleteCallback(CallbackListPtr *pcbl, CallbackProcPtr callback, pointer data)
     return _DeleteCallback(pcbl, callback, data);
 }
 
-void 
+_X_EXPORT void 
 CallCallbacks(CallbackListPtr *pcbl, pointer call_data)
 {
     if (!pcbl || !*pcbl) return;
     _CallCallbacks(pcbl, call_data);
 }
 
-void
+_X_EXPORT void
 DeleteCallbackList(CallbackListPtr *pcbl)
 {
     if (!pcbl || !*pcbl) return;
     _DeleteCallbackList(pcbl);
 }
 
-void 
+_X_EXPORT void 
 InitCallbackManager(void)
 {
     int i;
diff --git a/dix/events.c b/dix/events.c
index bfc8494..3f57a78 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -215,7 +215,7 @@ _X_EXPORT CallbackListPtr DeviceEventCallback;
 
 #define DNPMCOUNT 8
 
-Mask DontPropagateMasks[DNPMCOUNT];
+_X_EXPORT Mask DontPropagateMasks[DNPMCOUNT];
 static int DontPropagateRefCnts[DNPMCOUNT];
 
 
@@ -757,7 +757,7 @@ XineramaChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor)
 
 #endif  /* PANORAMIX */
 
-void
+_X_EXPORT void
 SetMaskForEvent(int deviceid, Mask mask, int event)
 {
     int coretype;
@@ -781,7 +781,7 @@ SetCriticalEvent(int event)
     criticalEvents[event >> 3] |= 1 << (event & 7);
 }
 
-void
+_X_EXPORT void
 ConfineToShape(DeviceIntPtr pDev, RegionPtr shape, int *px, int *py)
 {
     BoxRec box;
@@ -988,7 +988,7 @@ ChangeToCursor(DeviceIntPtr pDev, CursorPtr cursor)
 /**
  * @returns true if b is a descendent of a
  */
-Bool
+_X_EXPORT Bool
 IsParent(WindowPtr a, WindowPtr b)
 {
     for (b = b->parent; b; b = b->parent)
@@ -1114,7 +1114,7 @@ MonthChangedOrBadTime(xEvent *xE)
     currentTime.milliseconds = (xE)->u.keyButtonPointer.time; \
     lastDeviceEventTime = currentTime; }
 
-void
+_X_EXPORT void
 NoticeEventTime(xEvent *xE)
 {
     if (!syncEvents.playingEvents)
@@ -1130,7 +1130,7 @@ NoticeEventTime(xEvent *xE)
  * Instead of delivering the events to the client, the event is tacked onto a
  * linked list for later delivery.
  */
-void
+_X_EXPORT void
 EnqueueEvent(xEvent *xE, DeviceIntPtr device, int count)
 {
     QdEventPtr	tail = *syncEvents.pendtail;
@@ -1400,7 +1400,7 @@ playmore:
 }
 
 #ifdef RANDR
-void
+_X_EXPORT void
 ScreenRestructured (ScreenPtr pScreen)
 {
     GrabPtr grab;
@@ -1526,7 +1526,7 @@ RestoreOldMaster(DeviceIntPtr dev)
  * @param autoGrab True if the grab was caused by a button down event and not
  * explicitely by a client.
  */
-void
+_X_EXPORT void
 ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
                     TimeStamp time, Bool autoGrab)
 {
@@ -1572,7 +1572,7 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
  *
  * Extension devices are set up for ActivateKeyboardGrab().
  */
-void
+_X_EXPORT void
 DeactivatePointerGrab(DeviceIntPtr mouse)
 {
     GrabPtr grab = mouse->deviceGrab.grab;
@@ -1615,7 +1615,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
  *
  * Extension devices have ActivateKeyboardGrab() set as their grabbing proc.
  */
-void
+_X_EXPORT void
 ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool passive)
 {
     GrabInfoPtr grabinfo = &keybd->deviceGrab;
@@ -1652,7 +1652,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool pass
 /**
  * Delete keyboard grab for the given device.
  */
-void
+_X_EXPORT void
 DeactivateKeyboardGrab(DeviceIntPtr keybd)
 {
     GrabPtr grab = keybd->deviceGrab.grab;
@@ -1687,7 +1687,7 @@ DeactivateKeyboardGrab(DeviceIntPtr keybd)
     ComputeFreezes();
 }
 
-void
+_X_EXPORT void
 AllowSome(ClientPtr client,
           TimeStamp time,
           DeviceIntPtr thisDev,
@@ -1817,7 +1817,7 @@ AllowSome(ClientPtr client,
  *
  * Release some events from a frozen device.
  */
-int
+_X_EXPORT int
 ProcAllowEvents(ClientPtr client)
 {
     TimeStamp		time;
@@ -1867,7 +1867,7 @@ ProcAllowEvents(ClientPtr client)
 /**
  * Deactivate grabs from any device that has been grabbed by the client.
  */
-void
+_X_EXPORT void
 ReleaseActiveGrabs(ClientPtr client)
 {
     DeviceIntPtr dev;
@@ -2013,7 +2013,7 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
  *
  * @return Number of events delivered to various clients.
  */
-int
+_X_EXPORT int
 DeliverEventsToWindow(DeviceIntPtr pDev, WindowPtr pWin, xEvent
         *pEvents, int count, Mask filter, GrabPtr grab, int mskidx)
 {
@@ -2225,7 +2225,7 @@ XineramaTryClientEventsResult(
  * @param filter Mask based on event type.
  * @param dontClient Don't deliver to the dontClient.
  */
-int
+_X_EXPORT int
 MaybeDeliverEventsToClient(WindowPtr pWin, xEvent *pEvents,
                            int count, Mask filter, ClientPtr dontClient)
 {
@@ -2355,7 +2355,7 @@ FixUpEventFromWindow(
  * @see DeliverGrabbedEvent
  * @see DeliverFocusedEvent
  */
-int
+_X_EXPORT int
 DeliverDeviceEvents(WindowPtr pWin, xEvent *xE, GrabPtr grab,
                     WindowPtr stopAt, DeviceIntPtr dev, int count)
 {
@@ -2613,7 +2613,7 @@ XYToWindow(DeviceIntPtr pDev, int x, int y)
  *
  * @return TRUE if the sprite has moved or FALSE otherwise.
  */
-Bool
+_X_EXPORT Bool
 CheckMotion(xEvent *xE, DeviceIntPtr pDev)
 {
     INT16     *rootX, *rootY;
@@ -2710,7 +2710,7 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
  * Windows have restructured, we need to update the sprite position and the
  * sprite's cursor.
  */
-void
+_X_EXPORT void
 WindowsRestructured(void)
 {
     DeviceIntPtr pDev = inputInfo.devices;
@@ -2728,7 +2728,7 @@ WindowsRestructured(void)
  * other than 0,0, the information in the private sprite structure must
  * be updated accordingly, or XYToWindow (and other routines) will not
  * compute correctly. */
-void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff)
+_X_EXPORT void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff)
 {
     GrabPtr   grab;
     DeviceIntPtr pDev;
@@ -2782,7 +2782,7 @@ void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff)
  *
  * Should delete this now? -ds
  */
-void
+_X_EXPORT void
 DefineInitialRootWindow(WindowPtr win)
 {
 }
@@ -2802,7 +2802,7 @@ DefineInitialRootWindow(WindowPtr win)
  * @param pWin The window where to generate the sprite in.
  *
  */
-void
+_X_EXPORT void
 InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
 {
     SpritePtr pSprite;
@@ -2918,7 +2918,7 @@ InitializeSprite(DeviceIntPtr pDev, WindowPtr pWin)
  * reset the mouse pointer position.
  * @param win must be the new pScreen we are switching to.
  */
-void
+_X_EXPORT void
 UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen)
 {
     SpritePtr pSprite = NULL;
@@ -2970,7 +2970,7 @@ UpdateSpriteForScreen(DeviceIntPtr pDev, ScreenPtr pScreen)
  * between the one the pointer is in and the one that the last cursor was
  * instantiated from.
  */
-void
+_X_EXPORT void
 WindowHasNewCursor(WindowPtr pWin)
 {
     DeviceIntPtr pDev;
@@ -3139,7 +3139,7 @@ XineramaWarpPointer(ClientPtr client)
  * Server-side protocol handling for WarpPointer request.
  * Warps the cursor position to the coordinates given in the request.
  */
-int
+_X_EXPORT int
 ProcWarpPointer(ClientPtr client)
 {
     WindowPtr	dest = NULL;
@@ -3438,7 +3438,7 @@ CheckPassiveGrabsOnWindow(
  * @return TRUE if a grab has been activated or false otherwise.
 */
 
-Bool
+_X_EXPORT Bool
 CheckDeviceGrabs(DeviceIntPtr device, xEvent *xE,
                  int checkFirst, int count)
 {
@@ -3512,7 +3512,7 @@ CheckDeviceGrabs(DeviceIntPtr device, xEvent *xE,
  * @param window Window underneath the sprite.
  * @param count number of events in xE.
  */
-void
+_X_EXPORT void
 DeliverFocusedEvent(DeviceIntPtr keybd, xEvent *xE, WindowPtr window, int count)
 {
     DeviceIntPtr pointer;
@@ -3570,7 +3570,7 @@ DeliverFocusedEvent(DeviceIntPtr keybd, xEvent *xE, WindowPtr window, int count)
  *
  * @param deactivateGrab True if the device's grab should be deactivated.
  */
-void
+_X_EXPORT void
 DeliverGrabbedEvent(xEvent *xE, DeviceIntPtr thisDev,
                     Bool deactivateGrab, int count)
 {
@@ -3742,7 +3742,7 @@ DeliverGrabbedEvent(xEvent *xE, DeviceIntPtr thisDev,
  * @param keybd The device that caused an event.
  * @param count Number of elements in xE.
  */
-void
+_X_EXPORT void
 #ifdef XKB
 CoreProcessKeyboardEvent (xEvent *xE, DeviceIntPtr keybd, int count)
 #else
@@ -3823,7 +3823,7 @@ ProcessKeyboardEvent (xEvent *xE, DeviceIntPtr keybd, int count)
    this is only used when the pressing of keys does not cause
    the device's processInputProc to be called, as in for example Mouse Keys.
 */
-void
+_X_EXPORT void
 FixKeyState (xEvent *xE, DeviceIntPtr keybd)
 {
     int             key, bit;
@@ -3862,7 +3862,7 @@ FixKeyState (xEvent *xE, DeviceIntPtr keybd)
  * @param mouse The device that caused an event.
  * @param count Number of elements in xE.
  */
-void
+_X_EXPORT void
 #ifdef XKB
 CoreProcessPointerEvent (xEvent *xE, DeviceIntPtr mouse, int count)
 #else
@@ -3969,7 +3969,7 @@ ProcessPointerEvent (xEvent *xE, DeviceIntPtr mouse, int count)
  *
  * Traverses to siblings and parents of the window.
  */
-void
+_X_EXPORT void
 RecalculateDeliverableEvents(pWin)
     WindowPtr pWin;
 {
@@ -4010,7 +4010,7 @@ RecalculateDeliverableEvents(pWin)
  *
  *  \param value must conform to DeleteType
  */
-int
+_X_EXPORT int
 OtherClientGone(pointer value, XID id)
 {
     OtherClientsPtr other, prev;
@@ -4039,7 +4039,7 @@ OtherClientGone(pointer value, XID id)
     return -1; /* make compiler happy */
 }
 
-int
+_X_EXPORT int
 EventSelectForWindow(WindowPtr pWin, ClientPtr client, Mask mask)
 {
     Mask check;
@@ -4123,7 +4123,7 @@ maskSet:
     return Success;
 }
 
-int
+_X_EXPORT int
 EventSuppressForWindow(WindowPtr pWin, ClientPtr client,
                        Mask mask, Bool *checkOptional)
 {
@@ -4478,7 +4478,7 @@ FocusOutEvents(
 	FocusEvent(dev, FocusOut, mode, detail, ancestor);
 }
 
-void
+_X_EXPORT void
 DoFocusEvents(DeviceIntPtr dev, WindowPtr fromWin, WindowPtr toWin, int mode)
 {
     int     out, in;		       /* for holding details for to/from
@@ -4622,7 +4622,7 @@ DoFocusEvents(DeviceIntPtr dev, WindowPtr fromWin, WindowPtr toWin, int mode)
  * @param ctime Specifies the time.
  * @param followOK True if pointer is allowed to follow the keyboard.
  */
-int
+_X_EXPORT int
 SetInputFocus(
     ClientPtr client,
     DeviceIntPtr dev,
@@ -4714,7 +4714,7 @@ SetInputFocus(
  *
  * Sets the input focus for the virtual core keyboard.
  */
-int
+_X_EXPORT int
 ProcSetInputFocus(client)
     ClientPtr client;
 {
@@ -4733,7 +4733,7 @@ ProcSetInputFocus(client)
  * Sends the current input focus for the client's keyboard back to the
  * client.
  */
-int
+_X_EXPORT int
 ProcGetInputFocus(ClientPtr client)
 {
     DeviceIntPtr kbd = PickKeyboard(client);
@@ -4766,7 +4766,7 @@ ProcGetInputFocus(ClientPtr client)
  * Sets an active grab on the client's ClientPointer and returns success
  * status to client.
  */
-int
+_X_EXPORT int
 ProcGrabPointer(ClientPtr client)
 {
     xGrabPointerReply rep;
@@ -4900,7 +4900,7 @@ ProcGrabPointer(ClientPtr client)
  * Changes properties of the grab hold by the client. If the client does not
  * hold an active grab on the device, nothing happens.
  */
-int
+_X_EXPORT int
 ProcChangeActivePointerGrab(ClientPtr client)
 {
     DeviceIntPtr device;
@@ -4955,7 +4955,7 @@ ProcChangeActivePointerGrab(ClientPtr client)
  *
  * Deletes a pointer grab on a device the client has grabbed.
  */
-int
+_X_EXPORT int
 ProcUngrabPointer(ClientPtr client)
 {
     DeviceIntPtr device = PickPointer(client);
@@ -4993,7 +4993,7 @@ ProcUngrabPointer(ClientPtr client)
  *
  * @returns Success or BadValue.
  */
-int
+_X_EXPORT int
 GrabDevice(ClientPtr client, DeviceIntPtr dev,
            unsigned this_mode, unsigned other_mode, Window grabWindow,
            unsigned ownerEvents, Time ctime, Mask mask, CARD8 *status,
@@ -5074,7 +5074,7 @@ GrabDevice(ClientPtr client, DeviceIntPtr dev,
  *
  * Grabs the client's keyboard and returns success status to client.
  */
-int
+_X_EXPORT int
 ProcGrabKeyboard(ClientPtr client)
 {
     xGrabKeyboardReply rep;
@@ -5103,7 +5103,7 @@ ProcGrabKeyboard(ClientPtr client)
  *
  * Deletes a possible grab on the client's keyboard.
  */
-int
+_X_EXPORT int
 ProcUngrabKeyboard(ClientPtr client)
 {
     DeviceIntPtr device = PickKeyboard(client);
@@ -5130,7 +5130,7 @@ ProcUngrabKeyboard(ClientPtr client)
  * Returns the current state and position of the client's ClientPointer to the
  * client.
  */
-int
+_X_EXPORT int
 ProcQueryPointer(ClientPtr client)
 {
     xQueryPointerReply rep;
@@ -5198,7 +5198,7 @@ ProcQueryPointer(ClientPtr client)
  * Initializes the device list and the DIX sprite to sane values. Allocates
  * trace memory used for quick window traversal.
  */
-void
+_X_EXPORT void
 InitEvents(void)
 {
     int i;
@@ -5242,7 +5242,7 @@ InitEvents(void)
         FatalError("[dix] Failed to allocate input event list.\n");
 }
 
-void
+_X_EXPORT void
 CloseDownEvents(void)
 {
     int len;
@@ -5258,7 +5258,7 @@ CloseDownEvents(void)
  *
  * Locates the window to send the event to and forwards the event.
  */
-int
+_X_EXPORT int
 ProcSendEvent(ClientPtr client)
 {
     WindowPtr pWin;
@@ -5355,7 +5355,7 @@ ProcSendEvent(ClientPtr client)
  * Deletes a passive grab for the given key. Works on the
  * client's keyboard.
  */
-int
+_X_EXPORT int
 ProcUngrabKey(ClientPtr client)
 {
     REQUEST(xUngrabKeyReq);
@@ -5404,7 +5404,7 @@ ProcUngrabKey(ClientPtr client)
  * Creates a grab for the client's keyboard and adds it to the list of passive
  * grabs.
  */
-int
+_X_EXPORT int
 ProcGrabKey(ClientPtr client)
 {
     WindowPtr pWin;
@@ -5465,7 +5465,7 @@ ProcGrabKey(ClientPtr client)
  * Creates a grab for the client's ClientPointer and adds it as a passive grab
  * to the list.
  */
-int
+_X_EXPORT int
 ProcGrabButton(ClientPtr client)
 {
     WindowPtr pWin, confineTo;
@@ -5600,7 +5600,7 @@ ProcUngrabButton(ClientPtr client)
  * @param freeResources True if resources associated with the window should be
  * deleted.
  */
-void
+_X_EXPORT void
 DeleteWindowFromAnyEvents(WindowPtr pWin, Bool freeResources)
 {
     WindowPtr		parent;
@@ -5741,7 +5741,7 @@ CheckCursorConfinement(WindowPtr pWin)
     }
 }
 
-Mask
+_X_EXPORT Mask
 EventMaskForClient(WindowPtr pWin, ClientPtr client)
 {
     OtherClientsPtr	other;
@@ -5759,7 +5759,7 @@ EventMaskForClient(WindowPtr pWin, ClientPtr client)
 /**
  * Server-side protocol handling for RecolorCursor request.
  */
-int
+_X_EXPORT int
 ProcRecolorCursor(ClientPtr client)
 {
     CursorPtr pCursor;
@@ -6026,7 +6026,7 @@ PickKeyboard(ClientPtr client)
  * Return true if a core event from the device would interfere and should not
  * be delivered.
  */
-Bool
+_X_EXPORT Bool
 IsInterferingGrab(ClientPtr client, DeviceIntPtr dev, xEvent* event)
 {
     DeviceIntPtr it = inputInfo.devices;
@@ -6152,7 +6152,7 @@ ExtGrabDevice(ClientPtr client,
 /*
  * @return Zero if no devices has focus on the window, non-zero otherwise.
  */
-int
+_X_EXPORT int
 FocusSemaphoresIsset(WindowPtr win)
 {
     int set = 0;
diff --git a/dix/extension.c b/dix/extension.c
index 3070f4d..a7a8547 100644
--- a/dix/extension.c
+++ b/dix/extension.c
@@ -207,7 +207,7 @@ CheckExtension(const char *extname)
 /*
  * Added as part of Xace.
  */
-ExtensionEntry *
+_X_EXPORT ExtensionEntry *
 GetExtensionEntry(int major)
 {    
     if (major < EXTENSION_BASE)
@@ -238,7 +238,7 @@ MinorOpcodeOfRequest(ClientPtr client)
     return (*extensions[major]->MinorOpcode)(client);
 }
 
-void
+_X_EXPORT void
 CloseDownExtensions(void)
 {
     int i,j;
diff --git a/dix/ffs.c b/dix/ffs.c
index d0bd3e5..24d3d2d 100644
--- a/dix/ffs.c
+++ b/dix/ffs.c
@@ -34,7 +34,7 @@ The Open Group.
 
 #include "dix.h"
 
-int
+_X_EXPORT int
 ffs(int i)
 {
     int j;
diff --git a/dix/gc.c b/dix/gc.c
index b925694..b9073d5 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -956,7 +956,7 @@ CreateScratchGC(ScreenPtr pScreen, unsigned depth)
     return pGC;
 }
 
-void
+_X_EXPORT void
 FreeGCperDepth(int screenNum)
 {
     int i;
@@ -972,7 +972,7 @@ FreeGCperDepth(int screenNum)
 }
 
 
-Bool
+_X_EXPORT Bool
 CreateGCperDepth(int screenNum)
 {
     int i;
@@ -1005,7 +1005,7 @@ CreateGCperDepth(int screenNum)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 CreateDefaultStipple(int screenNum)
 {
     ScreenPtr pScreen;
@@ -1042,14 +1042,14 @@ CreateDefaultStipple(int screenNum)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 FreeDefaultStipple(int screenNum)
 {
     ScreenPtr pScreen = screenInfo.screens[screenNum];
     (*pScreen->DestroyPixmap)(pScreen->PixmapPerDepth[0]);
 }
 
-int
+_X_EXPORT int
 SetDashes(GCPtr pGC, unsigned offset, unsigned ndash, unsigned char *pdash)
 {
     long i;
@@ -1155,7 +1155,7 @@ VerifyRectOrder(int nrects, xRectangle *prects, int ordering)
     return -1;
 }
 
-int
+_X_EXPORT int
 SetClipRects(GCPtr pGC, int xOrigin, int yOrigin, int nrects, 
              xRectangle *prects, int ordering)
 {
diff --git a/dix/getevents.c b/dix/getevents.c
index 620ce93..3d00492 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -73,8 +73,8 @@
  * DDX. The DDX is expected to call GetEventList() and then pass the list into
  * Get{Pointer|Keyboard}Events.
  */
-EventListPtr InputEventList = NULL;
-int InputEventListLen = 0;
+_X_EXPORT EventListPtr InputEventList = NULL;
+_X_EXPORT int InputEventListLen = 0;
 
 _X_EXPORT int
 GetEventList(EventListPtr* list)
@@ -117,7 +117,7 @@ key_autorepeats(DeviceIntPtr pDev, int key_code)
               (1 << (key_code & 7)));
 }
 
-void
+_X_EXPORT void
 CreateClassesChangedEvent(EventList* event,
                           DeviceIntPtr master,
                           DeviceIntPtr slave)
@@ -903,7 +903,7 @@ GetKeyboardValuatorEvents(EventList *events, DeviceIntPtr pDev, int type,
  *
  * @param num_events Number of elements in list.
  */
-EventListPtr
+_X_EXPORT EventListPtr
 InitEventList(int num_events)
 {
     EventListPtr events;
@@ -1135,7 +1135,7 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type,
  * Used in cursor functions, e.g. when cursor confinement changes, and we need
  * to shift the pointer to get it inside the new bounds.
  */
-void
+_X_EXPORT void
 PostSyntheticMotion(DeviceIntPtr pDev,
                     int x,
                     int y,
diff --git a/dix/globals.c b/dix/globals.c
index 973dc43..a60b9e9 100644
--- a/dix/globals.c
+++ b/dix/globals.c
@@ -62,7 +62,7 @@ SOFTWARE.
 #include "os.h"
 
 _X_EXPORT ScreenInfo screenInfo;
-KeybdCtrl defaultKeyboardControl = {
+_X_EXPORT KeybdCtrl defaultKeyboardControl = {
 	DEFAULT_KEYBOARD_CLICK,
 	DEFAULT_BELL,
 	DEFAULT_BELL_PITCH,
@@ -72,7 +72,7 @@ KeybdCtrl defaultKeyboardControl = {
 	DEFAULT_LEDS,
 	0};
 
-PtrCtrl defaultPointerControl = {
+_X_EXPORT PtrCtrl defaultPointerControl = {
 	DEFAULT_PTR_NUMERATOR,
 	DEFAULT_PTR_DENOMINATOR,
 	DEFAULT_PTR_THRESHOLD,
@@ -90,9 +90,9 @@ _X_EXPORT unsigned long serverGeneration = 0;
 
 /* these next four are initialized in main.c */
 _X_EXPORT CARD32 ScreenSaverTime;
-CARD32 ScreenSaverInterval;
+_X_EXPORT CARD32 ScreenSaverInterval;
 _X_EXPORT int ScreenSaverBlanking;
-int  ScreenSaverAllowExposures;
+_X_EXPORT int  ScreenSaverAllowExposures;
 
 #ifdef DPMSExtension
 # ifndef DEFAULT_STANDBY_TIME
@@ -107,11 +107,11 @@ int  ScreenSaverAllowExposures;
 # ifndef DEFAULT_DPMS_ENABLED
 #  define DEFAULT_DPMS_ENABLED TRUE
 # endif
-CARD32 defaultDPMSStandbyTime = DEFAULT_STANDBY_TIME;
-CARD32 defaultDPMSSuspendTime = DEFAULT_SUSPEND_TIME;
-CARD32 defaultDPMSOffTime = DEFAULT_OFF_TIME;
+_X_EXPORT CARD32 defaultDPMSStandbyTime = DEFAULT_STANDBY_TIME;
+_X_EXPORT CARD32 defaultDPMSSuspendTime = DEFAULT_SUSPEND_TIME;
+_X_EXPORT CARD32 defaultDPMSOffTime = DEFAULT_OFF_TIME;
 _X_EXPORT CARD16 DPMSPowerLevel = 0;
-Bool defaultDPMSEnabled = DEFAULT_DPMS_ENABLED;
+_X_EXPORT Bool defaultDPMSEnabled = DEFAULT_DPMS_ENABLED;
 _X_EXPORT Bool DPMSEnabledSwitch = FALSE;  /* these denote the DPMS command */
 _X_EXPORT Bool DPMSDisabledSwitch = FALSE; /* lind switch states */
 _X_EXPORT Bool DPMSCapableFlag = FALSE;
@@ -121,28 +121,28 @@ _X_EXPORT CARD32 DPMSOffTime;
 _X_EXPORT Bool DPMSEnabled;
 #endif
 
-CARD32 defaultScreenSaverTime = DEFAULT_SCREEN_SAVER_TIME;
-CARD32 defaultScreenSaverInterval = DEFAULT_SCREEN_SAVER_INTERVAL;
-int  defaultScreenSaverBlanking = DEFAULT_SCREEN_SAVER_BLANKING;
-int  defaultScreenSaverAllowExposures = DEFAULT_SCREEN_SAVER_EXPOSURES;
+_X_EXPORT CARD32 defaultScreenSaverTime = DEFAULT_SCREEN_SAVER_TIME;
+_X_EXPORT CARD32 defaultScreenSaverInterval = DEFAULT_SCREEN_SAVER_INTERVAL;
+_X_EXPORT int  defaultScreenSaverBlanking = DEFAULT_SCREEN_SAVER_BLANKING;
+_X_EXPORT int  defaultScreenSaverAllowExposures = DEFAULT_SCREEN_SAVER_EXPOSURES;
 #ifndef NOLOGOHACK
-int  logoScreenSaver = DEFAULT_LOGO_SCREEN_SAVER;
+_X_EXPORT int  logoScreenSaver = DEFAULT_LOGO_SCREEN_SAVER;
 #endif
 
 #ifdef SCREENSAVER
-Bool screenSaverSuspended = FALSE;
+_X_EXPORT Bool screenSaverSuspended = FALSE;
 #endif
 
-char *defaultFontPath = COMPILEDDEFAULTFONTPATH;
-char *defaultTextFont = COMPILEDDEFAULTFONT;
-char *defaultCursorFont = COMPILEDCURSORFONT;
+_X_EXPORT char *defaultFontPath = COMPILEDDEFAULTFONTPATH;
+_X_EXPORT char *defaultTextFont = COMPILEDDEFAULTFONT;
+_X_EXPORT char *defaultCursorFont = COMPILEDCURSORFONT;
 FontPtr defaultFont;   /* not declared in dix.h to avoid including font.h in
 			every compilation of dix code */
-CursorPtr rootCursor;
-Bool party_like_its_1989 = FALSE;
-Bool whiteRoot = FALSE;
+_X_EXPORT CursorPtr rootCursor;
+_X_EXPORT Bool party_like_its_1989 = FALSE;
+_X_EXPORT Bool whiteRoot = FALSE;
 
-int cursorScreenDevPriv[MAXSCREENS];
+_X_EXPORT int cursorScreenDevPriv[MAXSCREENS];
 
 _X_EXPORT TimeStamp currentTime;
 _X_EXPORT TimeStamp lastDeviceEventTime;
@@ -151,8 +151,8 @@ _X_EXPORT int defaultColorVisualClass = -1;
 _X_EXPORT int monitorResolution = 0;
 
 _X_EXPORT char *display;
-char *ConnectionInfo;
+_X_EXPORT char *ConnectionInfo;
 
-CARD32 TimeOutValue = DEFAULT_TIMEOUT * MILLI_PER_SECOND;
+_X_EXPORT CARD32 TimeOutValue = DEFAULT_TIMEOUT * MILLI_PER_SECOND;
 
-DDXPointRec dixScreenOrigins[MAXSCREENS];
+_X_EXPORT DDXPointRec dixScreenOrigins[MAXSCREENS];
diff --git a/dix/glyphcurs.c b/dix/glyphcurs.c
index f74b137..c2799a6 100644
--- a/dix/glyphcurs.c
+++ b/dix/glyphcurs.c
@@ -73,7 +73,7 @@ the first one we find.
 cursor metrics.
 */
 
-int
+_X_EXPORT int
 ServerBitsFromGlyph(FontPtr pfont, unsigned ch, CursorMetricPtr cm, unsigned char **ppbits)
 {
     ScreenPtr pScreen;
@@ -138,7 +138,7 @@ ServerBitsFromGlyph(FontPtr pfont, unsigned ch, CursorMetricPtr cm, unsigned cha
 }
 
 
-Bool
+_X_EXPORT Bool
 CursorMetricsFromGlyph(FontPtr pfont, unsigned ch, CursorMetricPtr cm)
 {
     CharInfoPtr 	pci;
diff --git a/dix/grabs.c b/dix/grabs.c
index b372d8f..458fc4c 100644
--- a/dix/grabs.c
+++ b/dix/grabs.c
@@ -67,7 +67,7 @@ SOFTWARE.
 #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
 #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
 
-GrabPtr
+_X_EXPORT GrabPtr
 CreateGrab(
     int client,
     DeviceIntPtr device,
@@ -128,7 +128,7 @@ FreeGrab(GrabPtr pGrab)
     xfree(pGrab);
 }
 
-int
+_X_EXPORT int
 DeletePassiveGrab(pointer value, XID id)
 {
     GrabPtr g, prev;
@@ -254,7 +254,7 @@ GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
  * ignored.
  * @return TRUE if the grabs match or FALSE otherwise.
  */
-Bool
+_X_EXPORT Bool
 GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
 {
     if (!ignoreDevice &&
@@ -324,7 +324,7 @@ GrabsAreIdentical(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
  * 
  * @return Success or X error code on failure.
  */
-int
+_X_EXPORT int
 AddPassiveGrabToList(ClientPtr client, GrabPtr pGrab)
 {
     GrabPtr grab;
@@ -376,7 +376,7 @@ AddPassiveGrabToList(ClientPtr client, GrabPtr pGrab)
  * if any allocation fails
  */
 
-Bool
+_X_EXPORT Bool
 DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
 {
     GrabPtr grab;
diff --git a/dix/initatoms.c b/dix/initatoms.c
index de101bd..bd4249d 100644
--- a/dix/initatoms.c
+++ b/dix/initatoms.c
@@ -11,7 +11,7 @@
 #include <X11/Xatom.h>
 #include "misc.h"
 #include "dix.h"
-void MakePredeclaredAtoms(void)
+_X_EXPORT void MakePredeclaredAtoms(void)
 {
     if (MakeAtom("PRIMARY", 7, 1) != XA_PRIMARY) AtomError();
     if (MakeAtom("SECONDARY", 9, 1) != XA_SECONDARY) AtomError();
diff --git a/dix/main.c b/dix/main.c
index ee2e10d..1b7a991 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -144,7 +144,7 @@ NotImplemented(xEvent *from, xEvent *to)
  * Dummy entry for ReplySwapVector[]
  */
 
-void
+_X_EXPORT void
 ReplyNotSwappd(
 	ClientPtr pClient ,
 	int size ,
@@ -446,13 +446,13 @@ int main(int argc, char *argv[], char *envp[])
 static int  VendorRelease = VENDOR_RELEASE;
 static char *VendorString = VENDOR_NAME;
 
-void
+_X_EXPORT void
 SetVendorRelease(int release)
 {
     VendorRelease = release;
 }
 
-void
+_X_EXPORT void
 SetVendorString(char *string)
 {
     VendorString = string;
@@ -609,7 +609,7 @@ with its screen number, a pointer to its ScreenRec, argc, and argv.
 
 */
 
-int
+_X_EXPORT int
 AddScreen(
     Bool	(* pfnInit)(
 	int /*index*/,
diff --git a/dix/pixmap.c b/dix/pixmap.c
index 82e388c..7ab8681 100644
--- a/dix/pixmap.c
+++ b/dix/pixmap.c
@@ -88,7 +88,7 @@ FreeScratchPixmapHeader(PixmapPtr pPixmap)
 }
 
 
-Bool
+_X_EXPORT Bool
 CreateScratchPixmapsForScreen(int scrnum)
 {
     /* let it be created on first use */
@@ -97,7 +97,7 @@ CreateScratchPixmapsForScreen(int scrnum)
 }
 
 
-void
+_X_EXPORT void
 FreeScratchPixmapsForScreen(int scrnum)
 {
     FreeScratchPixmapHeader(screenInfo.screens[scrnum]->pScratchPixmap);
diff --git a/dix/privates.c b/dix/privates.c
index ca03317..0e8c9ef 100644
--- a/dix/privates.c
+++ b/dix/privates.c
@@ -295,7 +295,7 @@ dixLookupPrivateOffset(RESTYPE type)
     return offsets[type];
 }
 
-int
+_X_EXPORT int
 dixResetPrivates(void)
 {
     int i;
diff --git a/dix/property.c b/dix/property.c
index 7149f7c..150ae76 100644
--- a/dix/property.c
+++ b/dix/property.c
@@ -370,7 +370,7 @@ ChangeWindowProperty(WindowPtr pWin, Atom property, Atom type, int format,
 				   mode, len, value, sendevent);
 }
 
-int
+_X_EXPORT int
 DeleteProperty(ClientPtr client, WindowPtr pWin, Atom propName)
 {
     PropertyPtr pProp, prevProp;
@@ -401,7 +401,7 @@ DeleteProperty(ClientPtr client, WindowPtr pWin, Atom propName)
     return rc;
 }
 
-void
+_X_EXPORT void
 DeleteAllWindowProperties(WindowPtr pWin)
 {
     PropertyPtr pProp, pNextProp;
diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
index e9d4e88..9ae2b72 100644
--- a/dix/ptrveloc.c
+++ b/dix/ptrveloc.c
@@ -93,7 +93,7 @@ SimpleSmoothProfile(DeviceVelocityPtr pVel, float velocity,
 /**
  * Init struct so it should match the average case
  */
-void
+_X_EXPORT void
 InitVelocityData(DeviceVelocityPtr s)
 {
     memset(s, 0, sizeof(DeviceVelocityRec));
@@ -123,7 +123,7 @@ FreeVelocityData(DeviceVelocityPtr s){
 /*
  *  dix uninit helper, called through scheme
  */
-void
+_X_EXPORT void
 AccelerationDefaultCleanup(DeviceIntPtr pDev)
 {
     /*sanity check*/
@@ -149,7 +149,7 @@ and is being coupled to account for fast-changing input, or you have 'one for
 every situation'. You might want to have tighter coupling then, e.g. 0.1.
 In the filter stats, you can see if a reasonable filter useage emerges.
 */
-void
+_X_EXPORT void
 InitFilterChain(DeviceVelocityPtr s, float rdecay, float progression, int stages, int lutsize)
 {
     int fn;
@@ -787,7 +787,7 @@ GetDevicePredictableAccelData(
  * This version employs a velocity approximation algorithm to
  * enable fine-grained predictable acceleration profiles.
  */
-void
+_X_EXPORT void
 acceleratePointerPredictable(
     DeviceIntPtr pDev,
     int first_valuator,
@@ -863,7 +863,7 @@ acceleratePointerPredictable(
  * Originally a part of xf86PostMotionEvent; modifies valuators
  * in-place. Retained mostly for embedded scenarios.
  */
-void
+_X_EXPORT void
 acceleratePointerLightweight(
     DeviceIntPtr pDev,
     int first_valuator,
diff --git a/dix/registry.c b/dix/registry.c
index a519cff..a96ef77 100644
--- a/dix/registry.c
+++ b/dix/registry.c
@@ -114,7 +114,7 @@ RegisterErrorName(unsigned error, char *name) {
     errors[error] = name;
 }
 
-void
+_X_EXPORT void
 RegisterExtensionNames(ExtensionEntry *extEntry)
 {
     char buf[256], *lineobj, *ptr;
@@ -196,7 +196,7 @@ RegisterExtensionNames(ExtensionEntry *extEntry)
  * Registration functions
  */
 
-void
+_X_EXPORT void
 RegisterResourceName(RESTYPE resource, char *name)
 {
     resource &= TypeMask;
@@ -214,7 +214,7 @@ RegisterResourceName(RESTYPE resource, char *name)
  * Lookup functions
  */
 
-const char *
+_X_EXPORT const char *
 LookupRequestName(int major, int minor)
 {
     if (major >= nmajor)
@@ -225,7 +225,7 @@ LookupRequestName(int major, int minor)
     return requests[major][minor] ? requests[major][minor] : XREGISTRY_UNKNOWN;
 }
 
-const char *
+_X_EXPORT const char *
 LookupMajorName(int major)
 {
     if (major < 128) {
@@ -244,7 +244,7 @@ LookupMajorName(int major)
     }
 }
 
-const char *
+_X_EXPORT const char *
 LookupEventName(int event)
 {
     event &= 127;
@@ -254,7 +254,7 @@ LookupEventName(int event)
     return events[event] ? events[event] : XREGISTRY_UNKNOWN;
 }
 
-const char *
+_X_EXPORT const char *
 LookupErrorName(int error)
 {
     if (error >= nerror)
@@ -263,7 +263,7 @@ LookupErrorName(int error)
     return errors[error] ? errors[error] : XREGISTRY_UNKNOWN;
 }
 
-const char *
+_X_EXPORT const char *
 LookupResourceName(RESTYPE resource)
 {
     resource &= TypeMask;
@@ -276,7 +276,7 @@ LookupResourceName(RESTYPE resource)
 /*
  * Setup and teardown
  */
-void
+_X_EXPORT void
 dixResetRegistry(void)
 {
     ExtensionEntry extEntry;
diff --git a/dix/resource.c b/dix/resource.c
index 7b0441e..5435afe 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -244,7 +244,7 @@ static ClientResourceRec clientTable[MAXCLIENTS];
  *    in resource table
  *****************/
 
-Bool
+_X_EXPORT Bool
 InitClientResources(ClientPtr client)
 {
     int i, j;
@@ -339,7 +339,7 @@ AvailableID(
     return 0;
 }
 
-void
+_X_EXPORT void
 GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
 {
     XID id, maxid;
@@ -390,7 +390,7 @@ GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
  *  invented, but this will be used so rarely that this should suffice.
  */
 
-unsigned int
+_X_EXPORT unsigned int
 GetXIDList(ClientPtr pClient, unsigned count, XID *pids)
 {
     unsigned int found = 0;
@@ -698,7 +698,7 @@ FindAllClientResources(
 }
 
 
-pointer
+_X_EXPORT pointer
 LookupClientResourceComplex(
     ClientPtr client,
     RESTYPE type,
@@ -725,7 +725,7 @@ LookupClientResourceComplex(
 }
 
 
-void
+_X_EXPORT void
 FreeClientNeverRetainResources(ClientPtr client)
 {
     ResourcePtr *resources;
@@ -762,7 +762,7 @@ FreeClientNeverRetainResources(ClientPtr client)
     }
 }
 
-void
+_X_EXPORT void
 FreeClientResources(ClientPtr client)
 {
     ResourcePtr *resources;
@@ -813,7 +813,7 @@ FreeClientResources(ClientPtr client)
     clientTable[client->index].buckets = 0;
 }
 
-void
+_X_EXPORT void
 FreeAllResources(void)
 {
     int	i;
diff --git a/dix/selection.c b/dix/selection.c
index c5427e0..b55826e 100644
--- a/dix/selection.c
+++ b/dix/selection.c
@@ -66,7 +66,7 @@ SOFTWARE.
  *****************************************************************/
 
 _X_EXPORT Selection *CurrentSelections;
-CallbackListPtr SelectionCallback;
+_X_EXPORT CallbackListPtr SelectionCallback;
 
 _X_EXPORT int
 dixLookupSelection(Selection **result, Atom selectionName,
@@ -86,7 +86,7 @@ dixLookupSelection(Selection **result, Atom selectionName,
     return rc;
 }
 
-void
+_X_EXPORT void
 InitSelections(void)
 {
     Selection *pSel, *pNextSel;
@@ -110,7 +110,7 @@ CallSelectionCallback(Selection *pSel, ClientPtr client,
     CallCallbacks(&SelectionCallback, &info);
 }
 
-void
+_X_EXPORT void
 DeleteWindowFromAnySelections(WindowPtr pWin)
 {
     Selection *pSel;
@@ -125,7 +125,7 @@ DeleteWindowFromAnySelections(WindowPtr pWin)
 	}
 }
 
-void
+_X_EXPORT void
 DeleteClientFromAnySelections(ClientPtr client)
 {
     Selection *pSel;
diff --git a/dix/swaprep.c b/dix/swaprep.c
index 91469e1..c850767 100644
--- a/dix/swaprep.c
+++ b/dix/swaprep.c
@@ -140,7 +140,7 @@ CopySwap32Write(ClientPtr pClient, int size, CARD32 *pbuf)
  *
  * \param size size in bytes
  */
-void
+_X_EXPORT void
 CopySwap16Write(ClientPtr pClient, int size, short *pbuf)
 {
     int bufsize = size;
@@ -186,7 +186,7 @@ CopySwap16Write(ClientPtr pClient, int size, short *pbuf)
 
 
 /* Extra-small reply */
-void
+_X_EXPORT void
 SGenericReply(ClientPtr pClient, int size, xGenericReply *pRep)
 {
     char n;
@@ -196,7 +196,7 @@ SGenericReply(ClientPtr pClient, int size, xGenericReply *pRep)
 }
 
 /* Extra-large reply */
-void
+_X_EXPORT void
 SGetWindowAttributesReply(ClientPtr pClient, int size,
                           xGetWindowAttributesReply *pRep)
 {
@@ -215,7 +215,7 @@ SGetWindowAttributesReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetGeometryReply(ClientPtr pClient, int size, xGetGeometryReply *pRep)
 {
     char n;
@@ -230,7 +230,7 @@ SGetGeometryReply(ClientPtr pClient, int size, xGetGeometryReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SQueryTreeReply(ClientPtr pClient, int size, xQueryTreeReply *pRep)
 {
     char n;
@@ -243,7 +243,7 @@ SQueryTreeReply(ClientPtr pClient, int size, xQueryTreeReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SInternAtomReply(ClientPtr pClient, int size, xInternAtomReply *pRep)
 {
     char n;
@@ -253,7 +253,7 @@ SInternAtomReply(ClientPtr pClient, int size, xInternAtomReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetAtomNameReply(ClientPtr pClient, int size, xGetAtomNameReply *pRep)
 {
     char n;
@@ -265,7 +265,7 @@ SGetAtomNameReply(ClientPtr pClient, int size, xGetAtomNameReply *pRep)
 }
 
 
-void
+_X_EXPORT void
 SGetPropertyReply(ClientPtr pClient, int size, xGetPropertyReply *pRep)
 {
     char n;
@@ -278,7 +278,7 @@ SGetPropertyReply(ClientPtr pClient, int size, xGetPropertyReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SListPropertiesReply(ClientPtr pClient, int size, xListPropertiesReply *pRep)
 {
     char n;
@@ -289,7 +289,7 @@ SListPropertiesReply(ClientPtr pClient, int size, xListPropertiesReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetSelectionOwnerReply(ClientPtr pClient, int size,
                         xGetSelectionOwnerReply *pRep)
 {
@@ -301,7 +301,7 @@ SGetSelectionOwnerReply(ClientPtr pClient, int size,
 }
 
 
-void
+_X_EXPORT void
 SQueryPointerReply(ClientPtr pClient, int size, xQueryPointerReply *pRep)
 {
     char n;
@@ -327,7 +327,7 @@ SwapTimecoord(xTimecoord* pCoord)
     swaps(&pCoord->y, n);
 }
 
-void
+_X_EXPORT void
 SwapTimeCoordWrite(ClientPtr pClient, int size, xTimecoord *pRep)
 {
     int	i, n;
@@ -343,7 +343,7 @@ SwapTimeCoordWrite(ClientPtr pClient, int size, xTimecoord *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 
 }
-void
+_X_EXPORT void
 SGetMotionEventsReply(ClientPtr pClient, int size, xGetMotionEventsReply *pRep)
 {
     char n;
@@ -354,7 +354,7 @@ SGetMotionEventsReply(ClientPtr pClient, int size, xGetMotionEventsReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 STranslateCoordsReply(ClientPtr pClient, int size, xTranslateCoordsReply *pRep)
 {
     char n;
@@ -366,7 +366,7 @@ STranslateCoordsReply(ClientPtr pClient, int size, xTranslateCoordsReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetInputFocusReply(ClientPtr pClient, int size, xGetInputFocusReply *pRep)
 {
     char n;
@@ -377,7 +377,7 @@ SGetInputFocusReply(ClientPtr pClient, int size, xGetInputFocusReply *pRep)
 }
 
 /* extra long reply */
-void
+_X_EXPORT void
 SQueryKeymapReply(ClientPtr pClient, int size, xQueryKeymapReply *pRep)
 {
     char n;
@@ -448,14 +448,14 @@ SwapFont(xQueryFontReply *pr, Bool hasGlyphs)
     }
 }
 
-void
+_X_EXPORT void
 SQueryFontReply(ClientPtr pClient, int size, xQueryFontReply *pRep)
 {
     SwapFont(pRep, TRUE);
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SQueryTextExtentsReply(ClientPtr pClient, int size, xQueryTextExtentsReply *pRep)
 {
     char n;
@@ -471,7 +471,7 @@ SQueryTextExtentsReply(ClientPtr pClient, int size, xQueryTextExtentsReply *pRep
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SListFontsReply(ClientPtr pClient, int size, xListFontsReply *pRep)
 {
     char n;
@@ -482,7 +482,7 @@ SListFontsReply(ClientPtr pClient, int size, xListFontsReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SListFontsWithInfoReply(ClientPtr pClient, int size,
                         xListFontsWithInfoReply *pRep)
 {
@@ -490,7 +490,7 @@ SListFontsWithInfoReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetFontPathReply(ClientPtr pClient, int size, xGetFontPathReply *pRep)
 {
     char n;
@@ -501,7 +501,7 @@ SGetFontPathReply(ClientPtr pClient, int size, xGetFontPathReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetImageReply(ClientPtr pClient, int size, xGetImageReply *pRep)
 {
     char n;
@@ -513,7 +513,7 @@ SGetImageReply(ClientPtr pClient, int size, xGetImageReply *pRep)
     /* Fortunately, image doesn't need swapping */
 }
 
-void
+_X_EXPORT void
 SListInstalledColormapsReply(ClientPtr pClient, int size,
                              xListInstalledColormapsReply *pRep)
 {
@@ -525,7 +525,7 @@ SListInstalledColormapsReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SAllocColorReply(pClient, size, pRep)
     ClientPtr		pClient;
     int			size;
@@ -541,7 +541,7 @@ SAllocColorReply(pClient, size, pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SAllocNamedColorReply(ClientPtr pClient, int size, xAllocNamedColorReply *pRep)
 {
     char n;
@@ -557,7 +557,7 @@ SAllocNamedColorReply(ClientPtr pClient, int size, xAllocNamedColorReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SAllocColorCellsReply(ClientPtr pClient, int size, xAllocColorCellsReply *pRep)
 {
     char n;
@@ -570,7 +570,7 @@ SAllocColorCellsReply(ClientPtr pClient, int size, xAllocColorCellsReply *pRep)
 }
 
 
-void
+_X_EXPORT void
 SAllocColorPlanesReply(ClientPtr pClient, int size, xAllocColorPlanesReply *pRep)
 {
     char n;
@@ -594,7 +594,7 @@ SwapRGB(xrgb *prgb)
     swaps(&prgb->blue, n);
 }
 
-void
+_X_EXPORT void
 SQColorsExtend(ClientPtr pClient, int size, xrgb *prgb)
 {
     int		i, n;
@@ -610,7 +610,7 @@ SQColorsExtend(ClientPtr pClient, int size, xrgb *prgb)
     (void)WriteToClient(pClient, size, (char *) prgb);
 }
 
-void
+_X_EXPORT void
 SQueryColorsReply(ClientPtr pClient, int size, xQueryColorsReply* pRep)
 {
     char n;
@@ -621,7 +621,7 @@ SQueryColorsReply(ClientPtr pClient, int size, xQueryColorsReply* pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SLookupColorReply(ClientPtr pClient, int size, xLookupColorReply *pRep)
 {
     char n;
@@ -636,7 +636,7 @@ SLookupColorReply(ClientPtr pClient, int size, xLookupColorReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SQueryBestSizeReply(ClientPtr pClient, int size, xQueryBestSizeReply *pRep)
 {
     char n;
@@ -647,7 +647,7 @@ SQueryBestSizeReply(ClientPtr pClient, int size, xQueryBestSizeReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SListExtensionsReply(ClientPtr pClient, int size, xListExtensionsReply *pRep)
 {
     char n;
@@ -657,7 +657,7 @@ SListExtensionsReply(ClientPtr pClient, int size, xListExtensionsReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetKeyboardMappingReply(ClientPtr pClient, int size,
                          xGetKeyboardMappingReply *pRep)
 {
@@ -668,7 +668,7 @@ SGetKeyboardMappingReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetPointerMappingReply(ClientPtr pClient, int size,
                         xGetPointerMappingReply *pRep)
 {
@@ -679,7 +679,7 @@ SGetPointerMappingReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetModifierMappingReply(ClientPtr pClient, int size,
                          xGetModifierMappingReply *pRep)
 {
@@ -690,7 +690,7 @@ SGetModifierMappingReply(ClientPtr pClient, int size,
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetKeyboardControlReply(ClientPtr pClient, int size, xGetKeyboardControlReply *pRep)
 {
     char n;
@@ -703,7 +703,7 @@ SGetKeyboardControlReply(ClientPtr pClient, int size, xGetKeyboardControlReply *
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetPointerControlReply(ClientPtr pClient, int size, xGetPointerControlReply *pRep)
 {
     char n;
@@ -715,7 +715,7 @@ SGetPointerControlReply(ClientPtr pClient, int size, xGetPointerControlReply *pR
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SGetScreenSaverReply(ClientPtr pClient, int size, xGetScreenSaverReply *pRep)
 {
     char n;
@@ -726,7 +726,7 @@ SGetScreenSaverReply(ClientPtr pClient, int size, xGetScreenSaverReply *pRep)
     (void)WriteToClient(pClient, size, (char *) pRep);
 }
 
-void
+_X_EXPORT void
 SLHostsExtend(ClientPtr pClient, int size, char *buf)
 {
     char *bufT = buf;
@@ -741,7 +741,7 @@ SLHostsExtend(ClientPtr pClient, int size, char *buf)
     (void)WriteToClient (pClient, size, buf);
 }
 
-void
+_X_EXPORT void
 SListHostsReply(ClientPtr pClient, int size, xListHostsReply *pRep)
 {
     char n;
@@ -754,7 +754,7 @@ SListHostsReply(ClientPtr pClient, int size, xListHostsReply *pRep)
 
 
 
-void
+_X_EXPORT void
 SErrorEvent(xError *from, xError *to)
 {
     to->type = X_Error;
@@ -765,7 +765,7 @@ SErrorEvent(xError *from, xError *to)
     to->majorCode = from->majorCode;
 }
 
-void
+_X_EXPORT void
 SKeyButtonPtrEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -793,7 +793,7 @@ SKeyButtonPtrEvent(xEvent *from, xEvent *to)
 	from->u.keyButtonPointer.sameScreen;
 }
 
-void
+_X_EXPORT void
 SEnterLeaveEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -812,7 +812,7 @@ SEnterLeaveEvent(xEvent *from, xEvent *to)
     to->u.enterLeave.flags = from->u.enterLeave.flags;
 }
 
-void
+_X_EXPORT void
 SFocusEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -822,7 +822,7 @@ SFocusEvent(xEvent *from, xEvent *to)
     to->u.focus.mode = from->u.focus.mode;
 }
 
-void
+_X_EXPORT void
 SExposeEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -835,7 +835,7 @@ SExposeEvent(xEvent *from, xEvent *to)
     cpswaps(from->u.expose.count, to->u.expose.count);
 }
 
-void
+_X_EXPORT void
 SGraphicsExposureEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -858,7 +858,7 @@ SGraphicsExposureEvent(xEvent *from, xEvent *to)
     	from->u.graphicsExposure.majorEvent;
 }
 
-void
+_X_EXPORT void
 SNoExposureEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -868,7 +868,7 @@ SNoExposureEvent(xEvent *from, xEvent *to)
     to->u.noExposure.majorEvent = from->u.noExposure.majorEvent;
 }
 
-void
+_X_EXPORT void
 SVisibilityEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -877,7 +877,7 @@ SVisibilityEvent(xEvent *from, xEvent *to)
     to->u.visibility.state = from->u.visibility.state;
 }
 
-void
+_X_EXPORT void
 SCreateNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -893,7 +893,7 @@ SCreateNotifyEvent(xEvent *from, xEvent *to)
     to->u.createNotify.override = from->u.createNotify.override;
 }
 
-void
+_X_EXPORT void
 SDestroyNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -902,7 +902,7 @@ SDestroyNotifyEvent(xEvent *from, xEvent *to)
     cpswapl(from->u.destroyNotify.window, to->u.destroyNotify.window);
 }
 
-void
+_X_EXPORT void
 SUnmapNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -912,7 +912,7 @@ SUnmapNotifyEvent(xEvent *from, xEvent *to)
     to->u.unmapNotify.fromConfigure = from->u.unmapNotify.fromConfigure;
 }
 
-void
+_X_EXPORT void
 SMapNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -922,7 +922,7 @@ SMapNotifyEvent(xEvent *from, xEvent *to)
     to->u.mapNotify.override = from->u.mapNotify.override;
 }
 
-void
+_X_EXPORT void
 SMapRequestEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -931,7 +931,7 @@ SMapRequestEvent(xEvent *from, xEvent *to)
     cpswapl(from->u.mapRequest.window, to->u.mapRequest.window);
 }
 
-void
+_X_EXPORT void
 SReparentEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -944,7 +944,7 @@ SReparentEvent(xEvent *from, xEvent *to)
     to->u.reparent.override = from->u.reparent.override;
 }
 
-void
+_X_EXPORT void
 SConfigureNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -965,7 +965,7 @@ SConfigureNotifyEvent(xEvent *from, xEvent *to)
     to->u.configureNotify.override = from->u.configureNotify.override;
 }
 
-void
+_X_EXPORT void
 SConfigureRequestEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -990,7 +990,7 @@ SConfigureRequestEvent(xEvent *from, xEvent *to)
 }
 
 
-void
+_X_EXPORT void
 SGravityEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1001,7 +1001,7 @@ SGravityEvent(xEvent *from, xEvent *to)
     cpswaps(from->u.gravity.y, to->u.gravity.y);
 }
 
-void
+_X_EXPORT void
 SResizeRequestEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1011,7 +1011,7 @@ SResizeRequestEvent(xEvent *from, xEvent *to)
     cpswaps(from->u.resizeRequest.height, to->u.resizeRequest.height);
 }
 
-void
+_X_EXPORT void
 SCirculateEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1023,7 +1023,7 @@ SCirculateEvent(xEvent *from, xEvent *to)
     to->u.circulate.place = from->u.circulate.place;
 }
 
-void
+_X_EXPORT void
 SPropertyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1034,7 +1034,7 @@ SPropertyEvent(xEvent *from, xEvent *to)
     to->u.property.state = from->u.property.state;
 }
 
-void
+_X_EXPORT void
 SSelectionClearEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1044,7 +1044,7 @@ SSelectionClearEvent(xEvent *from, xEvent *to)
     cpswapl(from->u.selectionClear.atom, to->u.selectionClear.atom);
 }
 
-void
+_X_EXPORT void
 SSelectionRequestEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1062,7 +1062,7 @@ SSelectionRequestEvent(xEvent *from, xEvent *to)
 	to->u.selectionRequest.property);
 }
 
-void
+_X_EXPORT void
 SSelectionNotifyEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1078,7 +1078,7 @@ SSelectionNotifyEvent(xEvent *from, xEvent *to)
         to->u.selectionNotify.property);
 }
 
-void
+_X_EXPORT void
 SColormapEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1089,7 +1089,7 @@ SColormapEvent(xEvent *from, xEvent *to)
     to->u.colormap.state = from->u.colormap.state;
 }
 
-void
+_X_EXPORT void
 SMappingEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1100,7 +1100,7 @@ SMappingEvent(xEvent *from, xEvent *to)
     to->u.mappingNotify.count = from->u.mappingNotify.count;
 }
 
-void
+_X_EXPORT void
 SClientMessageEvent(xEvent *from, xEvent *to)
 {
     to->u.u.type = from->u.u.type;
@@ -1151,7 +1151,7 @@ SClientMessageEvent(xEvent *from, xEvent *to)
        }
 }
 
-void
+_X_EXPORT void
 SKeymapNotifyEvent(xEvent *from, xEvent *to)
 {
     /* Keymap notify events are special; they have no
@@ -1262,7 +1262,7 @@ SwapConnSetupInfo(
     }
 }
 
-void
+_X_EXPORT void
 WriteSConnectionInfo(ClientPtr pClient, unsigned long size, char *pInfo)
 {
     char	*pInfoTBase;
@@ -1288,7 +1288,7 @@ SwapConnSetupPrefix(xConnSetupPrefix *pcspFrom, xConnSetupPrefix *pcspTo)
     cpswaps(pcspFrom->length, pcspTo->length);
 }
 
-void
+_X_EXPORT void
 WriteSConnSetupPrefix(ClientPtr pClient, xConnSetupPrefix *pcsp)
 {
     xConnSetupPrefix	cspT;
diff --git a/dix/swapreq.c b/dix/swapreq.c
index ad60d17..1b90351 100644
--- a/dix/swapreq.c
+++ b/dix/swapreq.c
@@ -123,7 +123,7 @@ SwapShorts (short *list, unsigned long count)
 
 /* The following is used for all requests that have
    no fields to be swapped (except "length") */
-int
+_X_EXPORT int
 SProcSimpleReq(ClientPtr client)
 {
     char n;
@@ -136,7 +136,7 @@ SProcSimpleReq(ClientPtr client)
 /* The following is used for all requests that have
    only a single 32-bit field to be swapped, coming
    right after the "length" field */
-int
+_X_EXPORT int
 SProcResourceReq(ClientPtr client)
 {
     char n;
@@ -148,7 +148,7 @@ SProcResourceReq(ClientPtr client)
     return(*ProcVector[stuff->reqType])(client);
 }
 
-int
+_X_EXPORT int
 SProcCreateWindow(ClientPtr client)
 {
     char n;
@@ -170,7 +170,7 @@ SProcCreateWindow(ClientPtr client)
     return((* ProcVector[X_CreateWindow])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeWindowAttributes(ClientPtr client)
 {
     char n;
@@ -184,7 +184,7 @@ SProcChangeWindowAttributes(ClientPtr client)
     return((* ProcVector[X_ChangeWindowAttributes])(client));
 }
 
-int
+_X_EXPORT int
 SProcReparentWindow(ClientPtr client)
 {
     char n;
@@ -198,7 +198,7 @@ SProcReparentWindow(ClientPtr client)
     return((* ProcVector[X_ReparentWindow])(client));
 }
 
-int
+_X_EXPORT int
 SProcConfigureWindow(ClientPtr client)
 {
     char n;
@@ -213,7 +213,7 @@ SProcConfigureWindow(ClientPtr client)
 }
 
 
-int
+_X_EXPORT int
 SProcInternAtom(ClientPtr client)
 {
     char n;
@@ -224,7 +224,7 @@ SProcInternAtom(ClientPtr client)
     return((* ProcVector[X_InternAtom])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeProperty(ClientPtr client)
 {
     char n;
@@ -248,7 +248,7 @@ SProcChangeProperty(ClientPtr client)
     return((* ProcVector[X_ChangeProperty])(client));
 }
 
-int 
+_X_EXPORT int 
 SProcDeleteProperty(ClientPtr client)
 {
     char n;
@@ -261,7 +261,7 @@ SProcDeleteProperty(ClientPtr client)
               
 }
 
-int 
+_X_EXPORT int 
 SProcGetProperty(ClientPtr client)
 {
     char n;
@@ -276,7 +276,7 @@ SProcGetProperty(ClientPtr client)
     return((* ProcVector[X_GetProperty])(client));
 }
 
-int
+_X_EXPORT int
 SProcSetSelectionOwner(ClientPtr client)
 {
     char n;
@@ -289,7 +289,7 @@ SProcSetSelectionOwner(ClientPtr client)
     return((* ProcVector[X_SetSelectionOwner])(client));
 }
 
-int
+_X_EXPORT int
 SProcConvertSelection(ClientPtr client)
 {
     char n;
@@ -304,7 +304,7 @@ SProcConvertSelection(ClientPtr client)
     return((* ProcVector[X_ConvertSelection])(client));
 }
 
-int
+_X_EXPORT int
 SProcSendEvent(ClientPtr client)
 {
     char n;
@@ -326,7 +326,7 @@ SProcSendEvent(ClientPtr client)
     return((* ProcVector[X_SendEvent])(client));
 }
 
-int
+_X_EXPORT int
 SProcGrabPointer(ClientPtr client)
 {
     char n;
@@ -341,7 +341,7 @@ SProcGrabPointer(ClientPtr client)
     return((* ProcVector[X_GrabPointer])(client));
 }
 
-int
+_X_EXPORT int
 SProcGrabButton(ClientPtr client)
 {
     char n;
@@ -356,7 +356,7 @@ SProcGrabButton(ClientPtr client)
     return((* ProcVector[X_GrabButton])(client));
 }
 
-int
+_X_EXPORT int
 SProcUngrabButton(ClientPtr client)
 {
     char n;
@@ -368,7 +368,7 @@ SProcUngrabButton(ClientPtr client)
     return((* ProcVector[X_UngrabButton])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeActivePointerGrab(ClientPtr client)
 {
     char n;
@@ -381,7 +381,7 @@ SProcChangeActivePointerGrab(ClientPtr client)
     return((* ProcVector[X_ChangeActivePointerGrab])(client));
 }
 
-int
+_X_EXPORT int
 SProcGrabKeyboard(ClientPtr client)
 {
     char n;
@@ -393,7 +393,7 @@ SProcGrabKeyboard(ClientPtr client)
     return((* ProcVector[X_GrabKeyboard])(client));
 }
 
-int
+_X_EXPORT int
 SProcGrabKey(ClientPtr client)
 {
     char n;
@@ -405,7 +405,7 @@ SProcGrabKey(ClientPtr client)
     return((* ProcVector[X_GrabKey])(client));
 }
 
-int
+_X_EXPORT int
 SProcUngrabKey(ClientPtr client)
 {
     char n;
@@ -417,7 +417,7 @@ SProcUngrabKey(ClientPtr client)
     return((* ProcVector[X_UngrabKey])(client));
 }
 
-int
+_X_EXPORT int
 SProcGetMotionEvents(ClientPtr client)
 {
     char n;
@@ -430,7 +430,7 @@ SProcGetMotionEvents(ClientPtr client)
     return((* ProcVector[X_GetMotionEvents])(client));
 }
 
-int
+_X_EXPORT int
 SProcTranslateCoords(ClientPtr client)
 {
     char n;
@@ -444,7 +444,7 @@ SProcTranslateCoords(ClientPtr client)
     return((* ProcVector[X_TranslateCoords])(client));
 }
 
-int
+_X_EXPORT int
 SProcWarpPointer(ClientPtr client)
 {
     char n;
@@ -462,7 +462,7 @@ SProcWarpPointer(ClientPtr client)
     return((* ProcVector[X_WarpPointer])(client));
 }
 
-int
+_X_EXPORT int
 SProcSetInputFocus(ClientPtr client)
 {
     char n;
@@ -474,7 +474,7 @@ SProcSetInputFocus(ClientPtr client)
     return((* ProcVector[X_SetInputFocus])(client));
 }
 
-int
+_X_EXPORT int
 SProcOpenFont(ClientPtr client)
 {
     char n;
@@ -486,7 +486,7 @@ SProcOpenFont(ClientPtr client)
     return((* ProcVector[X_OpenFont])(client));
 }
 
-int
+_X_EXPORT int
 SProcListFonts(ClientPtr client)
 {
     char n;
@@ -498,7 +498,7 @@ SProcListFonts(ClientPtr client)
     return((* ProcVector[X_ListFonts])(client));
 }
 
-int
+_X_EXPORT int
 SProcListFontsWithInfo(ClientPtr client)
 {
     char n;
@@ -510,7 +510,7 @@ SProcListFontsWithInfo(ClientPtr client)
     return((* ProcVector[X_ListFontsWithInfo])(client));
 }
 
-int
+_X_EXPORT int
 SProcSetFontPath(ClientPtr client)
 {
     char n;
@@ -521,7 +521,7 @@ SProcSetFontPath(ClientPtr client)
     return((* ProcVector[X_SetFontPath])(client));
 }
 
-int
+_X_EXPORT int
 SProcCreatePixmap(ClientPtr client)
 {
     char n;
@@ -536,7 +536,7 @@ SProcCreatePixmap(ClientPtr client)
     return((* ProcVector[X_CreatePixmap])(client));
 }
 
-int
+_X_EXPORT int
 SProcCreateGC(ClientPtr client)
 {
     char n;
@@ -550,7 +550,7 @@ SProcCreateGC(ClientPtr client)
     return((* ProcVector[X_CreateGC])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeGC(ClientPtr client)
 {
     char n;
@@ -563,7 +563,7 @@ SProcChangeGC(ClientPtr client)
     return((* ProcVector[X_ChangeGC])(client));
 }
 
-int
+_X_EXPORT int
 SProcCopyGC(ClientPtr client)
 {
     char n;
@@ -576,7 +576,7 @@ SProcCopyGC(ClientPtr client)
     return((* ProcVector[X_CopyGC])(client));
 }
 
-int
+_X_EXPORT int
 SProcSetDashes(ClientPtr client)
 {
     char n;
@@ -590,7 +590,7 @@ SProcSetDashes(ClientPtr client)
 
 }
 
-int
+_X_EXPORT int
 SProcSetClipRectangles(ClientPtr client)
 {
     char n;
@@ -604,7 +604,7 @@ SProcSetClipRectangles(ClientPtr client)
     return((* ProcVector[X_SetClipRectangles])(client));
 }
 
-int
+_X_EXPORT int
 SProcClearToBackground(ClientPtr client)
 {
     char n;
@@ -619,7 +619,7 @@ SProcClearToBackground(ClientPtr client)
     return((* ProcVector[X_ClearArea])(client));
 }
 
-int
+_X_EXPORT int
 SProcCopyArea(ClientPtr client)
 {
     char n;
@@ -638,7 +638,7 @@ SProcCopyArea(ClientPtr client)
     return((* ProcVector[X_CopyArea])(client));
 }
 
-int
+_X_EXPORT int
 SProcCopyPlane(ClientPtr client)
 {
     char n;
@@ -660,7 +660,7 @@ SProcCopyPlane(ClientPtr client)
 
 /* The following routine is used for all Poly drawing requests
    (except FillPoly, which uses a different request format) */
-int
+_X_EXPORT int
 SProcPoly(ClientPtr client)
 {
     char n;
@@ -677,7 +677,7 @@ SProcPoly(ClientPtr client)
 /* cannot use SProcPoly for this one, because xFillPolyReq
    is longer than xPolyPointReq, and we don't want to swap
    the difference as shorts! */
-int
+_X_EXPORT int
 SProcFillPoly(ClientPtr client)
 {
     char n;
@@ -691,7 +691,7 @@ SProcFillPoly(ClientPtr client)
     return((* ProcVector[X_FillPoly])(client));
 }
 
-int
+_X_EXPORT int
 SProcPutImage(ClientPtr client)
 {
     char n;
@@ -709,7 +709,7 @@ SProcPutImage(ClientPtr client)
 
 }
 
-int
+_X_EXPORT int
 SProcGetImage(ClientPtr client)
 {
     char n;
@@ -727,7 +727,7 @@ SProcGetImage(ClientPtr client)
 
 /* ProcPolyText used for both PolyText8 and PolyText16 */
 
-int
+_X_EXPORT int
 SProcPolyText(ClientPtr client)
 {
     char n;
@@ -743,7 +743,7 @@ SProcPolyText(ClientPtr client)
 
 /* ProcImageText used for both ImageText8 and ImageText16 */
 
-int
+_X_EXPORT int
 SProcImageText(ClientPtr client)
 {
     char n;
@@ -757,7 +757,7 @@ SProcImageText(ClientPtr client)
     return((* ProcVector[stuff->reqType])(client));
 }
 
-int
+_X_EXPORT int
 SProcCreateColormap(ClientPtr client)
 {
     char n;
@@ -771,7 +771,7 @@ SProcCreateColormap(ClientPtr client)
 }
 
 
-int
+_X_EXPORT int
 SProcCopyColormapAndFree(ClientPtr client)
 {
     char n;
@@ -784,7 +784,7 @@ SProcCopyColormapAndFree(ClientPtr client)
 
 }
 
-int
+_X_EXPORT int
 SProcAllocColor(ClientPtr client)
 {
     char n;
@@ -798,7 +798,7 @@ SProcAllocColor(ClientPtr client)
     return((* ProcVector[X_AllocColor])(client));
 }
 
-int
+_X_EXPORT int
 SProcAllocNamedColor(ClientPtr client)
 {
     char n;
@@ -811,7 +811,7 @@ SProcAllocNamedColor(ClientPtr client)
     return((* ProcVector[X_AllocNamedColor])(client));
 }
 
-int
+_X_EXPORT int
 SProcAllocColorCells(ClientPtr client)
 {
     char n;
@@ -824,7 +824,7 @@ SProcAllocColorCells(ClientPtr client)
     return((* ProcVector[X_AllocColorCells])(client));
 }
 
-int
+_X_EXPORT int
 SProcAllocColorPlanes(ClientPtr client)
 {
     char n;
@@ -839,7 +839,7 @@ SProcAllocColorPlanes(ClientPtr client)
     return((* ProcVector[X_AllocColorPlanes])(client));
 }
 
-int
+_X_EXPORT int
 SProcFreeColors(ClientPtr client)
 {
     char n;
@@ -864,7 +864,7 @@ SwapColorItem(xColorItem *pItem)
     swaps(&pItem->blue, n);
 }
 
-int
+_X_EXPORT int
 SProcStoreColors(ClientPtr client)
 {
     char n;
@@ -881,7 +881,7 @@ SProcStoreColors(ClientPtr client)
     return((* ProcVector[X_StoreColors])(client));
 }
 
-int
+_X_EXPORT int
 SProcStoreNamedColor (ClientPtr client)
 {
     char n;
@@ -894,7 +894,7 @@ SProcStoreNamedColor (ClientPtr client)
     return((* ProcVector[X_StoreNamedColor])(client));
 }
 
-int
+_X_EXPORT int
 SProcQueryColors (ClientPtr client)
 {
     char n;
@@ -906,7 +906,7 @@ SProcQueryColors (ClientPtr client)
     return((* ProcVector[X_QueryColors])(client));
 } 
 
-int
+_X_EXPORT int
 SProcLookupColor (ClientPtr client)
 {
     char n;
@@ -918,7 +918,7 @@ SProcLookupColor (ClientPtr client)
     return((* ProcVector[X_LookupColor])(client));
 }
 
-int
+_X_EXPORT int
 SProcCreateCursor (ClientPtr client)
 {
     char n;
@@ -939,7 +939,7 @@ SProcCreateCursor (ClientPtr client)
     return((* ProcVector[X_CreateCursor])(client));
 }
 
-int
+_X_EXPORT int
 SProcCreateGlyphCursor (ClientPtr client)
 {
     char n;
@@ -961,7 +961,7 @@ SProcCreateGlyphCursor (ClientPtr client)
 }
 
 
-int
+_X_EXPORT int
 SProcRecolorCursor (ClientPtr client)
 {
     char n;
@@ -978,7 +978,7 @@ SProcRecolorCursor (ClientPtr client)
     return((* ProcVector[X_RecolorCursor])(client));
 }
 
-int
+_X_EXPORT int
 SProcQueryBestSize (ClientPtr client)
 {
     char n;
@@ -992,7 +992,7 @@ SProcQueryBestSize (ClientPtr client)
 
 }
 
-int
+_X_EXPORT int
 SProcQueryExtension (ClientPtr client)
 {
     char n;
@@ -1003,7 +1003,7 @@ SProcQueryExtension (ClientPtr client)
     return((* ProcVector[X_QueryExtension])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeKeyboardMapping (ClientPtr client)
 {
     char n;
@@ -1015,7 +1015,7 @@ SProcChangeKeyboardMapping (ClientPtr client)
 }
 
 
-int
+_X_EXPORT int
 SProcChangeKeyboardControl (ClientPtr client)
 {
     char n;
@@ -1027,7 +1027,7 @@ SProcChangeKeyboardControl (ClientPtr client)
     return((* ProcVector[X_ChangeKeyboardControl])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangePointerControl (ClientPtr client)
 {
     char n;
@@ -1041,7 +1041,7 @@ SProcChangePointerControl (ClientPtr client)
 }
 
 
-int
+_X_EXPORT int
 SProcSetScreenSaver (ClientPtr client)
 {
     char n;
@@ -1053,7 +1053,7 @@ SProcSetScreenSaver (ClientPtr client)
     return((* ProcVector[X_SetScreenSaver])(client));
 }
 
-int
+_X_EXPORT int
 SProcChangeHosts (ClientPtr client)
 {
     char n;
@@ -1066,7 +1066,7 @@ SProcChangeHosts (ClientPtr client)
 
 }
 
-int SProcRotateProperties (ClientPtr client)
+_X_EXPORT int SProcRotateProperties (ClientPtr client)
 {
     char n;
     REQUEST(xRotatePropertiesReq);
@@ -1079,7 +1079,7 @@ int SProcRotateProperties (ClientPtr client)
     return ((* ProcVector[X_RotateProperties])(client));
 }
 
-int
+_X_EXPORT int
 SProcNoOperation(ClientPtr client)
 {
     char n;
@@ -1088,7 +1088,7 @@ SProcNoOperation(ClientPtr client)
     return ((* ProcVector[X_NoOperation])(client));
 }
 
-void
+_X_EXPORT void
 SwapConnClientPrefix(xConnClientPrefix *pCCP)
 {
     char n;
diff --git a/dix/tables.c b/dix/tables.c
index e4f9366..3a1616d 100644
--- a/dix/tables.c
+++ b/dix/tables.c
@@ -61,7 +61,7 @@ SOFTWARE.
 #include "swaprep.h"
 #include "swapreq.h"
 
-int (* InitialVector[3]) (
+_X_EXPORT int (* InitialVector[3]) (
 	ClientPtr /* client */
     ) =
 {
@@ -70,7 +70,7 @@ int (* InitialVector[3]) (
     ProcEstablishConnection
 };
 
-int (* ProcVector[256]) (
+_X_EXPORT int (* ProcVector[256]) (
 	ClientPtr /* client */
     ) =
 {
@@ -204,7 +204,7 @@ int (* ProcVector[256]) (
     ProcNoOperation    
 };
 
-int (* SwappedProcVector[256]) (
+_X_EXPORT int (* SwappedProcVector[256]) (
 	ClientPtr /* client */
     ) =
 {
@@ -378,7 +378,7 @@ _X_EXPORT EventSwapPtr EventSwapVector[128] =
 };
 
 
-ReplySwapPtr ReplySwapVector[256] =
+_X_EXPORT ReplySwapPtr ReplySwapVector[256] =
 {
     ReplyNotSwappd,
     ReplyNotSwappd,
diff --git a/dix/window.c b/dix/window.c
index c31fa87..08afa45 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -263,10 +263,10 @@ WalkTree(ScreenPtr pScreen, VisitWindowProcPtr func, pointer data)
 }
 
 /* hack for forcing backing store on all windows */
-int	defaultBackingStore = NotUseful;
+_X_EXPORT int	defaultBackingStore = NotUseful;
 /* hack to force no backing store */
-Bool	disableBackingStore = FALSE;
-Bool	enableBackingStore = FALSE;
+_X_EXPORT Bool	disableBackingStore = FALSE;
+_X_EXPORT Bool	enableBackingStore = FALSE;
 
 static void
 SetWindowToDefaults(WindowPtr pWin)
@@ -356,7 +356,7 @@ MakeRootTile(WindowPtr pWin)
  *    Makes a window at initialization time for specified screen
  *****/
 
-Bool
+_X_EXPORT Bool
 CreateRootWindow(ScreenPtr pScreen)
 {
     WindowPtr	pWin;
@@ -469,7 +469,7 @@ CreateRootWindow(ScreenPtr pScreen)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 InitRootWindow(WindowPtr pWin)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -540,14 +540,14 @@ ClippedRegionFromBox(WindowPtr pWin, RegionPtr Rgn,
 
 static RealChildHeadProc realChildHeadProc = NULL;
 
-void
+_X_EXPORT void
 RegisterRealChildHeadProc (RealChildHeadProc proc)
 {
     realChildHeadProc = proc;
 }
 
 
-WindowPtr
+_X_EXPORT WindowPtr
 RealChildHead(WindowPtr pWin)
 {
     if (realChildHeadProc) {
@@ -933,7 +933,7 @@ CrushTree(WindowPtr pWin)
  *	 If wid is None, don't send any events
  *****/
 
-int
+_X_EXPORT int
 DeleteWindow(pointer value, XID wid)
  {
     WindowPtr pParent;
@@ -970,7 +970,7 @@ DeleteWindow(pointer value, XID wid)
     return Success;
 }
 
-int
+_X_EXPORT int
 DestroySubwindows(WindowPtr pWin, ClientPtr client)
 {
     /* XXX
@@ -1480,7 +1480,7 @@ PatchUp:
  *    Notice that this is different than ChangeWindowAttributes
  *****/
 
-void
+_X_EXPORT void
 GetWindowAttributes(WindowPtr pWin, ClientPtr client, xGetWindowAttributesReply *wa)
 {
     wa->type = X_Reply;
@@ -1516,7 +1516,7 @@ GetWindowAttributes(WindowPtr pWin, ClientPtr client, xGetWindowAttributesReply
 }
 
 
-WindowPtr
+_X_EXPORT WindowPtr
 MoveWindowInStack(WindowPtr pWin, WindowPtr pNextSib)
 {
     WindowPtr pParent = pWin->parent;
@@ -1626,7 +1626,7 @@ CreateUnclippedWinSize (WindowPtr pWin)
     return pRgn;
 }
 
-void
+_X_EXPORT void
 SetWinSize (WindowPtr pWin)
 {
 #ifdef COMPOSITE
@@ -1667,7 +1667,7 @@ SetWinSize (WindowPtr pWin)
     }
 }
 
-void
+_X_EXPORT void
 SetBorderSize (WindowPtr pWin)
 {
     int	bw;
@@ -1771,7 +1771,7 @@ GravityTranslate (int x, int y, int oldx, int oldy,
 }
 
 /* XXX need to retile border on each window with ParentRelative origin */
-void
+_X_EXPORT void
 ResizeChildrenWinSize(WindowPtr pWin, int dx, int dy, int dw, int dh)
 {
     ScreenPtr pScreen;
@@ -2165,7 +2165,7 @@ ReflectStackChange(
  * ConfigureWindow
  *****/
 
-int
+_X_EXPORT int
 ConfigureWindow(WindowPtr pWin, Mask mask, XID *vlist, ClientPtr client)
 {
 #define RESTACK_WIN    0
@@ -2427,7 +2427,7 @@ ActuallyDoSomething:
  *
  ******/
 
-int
+_X_EXPORT int
 CirculateWindow(WindowPtr pParent, int direction, ClientPtr client)
 {
     WindowPtr pWin, pHead, pFirst;
@@ -2499,7 +2499,7 @@ CompareWIDs(
  *  ReparentWindow
  *****/
 
-int
+_X_EXPORT int
 ReparentWindow(WindowPtr pWin, WindowPtr pParent,
                int x, int y, ClientPtr client)
 {
@@ -2622,7 +2622,7 @@ RealizeTree(WindowPtr pWin)
 
 static WindowPtr windowDisableMapUnmapEvents;
 
-void
+_X_EXPORT void
 DisableMapUnmapEvents(WindowPtr pWin)
 {
     assert (windowDisableMapUnmapEvents == NULL);
@@ -2630,7 +2630,7 @@ DisableMapUnmapEvents(WindowPtr pWin)
     windowDisableMapUnmapEvents = pWin;
 }
 
-void
+_X_EXPORT void
 EnableMapUnmapEvents(WindowPtr pWin)
 {
     assert (windowDisableMapUnmapEvents != NULL);
@@ -2742,7 +2742,7 @@ MapWindow(WindowPtr pWin, ClientPtr client)
  *    to bottom stacking order.
  *****/
 
-void
+_X_EXPORT void
 MapSubwindows(WindowPtr pParent, ClientPtr client)
 {
     WindowPtr	pWin;
@@ -2923,7 +2923,7 @@ UnmapWindow(WindowPtr pWin, Bool fromConfigure)
  *    children of the window, in bottom to top stacking order.
  *****/
 
-void
+_X_EXPORT void
 UnmapSubwindows(WindowPtr pWin)
 {
     WindowPtr pChild, pHead;
@@ -3001,7 +3001,7 @@ UnmapSubwindows(WindowPtr pWin)
 }
 
 
-void
+_X_EXPORT void
 HandleSaveSet(ClientPtr client)
 {
     WindowPtr pParent, pWin;
@@ -3051,7 +3051,7 @@ HandleSaveSet(ClientPtr client)
  *
  * \param x,y  in root
  */
-Bool
+_X_EXPORT Bool
 PointInWindowIsVisible(WindowPtr pWin, int x, int y)
 {
     BoxRec box;
@@ -3087,7 +3087,7 @@ NotClippedByChildren(WindowPtr pWin)
     return(pReg);
 }
 
-void
+_X_EXPORT void
 SendVisibilityNotify(WindowPtr pWin)
 {
     xEvent event;
diff --git a/exa/exa.c b/exa/exa.c
index f7dbbcd..f7eea73 100644
--- a/exa/exa.c
+++ b/exa/exa.c
@@ -76,7 +76,7 @@ exaGetPixmapOffset(PixmapPtr pPix)
 	    (unsigned long)pExaScr->info->memoryBase);
 }
 
-void *
+_X_EXPORT void *
 exaGetPixmapDriverPrivate(PixmapPtr pPix)
 {
     ExaPixmapPriv(pPix);
@@ -100,7 +100,7 @@ exaGetPixmapPitch(PixmapPtr pPix)
  * exaGetPixmapSize() returns the size in bytes of the given pixmap in video
  * memory. Only valid when the pixmap is currently in framebuffer.
  */
-unsigned long
+_X_EXPORT unsigned long
 exaGetPixmapSize(PixmapPtr pPix)
 {
     ExaPixmapPrivPtr pExaPixmap;
@@ -463,7 +463,7 @@ exaPixmapIsOffscreen(PixmapPtr p)
 /**
  * exaDrawableIsOffscreen() is a convenience wrapper for exaPixmapIsOffscreen().
  */
-Bool
+_X_EXPORT Bool
 exaDrawableIsOffscreen (DrawablePtr pDrawable)
 {
     return exaPixmapIsOffscreen (exaGetDrawablePixmap (pDrawable));
diff --git a/exa/exa_migration.c b/exa/exa_migration.c
index 7b41f4d..f31cce3 100644
--- a/exa/exa_migration.c
+++ b/exa/exa_migration.c
@@ -389,7 +389,7 @@ exaDoMoveOutPixmap (ExaMigrationPtr migrate)
     }
 }
 
-void
+_X_EXPORT void
 exaMoveOutPixmap (PixmapPtr pPixmap)
 {
     static ExaMigrationRec migrate = { .as_dst = FALSE, .as_src = TRUE,
diff --git a/fb/fb24_32.c b/fb/fb24_32.c
index 1ebd598..0f874f0 100644
--- a/fb/fb24_32.c
+++ b/fb/fb24_32.c
@@ -265,7 +265,7 @@ fb24_32BltUp (CARD8	    *srcLine,
 /*
  * Spans functions; probably unused.
  */
-void
+_X_EXPORT void
 fb24_32GetSpans(DrawablePtr	pDrawable, 
 		int		wMax, 
 		DDXPointPtr	ppt, 
@@ -308,7 +308,7 @@ fb24_32GetSpans(DrawablePtr	pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fb24_32SetSpans (DrawablePtr	    pDrawable,
 		 GCPtr		    pGC,
 		 char		    *src,
@@ -374,7 +374,7 @@ fb24_32SetSpans (DrawablePtr	    pDrawable,
 /*
  * Clip and put 32bpp Z-format images to a 24bpp drawable
  */
-void
+_X_EXPORT void
 fb24_32PutZImage (DrawablePtr	pDrawable,
 		  RegionPtr	pClip,
 		  int		alu,
@@ -436,7 +436,7 @@ fb24_32PutZImage (DrawablePtr	pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fb24_32GetImage (DrawablePtr     pDrawable,
 		 int             x,
 		 int             y,
@@ -472,7 +472,7 @@ fb24_32GetImage (DrawablePtr     pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fb24_32CopyMtoN (DrawablePtr pSrcDrawable,
 		 DrawablePtr pDstDrawable,
 		 GCPtr       pGC,
@@ -531,7 +531,7 @@ fb24_32CopyMtoN (DrawablePtr pSrcDrawable,
     fbFinishAccess (pDstDrawable);
 }
 
-PixmapPtr
+_X_EXPORT PixmapPtr
 fb24_32ReformatTile(PixmapPtr pOldTile, int bitsPerPixel)
 {
     ScreenPtr	pScreen = pOldTile->drawable.pScreen;
@@ -583,7 +583,7 @@ typedef struct {
     int width;   
 } miScreenInitParmsRec, *miScreenInitParmsPtr;
 
-Bool
+_X_EXPORT Bool
 fb24_32CreateScreenResources(ScreenPtr pScreen)
 {
     miScreenInitParmsPtr pScrInitParms;
@@ -604,7 +604,7 @@ fb24_32CreateScreenResources(ScreenPtr pScreen)
     return retval;
 }
 
-Bool
+_X_EXPORT Bool
 fb24_32ModifyPixmapHeader (PixmapPtr   pPixmap,
 			   int         width,
 			   int         height,
diff --git a/fb/fballpriv.c b/fb/fballpriv.c
index c40796c..4296006 100644
--- a/fb/fballpriv.c
+++ b/fb/fballpriv.c
@@ -29,7 +29,7 @@
 #ifdef FB_SCREEN_PRIVATE
 static int fbScreenPrivateKeyIndex;
 static DevPrivateKey fbScreenPrivateKey = &fbScreenPrivateKeyIndex;
-DevPrivateKey fbGetScreenPrivateKey(void)
+_X_EXPORT DevPrivateKey fbGetScreenPrivateKey(void)
 {
     return fbScreenPrivateKey;
 }
@@ -37,19 +37,19 @@ DevPrivateKey fbGetScreenPrivateKey(void)
 
 static int fbGCPrivateKeyIndex;
 static DevPrivateKey fbGCPrivateKey = &fbGCPrivateKeyIndex;
-DevPrivateKey fbGetGCPrivateKey(void)
+_X_EXPORT DevPrivateKey fbGetGCPrivateKey(void)
 {
     return fbGCPrivateKey;
 }
 
 static int fbWinPrivateKeyIndex;
 static DevPrivateKey fbWinPrivateKey = &fbWinPrivateKeyIndex;
-DevPrivateKey fbGetWinPrivateKey(void)
+_X_EXPORT DevPrivateKey fbGetWinPrivateKey(void)
 {
     return fbWinPrivateKey;
 }
 
-Bool
+_X_EXPORT Bool
 fbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCKey)
 {
     if (pGCKey)
@@ -71,6 +71,6 @@ fbAllocatePrivates(ScreenPtr pScreen, DevPrivateKey *pGCKey)
 }
 
 #ifdef FB_ACCESS_WRAPPER
-ReadMemoryProcPtr wfbReadMemory;
-WriteMemoryProcPtr wfbWriteMemory;
+_X_EXPORT ReadMemoryProcPtr wfbReadMemory;
+_X_EXPORT WriteMemoryProcPtr wfbWriteMemory;
 #endif
diff --git a/fb/fbarc.c b/fb/fbarc.c
index 3a8a2c5..2597368 100644
--- a/fb/fbarc.c
+++ b/fb/fbarc.c
@@ -37,7 +37,7 @@ typedef void	(*FbArc) (FbBits    *dst,
 			  FbBits    and, 
 			  FbBits    xor);
 
-void
+_X_EXPORT void
 fbPolyArc (DrawablePtr	pDrawable,
 	   GCPtr	pGC,
 	   int		narcs,
diff --git a/fb/fbblt.c b/fb/fbblt.c
index 38271c0..6c9d50c 100644
--- a/fb/fbblt.c
+++ b/fb/fbblt.c
@@ -39,7 +39,7 @@
     } \
 }
 
-void
+_X_EXPORT void
 fbBlt (FbBits   *srcLine,
        FbStride	srcStride,
        int	srcX,
@@ -568,7 +568,7 @@ fbBlt24Line (FbBits	    *src,
 #endif
 }
 
-void
+_X_EXPORT void
 fbBlt24 (FbBits	    *srcLine,
 	 FbStride   srcStride,
 	 int	    srcX,
@@ -873,7 +873,7 @@ fbSetBltOdd (FbStip	*stip,
 }
 #endif
 
-void
+_X_EXPORT void
 fbBltStip (FbStip   *src,
 	   FbStride srcStride,	    /* in FbStip units, not FbBits units */
 	   int	    srcX,
diff --git a/fb/fbbltone.c b/fb/fbbltone.c
index ffe6977..ec9300f 100644
--- a/fb/fbbltone.c
+++ b/fb/fbbltone.c
@@ -78,7 +78,7 @@
 #endif
 							   
 #if FB_SHIFT == 6
-CARD8	fb8Lane[256] = {
+_X_EXPORT CARD8	fb8Lane[256] = {
 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
@@ -95,33 +95,33 @@ CARD8	fb8Lane[256] = {
 242, 243, 244,245,246,247,248,249,250,251,252,253,254,255,
 };
 
-CARD8	fb16Lane[256] = {
+_X_EXPORT CARD8	fb16Lane[256] = {
     0x00, 0x03, 0x0c, 0x0f,
     0x30, 0x33, 0x3c, 0x3f,
     0xc0, 0xc3, 0xcc, 0xcf,
     0xf0, 0xf3, 0xfc, 0xff,
 };
 
-CARD8	fb32Lane[16] = {
+_X_EXPORT CARD8	fb32Lane[16] = {
     0x00, 0x0f, 0xf0, 0xff,
 };
 #endif
 
 #if FB_SHIFT == 5
-CARD8	fb8Lane[16] = {
+_X_EXPORT CARD8	fb8Lane[16] = {
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
 };
 
-CARD8	fb16Lane[16] = {
+_X_EXPORT CARD8	fb16Lane[16] = {
     0, 3, 12, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
 };
 
-CARD8	fb32Lane[16] = {
+_X_EXPORT CARD8	fb32Lane[16] = {
     0, 15,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 };
 #endif
 
-CARD8	*fbLaneTable[33] = {
+_X_EXPORT CARD8	*fbLaneTable[33] = {
     0, 0, 0, 0, 0, 0, 0, 0,
     fb8Lane,  0, 0, 0, 0, 0, 0, 0, 
     fb16Lane, 0, 0, 0, 0, 0, 0, 0,
@@ -130,7 +130,7 @@ CARD8	*fbLaneTable[33] = {
 };
 #endif
 
-void
+_X_EXPORT void
 fbBltOne (FbStip    *src,
 	  FbStride  srcStride,	    /* FbStip units per scanline */
 	  int	    srcX,	    /* bit position of source */
@@ -457,7 +457,7 @@ fbBltOne (FbStip    *src,
 #define FbStip24New(rot)    (2 + (rot != 0))
 #define FbStip24Len	    4
 
-const FbBits	fbStipple24Bits[3][1 << FbStip24Len] = {
+_X_EXPORT const FbBits	fbStipple24Bits[3][1 << FbStip24Len] = {
     /* rotate 0 */
     {
 	C4_24( 0, 0), C4_24( 1, 0), C4_24( 2, 0), C4_24( 3, 0),
@@ -569,7 +569,7 @@ const FbBits	fbStipple24Bits[3][1 << FbStip24Len] = {
  * have no acceleration so this code is used for stipples, copyplane
  * and text
  */
-void
+_X_EXPORT void
 fbBltOne24 (FbStip	*srcLine,
 	    FbStride	srcStride,  /* FbStip units per scanline */
 	    int		srcX,	    /* bit position of source */
@@ -754,7 +754,7 @@ fbBltOne24 (FbStip	*srcLine,
  * from an N bit image to a 1 bit image
  */
  
-void
+_X_EXPORT void
 fbBltPlane (FbBits	    *src,
 	    FbStride	    srcStride,
 	    int		    srcX,
diff --git a/fb/fbcmap.c b/fb/fbcmap.c
index 0ec0e85..c01e379 100644
--- a/fb/fbcmap.c
+++ b/fb/fbcmap.c
@@ -47,7 +47,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 ColormapPtr FbInstalledMaps[MAXSCREENS];
 
-int
+_X_EXPORT int
 fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
 {
     /* By the time we are processing requests, we can guarantee that there
@@ -57,7 +57,7 @@ fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
 }
 
 
-void
+_X_EXPORT void
 fbInstallColormap(ColormapPtr pmap)
 {
     int index = pmap->pScreen->myNum;
@@ -75,7 +75,7 @@ fbInstallColormap(ColormapPtr pmap)
     }
 }
 
-void
+_X_EXPORT void
 fbUninstallColormap(ColormapPtr pmap)
 {
     int index = pmap->pScreen->myNum;
@@ -92,7 +92,7 @@ fbUninstallColormap(ColormapPtr pmap)
     }
 }
 
-void
+_X_EXPORT void
 fbResolveColor(unsigned short	*pred, 
 	       unsigned short	*pgreen, 
 	       unsigned short	*pblue,
@@ -116,7 +116,7 @@ fbResolveColor(unsigned short	*pred,
     }
 }
 
-Bool
+_X_EXPORT Bool
 fbInitializeColormap(ColormapPtr pmap)
 {
     register unsigned i;
@@ -216,7 +216,7 @@ fbInitializeColormap(ColormapPtr pmap)
     outdefs[i].blue = pmap->blue[blue >> pVisual->offsetBlue].co.local.blue; \
 }
 
-int
+_X_EXPORT int
 fbExpandDirectColors (ColormapPtr   pmap, 
 		      int	    ndef,
 		      xColorItem    *indefs,
@@ -387,7 +387,7 @@ maskShift (Pixel p)
     return s;
 }
 
-Bool
+_X_EXPORT Bool
 fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
 			  Pixel redMask, Pixel greenMask, Pixel blueMask)
 {
@@ -415,7 +415,7 @@ fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbHasVisualTypes (int depth)
 {
     fbVisualsPtr    v;
@@ -426,7 +426,7 @@ fbHasVisualTypes (int depth)
     return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
 {
     return fbSetVisualTypesAndMasks (depth, visuals, bitsPerRGB,
@@ -439,7 +439,7 @@ fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
  * the set which can be used with this version of fb.
  */
 
-Bool
+_X_EXPORT Bool
 fbInitVisuals (VisualPtr    *visualp, 
 	       DepthPtr	    *depthp,
 	       int	    *nvisualp,
diff --git a/fb/fbcmap_mi.c b/fb/fbcmap_mi.c
index 0747972..269a555 100644
--- a/fb/fbcmap_mi.c
+++ b/fb/fbcmap_mi.c
@@ -49,19 +49,19 @@ fbListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
     return miListInstalledColormaps(pScreen, pmaps);
 }
 
-void
+_X_EXPORT void
 fbInstallColormap(ColormapPtr pmap)
 {
     miInstallColormap(pmap);
 }
 
-void
+_X_EXPORT void
 fbUninstallColormap(ColormapPtr pmap)
 {
     miUninstallColormap(pmap);
 }
 
-void
+_X_EXPORT void
 fbResolveColor(unsigned short   *pred,
 	       unsigned short   *pgreen,
 	       unsigned short   *pblue,
@@ -70,7 +70,7 @@ fbResolveColor(unsigned short   *pred,
     miResolveColor(pred, pgreen, pblue, pVisual);
 }
 
-Bool
+_X_EXPORT Bool
 fbInitializeColormap(ColormapPtr pmap)
 {
     return miInitializeColormap(pmap);
@@ -91,19 +91,19 @@ fbCreateDefColormap(ScreenPtr pScreen)
     return miCreateDefColormap(pScreen);
 }
 
-void
+_X_EXPORT void
 fbClearVisualTypes(void)
 {
     miClearVisualTypes();
 }
 
-Bool
+_X_EXPORT Bool
 fbSetVisualTypes (int depth, int visuals, int bitsPerRGB)
 {
     return miSetVisualTypes(depth, visuals, bitsPerRGB, -1);
 }
 
-Bool
+_X_EXPORT Bool
 fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
                           Pixel redMask, Pixel greenMask, Pixel blueMask)
 {
@@ -116,7 +116,7 @@ fbSetVisualTypesAndMasks (int depth, int visuals, int bitsPerRGB,
  * of visuals and depths for the screen which coorespond to
  * the set which can be used with this version of fb.
  */
-Bool
+_X_EXPORT Bool
 fbInitVisuals (VisualPtr    *visualp, 
 	       DepthPtr	    *depthp,
 	       int	    *nvisualp,
diff --git a/fb/fbcopy.c b/fb/fbcopy.c
index b8b0b6a..084fada 100644
--- a/fb/fbcopy.c
+++ b/fb/fbcopy.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbCopyNtoN (DrawablePtr	pSrcDrawable,
 	    DrawablePtr	pDstDrawable,
 	    GCPtr	pGC,
@@ -100,7 +100,7 @@ fbCopyNtoN (DrawablePtr	pSrcDrawable,
     fbFinishAccess (pSrcDrawable);
 }
 
-void
+_X_EXPORT void
 fbCopy1toN (DrawablePtr	pSrcDrawable,
 	    DrawablePtr	pDstDrawable,
 	    GCPtr	pGC,
@@ -173,7 +173,7 @@ fbCopy1toN (DrawablePtr	pSrcDrawable,
     fbFinishAccess (pSrcDrawable);
 }
 
-void
+_X_EXPORT void
 fbCopyNto1 (DrawablePtr	pSrcDrawable,
 	    DrawablePtr	pDstDrawable,
 	    GCPtr	pGC,
@@ -289,7 +289,7 @@ fbCopyNto1 (DrawablePtr	pSrcDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbCopyRegion (DrawablePtr   pSrcDrawable,
 	      DrawablePtr   pDstDrawable,
 	      GCPtr	    pGC,
@@ -407,7 +407,7 @@ fbCopyRegion (DrawablePtr   pSrcDrawable,
 	xfree (pboxNew2);
 }
 
-RegionPtr
+_X_EXPORT RegionPtr
 fbDoCopy (DrawablePtr	pSrcDrawable,
 	  DrawablePtr	pDstDrawable,
 	  GCPtr		pGC,
@@ -612,7 +612,7 @@ fbDoCopy (DrawablePtr	pSrcDrawable,
     return prgnExposed;
 }
 
-RegionPtr
+_X_EXPORT RegionPtr
 fbCopyArea (DrawablePtr	pSrcDrawable,
 	    DrawablePtr	pDstDrawable,
 	    GCPtr	pGC,
@@ -635,7 +635,7 @@ fbCopyArea (DrawablePtr	pSrcDrawable,
 		     widthSrc, heightSrc, xOut, yOut, copy, 0, 0);
 }
 
-RegionPtr
+_X_EXPORT RegionPtr
 fbCopyPlane (DrawablePtr    pSrcDrawable,
 	     DrawablePtr    pDstDrawable,
 	     GCPtr	    pGC,
diff --git a/fb/fbfill.c b/fb/fbfill.c
index 831b1ce..f31d1bb 100644
--- a/fb/fbfill.c
+++ b/fb/fbfill.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbFill (DrawablePtr pDrawable,
 	GCPtr	    pGC,
 	int	    x,
@@ -165,7 +165,7 @@ fbFill (DrawablePtr pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fbSolidBoxClipped (DrawablePtr	pDrawable,
 		   RegionPtr	pClip,
 		   int		x1,
diff --git a/fb/fbfillrect.c b/fb/fbfillrect.c
index 4e4edb3..a22e648 100644
--- a/fb/fbfillrect.c
+++ b/fb/fbfillrect.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbPolyFillRect(DrawablePtr  pDrawable, 
 	       GCPtr	    pGC, 
 	       int	    nrect,
diff --git a/fb/fbfillsp.c b/fb/fbfillsp.c
index 5d21472..60a7075 100644
--- a/fb/fbfillsp.c
+++ b/fb/fbfillsp.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbFillSpans (DrawablePtr    pDrawable,
 	     GCPtr	    pGC,
 	     int	    n,
diff --git a/fb/fbgc.c b/fb/fbgc.c
index fda391b..d638f16 100644
--- a/fb/fbgc.c
+++ b/fb/fbgc.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-const GCFuncs fbGCFuncs = {
+_X_EXPORT const GCFuncs fbGCFuncs = {
     fbValidateGC,
     miChangeGC,
     miCopyGC,
@@ -38,7 +38,7 @@ const GCFuncs fbGCFuncs = {
     miCopyClip,
 };
 
-const GCOps	fbGCOps = {
+_X_EXPORT const GCOps	fbGCOps = {
     fbFillSpans,
     fbSetSpans,
     fbPutImage,
@@ -61,7 +61,7 @@ const GCOps	fbGCOps = {
     fbPushPixels
 };
 
-Bool
+_X_EXPORT Bool
 fbCreateGC(GCPtr pGC)
 {
     pGC->clientClip = NULL;
@@ -84,7 +84,7 @@ fbCreateGC(GCPtr pGC)
 /*
  * Pad pixmap to FB_UNIT bits wide
  */
-void
+_X_EXPORT void
 fbPadPixmap (PixmapPtr pPixmap)
 {
     int	    width;
@@ -193,7 +193,7 @@ fbCanEvenStipple (PixmapPtr pStipple, int bpp)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 fbValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
 {
     FbGCPrivPtr	pPriv = fbGetGCPrivate(pGC);
diff --git a/fb/fbgetsp.c b/fb/fbgetsp.c
index 6402c6c..b939d69 100644
--- a/fb/fbgetsp.c
+++ b/fb/fbgetsp.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbGetSpans(DrawablePtr	pDrawable, 
 	   int		wMax, 
 	   DDXPointPtr	ppt, 
diff --git a/fb/fbglyph.c b/fb/fbglyph.c
index 2c19b74..3f2ec75 100644
--- a/fb/fbglyph.c
+++ b/fb/fbglyph.c
@@ -31,7 +31,7 @@
 
 #define dummyScreen screenInfo.screens[0]
       
-Bool
+_X_EXPORT Bool
 fbGlyphIn (RegionPtr	pRegion,
 	   int		x,
 	   int		y,
@@ -253,7 +253,7 @@ fbGlyph24 (FbBits   *dstBits,
 #endif
 #endif
 
-void
+_X_EXPORT void
 fbPolyGlyphBlt (DrawablePtr	pDrawable,
 		GCPtr		pGC,
 		int		x, 
@@ -343,7 +343,7 @@ fbPolyGlyphBlt (DrawablePtr	pDrawable,
 }
 
 
-void
+_X_EXPORT void
 fbImageGlyphBlt (DrawablePtr	pDrawable,
 		 GCPtr		pGC,
 		 int		x, 
diff --git a/fb/fbimage.c b/fb/fbimage.c
index 2b9ac27..030a6a4 100644
--- a/fb/fbimage.c
+++ b/fb/fbimage.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbPutImage (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 	    int		depth,
@@ -112,7 +112,7 @@ fbPutImage (DrawablePtr	pDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbPutZImage (DrawablePtr	pDrawable,
 	     RegionPtr		pClip,
 	     int		alu,
@@ -172,7 +172,7 @@ fbPutZImage (DrawablePtr	pDrawable,
     fbFinishAccess (pDrawable);
 }
 	     
-void
+_X_EXPORT void
 fbPutXYImage (DrawablePtr	pDrawable,
 	      RegionPtr		pClip,
 	      FbBits		fg,
@@ -281,7 +281,7 @@ fbPutXYImage (DrawablePtr	pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fbGetImage (DrawablePtr	    pDrawable,
 	    int		    x,
 	    int		    y,
diff --git a/fb/fbline.c b/fb/fbline.c
index 2cee123..eddb6d5 100644
--- a/fb/fbline.c
+++ b/fb/fbline.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbZeroLine (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 	    int		mode,
@@ -61,7 +61,7 @@ fbZeroLine (DrawablePtr	pDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbZeroSegment (DrawablePtr  pDrawable,
 	       GCPtr	    pGC,
 	       int	    nseg,
@@ -85,7 +85,7 @@ fbZeroSegment (DrawablePtr  pDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbFixCoordModePrevious (int	    npt,
 			DDXPointPtr ppt)
 {
@@ -102,7 +102,7 @@ fbFixCoordModePrevious (int	    npt,
     }
 }
 
-void
+_X_EXPORT void
 fbPolyLine (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 	    int		mode,
@@ -140,7 +140,7 @@ fbPolyLine (DrawablePtr	pDrawable,
     (*line) (pDrawable, pGC, mode, npt, ppt);
 }
 
-void
+_X_EXPORT void
 fbPolySegment (DrawablePtr  pDrawable,
 	       GCPtr	    pGC,
 	       int	    nseg,
diff --git a/fb/fboverlay.c b/fb/fboverlay.c
index 1432cb6..cbfaace 100644
--- a/fb/fboverlay.c
+++ b/fb/fboverlay.c
@@ -36,7 +36,7 @@
 static int fbOverlayScreenPrivateKeyIndex;
 static DevPrivateKey fbOverlayScreenPrivateKey = &fbOverlayScreenPrivateKeyIndex;
 
-DevPrivateKey fbOverlayGetScreenPrivateKey(void)
+_X_EXPORT DevPrivateKey fbOverlayGetScreenPrivateKey(void)
 {
     return fbOverlayScreenPrivateKey;
 }
@@ -45,7 +45,7 @@ DevPrivateKey fbOverlayGetScreenPrivateKey(void)
  * Replace this if you want something supporting
  * multiple overlays with the same depth
  */
-Bool
+_X_EXPORT Bool
 fbOverlayCreateWindow(WindowPtr pWin)
 {
     FbOverlayScrPrivPtr	pScrPriv = fbOverlayGetScrPriv(pWin->drawable.pScreen);
@@ -84,7 +84,7 @@ fbOverlayCreateWindow(WindowPtr pWin)
     return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 fbOverlayCloseScreen (int iScreen, ScreenPtr pScreen)
 {
     FbOverlayScrPrivPtr	pScrPriv = fbOverlayGetScrPriv(pScreen);
@@ -101,7 +101,7 @@ fbOverlayCloseScreen (int iScreen, ScreenPtr pScreen)
 /*
  * Return layer containing this window
  */
-int
+_X_EXPORT int
 fbOverlayWindowLayer(WindowPtr pWin)
 {
     FbOverlayScrPrivPtr pScrPriv = fbOverlayGetScrPriv(pWin->drawable.pScreen);
@@ -114,7 +114,7 @@ fbOverlayWindowLayer(WindowPtr pWin)
     return 0;
 }
 
-Bool
+_X_EXPORT Bool
 fbOverlayCreateScreenResources(ScreenPtr pScreen)
 {
     int			i;
@@ -153,7 +153,7 @@ fbOverlayCreateScreenResources(ScreenPtr pScreen)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 fbOverlayPaintKey (DrawablePtr	pDrawable,
 		   RegionPtr	pRegion,
 		   CARD32	pixel,
@@ -166,7 +166,7 @@ fbOverlayPaintKey (DrawablePtr	pDrawable,
 /*
  * Track visible region for each layer
  */
-void
+_X_EXPORT void
 fbOverlayUpdateLayerRegion (ScreenPtr	pScreen,
 			    int		layer,
 			    RegionPtr	prgn)
@@ -213,7 +213,7 @@ fbOverlayUpdateLayerRegion (ScreenPtr	pScreen,
 /*
  * Copy only areas in each layer containing real bits
  */
-void
+_X_EXPORT void
 fbOverlayCopyWindow(WindowPtr	pWin,
 		    DDXPointRec	ptOldOrg,
 		    RegionPtr	prgnSrc)
@@ -267,7 +267,7 @@ fbOverlayCopyWindow(WindowPtr	pWin,
     REGION_UNINIT(pScreen, &rgnDst);
 }   
 
-void
+_X_EXPORT void
 fbOverlayWindowExposures (WindowPtr	pWin,
 			  RegionPtr	prgn,
 			  RegionPtr	other_exposed)
@@ -278,7 +278,7 @@ fbOverlayWindowExposures (WindowPtr	pWin,
     miWindowExposures(pWin, prgn, other_exposed);
 }
 
-Bool
+_X_EXPORT Bool
 fbOverlaySetupScreen(ScreenPtr	pScreen,
 		     pointer	pbits1,
 		     pointer	pbits2,
@@ -325,7 +325,7 @@ fb24_32OverlayCreateScreenResources(ScreenPtr pScreen)
     return retval;
 }
 
-Bool
+_X_EXPORT Bool
 fbOverlayFinishScreenInit(ScreenPtr	pScreen,
 			  pointer	pbits1,
 			  pointer	pbits2,
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 1355e90..5dff4e1 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -39,7 +39,7 @@
 
 #define mod(a,b) ((b) == 1 ? 0 : (a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
 
-void
+_X_EXPORT void
 fbWalkCompositeRegion (CARD8 op,
 		       PicturePtr pSrc,
 		       PicturePtr pMask,
@@ -143,7 +143,7 @@ fbWalkCompositeRegion (CARD8 op,
     REGION_UNINIT (pDst->pDrawable->pScreen, &region);
 }
 
-void
+_X_EXPORT void
 fbComposite (CARD8      op,
 	     PicturePtr pSrc,
 	     PicturePtr pMask,
@@ -192,7 +192,7 @@ fbComposite (CARD8      op,
     free_pixman_pict (pDst, dest);
 }
 
-void
+_X_EXPORT void
 fbCompositeGeneral (CARD8	op,
 		    PicturePtr	pSrc,
 		    PicturePtr	pMask,
@@ -400,7 +400,7 @@ set_image_properties (pixman_image_t *image, PicturePtr pict)
     pixman_image_set_source_clipping (image, TRUE);
 }
 
-pixman_image_t *
+_X_EXPORT pixman_image_t *
 image_from_pict (PicturePtr pict,
 		 Bool has_clip)
 {
@@ -440,14 +440,14 @@ image_from_pict (PicturePtr pict,
     return image;
 }
 
-void
+_X_EXPORT void
 free_pixman_pict (PicturePtr pict, pixman_image_t *image)
 {
     if (image && pixman_image_unref (image) && pict->pDrawable)
 	fbFinishAccess (pict->pDrawable);
 }
 
-Bool
+_X_EXPORT Bool
 fbPictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
 {
 
diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c
index 311da9e..96b3cf0 100644
--- a/fb/fbpixmap.c
+++ b/fb/fbpixmap.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-PixmapPtr
+_X_EXPORT PixmapPtr
 fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
 		   unsigned usage_hint)
 {
@@ -82,7 +82,7 @@ fbCreatePixmapBpp (ScreenPtr pScreen, int width, int height, int depth, int bpp,
     return pPixmap;
 }
 
-PixmapPtr
+_X_EXPORT PixmapPtr
 fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
 		unsigned usage_hint)
 {
@@ -95,7 +95,7 @@ fbCreatePixmap (ScreenPtr pScreen, int width, int height, int depth,
     return fbCreatePixmapBpp (pScreen, width, height, depth, bpp, usage_hint);
 }
 
-Bool
+_X_EXPORT Bool
 fbDestroyPixmap (PixmapPtr pPixmap)
 {
     if(--pPixmap->refcnt)
@@ -137,7 +137,7 @@ if (((rx1) < (rx2)) && ((ry1) < (ry2)) &&			\
  * Then it coalesces the current line with the previous if they have boxes
  * at the same X coordinates.
  */
-RegionPtr
+_X_EXPORT RegionPtr
 fbPixmapToRegion(PixmapPtr pPix)
 {
     register RegionPtr	pReg;
@@ -348,7 +348,7 @@ fbValidateBits (FbStip *bits, int stride, FbStip data)
     }
 }
 
-void
+_X_EXPORT void
 fbValidateDrawable (DrawablePtr pDrawable)
 {
     FbStip	*bits, *first, *last;
@@ -368,14 +368,14 @@ fbValidateDrawable (DrawablePtr pDrawable)
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fbSetBits (FbStip *bits, int stride, FbStip data)
 {
     while (stride--)
 	*bits++ = data;
 }
 
-void
+_X_EXPORT void
 fbInitializeDrawable (DrawablePtr pDrawable)
 {
     FbStip  *bits, *first, *last;
diff --git a/fb/fbpoint.c b/fb/fbpoint.c
index c0ea8ba..d6637d8 100644
--- a/fb/fbpoint.c
+++ b/fb/fbpoint.c
@@ -39,7 +39,7 @@ typedef void	(*FbDots)  (FbBits	*dst,
 			    FbBits	and,
 			    FbBits	xor);
 
-void
+_X_EXPORT void
 fbDots (FbBits	    *dstOrig,
 	FbStride    dstStride,
 	int	    dstBpp,
@@ -107,7 +107,7 @@ fbDots (FbBits	    *dstOrig,
     }
 }
 
-void
+_X_EXPORT void
 fbPolyPoint (DrawablePtr    pDrawable,
 	     GCPtr	    pGC,
 	     int	    mode,
diff --git a/fb/fbpush.c b/fb/fbpush.c
index 891572f..55be9b3 100644
--- a/fb/fbpush.c
+++ b/fb/fbpush.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbPushPattern (DrawablePtr  pDrawable,
 	       GCPtr	    pGC,
 	       
@@ -100,7 +100,7 @@ fbPushPattern (DrawablePtr  pDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbPushFill (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 
@@ -172,7 +172,7 @@ fbPushFill (DrawablePtr	pDrawable,
     }
 }
 	    
-void
+_X_EXPORT void
 fbPushImage (DrawablePtr    pDrawable,
 	     GCPtr	    pGC,
 	     
@@ -223,7 +223,7 @@ fbPushImage (DrawablePtr    pDrawable,
     }
 }
 	     
-void
+_X_EXPORT void
 fbPushPixels (GCPtr	    pGC,
 	      PixmapPtr	    pBitmap,
 	      DrawablePtr   pDrawable,
diff --git a/fb/fbscreen.c b/fb/fbscreen.c
index ea24912..d7e1d79 100644
--- a/fb/fbscreen.c
+++ b/fb/fbscreen.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-Bool
+_X_EXPORT Bool
 fbCloseScreen (int index, ScreenPtr pScreen)
 {
     int	    d;
@@ -43,19 +43,19 @@ fbCloseScreen (int index, ScreenPtr pScreen)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbRealizeFont(ScreenPtr pScreen, FontPtr pFont)
 {
     return (TRUE);
 }
 
-Bool
+_X_EXPORT Bool
 fbUnrealizeFont(ScreenPtr pScreen, FontPtr pFont)
 {
     return (TRUE);
 }
 
-void
+_X_EXPORT void
 fbQueryBestSize (int class, 
 		 unsigned short *width, unsigned short *height,
 		 ScreenPtr pScreen)
@@ -81,7 +81,7 @@ fbQueryBestSize (int class,
     }
 }
 
-PixmapPtr
+_X_EXPORT PixmapPtr
 _fbGetWindowPixmap (WindowPtr pWindow)
 {
     return fbGetWindowPixmap (pWindow);
@@ -93,7 +93,7 @@ _fbSetWindowPixmap (WindowPtr pWindow, PixmapPtr pPixmap)
     dixSetPrivate(&pWindow->devPrivates, fbGetWinPrivateKey(), pPixmap);
 }
 
-Bool
+_X_EXPORT Bool
 fbSetupScreen(ScreenPtr	pScreen, 
 	      pointer	pbits,		/* pointer to screen bitmap */
 	      int	xsize, 		/* in pixels */
@@ -140,7 +140,7 @@ fbSetupScreen(ScreenPtr	pScreen,
 }
 
 #ifdef FB_ACCESS_WRAPPER
-Bool
+_X_EXPORT Bool
 wfbFinishScreenInit(ScreenPtr		pScreen,
 		    pointer		pbits,
 		    int			xsize,
@@ -255,7 +255,7 @@ fbFinishScreenInit(ScreenPtr	pScreen,
 
 /* dts * (inch/dot) * (25.4 mm / inch) = mm */
 #ifdef FB_ACCESS_WRAPPER
-Bool
+_X_EXPORT Bool
 wfbScreenInit(ScreenPtr		pScreen,
 	      pointer		pbits,
 	      int		xsize,
@@ -275,7 +275,7 @@ wfbScreenInit(ScreenPtr		pScreen,
     return TRUE;
 }
 #else
-Bool
+_X_EXPORT Bool
 fbScreenInit(ScreenPtr	pScreen,
 	     pointer	pbits,
 	     int	xsize,
diff --git a/fb/fbseg.c b/fb/fbseg.c
index 80ce740..b260355 100644
--- a/fb/fbseg.c
+++ b/fb/fbseg.c
@@ -33,7 +33,7 @@
 					((dir < 0) ? FbStipLeft(mask,bpp) : \
 					 FbStipRight(mask,bpp)))
 
-void
+_X_EXPORT void
 fbBresSolid (DrawablePtr    pDrawable,
 	     GCPtr	    pGC,
 	     int	    dashOffset,
@@ -117,7 +117,7 @@ fbBresSolid (DrawablePtr    pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fbBresDash (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 	    int		dashOffset,
@@ -203,7 +203,7 @@ fbBresDash (DrawablePtr	pDrawable,
     fbFinishAccess (pDrawable);
 }
 
-void
+_X_EXPORT void
 fbBresFill (DrawablePtr	pDrawable,
 	    GCPtr	pGC,
 	    int		dashOffset,
@@ -255,7 +255,7 @@ fbSetFg (DrawablePtr	pDrawable,
     }
 }
 
-void
+_X_EXPORT void
 fbBresFillDash (DrawablePtr pDrawable,
 		GCPtr	    pGC,
 		int	    dashOffset,
@@ -513,7 +513,7 @@ fbBresDash24RRop (DrawablePtr	pDrawable,
  * based on the contents of the specified GC.
  */
 
-FbBres *
+_X_EXPORT FbBres *
 fbSelectBres (DrawablePtr   pDrawable,
 	      GCPtr	    pGC)
 {
@@ -575,7 +575,7 @@ fbSelectBres (DrawablePtr   pDrawable,
     return bres;
 }
 
-void
+_X_EXPORT void
 fbBres (DrawablePtr	pDrawable,
 	GCPtr		pGC,
 	int		dashOffset,
@@ -594,7 +594,7 @@ fbBres (DrawablePtr	pDrawable,
 				      e, e1, e3, len);
 }
 
-void
+_X_EXPORT void
 fbSegment (DrawablePtr	pDrawable,
 	   GCPtr	pGC,
 	   int		x1,
diff --git a/fb/fbsetsp.c b/fb/fbsetsp.c
index 227ba4c..f64622a 100644
--- a/fb/fbsetsp.c
+++ b/fb/fbsetsp.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbSetSpans (DrawablePtr	    pDrawable,
 	    GCPtr	    pGC,
 	    char	    *src,
diff --git a/fb/fbsolid.c b/fb/fbsolid.c
index 53fcae0..cc3e728 100644
--- a/fb/fbsolid.c
+++ b/fb/fbsolid.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-void
+_X_EXPORT void
 fbSolid (FbBits	    *dst,
 	 FbStride   dstStride,
 	 int	    dstX,
@@ -82,7 +82,7 @@ fbSolid (FbBits	    *dst,
 }
 
 #ifdef FB_24BIT
-void
+_X_EXPORT void
 fbSolid24 (FbBits   *dst,
 	   FbStride dstStride,
 	   int	    dstX,
diff --git a/fb/fbstipple.c b/fb/fbstipple.c
index 7d13263..4ceab86 100644
--- a/fb/fbstipple.c
+++ b/fb/fbstipple.c
@@ -56,7 +56,7 @@
  * Repeat a transparent stipple across a scanline n times
  */
 
-void
+_X_EXPORT void
 fbTransparentSpan (FbBits   *dst,
 		   FbBits   stip,
 		   FbBits   fgxor,
@@ -80,7 +80,7 @@ fbTransparentSpan (FbBits   *dst,
 }
 #endif
 
-void
+_X_EXPORT void
 fbEvenStipple (FbBits	*dst,
 	       FbStride	dstStride,
 	       int	dstX,
@@ -213,7 +213,7 @@ fbEvenStipple (FbBits	*dst,
     }
 }
 
-void
+_X_EXPORT void
 fbOddStipple (FbBits	*dst,
 	      FbStride	dstStride,
 	      int	dstX,
@@ -278,7 +278,7 @@ fbOddStipple (FbBits	*dst,
     }
 }
 
-void
+_X_EXPORT void
 fbStipple (FbBits	*dst,
 	   FbStride	dstStride,
 	   int		dstX,
diff --git a/fb/fbtile.c b/fb/fbtile.c
index 05a27a1..62d3266 100644
--- a/fb/fbtile.c
+++ b/fb/fbtile.c
@@ -31,7 +31,7 @@
  * than FB_UNIT
  */
 
-void
+_X_EXPORT void
 fbEvenTile (FbBits	*dst,
 	    FbStride	dstStride,
 	    int		dstX,
@@ -107,7 +107,7 @@ fbEvenTile (FbBits	*dst,
     }
 }
 	    
-void
+_X_EXPORT void
 fbOddTile(FbBits    *dst,
 	  FbStride  dstStride,
 	  int	    dstX,
@@ -172,7 +172,7 @@ fbOddTile(FbBits    *dst,
     }
 }
 
-void
+_X_EXPORT void
 fbTile (FbBits	    *dst,
 	FbStride    dstStride,
 	int	    dstX,
diff --git a/fb/fbtrap.c b/fb/fbtrap.c
index 830603a..ab64701 100644
--- a/fb/fbtrap.c
+++ b/fb/fbtrap.c
@@ -33,7 +33,7 @@
 #include "renderedge.h"
 #include "fbpict.h"
 
-void
+_X_EXPORT void
 fbAddTraps (PicturePtr	pPicture,
 	    INT16	x_off,
 	    INT16	y_off,
@@ -50,7 +50,7 @@ fbAddTraps (PicturePtr	pPicture,
     free_pixman_pict (pPicture, image);
 }
 
-void
+_X_EXPORT void
 fbRasterizeTrapezoid (PicturePtr    pPicture,
 		      xTrapezoid  *trap,
 		      int	    x_off,
@@ -92,7 +92,7 @@ _Clockwise (xPointFixed *ref, xPointFixed *a, xPointFixed *b)
 }
 
 /* FIXME -- this could be made more efficient */
-void
+_X_EXPORT void
 fbAddTriangles (PicturePtr  pPicture,
 		INT16	    x_off,
 		INT16	    y_off,
diff --git a/fb/fbutil.c b/fb/fbutil.c
index 5e23297..db1f5a3 100644
--- a/fb/fbutil.c
+++ b/fb/fbutil.c
@@ -26,7 +26,7 @@
 
 #include "fb.h"
 
-FbBits
+_X_EXPORT FbBits
 fbReplicatePixel (Pixel p, int bpp)
 {
     FbBits  b = p;
@@ -40,7 +40,7 @@ fbReplicatePixel (Pixel p, int bpp)
     return b;
 }
 
-void
+_X_EXPORT void
 fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp)
 {
     FbBits	and, xor;
@@ -122,7 +122,7 @@ fbReduceRasterOp (int rop, FbBits fg, FbBits pm, FbBits *andp, FbBits *xorp)
 #define O 0
 #define I FB_ALLONES
 
-const FbMergeRopRec FbMergeRopBits[16] = {
+_X_EXPORT const FbMergeRopRec FbMergeRopBits[16] = {
     { O,O,O,O },   /* clear	    0x0		0 */
     { I,O,O,O },   /* and	    0x1		src AND dst */
     { I,O,I,O },   /* andReverse    0x2		src AND NOT dst */
@@ -180,20 +180,20 @@ const FbMergeRopRec FbMergeRopBits[16] = {
 #if FB_UNIT == 16
 #define fbStipple16Bits 0
 #define fbStipple8Bits 0
-const FbBits fbStipple4Bits[16] = {
+_X_EXPORT const FbBits fbStipple4Bits[16] = {
     C4(  0,4), C4(  1,4), C4(  2,4), C4(  3,4), C4(  4,4), C4(  5,4),
     C4(  6,4), C4(  7,4), C4(  8,4), C4(  9,4), C4( 10,4), C4( 11,4),
     C4( 12,4), C4( 13,4), C4( 14,4), C4( 15,4),};
-const FbBits fbStipple2Bits[4] = {
+_X_EXPORT const FbBits fbStipple2Bits[4] = {
     C2(  0,8), C2(  1,8), C2(  2,8), C2(  3,8),
 };
-const FbBits fbStipple1Bits[2] = {
+_X_EXPORT const FbBits fbStipple1Bits[2] = {
     C1(  0,16), C1(  1,16),
 };
 #endif
 #if FB_UNIT == 32
 #define fbStipple16Bits 0
-const FbBits fbStipple8Bits[256] = {
+_X_EXPORT const FbBits fbStipple8Bits[256] = {
     C8(  0,4), C8(  1,4), C8(  2,4), C8(  3,4), C8(  4,4), C8(  5,4),
     C8(  6,4), C8(  7,4), C8(  8,4), C8(  9,4), C8( 10,4), C8( 11,4),
     C8( 12,4), C8( 13,4), C8( 14,4), C8( 15,4), C8( 16,4), C8( 17,4),
@@ -238,19 +238,19 @@ const FbBits fbStipple8Bits[256] = {
     C8(246,4), C8(247,4), C8(248,4), C8(249,4), C8(250,4), C8(251,4),
     C8(252,4), C8(253,4), C8(254,4), C8(255,4),
 };
-const FbBits fbStipple4Bits[16] = {
+_X_EXPORT const FbBits fbStipple4Bits[16] = {
     C4(  0,8), C4(  1,8), C4(  2,8), C4(  3,8), C4(  4,8), C4(  5,8),
     C4(  6,8), C4(  7,8), C4(  8,8), C4(  9,8), C4( 10,8), C4( 11,8),
     C4( 12,8), C4( 13,8), C4( 14,8), C4( 15,8),};
-const FbBits fbStipple2Bits[4] = {
+_X_EXPORT const FbBits fbStipple2Bits[4] = {
     C2(  0,16), C2(  1,16), C2(  2,16), C2(  3,16),
 };
-const FbBits fbStipple1Bits[2] = {
+_X_EXPORT const FbBits fbStipple1Bits[2] = {
     C1(  0,32), C1(  1,32),
 };
 #endif
 #if FB_UNIT == 64
-const FbBits fbStipple16Bits[256] = {
+_X_EXPORT const FbBits fbStipple16Bits[256] = {
     C8(  0,4), C8(  1,4), C8(  2,4), C8(  3,4), C8(  4,4), C8(  5,4),
     C8(  6,4), C8(  7,4), C8(  8,4), C8(  9,4), C8( 10,4), C8( 11,4),
     C8( 12,4), C8( 13,4), C8( 14,4), C8( 15,4), C8( 16,4), C8( 17,4),
@@ -295,7 +295,7 @@ const FbBits fbStipple16Bits[256] = {
     C8(246,4), C8(247,4), C8(248,4), C8(249,4), C8(250,4), C8(251,4),
     C8(252,4), C8(253,4), C8(254,4), C8(255,4),
 };
-const FbBits fbStipple8Bits[256] = {
+_X_EXPORT const FbBits fbStipple8Bits[256] = {
     C8(  0,8), C8(  1,8), C8(  2,8), C8(  3,8), C8(  4,8), C8(  5,8),
     C8(  6,8), C8(  7,8), C8(  8,8), C8(  9,8), C8( 10,8), C8( 11,8),
     C8( 12,8), C8( 13,8), C8( 14,8), C8( 15,8), C8( 16,8), C8( 17,8),
@@ -340,16 +340,16 @@ const FbBits fbStipple8Bits[256] = {
     C8(246,8), C8(247,8), C8(248,8), C8(249,8), C8(250,8), C8(251,8),
     C8(252,8), C8(253,8), C8(254,8), C8(255,8),
 };
-const FbBits fbStipple4Bits[16] = {
+_X_EXPORT const FbBits fbStipple4Bits[16] = {
     C4(  0,16), C4(  1,16), C4(  2,16), C4(  3,16), C4(  4,16), C4(  5,16),
     C4(  6,16), C4(  7,16), C4(  8,16), C4(  9,16), C4( 10,16), C4( 11,16),
     C4( 12,16), C4( 13,16), C4( 14,16), C4( 15,16),};
-const FbBits fbStipple2Bits[4] = {
+_X_EXPORT const FbBits fbStipple2Bits[4] = {
     C2(  0,32), C2(  1,32), C2(  2,32), C2(  3,32),
 };
 #define fbStipple1Bits 0
 #endif
-const FbBits	* const fbStippleTable[] = {
+_X_EXPORT const FbBits	* const fbStippleTable[] = {
     0,
     fbStipple1Bits,
     fbStipple2Bits,
diff --git a/fb/fbwindow.c b/fb/fbwindow.c
index 70e75a9..926ed45 100644
--- a/fb/fbwindow.c
+++ b/fb/fbwindow.c
@@ -28,7 +28,7 @@
 
 #include "fb.h"
 
-Bool
+_X_EXPORT Bool
 fbCreateWindow(WindowPtr pWin)
 {
     dixSetPrivate(&pWin->devPrivates, fbGetWinPrivateKey(),
@@ -40,31 +40,31 @@ fbCreateWindow(WindowPtr pWin)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbDestroyWindow(WindowPtr pWin)
 {
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbMapWindow(WindowPtr pWindow)
 {
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbPositionWindow(WindowPtr pWin, int x, int y)
 {
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 fbUnmapWindow(WindowPtr pWindow)
 {
     return TRUE;
 }
 
-void
+_X_EXPORT void
 fbCopyWindowProc (DrawablePtr	pSrcDrawable,
 		  DrawablePtr	pDstDrawable,
 		  GCPtr		pGC,
@@ -115,7 +115,7 @@ fbCopyWindowProc (DrawablePtr	pSrcDrawable,
     fbFinishAccess (pSrcDrawable);
 }
 
-void 
+_X_EXPORT void 
 fbCopyWindow(WindowPtr	    pWin, 
 	     DDXPointRec    ptOldOrg, 
 	     RegionPtr	    prgnSrc)
@@ -148,7 +148,7 @@ fbCopyWindow(WindowPtr	    pWin,
     fbValidateDrawable (&pWin->drawable);
 }
 
-Bool
+_X_EXPORT Bool
 fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
 {
     PixmapPtr	pPixmap;
@@ -201,7 +201,7 @@ fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 fbFillRegionSolid (DrawablePtr	pDrawable,
 		   RegionPtr	pRegion,
 		   FbBits	and,
diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 3236b5a..214609e 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -64,7 +64,7 @@ noopEnableDisable(void *arg) { }
 
 xf86AccessRec AccessNULL = { noopEnableDisable, noopEnableDisable, NULL };
 
-xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL};
+_X_EXPORT xf86CurrentAccessRec xf86CurrentAccess = {NULL,NULL};
 
 BusRec primaryBus = { BUS_NONE, {{0}}};
 
@@ -100,7 +100,7 @@ static void notifyStateChange(xf86NotifyState state);
  * The only one available so far is for PCI and SBUS.
  */
 
-void
+_X_EXPORT void
 xf86BusProbe(void)
 {
     xf86PciProbe();
@@ -148,7 +148,7 @@ StringToBusType(const char* busID, const char **retID)
  * Entity related code.
  */
 
-void
+_X_EXPORT void
 xf86EntityInit(void)
 {
     int i;
@@ -231,7 +231,7 @@ xf86IsEntityPrimary(int entityIndex)
     }
 }
 	
-Bool
+_X_EXPORT Bool
 xf86SetEntityFuncs(int entityIndex, EntityProc init, EntityProc enter,
 		   EntityProc leave, pointer private)
 {
@@ -244,7 +244,7 @@ xf86SetEntityFuncs(int entityIndex, EntityProc init, EntityProc enter,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 xf86DriverHasEntities(DriverPtr drvp)
 {
     int i;
@@ -348,7 +348,7 @@ xf86RemoveEntityFromScreen(ScrnInfoPtr pScrn, int entityIndex)
  * xf86ClearEntitiesForScreen() - called when a screen is deleted
  * to mark it's entities unused. Called by xf86DeleteScreen().
  */
-void
+_X_EXPORT void
 xf86ClearEntityListForScreen(int scrnIndex)
 {
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -380,7 +380,7 @@ xf86ClearEntityListForScreen(int scrnIndex)
     pScrn->entityInstanceList = NULL;
 }
 
-void
+_X_EXPORT void
 xf86DeallocateResourcesForEntity(int entityIndex, unsigned long type)
 {
     resPtr *pprev_next = &Acc;
@@ -402,7 +402,7 @@ xf86DeallocateResourcesForEntity(int entityIndex, unsigned long type)
  * Add an extra device section (GDevPtr) to an entity.
  */
 
-void
+_X_EXPORT void
 xf86AddDevToEntity(int entityIndex, GDevPtr dev)
 {
     EntityPtr pEnt;
@@ -539,7 +539,7 @@ clearAccess(void)
  * xf86AccessInit() - set up everything needed for access control
  * called only once on first server generation.
  */
-void
+_X_EXPORT void
 xf86AccessInit(void)
 {
     initPciState();
@@ -554,7 +554,7 @@ xf86AccessInit(void)
  * xf86AccessEnter() -- gets called to save the text mode VGA IO 
  * resources when reentering the server after a VT switch.
  */
-void
+_X_EXPORT void
 xf86AccessEnter(void)
 {
     if (xf86ResAccessEnter) 
@@ -583,7 +583,7 @@ xf86AccessEnter(void)
  * This was split to call xf86AccessLeaveState() from
  * ddxGiveUp().
  */
-void
+_X_EXPORT void
 xf86AccessLeave(void)
 {
     if (!xf86ResAccessEnter)
@@ -594,7 +594,7 @@ xf86AccessLeave(void)
     EntityLeave();
 }
 
-void
+_X_EXPORT void
 xf86AccessLeaveState(void)
 {
     if (!xf86ResAccessEnter)
@@ -1098,7 +1098,7 @@ xf86JoinResLists(resPtr rlist1, resPtr rlist2)
     return rlist1;
 }
 
-resPtr
+_X_EXPORT resPtr
 xf86AddResToList(resPtr rlist, resRange *range, int entityIndex)
 {
     resPtr new;
@@ -1264,7 +1264,7 @@ xf86PrintResList(int verb, resPtr list)
     }
 }
 
-resPtr
+_X_EXPORT resPtr
 xf86AddRangesToList(resPtr list, resRange *pRange, int entityIndex)
 {
     while(pRange && pRange->type != ResEnd) {
@@ -1274,7 +1274,7 @@ xf86AddRangesToList(resPtr list, resRange *pRange, int entityIndex)
     return list;
 }
 
-void
+_X_EXPORT void
 xf86ResourceBrokerInit(void)
 {
     Acc = NULL;
@@ -1540,7 +1540,7 @@ SetSIGIOForState(xf86State state)
     }
 }
 
-void
+_X_EXPORT void
 xf86EnterServerState(xf86State state)
 {
     EntityPtr pEnt;
@@ -1817,7 +1817,7 @@ checkRoutingForScreens(xf86State state)
  * xf86PostProbe() -- Allocate all non conflicting resources
  * This function gets called by xf86Init().
  */
-void
+_X_EXPORT void
 xf86PostProbe(void)
 {
     memType val;
@@ -1931,7 +1931,7 @@ checkRequiredResources(int entityIndex)
 	pEnt->entityProp &= ~(unsigned long)NEED_IO_SHARED;
 }
 
-void
+_X_EXPORT void
 xf86PostPreInit()
 {
   if (doFramebufferMode) return;
@@ -1951,7 +1951,7 @@ xf86PostPreInit()
     xf86PrintResList(3, Acc);
 }
 
-void
+_X_EXPORT void
 xf86PostScreenInit(void)
 {
     int i,j;
@@ -2300,7 +2300,7 @@ findIntersect(resRange Range, resPtr list)
     return new;
 }
     
-resPtr
+_X_EXPORT resPtr
 xf86FindIntersectOfLists(resPtr l1, resPtr l2)
 {
     resPtr ret = NULL;
@@ -2365,7 +2365,7 @@ xf86ExtractTypeFromList(resPtr list, unsigned long type)
  * xf86FindPrimaryDevice() - Find the display device which
  * was active when the server was started.
  */
-void
+_X_EXPORT void
 xf86FindPrimaryDevice()
 {
     if (primaryBus.type != BUS_NONE) {
@@ -2394,7 +2394,7 @@ xf86FindPrimaryDevice()
     }
 }
 
-Bool
+_X_EXPORT Bool
 xf86NoSharedResources(int screenIndex,resType res)
 {
     int j;
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index a6290a7..d2d447e 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1136,7 +1136,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
     return TRUE;
 }
 
-Bool xf86DRI2Enabled(void)
+_X_EXPORT Bool xf86DRI2Enabled(void)
 {
     return xf86Info.dri2;
 }
@@ -2626,7 +2626,7 @@ xf86HandleConfigFile(Bool autoconfig)
     return CONFIG_OK;
 }
 
-Bool
+_X_EXPORT Bool
 xf86PathIsSafe(const char *path)
 {
     return (xf86pathIsSafe(path) != 0);
diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c
index 8700496..819ad95 100644
--- a/hw/xfree86/common/xf86Configure.c
+++ b/hw/xfree86/common/xf86Configure.c
@@ -68,7 +68,7 @@ static DevToConfigPtr DevToConfig = NULL;
 static int nDevToConfig = 0, CurrentDriver;
 
 _X_EXPORT xf86MonPtr ConfiguredMonitor;
-Bool xf86DoConfigurePass1 = TRUE;
+_X_EXPORT Bool xf86DoConfigurePass1 = TRUE;
 static Bool foundMouse = FALSE;
 
 #if defined(__SCO__)
@@ -92,7 +92,7 @@ static char *DFLT_MOUSE_PROTO = "auto";
  * directly.  We allocate a GDevRec and fill it in as much as we can, letting
  * the caller fill in the rest and/or change it as it sees fit.
  */
-GDevPtr
+_X_EXPORT GDevPtr
 xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, int chipset)
 {
     int i, j;
@@ -639,7 +639,7 @@ configureDDCMonitorSection (int screennum)
 # define PATH_MAX 1024
 #endif
 
-void
+_X_EXPORT void
 DoConfigure(void)
 {
     int i,j, screennum = -1;
diff --git a/hw/xfree86/common/xf86Cursor.c b/hw/xfree86/common/xf86Cursor.c
index 4336ca5..f7a469f 100644
--- a/hw/xfree86/common/xf86Cursor.c
+++ b/hw/xfree86/common/xf86Cursor.c
@@ -89,7 +89,7 @@ static Bool HardEdges;
  *      is valid if specified.
  */
 
-void
+_X_EXPORT void
 xf86InitViewport(ScrnInfoPtr pScr)
 {
 
@@ -185,7 +185,7 @@ xf86PointerMoved(int scrnIndex, int x, int y)
  *	Enable/disable ZoomViewport
  */
 
-void
+_X_EXPORT void
 xf86LockZoom(ScreenPtr pScreen, Bool lock)
 {
   XF86SCRNINFO(pScreen)->zoomLocked = lock;
@@ -322,7 +322,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
  *      Reinitialize the visual part of the screen for another mode.
  */
 
-void
+_X_EXPORT void
 xf86ZoomViewport(ScreenPtr pScreen, int zoom)
 {
   ScrnInfoPtr    pScr = XF86SCRNINFO(pScreen);
@@ -579,7 +579,7 @@ FillOutEdge(xf86EdgePtr pEdge, int limit)
  * on 32 bit architectures, 64 on 64 bit architectures.
  */
 
-void
+_X_EXPORT void
 xf86InitOrigins(void)
 {
     unsigned long screensLeft, prevScreensLeft, mask;
diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
index a06f285..f378c13 100644
--- a/hw/xfree86/common/xf86DGA.c
+++ b/hw/xfree86/common/xf86DGA.c
@@ -334,7 +334,7 @@ DGAUninstallColormap(ColormapPtr pmap)
     pScreen->UninstallColormap = DGAUninstallColormap;
 }
 
-int
+_X_EXPORT int
 xf86SetDGAMode(
    int index,
    int num,
@@ -567,7 +567,7 @@ DGAActive(int index)
 
 /* Called by the event code in case the server is abruptly terminated */
 
-void 
+_X_EXPORT void 
 DGAShutdown()
 {
     ScrnInfoPtr pScrn;
@@ -892,7 +892,7 @@ DGACopyModeInfo(
 }
 
 
-Bool 
+_X_EXPORT Bool 
 DGAVTSwitch(void)
 {
     ScreenPtr pScreen;
@@ -914,7 +914,7 @@ DGAVTSwitch(void)
    return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DGAStealKeyEvent(DeviceIntPtr dev, int index, int key_code, int is_down)
 {
    DGAScreenPtr pScreenPriv;
@@ -941,7 +941,7 @@ DGAStealKeyEvent(DeviceIntPtr dev, int index, int key_code, int is_down)
 
 static int  DGAMouseX, DGAMouseY;
 
-Bool
+_X_EXPORT Bool
 DGAStealMotionEvent(DeviceIntPtr dev, int index, int dx, int dy)
 {
    DGAScreenPtr pScreenPriv;
@@ -976,7 +976,7 @@ DGAStealMotionEvent(DeviceIntPtr dev, int index, int dx, int dy)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DGAStealButtonEvent(DeviceIntPtr dev, int index, int button, int is_down)
 {
     DGAScreenPtr pScreenPriv;
@@ -1004,7 +1004,7 @@ DGAStealButtonEvent(DeviceIntPtr dev, int index, int button, int is_down)
 
 /* We have the power to steal or modify events that are about to get queued */
 
-Bool
+_X_EXPORT Bool
 DGAIsDgaEvent (xEvent *e)
 {
     int	    coreEquiv;
diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 0ddee4b..aec43e6 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -130,7 +130,7 @@ typedef struct x_IHRec {
 static IHPtr InputHandlers = NULL;
 
 
-Bool
+_X_EXPORT Bool
 LegalModifier(unsigned int key, DeviceIntPtr pDev)
 {
     return TRUE;
@@ -141,7 +141,7 @@ LegalModifier(unsigned int key, DeviceIntPtr pDev)
  *      Function used for screensaver purposes by the os module. Returns the
  *      time in milliseconds since there last was any input.
  */
-int
+_X_EXPORT int
 TimeSinceLastInputEvent()
 {
   if (xf86Info.lastEventTime == 0) {
@@ -166,7 +166,7 @@ SetTimeSinceLastInputEvent()
  *      correct chronological order. Only reads from the system pointer
  *      and keyboard.
  */
-void
+_X_EXPORT void
 ProcessInputEvents ()
 {
   int x, y;
@@ -251,7 +251,7 @@ xf86ProcessActionEvent(ActionEvent action, void *arg)
  */
 
 /* ARGSUSED */
-void
+_X_EXPORT void
 xf86Wakeup(pointer blockData, int err, pointer pReadmask)
 {
     fd_set* LastSelectMask = (fd_set*)pReadmask;
@@ -359,7 +359,7 @@ xf86InterceptSigIll(void (*sigillhandler)(void))
  * xf86SigHandler --
  *    Catch unexpected signals and exit or continue cleanly.
  */
-void
+_X_EXPORT void
 xf86SigHandler(int signo)
 {
   if ((signo == SIGILL) && xf86SigIllHandler) {
@@ -802,7 +802,7 @@ xf86EnableVTSwitch(Bool new)
     return old;
 }
 
-void
+_X_EXPORT void
 xf86ReloadInputDevs(int sig)
 {
   InputInfoPtr pInfo;
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index e479557..385c3e1 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -48,7 +48,7 @@
 
 /* Index into pScreen.devPrivates */
 static int xf86CreateRootWindowKeyIndex;
-DevPrivateKey xf86CreateRootWindowKey = &xf86CreateRootWindowKeyIndex;
+_X_EXPORT DevPrivateKey xf86CreateRootWindowKey = &xf86CreateRootWindowKeyIndex;
 /* Index of ScrnInfo in pScreen.devPrivates */
 static int xf86ScreenKeyIndex;
 _X_EXPORT DevPrivateKey xf86ScreenKey = &xf86ScreenKeyIndex;
@@ -92,7 +92,7 @@ _X_EXPORT const unsigned char byte_reversed[256] =
 };
 
 /* Globals that input drivers may access */
-InputInfoPtr xf86InputDevs = NULL;
+_X_EXPORT InputInfoPtr xf86InputDevs = NULL;
 
 
 /* Globals that video drivers may not access */
@@ -139,29 +139,29 @@ _X_EXPORT xf86InfoRec xf86Info = {
     .autoEnableDevices          = FALSE
 #endif
 };
-const char *xf86ConfigFile = NULL;
-const char *xf86InputDeviceList = NULL;
-const char *xf86ModulePath = DEFAULT_MODULE_PATH;
-MessageType xf86ModPathFrom = X_DEFAULT;
-const char *xf86LogFile = DEFAULT_LOGPREFIX;
-MessageType xf86LogFileFrom = X_DEFAULT;
-Bool xf86LogFileWasOpened = FALSE;
-serverLayoutRec xf86ConfigLayout = {NULL, };
+_X_EXPORT const char *xf86ConfigFile = NULL;
+_X_EXPORT const char *xf86InputDeviceList = NULL;
+_X_EXPORT const char *xf86ModulePath = DEFAULT_MODULE_PATH;
+_X_EXPORT MessageType xf86ModPathFrom = X_DEFAULT;
+_X_EXPORT const char *xf86LogFile = DEFAULT_LOGPREFIX;
+_X_EXPORT MessageType xf86LogFileFrom = X_DEFAULT;
+_X_EXPORT Bool xf86LogFileWasOpened = FALSE;
+_X_EXPORT serverLayoutRec xf86ConfigLayout = {NULL, };
 _X_EXPORT confDRIRec xf86ConfigDRI = {0, };
 XF86ConfigPtr xf86configptr = NULL;
-Bool xf86Resetting = FALSE;
-Bool xf86Initialising = FALSE;
-Bool xf86DoProbe = FALSE;
-Bool xf86DoConfigure = FALSE;
-Bool xf86DoShowOptions = FALSE;
-Bool xf86DoModalias = FALSE;
-DriverPtr *xf86DriverList = NULL;
-int xf86NumDrivers = 0;
+_X_EXPORT Bool xf86Resetting = FALSE;
+_X_EXPORT Bool xf86Initialising = FALSE;
+_X_EXPORT Bool xf86DoProbe = FALSE;
+_X_EXPORT Bool xf86DoConfigure = FALSE;
+_X_EXPORT Bool xf86DoShowOptions = FALSE;
+_X_EXPORT Bool xf86DoModalias = FALSE;
+_X_EXPORT DriverPtr *xf86DriverList = NULL;
+_X_EXPORT int xf86NumDrivers = 0;
 InputDriverPtr *xf86InputDriverList = NULL;
 int xf86NumInputDrivers = 0;
-int xf86NumScreens = 0;
+_X_EXPORT int xf86NumScreens = 0;
 
-const char *xf86VisualNames[] = {
+_X_EXPORT const char *xf86VisualNames[] = {
 	"StaticGray",
 	"GrayScale",
 	"StaticColor",
@@ -172,36 +172,36 @@ const char *xf86VisualNames[] = {
 
 /* Parameters set only from the command line */
 char *xf86ServerName = "no-name";
-Bool xf86fpFlag = FALSE;
-Bool xf86sFlag = FALSE;
-Bool xf86bsEnableFlag = FALSE;
-Bool xf86bsDisableFlag = FALSE;
-Bool xf86silkenMouseDisableFlag = FALSE;
+_X_EXPORT Bool xf86fpFlag = FALSE;
+_X_EXPORT Bool xf86sFlag = FALSE;
+_X_EXPORT Bool xf86bsEnableFlag = FALSE;
+_X_EXPORT Bool xf86bsDisableFlag = FALSE;
+_X_EXPORT Bool xf86silkenMouseDisableFlag = FALSE;
 #ifdef HAVE_ACPI
-Bool xf86acpiDisableFlag = FALSE;
+_X_EXPORT Bool xf86acpiDisableFlag = FALSE;
 #endif
-char *xf86LayoutName = NULL;
-char *xf86ScreenName = NULL;
-char *xf86PointerName = NULL;
-char *xf86KeyboardName = NULL;
-Bool xf86ProbeOnly = FALSE;
-int xf86Verbose = DEFAULT_VERBOSE;
-int xf86LogVerbose = DEFAULT_LOG_VERBOSE;
-int xf86FbBpp = -1;
-Pix24Flags xf86Pix24 = Pix24DontCare;
-int xf86Depth = -1;
-rgb xf86Weight = {0, 0, 0};
-Bool xf86FlipPixels = FALSE;
-Gamma xf86Gamma = {0.0, 0.0, 0.0};
-Bool xf86AllowMouseOpenFail = FALSE;
+_X_EXPORT char *xf86LayoutName = NULL;
+_X_EXPORT char *xf86ScreenName = NULL;
+_X_EXPORT char *xf86PointerName = NULL;
+_X_EXPORT char *xf86KeyboardName = NULL;
+_X_EXPORT Bool xf86ProbeOnly = FALSE;
+_X_EXPORT int xf86Verbose = DEFAULT_VERBOSE;
+_X_EXPORT int xf86LogVerbose = DEFAULT_LOG_VERBOSE;
+_X_EXPORT int xf86FbBpp = -1;
+_X_EXPORT Pix24Flags xf86Pix24 = Pix24DontCare;
+_X_EXPORT int xf86Depth = -1;
+_X_EXPORT rgb xf86Weight = {0, 0, 0};
+_X_EXPORT Bool xf86FlipPixels = FALSE;
+_X_EXPORT Gamma xf86Gamma = {0.0, 0.0, 0.0};
+_X_EXPORT Bool xf86AllowMouseOpenFail = FALSE;
 #ifdef XF86VIDMODE
-Bool xf86VidModeDisabled = FALSE;
-Bool xf86VidModeAllowNonLocal = FALSE;
+_X_EXPORT Bool xf86VidModeDisabled = FALSE;
+_X_EXPORT Bool xf86VidModeAllowNonLocal = FALSE;
 #endif
-RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
+_X_EXPORT RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
 _X_EXPORT Bool xf86inSuspend = FALSE;
 _X_EXPORT Bool xorgHWAccess = FALSE;
 
-struct pci_slot_match xf86IsolateDevice = {
+_X_EXPORT struct pci_slot_match xf86IsolateDevice = {
     PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, 0
 };
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index d626f67..2c550fe 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -133,7 +133,7 @@ xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags)
     xf86InputDriverList[xf86NumInputDrivers - 1]->refCount = 0;
 }
 
-void
+_X_EXPORT void
 xf86DeleteInputDriver(int drvIndex)
 {
     if (xf86InputDriverList[drvIndex] && xf86InputDriverList[drvIndex]->module)
@@ -142,7 +142,7 @@ xf86DeleteInputDriver(int drvIndex)
     xf86InputDriverList[drvIndex] = NULL;
 }
 
-InputDriverPtr
+_X_EXPORT InputDriverPtr
 xf86LookupInputDriver(const char *name)
 {
     int i;
@@ -155,7 +155,7 @@ xf86LookupInputDriver(const char *name)
     return NULL;
 }
 
-InputInfoPtr
+_X_EXPORT InputInfoPtr
 xf86LookupInput(const char *name)
 {
     InputInfoPtr p;
@@ -1334,7 +1334,7 @@ xf86ErrorF(const char *format, ...)
 }
 
 
-void
+_X_EXPORT void
 xf86LogInit()
 {
     char *lf = NULL;
@@ -1365,7 +1365,7 @@ xf86LogInit()
     free(lf);
 }
 
-void
+_X_EXPORT void
 xf86CloseLog()
 {
     LogClose();
@@ -2143,7 +2143,7 @@ xf86ServerIsResetting()
 }
 
 
-Bool
+_X_EXPORT Bool
 xf86ServerIsInitialising()
 {
     return xf86Initialising;
@@ -2583,7 +2583,7 @@ xf86ConfigPciEntityInactive(EntityInfoPtr pEnt, PciChipsets *p_chip,
     xf86SetEntityFuncs(pEnt->index,init,enter,leave,private);
 }
 
-void
+_X_EXPORT void
 xf86ConfigFbEntityInactive(EntityInfoPtr pEnt, EntityProc init,
 			   EntityProc enter, EntityProc leave, pointer private)
 {
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 922e7b3..b2bf8db 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -613,7 +613,7 @@ check_for_matching_devices(DriverPtr drvp)
  * If a device can be successfully probed by the driver, \c TRUE is
  * returned.  Otherwise, \c FALSE is returned.
  */
-Bool
+_X_EXPORT Bool
 xf86CallDriverProbe( DriverPtr drv, Bool detect_only )
 {
     Bool     foundScreen = FALSE;
@@ -719,7 +719,7 @@ DoProbe(void)
  *      That includes vt-manager setup, querying all possible devices and
  *      collecting the pixmap formats.
  */
-void
+_X_EXPORT void
 InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
 {
   int                    i, j, k, scr_index;
@@ -1305,7 +1305,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
  *      Initialize all supported input devices.
  */
 
-void
+_X_EXPORT void
 InitInput(argc, argv)
      int	  argc;
      char	  **argv;
@@ -1334,7 +1334,7 @@ InitInput(argc, argv)
  *      is called by dix before establishing the well known sockets.
  */
 
-void
+_X_EXPORT void
 OsVendorInit()
 {
   static Bool beenHere = FALSE;
@@ -1379,7 +1379,7 @@ OsVendorInit()
  *      checking here, since there should be restored as much as possible.
  */
 
-void
+_X_EXPORT void
 ddxGiveUp()
 {
     int i;
@@ -1424,7 +1424,7 @@ ddxGiveUp()
  *      are closed.
  */
 
-void
+_X_EXPORT void
 AbortDDX()
 {
   int i;
@@ -1460,7 +1460,7 @@ AbortDDX()
   ddxGiveUp();
 }
 
-void
+_X_EXPORT void
 OsVendorFatalError()
 {
 #ifdef VENDORSUPPORT
@@ -1476,7 +1476,7 @@ OsVendorFatalError()
     ErrorF("\n");
 }
 
-int
+_X_EXPORT int
 xf86SetVerbosity(int verb)
 {
     int save = xf86Verbose;
@@ -1486,7 +1486,7 @@ xf86SetVerbosity(int verb)
     return save;
 }
 
-int
+_X_EXPORT int
 xf86SetLogVerbosity(int verb)
 {
     int save = xf86LogVerbose;
@@ -1517,7 +1517,7 @@ xf86PrintDefaultLibraryPath(void)
  */
 
 /* ARGSUSED */
-int
+_X_EXPORT int
 ddxProcessArgument(int argc, char **argv, int i)
 {
   /*
@@ -1852,7 +1852,7 @@ ddxProcessArgument(int argc, char **argv, int i)
  *      Maybe the user now knows what really to do ...
  */
 
-void
+_X_EXPORT void
 ddxUseMsg()
 {
   ErrorF("\n");
@@ -1906,7 +1906,7 @@ ddxUseMsg()
 /*
  * xf86LoadModules iterates over a list that is being passed in.
  */
-Bool
+_X_EXPORT Bool
 xf86LoadModules(char **list, pointer *optlist)
 {
     int errmaj, errmin;
diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index 50a7d9c..f4d35fc 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -855,7 +855,7 @@ xf86NameCmp(const char *s1, const char *s2)
     return xf86nameCompare(s1, s2);
 }
 
-char *
+_X_EXPORT char *
 xf86NormalizeName(const char *s)
 {
     char *ret, *q;
diff --git a/hw/xfree86/common/xf86PM.c b/hw/xfree86/common/xf86PM.c
index 7c8320d..87b9fa8 100644
--- a/hw/xfree86/common/xf86PM.c
+++ b/hw/xfree86/common/xf86PM.c
@@ -34,8 +34,8 @@
 #include "xf86Priv.h"
 #include "xf86Xinput.h"
 
-int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num) = NULL;
-pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event) = NULL;
+_X_EXPORT int (*xf86PMGetEventFromOs)(int fd,pmEvent *events,int num) = NULL;
+_X_EXPORT pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event) = NULL;
 
 static Bool suspended = FALSE;
 
@@ -178,7 +178,7 @@ DoApmEvent(pmEvent event, Bool undo)
 
 #define MAX_NO_EVENTS 8
 
-void
+_X_EXPORT void
 xf86HandlePMEvents(int fd, pointer data)
 {
     pmEvent events[MAX_NO_EVENTS];
diff --git a/hw/xfree86/common/xf86RAC.c b/hw/xfree86/common/xf86RAC.c
index 24d29e4..1ee5e57 100644
--- a/hw/xfree86/common/xf86RAC.c
+++ b/hw/xfree86/common/xf86RAC.c
@@ -262,7 +262,7 @@ static int RACGCKeyIndex;
 static DevPrivateKey RACGCKey = &RACGCKeyIndex;
 
 
-Bool 
+_X_EXPORT Bool 
 xf86RACInit(ScreenPtr pScreen, unsigned int flag)
 {
     ScrnInfoPtr pScrn;
diff --git a/hw/xfree86/common/xf86RandR.c b/hw/xfree86/common/xf86RandR.c
index 8471914..79d3017 100644
--- a/hw/xfree86/common/xf86RandR.c
+++ b/hw/xfree86/common/xf86RandR.c
@@ -411,7 +411,7 @@ xf86RandRSetNewVirtualAndDimensions(ScreenPtr pScreen,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 xf86RandRInit (ScreenPtr    pScreen)
 {
     rrScrPrivPtr	rp;
diff --git a/hw/xfree86/common/xf86ShowOpts.c b/hw/xfree86/common/xf86ShowOpts.c
index b8efa73..077d936 100644
--- a/hw/xfree86/common/xf86ShowOpts.c
+++ b/hw/xfree86/common/xf86ShowOpts.c
@@ -76,7 +76,7 @@ optionTypeToSting(OptionValueType type)
     }
 }
 
-void DoShowOptions (void) {
+_X_EXPORT void DoShowOptions (void) {
 	int  i = 0;
 	char **vlist  = 0;
 	char *pSymbol = 0;
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 2cb41e5..376af77 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -96,7 +96,7 @@
 
 #include "os.h"
 
-EventListPtr xf86Events = NULL;
+_X_EXPORT EventListPtr xf86Events = NULL;
 
 /**
  * Eval config and modify DeviceVelocityRec accordingly
@@ -360,7 +360,7 @@ xf86ActivateDevice(LocalDevicePtr local)
  ***********************************************************************
  */
 
-void
+_X_EXPORT void
 OpenInputDevice(DeviceIntPtr	dev,
                 ClientPtr	client,
                 int		*status)
@@ -371,7 +371,7 @@ OpenInputDevice(DeviceIntPtr	dev,
     *status = Success;
 }
 
-void
+_X_EXPORT void
 CloseInputDevice(DeviceIntPtr dev,
                  ClientPtr client)
 {
@@ -390,7 +390,7 @@ CloseInputDevice(DeviceIntPtr dev,
  ***********************************************************************
  */
 
-int
+_X_EXPORT int
 SetDeviceMode (ClientPtr client, DeviceIntPtr dev, int mode)
 {
   LocalDevicePtr        local = (LocalDevicePtr)dev->public.devicePrivate;
@@ -416,7 +416,7 @@ SetDeviceMode (ClientPtr client, DeviceIntPtr dev, int mode)
  ***********************************************************************
  */
 
-int
+_X_EXPORT int
 SetDeviceValuators (ClientPtr client, DeviceIntPtr dev, int *valuators,
                     int first_valuator, int num_valuators)
 {
@@ -439,7 +439,7 @@ SetDeviceValuators (ClientPtr client, DeviceIntPtr dev, int *valuators,
  ***********************************************************************
  */
 
-int
+_X_EXPORT int
 ChangeDeviceControl (ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control)
 {
   LocalDevicePtr        local = (LocalDevicePtr)dev->public.devicePrivate;
@@ -462,7 +462,7 @@ ChangeDeviceControl (ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control)
   }
 }
 
-void
+_X_EXPORT void
 AddOtherInputDevices()
 {
 }
diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index e578447..3944d78 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -1098,7 +1098,7 @@ xf86GetGammaRamp(
     return Success;
 }
 
-int
+_X_EXPORT int
 xf86ChangeGamma(
    ScreenPtr pScreen,
    Gamma gamma
diff --git a/hw/xfree86/common/xf86fbBus.c b/hw/xfree86/common/xf86fbBus.c
index 102f6b1..bd7d935 100644
--- a/hw/xfree86/common/xf86fbBus.c
+++ b/hw/xfree86/common/xf86fbBus.c
@@ -51,7 +51,7 @@
 
 #include "xf86RAC.h"
 
-Bool fbSlotClaimed = FALSE;
+_X_EXPORT Bool fbSlotClaimed = FALSE;
 
 _X_EXPORT int
 xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active)
@@ -79,7 +79,7 @@ xf86ClaimFbSlot(DriverPtr drvp, int chipset, GDevPtr dev, Bool active)
 /*
  * Get the list of FB "slots" claimed by a screen
  */
-int
+_X_EXPORT int
 xf86GetFbInfoForScreen(int scrnIndex)
 {
     int num = 0;
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index b6ec4ad..df8d8a5 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -53,7 +53,7 @@
 #include "xf86RAC.h"
 
 /* Bus-specific globals */
-Bool pciSlotClaimed = FALSE;
+_X_EXPORT Bool pciSlotClaimed = FALSE;
 static struct pci_device ** xf86PciVideoInfo = NULL;	/* PCI probe for video hw */
 
 
diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c
index af2b145..78e5d7c 100644
--- a/hw/xfree86/common/xf86sbusBus.c
+++ b/hw/xfree86/common/xf86sbusBus.c
@@ -41,7 +41,7 @@
 #include "xf86sbusBus.h"
 #include "xf86Sbus.h"
 
-Bool sbusSlotClaimed = FALSE;
+_X_EXPORT Bool sbusSlotClaimed = FALSE;
 
 static int xf86nSbusInfo;
 
@@ -79,7 +79,7 @@ CheckSbusDevice(const char *device, int fbNum)
     psdp->fd = -1;
 }
 
-void
+_X_EXPORT void
 xf86SbusProbe(void)
 {
     int i, useProm = 0;
diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
index 4791f1b..cc84525 100644
--- a/hw/xfree86/common/xf86xv.c
+++ b/hw/xfree86/common/xf86xv.c
@@ -113,7 +113,7 @@ static Bool xf86XVInitAdaptors(ScreenPtr, XF86VideoAdaptorPtr*, int);
 static int XF86XVWindowKeyIndex;
 static DevPrivateKey XF86XVWindowKey = &XF86XVWindowKeyIndex;
 static int XF86XvScreenKeyIndex;
-DevPrivateKey XF86XvScreenKey = &XF86XvScreenKeyIndex;
+_X_EXPORT DevPrivateKey XF86XvScreenKey = &XF86XvScreenKeyIndex;
 static unsigned long PortResource = 0;
 
 _X_EXPORT DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
diff --git a/hw/xfree86/common/xorgHelper.c b/hw/xfree86/common/xorgHelper.c
index 7f9dd50..00fe7ca 100644
--- a/hw/xfree86/common/xorgHelper.c
+++ b/hw/xfree86/common/xorgHelper.c
@@ -16,7 +16,7 @@
 #include "xorgVersion.h"
 
 
-CARD32
+_X_EXPORT CARD32
 xorgGetVersion()
 {
     return XORG_VERSION_CURRENT;
diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
index 1e57731..588e254 100644
--- a/hw/xfree86/ddc/interpret_edid.c
+++ b/hw/xfree86/ddc/interpret_edid.c
@@ -163,7 +163,7 @@ xf86InterpretEDID(int scrnIndex, Uchar *block)
     return NULL;
 }
 
-xf86MonPtr
+_X_EXPORT xf86MonPtr
 xf86InterpretEEDID(int scrnIndex, Uchar *block)
 {
     xf86MonPtr m;
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
index df0030e..e712b42 100644
--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
+++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
@@ -62,9 +62,9 @@ static void DGAClientStateChange (CallbackListPtr*, pointer, pointer);
 
 static ClientPtr DGAClients[MAXSCREENS];
 
-unsigned char DGAReqCode = 0;
-int DGAErrorBase;
-int DGAEventBase;
+_X_EXPORT unsigned char DGAReqCode = 0;
+_X_EXPORT int DGAErrorBase;
+_X_EXPORT int DGAEventBase;
 
 static int DGAClientPrivateKeyIndex;
 static DevPrivateKey DGAClientPrivateKey = &DGAClientPrivateKeyIndex;
diff --git a/hw/xfree86/dixmods/xkbKillSrv.c b/hw/xfree86/dixmods/xkbKillSrv.c
index 9074fd3..ac9c412 100644
--- a/hw/xfree86/dixmods/xkbKillSrv.c
+++ b/hw/xfree86/dixmods/xkbKillSrv.c
@@ -45,7 +45,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "xf86.h"
 
-int
+_X_EXPORT int
 XkbDDXTerminateServer(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     if (dev != inputInfo.keyboard)
diff --git a/hw/xfree86/dixmods/xkbPrivate.c b/hw/xfree86/dixmods/xkbPrivate.c
index db21a4e..e2a1273 100644
--- a/hw/xfree86/dixmods/xkbPrivate.c
+++ b/hw/xfree86/dixmods/xkbPrivate.c
@@ -17,7 +17,7 @@
 #include "os.h"
 #include "xf86.h"
 
-int
+_X_EXPORT int
 XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     XkbAnyAction *xf86act = &(act->any);
diff --git a/hw/xfree86/dixmods/xkbVT.c b/hw/xfree86/dixmods/xkbVT.c
index e6d69e2..aaa4665 100644
--- a/hw/xfree86/dixmods/xkbVT.c
+++ b/hw/xfree86/dixmods/xkbVT.c
@@ -45,7 +45,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "xf86.h"
 
-int
+_X_EXPORT int
 XkbDDXSwitchScreen(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     int scrnnum = XkbSAScreen(&act->screen);
diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
index 35b1fcf..370c6a2 100644
--- a/hw/xfree86/dri/dri.c
+++ b/hw/xfree86/dri/dri.c
@@ -132,26 +132,26 @@ DRIOpenDRMCleanup(DRIEntPrivPtr pDRIEntPriv)
     }
 }
 
-int
+_X_EXPORT int
 DRIMasterFD(ScrnInfoPtr pScrn)
 {
     return DRI_ENT_PRIV(pScrn)->drmFD;
 }
 
-void *
+_X_EXPORT void *
 DRIMasterSareaPointer(ScrnInfoPtr pScrn)
 {
     return DRI_ENT_PRIV(pScrn)->pLSAREA;
 }
 
-drm_handle_t
+_X_EXPORT drm_handle_t
 DRIMasterSareaHandle(ScrnInfoPtr pScrn)
 {
     return DRI_ENT_PRIV(pScrn)->hLSAREA;
 }
 
 
-Bool
+_X_EXPORT Bool
 DRIOpenDRMMaster(ScrnInfoPtr pScrn,
 		 unsigned long sAreaSize,
 		 const char *busID,
@@ -785,7 +785,7 @@ drmServerInfo DRIDRMServerInfo =  {
   dri_drm_get_perms,
 };
 
-Bool
+_X_EXPORT Bool
 DRIExtensionInit(void)
 {
     if (!DRIScreenPrivKey || DRIGeneration != serverGeneration) {
@@ -800,7 +800,7 @@ DRIExtensionInit(void)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 DRIReset(void)
 {
     /*
@@ -880,7 +880,7 @@ DRIGetClientDriverName(ScreenPtr pScreen,
    DRICreateContextPriv returns a pointer to newly allocated
    DRIContextPriv, and returns the kernel drm_context_t in pHWContext. */
 
-DRIContextPrivPtr
+_X_EXPORT DRIContextPrivPtr
 DRICreateContextPriv(ScreenPtr pScreen,
 		     drm_context_t * pHWContext,
 		     DRIContextFlags flags)
@@ -894,7 +894,7 @@ DRICreateContextPriv(ScreenPtr pScreen,
     return DRICreateContextPrivFromHandle(pScreen, *pHWContext, flags);
 }
 
-DRIContextPrivPtr
+_X_EXPORT DRIContextPrivPtr
 DRICreateContextPrivFromHandle(ScreenPtr pScreen,
 			       drm_context_t hHWContext,
 			       DRIContextFlags flags)
@@ -940,7 +940,7 @@ DRICreateContextPrivFromHandle(ScreenPtr pScreen,
     return pDRIContextPriv;
 }
 
-Bool
+_X_EXPORT Bool
 DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv)
 {
     DRIScreenPrivPtr pDRIPriv;
@@ -1059,7 +1059,7 @@ DRIDestroyContext(ScreenPtr pScreen, XID context)
 }
 
 /* DRIContextPrivDelete is called by the resource manager. */
-Bool
+_X_EXPORT Bool
 DRIContextPrivDelete(pointer pResource, XID id)
 {
     DRIContextPrivPtr pDRIContextPriv = (DRIContextPrivPtr)pResource;
@@ -1361,7 +1361,7 @@ DRIDestroyDrawable(ScreenPtr pScreen, ClientPtr client, DrawablePtr pDrawable)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRIDrawablePrivDelete(pointer pResource, XID id)
 {
     WindowPtr pWin;
@@ -1645,7 +1645,7 @@ DRIBlockHandler(pointer blockData, OSTimePtr pTimeout, pointer pReadmask)
     }
 }
 
-void
+_X_EXPORT void
 DRIDoWakeupHandler(int screenNum, pointer wakeupData,
                    unsigned long result, pointer pReadmask)
 {
@@ -1664,7 +1664,7 @@ DRIDoWakeupHandler(int screenNum, pointer wakeupData,
     }
 }
 
-void
+_X_EXPORT void
 DRIDoBlockHandler(int screenNum, pointer blockData,
                   pointer pTimeout, pointer pReadmask)
 {
@@ -1688,7 +1688,7 @@ DRIDoBlockHandler(int screenNum, pointer blockData,
     DRIUnlock(pScreen);
 }
 
-void
+_X_EXPORT void
 DRISwapContext(int drmFD, void *oldctx, void *newctx)
 {
     DRIContextPrivPtr oldContext      = (DRIContextPrivPtr)oldctx;
@@ -1835,13 +1835,13 @@ DRISwapContext(int drmFD, void *oldctx, void *newctx)
 					  newContextStore);
 }
 
-void* 
+_X_EXPORT void* 
 DRIGetContextStore(DRIContextPrivPtr context)
 {
     return((void *)context->pContextStore);
 }
 
-void
+_X_EXPORT void
 DRIWindowExposures(WindowPtr pWin, RegionPtr prgn, RegionPtr bsreg)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -1891,7 +1891,7 @@ DRITreeTraversal(WindowPtr pWin, pointer data)
     return WT_WALKCHILDREN;
 }
 
-Bool
+_X_EXPORT Bool
 DRIDestroyWindow(WindowPtr pWin)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -1916,7 +1916,7 @@ DRIDestroyWindow(WindowPtr pWin)
     return retval;
 }
 
-void
+_X_EXPORT void
 DRICopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -2055,7 +2055,7 @@ DRILockTree(ScreenPtr pScreen)
     }
 }
 
-int
+_X_EXPORT int
 DRIValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
 {
     ScreenPtr pScreen = pParent->drawable.pScreen;
@@ -2081,7 +2081,7 @@ DRIValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
     return returnValue;
 }
 
-void
+_X_EXPORT void
 DRIPostValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
 {
     ScreenPtr pScreen;
@@ -2107,7 +2107,7 @@ DRIPostValidateTree(WindowPtr pParent, WindowPtr pChild, VTKind kind)
     }
 }
 
-void
+_X_EXPORT void
 DRIClipNotify(WindowPtr pWin, int dx, int dy)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -2174,7 +2174,7 @@ DRIGetDrawableIndex(WindowPtr pWin)
     return index;
 }
 
-unsigned int
+_X_EXPORT unsigned int
 DRIGetDrawableStamp(ScreenPtr pScreen, CARD32 drawable_index)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2182,7 +2182,7 @@ DRIGetDrawableStamp(ScreenPtr pScreen, CARD32 drawable_index)
 }
 
 
-void
+_X_EXPORT void
 DRIPrintDrawableLock(ScreenPtr pScreen, char *msg)
 {
     DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen);
@@ -2271,7 +2271,7 @@ DRIGetTexOffsetFuncs(ScreenPtr pScreen,
  * call the lowerlevel functions, and choose whether they will be
  * called at every level of recursion (eg in validatetree).
  */
-DRIWrappedFuncsRec *
+_X_EXPORT DRIWrappedFuncsRec *
 DRIGetWrappedFuncs(ScreenPtr pScreen)
 {
     return &(DRI_SCREEN_PRIV(pScreen)->wrap);
@@ -2297,7 +2297,7 @@ _DRIAdjustFrame(ScrnInfoPtr pScrn, DRIScreenPrivPtr pDRIPriv, int x, int y)
     pDRIPriv->pSAREA->frame.height = pScrn->frameY1 - y + 1;
 }
 
-void
+_X_EXPORT void
 DRIAdjustFrame(int scrnIndex, int x, int y, int flags)
 {
     ScreenPtr        pScreen  = screenInfo.screens[scrnIndex];
@@ -2479,7 +2479,7 @@ static void drmSIGIOHandler(int interrupt, void *closure)
 }
 
 
-int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *))
+_X_EXPORT int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *))
 {
     drmHashEntry     *entry;
 
@@ -2489,7 +2489,7 @@ int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *))
     return xf86InstallSIGIOHandler(fd, drmSIGIOHandler, 0);
 }
 
-int drmRemoveSIGIOHandler(int fd)
+_X_EXPORT int drmRemoveSIGIOHandler(int fd)
 {
     drmHashEntry     *entry = drmGetEntry(fd);
 
diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index 5db2629..64132a7 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -240,7 +240,7 @@ DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 DRI2Authenticate(ScreenPtr pScreen, drm_magic_t magic)
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
@@ -268,7 +268,7 @@ DRI2ClipNotify(WindowPtr pWin, int dx, int dy)
     }
 }
 
-Bool
+_X_EXPORT Bool
 DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
 {
     DRI2ScreenPtr ds;
@@ -295,7 +295,7 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 DRI2CloseScreen(ScreenPtr pScreen)
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
diff --git a/hw/xfree86/dummylib/xalloc.c b/hw/xfree86/dummylib/xalloc.c
index b671d4d..52183ea 100644
--- a/hw/xfree86/dummylib/xalloc.c
+++ b/hw/xfree86/dummylib/xalloc.c
@@ -94,7 +94,7 @@ Xstrdup(const char *s)
     return sd;
 }
 
-char *
+_X_EXPORT char *
 XNFstrdup(const char *s)
 {
     char *sd;
diff --git a/hw/xfree86/dummylib/xf86servisinit.c b/hw/xfree86/dummylib/xf86servisinit.c
index c356a2b..077cab2 100644
--- a/hw/xfree86/dummylib/xf86servisinit.c
+++ b/hw/xfree86/dummylib/xf86servisinit.c
@@ -11,7 +11,7 @@
  * Utility functions required by libxf86_os. 
  */
 
-Bool
+_X_EXPORT Bool
 xf86ServerIsInitialising()
 {
     return FALSE;
diff --git a/hw/xfree86/dummylib/xf86verbose.c b/hw/xfree86/dummylib/xf86verbose.c
index c4a45d6..324d891 100644
--- a/hw/xfree86/dummylib/xf86verbose.c
+++ b/hw/xfree86/dummylib/xf86verbose.c
@@ -8,5 +8,5 @@
 #include "xf86Priv.h"
 
 /* Dummy variables */
-int xf86Verbose = 0;
+_X_EXPORT int xf86Verbose = 0;
 
diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index 119bed3..ecb63b8 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -126,7 +126,7 @@ typedef struct {
 
 } fbdevHWRec, *fbdevHWPtr;
 
-Bool
+_X_EXPORT Bool
 fbdevHWGetRec(ScrnInfoPtr pScrn)
 {
 	fbdevHWPtr fPtr;
@@ -840,7 +840,7 @@ fbdevHWRestore(ScrnInfoPtr pScrn)
 /* -------------------------------------------------------------------- */
 /* callback for xf86HandleColormaps                                     */
 
-void
+_X_EXPORT void
 fbdevHWLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
 		 LOCO *colors, VisualPtr pVisual)
 {
@@ -872,7 +872,7 @@ fbdevHWLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
 /* -------------------------------------------------------------------- */
 /* these can be hooked directly into ScrnInfoRec                        */
 
-ModeStatus
+_X_EXPORT ModeStatus
 fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 {
 	ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
diff --git a/hw/xfree86/fbdevhw/fbdevhwstub.c b/hw/xfree86/fbdevhw/fbdevhwstub.c
index 58f93b7..1c3f2f6 100644
--- a/hw/xfree86/fbdevhw/fbdevhwstub.c
+++ b/hw/xfree86/fbdevhw/fbdevhwstub.c
@@ -9,7 +9,7 @@
 /* Stubs for the static server on platforms that don't support fbdev */
 
 
-Bool
+_X_EXPORT Bool
 fbdevHWGetRec(ScrnInfoPtr pScrn)
 {
 	return FALSE;
@@ -126,13 +126,13 @@ fbdevHWRestore(ScrnInfoPtr pScrn)
 {
 }
 
-void
+_X_EXPORT void
 fbdevHWLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
 		 LOCO *colors, VisualPtr pVisual)
 {
 }
 
-ModeStatus
+_X_EXPORT ModeStatus
 fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags)
 {
 	return MODE_ERROR;
diff --git a/hw/xfree86/i2c/xf86i2c.c b/hw/xfree86/i2c/xf86i2c.c
index 0993699..c659b17 100644
--- a/hw/xfree86/i2c/xf86i2c.c
+++ b/hw/xfree86/i2c/xf86i2c.c
@@ -451,7 +451,7 @@ xf86I2CWriteRead(I2CDevPtr d,
 /* Read a byte, the only readable register of a device.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CReadStatus(I2CDevPtr d, I2CByte *pbyte)
 {
     return xf86I2CWriteRead(d, NULL, 0, pbyte, 1);
@@ -480,7 +480,7 @@ xf86I2CReadBytes(I2CDevPtr d, I2CByte subaddr, I2CByte *pbyte, int n)
  * determined by its sub-address.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CReadWord(I2CDevPtr d, I2CByte subaddr, unsigned short *pword)
 {
     I2CByte rb[2];
@@ -510,7 +510,7 @@ xf86I2CWriteByte(I2CDevPtr d, I2CByte subaddr, I2CByte byte)
  * sub-address of the first register.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CWriteBytes(I2CDevPtr d, I2CByte subaddr, 
 		  I2CByte *WriteBuffer, int nWrite)
 {
@@ -536,7 +536,7 @@ xf86I2CWriteBytes(I2CDevPtr d, I2CByte subaddr,
  * determined by its sub-address.
  */
 
-Bool
+_X_EXPORT Bool
 xf86I2CWriteWord(I2CDevPtr d, I2CByte subaddr, unsigned short word)
 {
     I2CByte wb[3];
diff --git a/hw/xfree86/int10/generic.c b/hw/xfree86/int10/generic.c
index a9006e2..2cda753 100644
--- a/hw/xfree86/int10/generic.c
+++ b/hw/xfree86/int10/generic.c
@@ -321,7 +321,7 @@ UnmapVRam(xf86Int10InfoPtr pInt)
     xf86UnMapVidMem(screen, INTPriv(pInt)->vRam, size);
 }
 
-Bool
+_X_EXPORT Bool
 MapCurrentInt10(xf86Int10InfoPtr pInt)
 {
     /* nothing to do here */
diff --git a/hw/xfree86/int10/helper_exec.c b/hw/xfree86/int10/helper_exec.c
index e01e80b..ab559ed 100644
--- a/hw/xfree86/int10/helper_exec.c
+++ b/hw/xfree86/int10/helper_exec.c
@@ -49,7 +49,7 @@ static void SetResetBIOSVars(xf86Int10InfoPtr pInt, Bool set);
 
 #define REG pInt
 
-int
+_X_EXPORT int
 setup_int(xf86Int10InfoPtr pInt)
 {
     if (pInt != Int10Current) {
@@ -78,7 +78,7 @@ setup_int(xf86Int10InfoPtr pInt)
     return xf86BlockSIGIO();
 }
 
-void
+_X_EXPORT void
 finish_int(xf86Int10InfoPtr pInt, int sig)
 {
     xf86UnblockSIGIO(sig);
@@ -98,20 +98,20 @@ finish_int(xf86Int10InfoPtr pInt, int sig)
 }
 
 /* general software interrupt handler */
-CARD32
+_X_EXPORT CARD32
 getIntVect(xf86Int10InfoPtr pInt,int num)
 {
     return MEM_RW(pInt, num << 2) + (MEM_RW(pInt, (num << 2) + 2) << 4);
 }
 
-void
+_X_EXPORT void
 pushw(xf86Int10InfoPtr pInt, CARD16 val)
 {
     X86_ESP -= 2;
     MEM_WW(pInt, ((CARD32) X86_SS << 4) + X86_SP, val);
 }
 
-int
+_X_EXPORT int
 run_bios_int(int num, xf86Int10InfoPtr pInt)
 {
     CARD32 eflags;
@@ -157,7 +157,7 @@ run_bios_int(int num, xf86Int10InfoPtr pInt)
 }
 
 /* Debugging stuff */
-void
+_X_EXPORT void
 dump_code(xf86Int10InfoPtr pInt)
 {
     int i;
@@ -172,7 +172,7 @@ dump_code(xf86Int10InfoPtr pInt)
     xf86ErrorFVerb(3, "\n");
 }
 
-void
+_X_EXPORT void
 dump_registers(xf86Int10InfoPtr pInt)
 {
     xf86DrvMsgVerb(pInt->scrnIndex, X_INFO, 3,
@@ -192,7 +192,7 @@ dump_registers(xf86Int10InfoPtr pInt)
 	(unsigned long)X86_EIP, (unsigned long)X86_EFLAGS);
 }
 
-void
+_X_EXPORT void
 stack_trace(xf86Int10InfoPtr pInt)
 {
     int i = 0;
@@ -212,7 +212,7 @@ stack_trace(xf86Int10InfoPtr pInt)
 	xf86ErrorFVerb(3, "\n");
 }
 
-int
+_X_EXPORT int
 port_rep_inb(xf86Int10InfoPtr pInt,
 	     CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -228,7 +228,7 @@ port_rep_inb(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-int
+_X_EXPORT int
 port_rep_inw(xf86Int10InfoPtr pInt,
 	     CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -244,7 +244,7 @@ port_rep_inw(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-int
+_X_EXPORT int
 port_rep_inl(xf86Int10InfoPtr pInt,
 	     CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -260,7 +260,7 @@ port_rep_inl(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-int
+_X_EXPORT int
 port_rep_outb(xf86Int10InfoPtr pInt,
 	      CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -276,7 +276,7 @@ port_rep_outb(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-int
+_X_EXPORT int
 port_rep_outw(xf86Int10InfoPtr pInt,
 	      CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -292,7 +292,7 @@ port_rep_outw(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-int
+_X_EXPORT int
 port_rep_outl(xf86Int10InfoPtr pInt,
 	      CARD16 port, CARD32 base, int d_f, CARD32 count)
 {
@@ -308,7 +308,7 @@ port_rep_outl(xf86Int10InfoPtr pInt,
     return dst - base;
 }
 
-CARD8
+_X_EXPORT CARD8
 x_inb(CARD16 port)
 {
     CARD8 val;
@@ -337,7 +337,7 @@ x_inb(CARD16 port)
     return val;
 }
 
-CARD16
+_X_EXPORT CARD16
 x_inw(CARD16 port)
 {
     CARD16 val;
@@ -359,7 +359,7 @@ x_inw(CARD16 port)
     return val;
 }
 
-void
+_X_EXPORT void
 x_outb(CARD16 port, CARD8 val)
 {
     if ((port == 0x43) && (val == 0)) {
@@ -390,7 +390,7 @@ x_outb(CARD16 port, CARD8 val)
     }
 }
 
-void
+_X_EXPORT void
 x_outw(CARD16 port, CARD16 val)
 {
 
@@ -401,7 +401,7 @@ x_outw(CARD16 port, CARD16 val)
     }
 }
 
-CARD32
+_X_EXPORT CARD32
 x_inl(CARD16 port)
 {
     CARD32 val;
@@ -414,7 +414,7 @@ x_inl(CARD16 port)
     return val;
 }
 
-void
+_X_EXPORT void
 x_outl(CARD16 port, CARD32 val)
 {
     if (!pciCfg1out(port, val)) {
@@ -424,37 +424,37 @@ x_outl(CARD16 port, CARD32 val)
     }
 }
 
-CARD8
+_X_EXPORT CARD8
 Mem_rb(CARD32 addr)
 {
     return (*Int10Current->mem->rb)(Int10Current, addr);
 }
 
-CARD16
+_X_EXPORT CARD16
 Mem_rw(CARD32 addr)
 {
     return (*Int10Current->mem->rw)(Int10Current, addr);
 }
 
-CARD32
+_X_EXPORT CARD32
 Mem_rl(CARD32 addr)
 {
     return (*Int10Current->mem->rl)(Int10Current, addr);
 }
 
-void
+_X_EXPORT void
 Mem_wb(CARD32 addr, CARD8 val)
 {
     (*Int10Current->mem->wb)(Int10Current, addr, val);
 }
 
-void
+_X_EXPORT void
 Mem_ww(CARD32 addr, CARD16 val)
 {
     (*Int10Current->mem->ww)(Int10Current, addr, val);
 }
 
-void
+_X_EXPORT void
 Mem_wl(CARD32 addr, CARD32 val)
 {
     (*Int10Current->mem->wl)(Int10Current, addr, val);
@@ -613,7 +613,7 @@ pciCfg1outb(CARD16 addr, CARD8 val)
     return 0;
 }
 
-CARD8
+_X_EXPORT CARD8
 bios_checksum(const CARD8 *start, int size)
 {
     CARD8 sum = 0;
@@ -641,7 +641,7 @@ bios_checksum(const CARD8 *start, int size)
  * the driver would have to load the vga-module prior to
  * doing int10.
  */
-void
+_X_EXPORT void
 LockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
 {
     xf86SetCurrentAccess(FALSE, xf86Screens[pInt->scrnIndex]);
@@ -660,7 +660,7 @@ LockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
     xf86SetCurrentAccess(TRUE, xf86Screens[pInt->scrnIndex]);
 }
 
-void
+_X_EXPORT void
 UnlockLegacyVGA(xf86Int10InfoPtr pInt, legacyVGAPtr vga)
 {
     xf86SetCurrentAccess(FALSE, xf86Screens[pInt->scrnIndex]);
@@ -693,7 +693,7 @@ SetResetBIOSVars(xf86Int10InfoPtr pInt, Bool set)
     xf86UnMapVidMem(pInt->scrnIndex,base,pagesize);
 }
 
-void
+_X_EXPORT void
 xf86Int10SaveRestoreBIOSVars(xf86Int10InfoPtr pInt, Bool save)
 {
     int pagesize = getpagesize();
diff --git a/hw/xfree86/int10/helper_mem.c b/hw/xfree86/int10/helper_mem.c
index 6f6ecc2..16d7c17 100644
--- a/hw/xfree86/int10/helper_mem.c
+++ b/hw/xfree86/int10/helper_mem.c
@@ -34,7 +34,7 @@ static const OptionInfoRec INT10Options[] = {
 };
 
 #ifdef DEBUG
-void
+_X_EXPORT void
 dprint(unsigned long start, unsigned long size)
 {
     int i,j;
@@ -62,7 +62,7 @@ dprint(unsigned long start, unsigned long size)
  * BIOS. Most of this information was pulled from
  * dosemu.
  */
-void
+_X_EXPORT void
 setup_int_vect(xf86Int10InfoPtr pInt)
 {
     int i;
@@ -105,7 +105,7 @@ setup_int_vect(xf86Int10InfoPtr pInt)
 }
 #endif
 
-int
+_X_EXPORT int
 setup_system_bios(void *base_addr)
 {
     char *base = (char *) base_addr;
@@ -127,7 +127,7 @@ setup_system_bios(void *base_addr)
     return 1;
 }
 
-void
+_X_EXPORT void
 reset_int_vect(xf86Int10InfoPtr pInt)
 {
     /*
@@ -176,7 +176,7 @@ reset_int_vect(xf86Int10InfoPtr pInt)
     MEM_WW(pInt, (0x6D << 2) + 2, SYS_BIOS >> 4);
 }
 
-void
+_X_EXPORT void
 set_return_trap(xf86Int10InfoPtr pInt)
 {
     /*
@@ -191,7 +191,7 @@ set_return_trap(xf86Int10InfoPtr pInt)
     xf86Int10AllocPages(pInt, 1, &pInt->stackseg);
 }
 
-void *
+_X_EXPORT void *
 xf86HandleInt10Options(ScrnInfoPtr pScrn, int entityIndex)
 {
     EntityInfoPtr pEnt = xf86GetEntityInfo(entityIndex);
@@ -220,7 +220,7 @@ xf86HandleInt10Options(ScrnInfoPtr pScrn, int entityIndex)
     return options;
 }
 
-Bool
+_X_EXPORT Bool
 int10skip(const void* options)
 {
     Bool noint10 = FALSE;
@@ -231,7 +231,7 @@ int10skip(const void* options)
     return noint10;
 }
 
-Bool
+_X_EXPORT Bool
 int10_check_bios(int scrnIndex, int codeSeg, const unsigned char* vbiosMem)
 {
     int size;
@@ -258,7 +258,7 @@ int10_check_bios(int scrnIndex, int codeSeg, const unsigned char* vbiosMem)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 initPrimary(const void* options)
 {
     Bool initPrimary = FALSE;
@@ -269,7 +269,7 @@ initPrimary(const void* options)
     return initPrimary;
 }
 
-BusType
+_X_EXPORT BusType
 xf86int10GetBiosLocationType(const xf86Int10InfoPtr pInt)
 {
     BusType location_type;
@@ -290,7 +290,7 @@ xf86int10GetBiosLocationType(const xf86Int10InfoPtr pInt)
 	return FALSE; \
     }
 
-Bool
+_X_EXPORT Bool
 xf86int10GetBiosSegment(xf86Int10InfoPtr pInt, void *base)
 {
     unsigned i;
diff --git a/hw/xfree86/int10/stub.c b/hw/xfree86/int10/stub.c
index 80b619b..4d9fe52 100644
--- a/hw/xfree86/int10/stub.c
+++ b/hw/xfree86/int10/stub.c
@@ -25,7 +25,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags)
     return NULL;
 }
 
-Bool
+_X_EXPORT Bool
 MapCurrentInt10(xf86Int10InfoPtr pInt)
 {
     return FALSE;
@@ -50,7 +50,7 @@ xf86Int10FreePages(xf86Int10InfoPtr pInt, void *pbase, int num)
     return;
 }
 
-Bool
+_X_EXPORT Bool
 xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
 {
     return FALSE;
diff --git a/hw/xfree86/int10/xf86int10.c b/hw/xfree86/int10/xf86int10.c
index 51eb91f..a7904dc 100644
--- a/hw/xfree86/int10/xf86int10.c
+++ b/hw/xfree86/int10/xf86int10.c
@@ -17,7 +17,7 @@
 
 #define REG pInt
 
-xf86Int10InfoPtr Int10Current = NULL;
+_X_EXPORT xf86Int10InfoPtr Int10Current = NULL;
 
 static int int1A_handler(xf86Int10InfoPtr pInt);
 #ifndef _PC
@@ -27,7 +27,7 @@ static int intE6_handler(xf86Int10InfoPtr pInt);
 static struct pci_device *findPci(xf86Int10InfoPtr pInt, unsigned short bx);
 static CARD32 pciSlotBX( const struct pci_device * pvp );
 
-int
+_X_EXPORT int
 int_handler(xf86Int10InfoPtr pInt)
 {
     int num = pInt->num;
diff --git a/hw/xfree86/int10/xf86x86emu.c b/hw/xfree86/int10/xf86x86emu.c
index 7f5b9d4..a884bf9 100644
--- a/hw/xfree86/int10/xf86x86emu.c
+++ b/hw/xfree86/int10/xf86x86emu.c
@@ -43,7 +43,7 @@ xf86ExecX86int10(xf86Int10InfoPtr pInt)
     finish_int(pInt, sig);
 }
 
-Bool
+_X_EXPORT Bool
 xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
 {
     int i;
diff --git a/hw/xfree86/loader/loadext.c b/hw/xfree86/loader/loadext.c
index b752328..d8e615f 100644
--- a/hw/xfree86/loader/loadext.c
+++ b/hw/xfree86/loader/loadext.c
@@ -40,7 +40,7 @@
  * This should be static, but miinitext wants it.  FIXME: make extension
  * initialization not completely terrible.
  */
-ExtensionModule *ExtensionModuleList = NULL;
+_X_EXPORT ExtensionModule *ExtensionModuleList = NULL;
 static int numExtensionModules = 0;
 
 static ExtensionModule *
diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index e98f013..2324e78 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -1080,7 +1080,7 @@ LoadModule(const char *module, const char *path, const char **subdirlist,
 		      modreq, errmaj, errmin, LD_FLAG_GLOBAL);
 }
 
-void
+_X_EXPORT void
 UnloadModule(ModuleDescPtr mod)
 {
     UnloadModuleOrDriver(mod);
diff --git a/hw/xfree86/modes/xf86Modes.c b/hw/xfree86/modes/xf86Modes.c
index 1522fa7..959e376 100644
--- a/hw/xfree86/modes/xf86Modes.c
+++ b/hw/xfree86/modes/xf86Modes.c
@@ -518,7 +518,7 @@ xf86ValidateModesBandwidth(ScrnInfoPtr pScrn, DisplayModePtr modeList,
     }
 }
 
-Bool
+_X_EXPORT Bool
 xf86ModeIsReduced(const DisplayModeRec *mode)
 {
     if ((((mode->HDisplay * 5 / 4) & ~0x07) > mode->HTotal) &&
diff --git a/hw/xfree86/os-support/bsd/bsd_VTsw.c b/hw/xfree86/os-support/bsd/bsd_VTsw.c
index 476a0e9..81eec52 100644
--- a/hw/xfree86/os-support/bsd/bsd_VTsw.c
+++ b/hw/xfree86/os-support/bsd/bsd_VTsw.c
@@ -41,7 +41,7 @@
  * This function is the signal handler for the VT-switching signal.  It
  * is only referenced inside the OS-support layer.
  */
-void
+_X_EXPORT void
 xf86VTRequest(int sig)
 {
 #if defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)
@@ -52,7 +52,7 @@ xf86VTRequest(int sig)
 	return;
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchPending()
 {
 #if defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)
@@ -63,7 +63,7 @@ xf86VTSwitchPending()
 	return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchAway()
 {
 #if defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)
@@ -78,7 +78,7 @@ xf86VTSwitchAway()
 	return FALSE;
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchTo()
 {
 #if defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)
diff --git a/hw/xfree86/os-support/bsd/bsd_apm.c b/hw/xfree86/os-support/bsd/bsd_apm.c
index 43eda74..feaed21 100644
--- a/hw/xfree86/os-support/bsd/bsd_apm.c
+++ b/hw/xfree86/os-support/bsd/bsd_apm.c
@@ -108,7 +108,7 @@ bsdPMConfirmEventToOs(int fd, pmEvent event)
     }
 }
 
-PMClose
+_X_EXPORT PMClose
 xf86OSPMOpen(void)
 {
     int fd;
diff --git a/hw/xfree86/os-support/bsd/bsd_init.c b/hw/xfree86/os-support/bsd/bsd_init.c
index cbb9e48..8425239 100644
--- a/hw/xfree86/os-support/bsd/bsd_init.c
+++ b/hw/xfree86/os-support/bsd/bsd_init.c
@@ -152,7 +152,7 @@ static xf86ConsOpen_t xf86ConsTab[] = {
 };
 
 
-void
+_X_EXPORT void
 xf86OpenConsole()
 {
     int i, fd = -1;
@@ -644,7 +644,7 @@ xf86OpenWScons()
 
 #endif /* WSCONS_SUPPORT */
 
-void
+_X_EXPORT void
 xf86CloseConsole()
 {
 #if defined(SYSCONS_SUPPORT) || defined(PCVT_SUPPORT)
@@ -704,7 +704,7 @@ xf86CloseConsole()
     return;
 }
 
-int
+_X_EXPORT int
 xf86ProcessArgument(int argc, char *argv[], int i)
 {
 	/*
@@ -732,7 +732,7 @@ xf86ProcessArgument(int argc, char *argv[], int i)
 	return(0);
 }
 
-void
+_X_EXPORT void
 xf86UseMsg()
 {
 #if defined (SYSCONS_SUPPORT) || defined (PCVT_SUPPORT)
diff --git a/hw/xfree86/os-support/bsd/bsd_kqueue_apm.c b/hw/xfree86/os-support/bsd/bsd_kqueue_apm.c
index b37070c..db7dfbc 100644
--- a/hw/xfree86/os-support/bsd/bsd_kqueue_apm.c
+++ b/hw/xfree86/os-support/bsd/bsd_kqueue_apm.c
@@ -153,7 +153,7 @@ bsdPMConfirmEventToOs(int dummyfd, pmEvent event)
     }
 }
 
-PMClose
+_X_EXPORT PMClose
 xf86OSPMOpen(void)
 {
     int kq;
diff --git a/hw/xfree86/os-support/bsd/i386_video.c b/hw/xfree86/os-support/bsd/i386_video.c
index 83dabc9..4fc6dd7 100644
--- a/hw/xfree86/os-support/bsd/i386_video.c
+++ b/hw/xfree86/os-support/bsd/i386_video.c
@@ -448,7 +448,7 @@ xf86DisableIO()
 /***************************************************************************/
 /* Set TV output mode                                                      */
 /***************************************************************************/
-void
+_X_EXPORT void
 xf86SetTVOut(int mode)
 {    
     switch (xf86Info.consType)
@@ -473,7 +473,7 @@ xf86SetTVOut(int mode)
     return;
 }
 
-void
+_X_EXPORT void
 xf86SetRGBOut()
 {    
     switch (xf86Info.consType)
diff --git a/hw/xfree86/os-support/bsd/ppc_video.c b/hw/xfree86/os-support/bsd/ppc_video.c
index f1ff64c..86b7fb3 100644
--- a/hw/xfree86/os-support/bsd/ppc_video.c
+++ b/hw/xfree86/os-support/bsd/ppc_video.c
@@ -123,7 +123,7 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf,
 	return rv;
 }
 
-Bool xf86EnableIO()
+_X_EXPORT Bool xf86EnableIO()
 {
         int fd = xf86Info.screenFd;
 
@@ -141,7 +141,7 @@ Bool xf86EnableIO()
 	return TRUE;
 }
 
-void xf86DisableIO()
+_X_EXPORT void xf86DisableIO()
 {
 
         if (ioBase != MAP_FAILED)
diff --git a/hw/xfree86/os-support/bus/Pci.c b/hw/xfree86/os-support/bus/Pci.c
index 8ca2f1f..888a9e3 100644
--- a/hw/xfree86/os-support/bus/Pci.c
+++ b/hw/xfree86/os-support/bus/Pci.c
@@ -161,7 +161,7 @@ pciAddrNOOP(PCITAG tag, PciAddrType type, ADDRESS addr)
 	return(addr);
 }
 
-Bool
+_X_EXPORT Bool
 xf86scanpci(void)
 {
     Bool  success = FALSE;
diff --git a/hw/xfree86/os-support/bus/Sbus.c b/hw/xfree86/os-support/bus/Sbus.c
index 1363d57..2fe34bc 100644
--- a/hw/xfree86/os-support/bus/Sbus.c
+++ b/hw/xfree86/os-support/bus/Sbus.c
@@ -41,7 +41,7 @@
 #include "xf86sbusBus.h"
 #include "xf86Sbus.h"
 
-int promRootNode;
+_X_EXPORT int promRootNode;
 
 static int promFd = -1;
 static int promCurrentNode;
@@ -51,7 +51,7 @@ static int promP1275 = -1;
 #define MAX_VAL		(4096-128-4)
 static struct openpromio *promOpio;
 
-sbusDevicePtr *xf86SbusInfo = NULL;
+_X_EXPORT sbusDevicePtr *xf86SbusInfo = NULL;
 
 struct sbus_devtable sbusDeviceTable[] = {
     { SBUS_DEVICE_BW2, FBTYPE_SUN2BW, "bwtwo", "sunbw2", "Sun Monochrome (bwtwo)" },
@@ -71,7 +71,7 @@ struct sbus_devtable sbusDeviceTable[] = {
     { 0, 0, NULL }
 };
 
-int
+_X_EXPORT int
 promGetSibling(int node)
 {
     promOpio->oprom_size = sizeof(int);
@@ -84,7 +84,7 @@ promGetSibling(int node)
     return *(int *)promOpio->oprom_array;
 }
 
-int
+_X_EXPORT int
 promGetChild(int node)
 {
     promOpio->oprom_size = sizeof(int);
@@ -97,7 +97,7 @@ promGetChild(int node)
     return *(int *)promOpio->oprom_array;
 }
 
-char *
+_X_EXPORT char *
 promGetProperty(const char *prop, int *lenp)
 {
     promOpio->oprom_size = MAX_VAL;
@@ -109,7 +109,7 @@ promGetProperty(const char *prop, int *lenp)
     return promOpio->oprom_array;
 }
 
-int
+_X_EXPORT int
 promGetBool(const char *prop)
 {
     promOpio->oprom_size = 0;
@@ -281,7 +281,7 @@ promWalkGetDriverName(int node, int oldnode)
     return NULL;
 }
 
-char *
+_X_EXPORT char *
 sparcDriverName(void)
 {
     char *name;
@@ -367,7 +367,7 @@ promWalkAssignNodes(int node, int oldnode, int flags, sbusDevicePtr *devicePtrs)
 	promWalkAssignNodes(nextnode, node, PROM_NODE_SIBLING | sbus, devicePtrs);
 }
 
-void
+_X_EXPORT void
 sparcPromAssignNodes(void)
 {
     sbusDevicePtr psdp, *psdpp;
@@ -509,7 +509,7 @@ promWalkNode2Pathname(char *path, int parent, int node, int searchNode, int type
     return 0;
 }
 
-char *
+_X_EXPORT char *
 sparcPromNode2Pathname(sbusPromNodePtr pnode)
 {
     char *ret;
@@ -578,7 +578,7 @@ promWalkPathname2Node(char *name, char *regstr, int parent, int type)
     }
 }
 
-int
+_X_EXPORT int
 sparcPromPathname2Node(const char *pathName)
 {
     int i;
diff --git a/hw/xfree86/os-support/bus/linuxPci.c b/hw/xfree86/os-support/bus/linuxPci.c
index 263fd8f..fdd10d1 100644
--- a/hw/xfree86/os-support/bus/linuxPci.c
+++ b/hw/xfree86/os-support/bus/linuxPci.c
@@ -531,7 +531,7 @@ xf86MapLegacyIO(struct pci_device *dev)
     return (IOADDRESS)DomainMmappedIO[domain];
 }
 
-resPtr
+_X_EXPORT resPtr
 xf86AccResFromOS(resPtr pRes)
 {
     struct pci_device *dev;
diff --git a/hw/xfree86/os-support/hurd/hurd_init.c b/hw/xfree86/os-support/hurd/hurd_init.c
index 8cd8f54..9f5e784 100644
--- a/hw/xfree86/os-support/hurd/hurd_init.c
+++ b/hw/xfree86/os-support/hurd/hurd_init.c
@@ -43,19 +43,19 @@
 #include <assert.h>
 #include <mach.h>
 
-int 
+_X_EXPORT int 
 xf86ProcessArgument( int argc,char **argv, int i )
 {
     return 0;
 }
-void 
+_X_EXPORT void 
 xf86UseMsg()
 {
     return;
 }
 
 
-void 
+_X_EXPORT void 
 xf86OpenConsole()
 {
     if( serverGeneration == 1 )
@@ -81,7 +81,7 @@ xf86OpenConsole()
     return;
 }
 
-void 
+_X_EXPORT void 
 xf86CloseConsole()
 {
     close( xf86Info.consoleFd );
diff --git a/hw/xfree86/os-support/hurd/hurd_video.c b/hw/xfree86/os-support/hurd/hurd_video.c
index b814072..b095377 100644
--- a/hw/xfree86/os-support/hurd/hurd_video.c
+++ b/hw/xfree86/os-support/hurd/hurd_video.c
@@ -41,7 +41,7 @@
 /**************************************************************************
  * Video Memory Mapping section                                            
  ***************************************************************************/
-pointer 
+_X_EXPORT pointer 
 xf86MapVidMem(int ScreenNum,int Flags, unsigned long Base, unsigned long Size)
 {
     mach_port_t device,iopl_dev;
@@ -107,7 +107,7 @@ xf86UnMapVidMem(int ScreenNum,pointer Base,unsigned long Size)
     return;
 }
 
-Bool 
+_X_EXPORT Bool 
 xf86LinearVidMem()
 {
     return(TRUE);
@@ -123,7 +123,7 @@ xf86LinearVidMem()
  */
 extern int ioperm(unsigned long __from, unsigned long __num, int __turn_on);
 
-Bool
+_X_EXPORT Bool
 xf86EnableIO()
 {
     if (ioperm(0, 0x10000, 1)) {
@@ -135,20 +135,20 @@ xf86EnableIO()
     return TRUE;
 }
 	
-void
+_X_EXPORT void
 xf86DisableIO()
 {
     ioperm(0,0x10000,0);
     return;
 }
 
-void
+_X_EXPORT void
 xf86MapReadSideEffects(int ScreenNum, int Flags, pointer Base,
 	unsigned long Size)
 {
 }
 
-Bool
+_X_EXPORT Bool
 xf86CheckMTRR(int s)
 {
 	return FALSE;
diff --git a/hw/xfree86/os-support/linux/int10/linux.c b/hw/xfree86/os-support/linux/int10/linux.c
index 0c77944..6ccd466 100644
--- a/hw/xfree86/os-support/linux/int10/linux.c
+++ b/hw/xfree86/os-support/linux/int10/linux.c
@@ -333,7 +333,7 @@ error0:
     return NULL;
 }
 
-Bool
+_X_EXPORT Bool
 MapCurrentInt10(xf86Int10InfoPtr pInt)
 {
     pointer addr;
diff --git a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
index cceda06..ffdc012 100644
--- a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
+++ b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c
@@ -20,7 +20,7 @@
 static int vm86_rep(struct vm86_struct *ptr);
 static struct vm86_struct vm86_s;
 
-Bool
+_X_EXPORT Bool
 xf86Int10ExecSetup(xf86Int10InfoPtr pInt)
 {
 #define VM86S ((struct vm86_struct *)pInt->cpuRegs)
diff --git a/hw/xfree86/os-support/linux/lnx_apm.c b/hw/xfree86/os-support/linux/lnx_apm.c
index 16ac80d..b1328cd 100644
--- a/hw/xfree86/os-support/linux/lnx_apm.c
+++ b/hw/xfree86/os-support/linux/lnx_apm.c
@@ -133,7 +133,7 @@ lnxPMConfirmEventToOs(int fd, pmEvent event)
 
 #endif // HAVE_APM
 
-PMClose
+_X_EXPORT PMClose
 xf86OSPMOpen(void)
 {
 	PMClose ret = NULL;
diff --git a/hw/xfree86/os-support/linux/lnx_init.c b/hw/xfree86/os-support/linux/lnx_init.c
index da5ca57..d37242f 100644
--- a/hw/xfree86/os-support/linux/lnx_init.c
+++ b/hw/xfree86/os-support/linux/lnx_init.c
@@ -93,7 +93,7 @@ drain_console(int fd, void *closure)
     tcflush(fd, TCIOFLUSH);
 }
 
-void
+_X_EXPORT void
 xf86OpenConsole(void)
 {
     int i, fd = -1;
@@ -347,7 +347,7 @@ xf86OpenConsole(void)
     return;
 }
 
-void
+_X_EXPORT void
 xf86CloseConsole()
 {
     struct vt_mode   VT;
@@ -419,7 +419,7 @@ xf86CloseConsole()
     return;
 }
 
-int
+_X_EXPORT int
 xf86ProcessArgument(int argc, char *argv[], int i)
 {
 	/*
@@ -454,7 +454,7 @@ xf86ProcessArgument(int argc, char *argv[], int i)
 	return(0);
 }
 
-void
+_X_EXPORT void
 xf86UseMsg()
 {
 	ErrorF("vtXX                   use the specified VT number\n");
diff --git a/hw/xfree86/os-support/linux/lnx_pci.c b/hw/xfree86/os-support/linux/lnx_pci.c
index 8eedfa4..2b83561 100644
--- a/hw/xfree86/os-support/linux/lnx_pci.c
+++ b/hw/xfree86/os-support/linux/lnx_pci.c
@@ -138,7 +138,7 @@ static struct pci_dev *xf86OSLinuxGetPciDevs(void) {
 }
 
 /* Query the kvirt address (64bit) of a BAR range from size for a given TAG */
-unsigned long
+_X_EXPORT unsigned long
 xf86GetOSOffsetFromPCI(PCITAG tag, int space, unsigned long base)
 {
     unsigned int ndx;
diff --git a/hw/xfree86/os-support/sco/VTsw_sco.c b/hw/xfree86/os-support/sco/VTsw_sco.c
index d126e78..b7e890a 100644
--- a/hw/xfree86/os-support/sco/VTsw_sco.c
+++ b/hw/xfree86/os-support/sco/VTsw_sco.c
@@ -48,14 +48,14 @@
  * re-arm the signal here. All we need to do now is record the fact that
  * we got the signal. XFree86 handles the rest.
  */
-void
+_X_EXPORT void
 xf86VTRequest(int sig)
 {
   xf86Info.vtRequestsPending = TRUE;
   return;
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchPending(void)
 {
   return(xf86Info.vtRequestsPending ? TRUE : FALSE);
@@ -69,7 +69,7 @@ xf86VTSwitchPending(void)
 static int sco_ledstatus = -1;
 static unsigned int sco_ledstate = 0;
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchAway(void)
 {
   ev_flush();
@@ -90,7 +90,7 @@ xf86VTSwitchAway(void)
  * and we need to restore the LED settings to what they were when we
  * switched away.
  */
-Bool
+_X_EXPORT Bool
 xf86VTSwitchTo(void)
 {
   ev_resume();
diff --git a/hw/xfree86/os-support/sco/sco_init.c b/hw/xfree86/os-support/sco/sco_init.c
index 5f7db34..2f3126b 100644
--- a/hw/xfree86/os-support/sco/sco_init.c
+++ b/hw/xfree86/os-support/sco/sco_init.c
@@ -42,7 +42,7 @@ static int sco_console_mode = -1;
 
 extern Bool mpxLock;
 
-void
+_X_EXPORT void
 xf86OpenConsole(void)
 {
   int i, ioctl_ret;
@@ -192,7 +192,7 @@ xf86OpenConsole(void)
  * to do a soft reset on the card, which really does help settle the
  * video card down again after coming out of Xfree86.
  */
-void
+_X_EXPORT void
 xf86CloseConsole(void)
 {
   struct vt_mode VT;
@@ -224,7 +224,7 @@ xf86CloseConsole(void)
   close(xf86Info.consoleFd); /* We're done with the device */
 }
 
-int
+_X_EXPORT int
 xf86ProcessArgument(int argc, char *argv[], int i)
 {
   /*
@@ -283,7 +283,7 @@ xf86ProcessArgument(int argc, char *argv[], int i)
   return(0);
 }
 
-void
+_X_EXPORT void
 xf86UseMsg(void)
 {
 	ErrorF("vtXX                   use the specified VT number\n");
diff --git a/hw/xfree86/os-support/shared/VTsw_noop.c b/hw/xfree86/os-support/shared/VTsw_noop.c
index a3cfe40..b43908f 100644
--- a/hw/xfree86/os-support/shared/VTsw_noop.c
+++ b/hw/xfree86/os-support/shared/VTsw_noop.c
@@ -35,19 +35,19 @@
  * No-op functions for OSs without VTs
  */
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchPending()
 {
 	return(FALSE);
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchAway()
 {
 	return(FALSE);
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchTo()
 {
 	return(TRUE);
diff --git a/hw/xfree86/os-support/shared/VTsw_usl.c b/hw/xfree86/os-support/shared/VTsw_usl.c
index 4d47314..ea07aae 100644
--- a/hw/xfree86/os-support/shared/VTsw_usl.c
+++ b/hw/xfree86/os-support/shared/VTsw_usl.c
@@ -44,7 +44,7 @@
  * This function is the signal handler for the VT-switching signal.  It
  * is only referenced inside the OS-support layer.
  */
-void
+_X_EXPORT void
 xf86VTRequest(int sig)
 {
 	signal(sig, (void(*)(int))xf86VTRequest);
@@ -52,13 +52,13 @@ xf86VTRequest(int sig)
 	return;
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchPending()
 {
     return(xf86Info.vtRequestsPending ? TRUE : FALSE);
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchAway()
 {
 	xf86Info.vtRequestsPending = FALSE;
@@ -75,7 +75,7 @@ xf86VTSwitchAway()
 	}
 }
 
-Bool
+_X_EXPORT Bool
 xf86VTSwitchTo()
 {
 	xf86Info.vtRequestsPending = FALSE;
diff --git a/hw/xfree86/os-support/shared/pm_noop.c b/hw/xfree86/os-support/shared/pm_noop.c
index bfac4b1..7601ff4 100644
--- a/hw/xfree86/os-support/shared/pm_noop.c
+++ b/hw/xfree86/os-support/shared/pm_noop.c
@@ -38,7 +38,7 @@
 #define XF86_OS_PRIVS
 #include "xf86_OSproc.h"
 
-PMClose
+_X_EXPORT PMClose
 xf86OSPMOpen(void)
 {
 	return NULL;
diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c
index f51131c..a45117d 100644
--- a/hw/xfree86/os-support/shared/sigio.c
+++ b/hw/xfree86/os-support/shared/sigio.c
@@ -262,7 +262,7 @@ xf86UnblockSIGIO (int wasset)
     }
 }
 
-void
+_X_EXPORT void
 xf86AssertBlockedSIGIO (char *where)
 {
     sigset_t	set, old;
@@ -275,7 +275,7 @@ xf86AssertBlockedSIGIO (char *where)
 
 /* XXX This is a quick hack for the benefit of xf86SetSilkenMouse() */
 
-int
+_X_EXPORT int
 xf86SIGIOSupported (void)
 {
     return 1;
diff --git a/hw/xfree86/os-support/shared/sigiostubs.c b/hw/xfree86/os-support/shared/sigiostubs.c
index 7113968..12fcab1 100644
--- a/hw/xfree86/os-support/shared/sigiostubs.c
+++ b/hw/xfree86/os-support/shared/sigiostubs.c
@@ -57,13 +57,13 @@ xf86UnblockSIGIO (int wasset)
 {
 }
 
-void
+_X_EXPORT void
 xf86AssertBlockedSIGIO (char *where)
 {
 }
 
 /* XXX This is a quick hack for the benefit of xf86SetSilkenMouse() */
-Bool
+_X_EXPORT Bool
 xf86SIGIOSupported ()
 {
     return FALSE;
diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c
index 8cb1014..405c00f 100644
--- a/hw/xfree86/os-support/shared/stdResource.c
+++ b/hw/xfree86/os-support/shared/stdResource.c
@@ -48,7 +48,7 @@
 #define xf86StdAccResFromOS xf86AccResFromOS
 #endif
 
-resPtr
+_X_EXPORT resPtr
 xf86StdAccResFromOS(resPtr ret)
 {
     resRange range;
diff --git a/hw/xfree86/os-support/shared/vidmem.c b/hw/xfree86/os-support/shared/vidmem.c
index 0b44116..48133d7 100644
--- a/hw/xfree86/os-support/shared/vidmem.c
+++ b/hw/xfree86/os-support/shared/vidmem.c
@@ -161,7 +161,7 @@ checkMtrrOption(VidMapPtr vp)
 	}
 }
 
-void
+_X_EXPORT void
 xf86MakeNewMapping(int ScreenNum, int Flags, unsigned long Base, unsigned long Size, pointer Vbase)
 {
 	VidMapPtr vp;
@@ -175,7 +175,7 @@ xf86MakeNewMapping(int ScreenNum, int Flags, unsigned long Base, unsigned long S
 	mp->flags = Flags;
 }
 
-void
+_X_EXPORT void
 xf86InitVidMem(void)
 {
 	if (!vidMemInfo.initialised) {
diff --git a/hw/xfree86/os-support/solaris/sun_apm.c b/hw/xfree86/os-support/solaris/sun_apm.c
index 7decc90..d121f33 100644
--- a/hw/xfree86/os-support/solaris/sun_apm.c
+++ b/hw/xfree86/os-support/solaris/sun_apm.c
@@ -199,7 +199,7 @@ sunPMConfirmEventToOs(int fd, pmEvent event)
     }
 }
 
-PMClose
+_X_EXPORT PMClose
 xf86OSPMOpen(void)
 {
     int fd;
diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c
index 795b0c1..4fe5af3 100644
--- a/hw/xfree86/os-support/solaris/sun_init.c
+++ b/hw/xfree86/os-support/solaris/sun_init.c
@@ -46,7 +46,7 @@ static char fb_dev[PATH_MAX] = "/dev/fb";
 static char fb_dev[PATH_MAX] = "/dev/console";
 #endif
 
-void
+_X_EXPORT void
 xf86OpenConsole(void)
 {
     int i;
@@ -209,7 +209,7 @@ xf86OpenConsole(void)
     }
 }
 
-void
+_X_EXPORT void
 xf86CloseConsole(void)
 {
 #ifdef HAS_USL_VTS
@@ -296,7 +296,7 @@ xf86CloseConsole(void)
     close(xf86Info.consoleFd);
 }
 
-int
+_X_EXPORT int
 xf86ProcessArgument(int argc, char **argv, int i)
 {
     /*
@@ -346,7 +346,7 @@ xf86ProcessArgument(int argc, char **argv, int i)
     return 0;
 }
 
-void xf86UseMsg()
+_X_EXPORT void xf86UseMsg()
 {
 #ifdef HAS_USL_VTS
     ErrorF("vtXX                   Use the specified VT number\n");
diff --git a/hw/xfree86/os-support/sysv/sysv_init.c b/hw/xfree86/os-support/sysv/sysv_init.c
index 170bb89..afb484e 100644
--- a/hw/xfree86/os-support/sysv/sysv_init.c
+++ b/hw/xfree86/os-support/sysv/sysv_init.c
@@ -43,7 +43,7 @@ static Bool Protect0 = FALSE;
 static int VTnum = -1;
 
 
-void
+_X_EXPORT void
 xf86OpenConsole()
 {
     int fd;
@@ -186,7 +186,7 @@ xf86OpenConsole()
     return;
 }
 
-void
+_X_EXPORT void
 xf86CloseConsole()
 {
     struct vt_mode   VT;
@@ -205,7 +205,7 @@ xf86CloseConsole()
     return;
 }
 
-int
+_X_EXPORT int
 xf86ProcessArgument(int argc, char *argv[], int i)
 {
 	/*
@@ -242,7 +242,7 @@ xf86ProcessArgument(int argc, char *argv[], int i)
 	return(0);
 }
 
-void
+_X_EXPORT void
 xf86UseMsg()
 {
 	ErrorF("vtXX                   use the specified VT number\n");
diff --git a/hw/xfree86/parser/Device.c b/hw/xfree86/parser/Device.c
index 216789f..8f5370b 100644
--- a/hw/xfree86/parser/Device.c
+++ b/hw/xfree86/parser/Device.c
@@ -357,7 +357,7 @@ xf86freeDeviceList (XF86ConfDevicePtr ptr)
 	}
 }
 
-XF86ConfDevicePtr
+_X_EXPORT XF86ConfDevicePtr
 xf86findDevice (const char *ident, XF86ConfDevicePtr p)
 {
 	while (p)
@@ -370,7 +370,7 @@ xf86findDevice (const char *ident, XF86ConfDevicePtr p)
 	return (NULL);
 }
 
-char *
+_X_EXPORT char *
 xf86configStrdup (const char *s)
 {
 	char *tmp;
diff --git a/hw/xfree86/parser/Flags.c b/hw/xfree86/parser/Flags.c
index d97a199..6eb48e3 100644
--- a/hw/xfree86/parser/Flags.c
+++ b/hw/xfree86/parser/Flags.c
@@ -216,7 +216,7 @@ addNewOption2 (XF86OptionPtr head, char *name, char *val, int used)
 	return ((XF86OptionPtr) xf86addListItem ((glp) head, (glp) new));
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86addNewOption (XF86OptionPtr head, char *name, char *val)
 {
 	return addNewOption2(head, name, val, 0);
@@ -249,7 +249,7 @@ xf86optionListDup (XF86OptionPtr opt)
 	return newopt;
 }
 
-void
+_X_EXPORT void
 xf86optionListFree (XF86OptionPtr opt)
 {
 	XF86OptionPtr prev;
@@ -265,7 +265,7 @@ xf86optionListFree (XF86OptionPtr opt)
 	}
 }
 
-char *
+_X_EXPORT char *
 xf86optionName(XF86OptionPtr opt)
 {
 	if (opt)
@@ -273,7 +273,7 @@ xf86optionName(XF86OptionPtr opt)
 	return 0;
 }
 
-char *
+_X_EXPORT char *
 xf86optionValue(XF86OptionPtr opt)
 {
 	if (opt)
@@ -281,7 +281,7 @@ xf86optionValue(XF86OptionPtr opt)
 	return 0;
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86newOption(char *name, char *value)
 {
 	XF86OptionPtr opt;
@@ -298,7 +298,7 @@ xf86newOption(char *name, char *value)
 	return opt;
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86nextOption(XF86OptionPtr list)
 {
 	if (!list)
@@ -312,7 +312,7 @@ xf86nextOption(XF86OptionPtr list)
  * NULL
  */
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86findOption (XF86OptionPtr list, const char *name)
 {
 	while (list)
@@ -346,7 +346,7 @@ xf86findOptionValue (XF86OptionPtr list, const char *name)
 	return (NULL);
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86optionListCreate( const char **options, int count, int used )
 {
 	XF86OptionPtr p = NULL;
@@ -383,7 +383,7 @@ xf86optionListCreate( const char **options, int count, int used )
  * is used. The end result is a single valid list of options. Duplicates
  * are freed, and the original lists are no longer guaranteed to be complete.
  */
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86optionListMerge (XF86OptionPtr head, XF86OptionPtr tail)
 {
 	XF86OptionPtr a, b, ap = NULL, bp = NULL;
@@ -428,7 +428,7 @@ xf86optionListMerge (XF86OptionPtr head, XF86OptionPtr tail)
 	return (head);
 }
 
-char *
+_X_EXPORT char *
 xf86uLongToString(unsigned long i)
 {
 	char *s;
@@ -442,7 +442,7 @@ xf86uLongToString(unsigned long i)
 	return s;
 }
 
-XF86OptionPtr
+_X_EXPORT XF86OptionPtr
 xf86parseOption(XF86OptionPtr head)
 {
 	XF86OptionPtr option, cnew, old;
@@ -493,7 +493,7 @@ xf86parseOption(XF86OptionPtr head)
 	return (head);
 }
 
-void
+_X_EXPORT void
 xf86printOptionList(FILE *fp, XF86OptionPtr list, int tabs)
 {
 	int i;
diff --git a/hw/xfree86/parser/Input.c b/hw/xfree86/parser/Input.c
index 3d98019..34ce6cb 100644
--- a/hw/xfree86/parser/Input.c
+++ b/hw/xfree86/parser/Input.c
@@ -189,7 +189,7 @@ xf86validateInput (XF86ConfigPtr p)
 	return (TRUE);
 }
 
-XF86ConfInputPtr
+_X_EXPORT XF86ConfInputPtr
 xf86findInput (const char *ident, XF86ConfInputPtr p)
 {
 	while (p)
@@ -202,7 +202,7 @@ xf86findInput (const char *ident, XF86ConfInputPtr p)
 	return (NULL);
 }
 
-XF86ConfInputPtr
+_X_EXPORT XF86ConfInputPtr
 xf86findInputByDriver (const char *driver, XF86ConfInputPtr p)
 {
 	while (p)
diff --git a/hw/xfree86/parser/Layout.c b/hw/xfree86/parser/Layout.c
index 5d1348a..03afbcc 100644
--- a/hw/xfree86/parser/Layout.c
+++ b/hw/xfree86/parser/Layout.c
@@ -520,7 +520,7 @@ xf86validateLayout (XF86ConfigPtr p)
 	return (TRUE);
 }
 
-XF86ConfLayoutPtr
+_X_EXPORT XF86ConfLayoutPtr
 xf86findLayout (const char *name, XF86ConfLayoutPtr list)
 {
 	while (list)
diff --git a/hw/xfree86/parser/Monitor.c b/hw/xfree86/parser/Monitor.c
index 9d53312..3873077 100644
--- a/hw/xfree86/parser/Monitor.c
+++ b/hw/xfree86/parser/Monitor.c
@@ -842,7 +842,7 @@ xf86freeModesList (XF86ConfModesPtr ptr)
 	}
 }
 
-XF86ConfMonitorPtr
+_X_EXPORT XF86ConfMonitorPtr
 xf86findMonitor (const char *ident, XF86ConfMonitorPtr p)
 {
 	while (p)
@@ -855,7 +855,7 @@ xf86findMonitor (const char *ident, XF86ConfMonitorPtr p)
 	return (NULL);
 }
 
-XF86ConfModesPtr
+_X_EXPORT XF86ConfModesPtr
 xf86findModes (const char *ident, XF86ConfModesPtr p)
 {
 	while (p)
@@ -868,7 +868,7 @@ xf86findModes (const char *ident, XF86ConfModesPtr p)
 	return (NULL);
 }
 
-XF86ConfModeLinePtr
+_X_EXPORT XF86ConfModeLinePtr
 xf86findModeLine (const char *ident, XF86ConfModeLinePtr p)
 {
 	while (p)
diff --git a/hw/xfree86/parser/Screen.c b/hw/xfree86/parser/Screen.c
index dfc02bb..cd3d889 100644
--- a/hw/xfree86/parser/Screen.c
+++ b/hw/xfree86/parser/Screen.c
@@ -554,7 +554,7 @@ xf86validateScreen (XF86ConfigPtr p)
 	return (TRUE);
 }
 
-XF86ConfScreenPtr
+_X_EXPORT XF86ConfScreenPtr
 xf86findScreen (const char *ident, XF86ConfScreenPtr p)
 {
 	while (p)
diff --git a/hw/xfree86/parser/Video.c b/hw/xfree86/parser/Video.c
index a8912cf..2c9c8a0 100644
--- a/hw/xfree86/parser/Video.c
+++ b/hw/xfree86/parser/Video.c
@@ -282,7 +282,7 @@ xf86freeVideoAdaptorList (XF86ConfVideoAdaptorPtr ptr)
 	}
 }
 
-XF86ConfVideoAdaptorPtr
+_X_EXPORT XF86ConfVideoAdaptorPtr
 xf86findVideoAdaptor (const char *ident, XF86ConfVideoAdaptorPtr p)
 {
 	while (p)
diff --git a/hw/xfree86/parser/read.c b/hw/xfree86/parser/read.c
index b044a6a..748a2ca 100644
--- a/hw/xfree86/parser/read.c
+++ b/hw/xfree86/parser/read.c
@@ -90,7 +90,7 @@ xf86validateConfig (XF86ConfigPtr p)
 	return (TRUE);
 }
 
-XF86ConfigPtr
+_X_EXPORT XF86ConfigPtr
 xf86readConfigFile (void)
 {
 	int token;
@@ -240,7 +240,7 @@ xf86readConfigFile (void)
  * A pointer to the head of the list is returned to handle the addition of
  * the first item.
  */
-GenericListPtr
+_X_EXPORT GenericListPtr
 xf86addListItem (GenericListPtr head, GenericListPtr new)
 {
 	GenericListPtr p = head;
@@ -265,7 +265,7 @@ xf86addListItem (GenericListPtr head, GenericListPtr new)
  * Test if one chained list contains the other.
  * In this case both list have the same endpoint (provided they don't loop)
  */
-int
+_X_EXPORT int
 xf86itemNotSublist(GenericListPtr list_1, GenericListPtr list_2)
 {
 	GenericListPtr p = list_1;
@@ -285,7 +285,7 @@ xf86itemNotSublist(GenericListPtr list_1, GenericListPtr list_2)
 	return (!(last_1 == last_2));
 }
 
-void
+_X_EXPORT void
 xf86freeConfig (XF86ConfigPtr p)
 {
 	if (p == NULL)
diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c
index 7f10c0d..4d75087 100644
--- a/hw/xfree86/parser/scan.c
+++ b/hw/xfree86/parser/scan.c
@@ -522,7 +522,7 @@ xf86tokenString (void)
 	return configRBuf;
 }
 
-int
+_X_EXPORT int
 xf86pathIsAbsolute(const char *path)
 {
 	if (path && path[0] == '/')
@@ -531,7 +531,7 @@ xf86pathIsAbsolute(const char *path)
 }
 
 /* A path is "safe" if it is relative and if it contains no ".." elements. */
-int
+_X_EXPORT int
 xf86pathIsSafe(const char *path)
 {
 	if (xf86pathIsAbsolute(path))
@@ -777,7 +777,7 @@ DoSubstitution(const char *template, const char *cmdline, const char *projroot,
 							"%P/lib/X11/%X"
 #endif
 
-const char *
+_X_EXPORT const char *
 xf86openConfigFile(const char *path, const char *cmdline, const char *projroot)
 {
 	char *pathcopy;
@@ -854,7 +854,7 @@ xf86openConfigFile(const char *path, const char *cmdline, const char *projroot)
 	return configPath;
 }
 
-void
+_X_EXPORT void
 xf86closeConfigFile (void)
 {
 	xf86conffree (configPath);
@@ -873,7 +873,7 @@ xf86closeConfigFile (void)
 	}
 }
 
-void
+_X_EXPORT void
 xf86setBuiltinConfig(const char *config[])
 {
 	builtinConfig = config;
@@ -982,7 +982,7 @@ xf86nameCompare (const char *s1, const char *s2)
 	return (c1 - c2);
 }
 
-char *
+_X_EXPORT char *
 xf86addComment(char *cur, char *add)
 {
 	char *str;
diff --git a/hw/xfree86/parser/write.c b/hw/xfree86/parser/write.c
index 3b77b93..6b1eac9 100644
--- a/hw/xfree86/parser/write.c
+++ b/hw/xfree86/parser/write.c
@@ -137,7 +137,7 @@ doWriteConfigFile (const char *filename, XF86ConfigPtr cptr)
 
 #ifndef HAS_NO_UIDS
 
-int
+_X_EXPORT int
 xf86writeConfigFile (const char *filename, XF86ConfigPtr cptr)
 {
 	int ret;
diff --git a/hw/xfree86/parser/xf86Optrec.h b/hw/xfree86/parser/xf86Optrec.h
index 183b857..51b8de6 100644
--- a/hw/xfree86/parser/xf86Optrec.h
+++ b/hw/xfree86/parser/xf86Optrec.h
@@ -65,6 +65,8 @@
 #define _xf86Optrec_h_
 #include <stdio.h>
 
+#include <X11/Xfuncproto.h>
+
 /* 
  * all records that need to be linked lists should contain a GenericList as
  * their first field.
diff --git a/hw/xfree86/ramdac/BT.c b/hw/xfree86/ramdac/BT.c
index dc1bcd5..28e82b1 100644
--- a/hw/xfree86/ramdac/BT.c
+++ b/hw/xfree86/ramdac/BT.c
@@ -35,7 +35,7 @@
 #include "BTPriv.h"
 #include "xf86RamDacPriv.h"
 
-void
+_X_EXPORT void
 BTramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 				    RamDacRegRecPtr ramdacReg)
 {
@@ -50,7 +50,7 @@ BTramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 						ramdacReg->DacRegs[i]);
 }
 
-void
+_X_EXPORT void
 BTramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr, 
 				 RamDacRegRecPtr ramdacReg)
 {
@@ -137,7 +137,7 @@ BTramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs/*, RamDacRecP
     return ramdacHelperPtr;
 }
 
-void
+_X_EXPORT void
 BTramdacSetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
 {
     /* We need to deal with Direct Colour visuals for 8bpp and other
diff --git a/hw/xfree86/ramdac/IBM.c b/hw/xfree86/ramdac/IBM.c
index a789b69..e45bd94 100644
--- a/hw/xfree86/ramdac/IBM.c
+++ b/hw/xfree86/ramdac/IBM.c
@@ -171,7 +171,7 @@ IBMramdac526CalculateMNPCForClock(
   return (ActualClock);
 }
 
-void
+_X_EXPORT void
 IBMramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 				    RamDacRegRecPtr ramdacReg)
 {
@@ -200,7 +200,7 @@ IBMramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 	    	(*ramdacPtr->WriteData)(pScrn, ramdacReg->DAC[i]);
 }
 
-void
+_X_EXPORT void
 IBMramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr, 
 				 RamDacRegRecPtr ramdacReg)
 {
@@ -318,7 +318,7 @@ IBMramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs/* , RamDacRe
     return ramdacHelperPtr;
 }
 
-void
+_X_EXPORT void
 IBMramdac526SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
 {
     ramdacReg->DacRegs[IBMRGB_key_control] = 0x00; /* Disable Chroma Key */
@@ -380,7 +380,7 @@ _X_EXPORT IBMramdac526SetBppProc *IBMramdac526SetBppWeak(void) {
     return IBMramdac526SetBpp;
 }
 
-void
+_X_EXPORT void
 IBMramdac640SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
 {
     unsigned char bpp = 0x00;
@@ -606,7 +606,7 @@ IBMramdac640UseHWCursor(ScreenPtr pScr, CursorPtr pCurs)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 IBMramdac526HWCursorInit(xf86CursorInfoPtr infoPtr)
 {
     infoPtr->MaxWidth = 64;
@@ -622,7 +622,7 @@ IBMramdac526HWCursorInit(xf86CursorInfoPtr infoPtr)
     infoPtr->UseHWCursor = IBMramdac526UseHWCursor;
 }
 
-void
+_X_EXPORT void
 IBMramdac640HWCursorInit(xf86CursorInfoPtr infoPtr)
 {
     infoPtr->MaxWidth = 64;
diff --git a/hw/xfree86/ramdac/TI.c b/hw/xfree86/ramdac/TI.c
index c77121b..fdc6952 100644
--- a/hw/xfree86/ramdac/TI.c
+++ b/hw/xfree86/ramdac/TI.c
@@ -123,7 +123,7 @@ TIramdacCalculateMNPForClock(
     return (ActualClock);
 }
 
-void
+_X_EXPORT void
 TIramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 				   RamDacRegRecPtr ramdacReg)
 {
@@ -225,7 +225,7 @@ TIramdacRestore(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr,
 #endif
 }
 
-void
+_X_EXPORT void
 TIramdacSave(ScrnInfoPtr pScrn, RamDacRecPtr ramdacPtr, 
 				RamDacRegRecPtr ramdacReg)
 {
@@ -353,7 +353,7 @@ TIramdacProbe(ScrnInfoPtr pScrn, RamDacSupportedInfoRecPtr ramdacs)
     return ramdacHelperPtr;
 }
 
-void
+_X_EXPORT void
 TIramdac3026SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
 {
     switch (pScrn->bitsPerPixel) {
@@ -470,7 +470,7 @@ TIramdac3026SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
     }
 }
 
-void
+_X_EXPORT void
 TIramdac3030SetBpp(ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg)
 {
     switch (pScrn->bitsPerPixel) {
@@ -660,7 +660,7 @@ TIramdacUseHWCursor(ScreenPtr pScr, CursorPtr pCurs)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 TIramdacHWCursorInit(xf86CursorInfoPtr infoPtr)
 {
     infoPtr->MaxWidth = 64;
@@ -676,7 +676,7 @@ TIramdacHWCursorInit(xf86CursorInfoPtr infoPtr)
     infoPtr->UseHWCursor = TIramdacUseHWCursor;
 }
 
-void TIramdacLoadPalette(
+_X_EXPORT void TIramdacLoadPalette(
     ScrnInfoPtr pScrn, 
     int numColors, 
     int *indices,
diff --git a/hw/xfree86/ramdac/xf86RamDac.c b/hw/xfree86/ramdac/xf86RamDac.c
index ee191d3..360cd47 100644
--- a/hw/xfree86/ramdac/xf86RamDac.c
+++ b/hw/xfree86/ramdac/xf86RamDac.c
@@ -33,8 +33,8 @@
 
 #include "xf86RamDacPriv.h"
 
-int RamDacHWPrivateIndex = -1;
-int RamDacScreenPrivateIndex = -1;
+_X_EXPORT int RamDacHWPrivateIndex = -1;
+_X_EXPORT int RamDacScreenPrivateIndex = -1;
 
 _X_EXPORT RamDacRecPtr
 RamDacCreateInfoRec()
@@ -62,7 +62,7 @@ RamDacDestroyInfoRec(RamDacRecPtr infoRec)
     xfree(infoRec);
 }
 
-void 
+_X_EXPORT void
 RamDacHelperDestroyInfoRec(RamDacHelperRecPtr infoRec)
 {
     xfree(infoRec);
@@ -147,7 +147,7 @@ RamDacGetHWIndex()
     return RamDacHWPrivateIndex;
 }
 
-int
+_X_EXPORT int
 RamDacGetScreenIndex()
 {
     return RamDacScreenPrivateIndex;
diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c
index 9a80f23..1322962 100644
--- a/hw/xfree86/vbe/vbe.c
+++ b/hw/xfree86/vbe/vbe.c
@@ -787,7 +787,7 @@ VBESetDisplayStart(vbeInfoPtr pVbe, int x, int y, Bool wait_retrace)
     return (TRUE);
 }
 
-Bool
+_X_EXPORT Bool
 VBEGetDisplayStart(vbeInfoPtr pVbe, int *x, int *y)
 {
     pVbe->pInt10->num = 0x10;
@@ -891,7 +891,7 @@ VBESetGetPaletteData(vbeInfoPtr pVbe, Bool set, int first, int num,
     return (data);
 }
 
-VBEpmi *
+_X_EXPORT VBEpmi *
 VBEGetVBEpmi(vbeInfoPtr pVbe)
 {
     VBEpmi *pmi;
@@ -977,7 +977,7 @@ VBECalcVbeModeIndex(vbeModeInfoPtr m, DisplayModePtr mode, int bpp)
 }
 #endif
 
-void
+_X_EXPORT void
 VBEVesaSaveRestore(vbeInfoPtr pVbe, vbeSaveRestorePtr vbe_sr,
 		  vbeSaveRestoreFunction function)
 {
@@ -1074,7 +1074,7 @@ VBEDPMSSet(vbeInfoPtr pVbe, int mode)
     return (R16(pVbe->pInt10->ax) == 0x4f);
 }
 
-void
+_X_EXPORT void
 VBEInterpretPanelID(int scrnIndex, struct vbePanelID *data)
 {
     ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
@@ -1103,7 +1103,7 @@ VBEInterpretPanelID(int scrnIndex, struct vbePanelID *data)
     xfree(mode);
 }
 
-struct vbePanelID *
+_X_EXPORT struct vbePanelID *
 VBEReadPanelID(vbeInfoPtr pVbe)
 {
     int RealOff = pVbe->real_mode_base;
diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c
index 1703c6a..85b15d5 100644
--- a/hw/xfree86/vgahw/vgaHW.c
+++ b/hw/xfree86/vgahw/vgaHW.c
@@ -725,7 +725,7 @@ vgaHWSeqReset(vgaHWPtr hwp, Bool start)
 }
 
 
-void
+_X_EXPORT void
 vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
 {
 #if SAVE_TEXT || SAVE_FONT1 || SAVE_FONT2
@@ -839,7 +839,7 @@ vgaHWRestoreFonts(ScrnInfoPtr scrninfp, vgaRegPtr restore)
 }
 
 
-void
+_X_EXPORT void
 vgaHWRestoreMode(ScrnInfoPtr scrninfp, vgaRegPtr restore)
 {
     vgaHWPtr hwp = VGAHWPTR(scrninfp);
@@ -871,7 +871,7 @@ vgaHWRestoreMode(ScrnInfoPtr scrninfp, vgaRegPtr restore)
 }
 
 
-void
+_X_EXPORT void
 vgaHWRestoreColormap(ScrnInfoPtr scrninfp, vgaRegPtr restore)
 {
     vgaHWPtr hwp = VGAHWPTR(scrninfp);
@@ -910,7 +910,7 @@ vgaHWRestore(ScrnInfoPtr scrninfp, vgaRegPtr restore, int flags)
 	vgaHWRestoreColormap(scrninfp, restore);
 }
 
-void
+_X_EXPORT void
 vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save)
 {
 #if  SAVE_TEXT || SAVE_FONT1 || SAVE_FONT2
@@ -1011,7 +1011,7 @@ vgaHWSaveFonts(ScrnInfoPtr scrninfp, vgaRegPtr save)
 #endif /* SAVE_TEXT || SAVE_FONT1 || SAVE_FONT2 */
 }
 
-void
+_X_EXPORT void
 vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save)
 {
     vgaHWPtr hwp = VGAHWPTR(scrninfp);
@@ -1055,7 +1055,7 @@ vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save)
 }
 
 
-void
+_X_EXPORT void
 vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save)
 {
     vgaHWPtr hwp = VGAHWPTR(scrninfp);
@@ -1544,7 +1544,7 @@ vgaHWAllocDefaultRegs(vgaRegPtr regp)
 }
 
 
-Bool
+_X_EXPORT Bool
 vgaHWSetRegCounts(ScrnInfoPtr scrp, int numCRTC, int numSequencer,
 		  int numGraphics, int numAttribute)
 {
@@ -1837,7 +1837,7 @@ vgaHWEnable(vgaHWPtr hwp)
 }
 
 
-void
+_X_EXPORT void
 vgaHWDisable(vgaHWPtr hwp)
 {
     hwp->writeEnable(hwp, hwp->readEnable(hwp) & ~0x01);
@@ -1940,7 +1940,7 @@ struct _vgaDdcSave {
     unsigned char msr;
 };
 
-void
+_X_EXPORT void
 vgaHWddc1SetSpeed(ScrnInfoPtr pScrn, xf86ddcSpeed speed)
 {
     vgaHWPtr hwp = VGAHWPTR(pScrn);
diff --git a/hw/xfree86/xaa/xaaBitBlt.c b/hw/xfree86/xaa/xaaBitBlt.c
index ebba74e..5830147 100644
--- a/hw/xfree86/xaa/xaaBitBlt.c
+++ b/hw/xfree86/xaa/xaaBitBlt.c
@@ -22,7 +22,7 @@
 #include "xaalocal.h"
 
 
-RegionPtr
+_X_EXPORT RegionPtr
 XAABitBlt(
     DrawablePtr pSrcDrawable,
     DrawablePtr pDstDrawable,
diff --git a/hw/xfree86/xaa/xaaBitmap.c b/hw/xfree86/xaa/xaaBitmap.c
index f7ae78d..cda1687 100644
--- a/hw/xfree86/xaa/xaaBitmap.c
+++ b/hw/xfree86/xaa/xaaBitmap.c
@@ -255,7 +255,7 @@ BitmapScanline_Shifted_Inverted_Careful(
     avoid the invert.
 */ 
 
-void
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAWriteBitmapColorExpand3)(
 #else
@@ -373,7 +373,7 @@ SECOND_PASS:
 
 #ifndef FIXEDBASE
 
-void
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAWriteBitmapScanlineColorExpand3)(
 #else
diff --git a/hw/xfree86/xaa/xaaCpyArea.c b/hw/xfree86/xaa/xaaCpyArea.c
index 6c991e1..846cb22 100644
--- a/hw/xfree86/xaa/xaaCpyArea.c
+++ b/hw/xfree86/xaa/xaaCpyArea.c
@@ -21,7 +21,7 @@
  */
 
 
-RegionPtr
+_X_EXPORT RegionPtr
 XAACopyArea(
     DrawablePtr pSrcDrawable,
     DrawablePtr pDstDrawable,
@@ -74,7 +74,7 @@ XAACopyArea(
 }
 
 
-void
+_X_EXPORT void
 XAADoBitBlt(
     DrawablePtr	    pSrc, 
     DrawablePtr	    pDst,
@@ -193,7 +193,7 @@ XAADoBitBlt(
 
 }
 
-void
+_X_EXPORT void
 XAADoImageWrite(
     DrawablePtr	    pSrc, 
     DrawablePtr	    pDst,
@@ -222,7 +222,7 @@ XAADoImageWrite(
 }
 
 
-void
+_X_EXPORT void
 XAADoImageRead(
     DrawablePtr	    pSrc, 
     DrawablePtr	    pDst,
@@ -252,7 +252,7 @@ XAADoImageRead(
 }
 
 
-void 
+_X_EXPORT void 
 XAAScreenToScreenBitBlt(
     ScrnInfoPtr pScrn,
     int nbox,
diff --git a/hw/xfree86/xaa/xaaCpyPlane.c b/hw/xfree86/xaa/xaaCpyPlane.c
index aa4c040..d8ad144 100644
--- a/hw/xfree86/xaa/xaaCpyPlane.c
+++ b/hw/xfree86/xaa/xaaCpyPlane.c
@@ -39,7 +39,7 @@ static void XAACopyPlaneNtoNColorExpand(DrawablePtr pSrc, DrawablePtr pDst,
 
 static unsigned long TmpBitPlane; 
 
-RegionPtr
+_X_EXPORT RegionPtr
 XAACopyPlaneColorExpansion(
     DrawablePtr	pSrc,
     DrawablePtr	pDst,
@@ -159,7 +159,7 @@ ALLOC_FAILED:
     }
 }
 
-void
+_X_EXPORT void
 XAAPushPixelsSolidColorExpansion(
     GCPtr	pGC,
     PixmapPtr	pBitMap,
diff --git a/hw/xfree86/xaa/xaaCpyWin.c b/hw/xfree86/xaa/xaaCpyWin.c
index ecdc9a3..38cbe17 100644
--- a/hw/xfree86/xaa/xaaCpyWin.c
+++ b/hw/xfree86/xaa/xaaCpyWin.c
@@ -21,7 +21,7 @@
     Written by Harm Hanemaayer (H.Hanemaayer at inter.nl.net).
 */
 
-void 
+_X_EXPORT void 
 XAACopyWindow(
     WindowPtr pWin,
     DDXPointRec ptOldOrg,
diff --git a/hw/xfree86/xaa/xaaDashLine.c b/hw/xfree86/xaa/xaaDashLine.c
index 63233e0..9621738 100644
--- a/hw/xfree86/xaa/xaaDashLine.c
+++ b/hw/xfree86/xaa/xaaDashLine.c
@@ -18,7 +18,7 @@
 #include "xaalocal.h"
 
 
-void
+_X_EXPORT void
 #ifdef POLYSEGMENT
 XAAPolySegmentDashed(
     DrawablePtr	pDrawable,
diff --git a/hw/xfree86/xaa/xaaFallback.c b/hw/xfree86/xaa/xaaFallback.c
index fd2adbd..42d9fd5 100644
--- a/hw/xfree86/xaa/xaaFallback.c
+++ b/hw/xfree86/xaa/xaaFallback.c
@@ -332,7 +332,7 @@ XAAPushPixelsFallback(
     XAA_GC_OP_EPILOGUE(pGC);
 }
 
-GCOps XAAFallbackOps = {
+_X_EXPORT GCOps XAAFallbackOps = {
     XAAFillSpansFallback, XAASetSpansFallback, 
     XAAPutImageFallback, XAACopyAreaFallback, 
     XAACopyPlaneFallback, XAAPolyPointFallback, 
diff --git a/hw/xfree86/xaa/xaaFillArc.c b/hw/xfree86/xaa/xaaFillArc.c
index d3ebc22..33d79b8 100644
--- a/hw/xfree86/xaa/xaaFillArc.c
+++ b/hw/xfree86/xaa/xaaFillArc.c
@@ -160,7 +160,7 @@ XAAFillArcSliceSolid(DrawablePtr pDraw, GCPtr pGC, xArc *arc)
 }
 
 
-void
+_X_EXPORT void
 XAAPolyFillArcSolid(pDraw, pGC, narcs, parcs)
     DrawablePtr	pDraw;
     GCPtr	pGC;
diff --git a/hw/xfree86/xaa/xaaFillPoly.c b/hw/xfree86/xaa/xaaFillPoly.c
index 6f11e35..138c5a1 100644
--- a/hw/xfree86/xaa/xaaFillPoly.c
+++ b/hw/xfree86/xaa/xaaFillPoly.c
@@ -115,7 +115,7 @@
 	extents.
 */
 
-int
+_X_EXPORT int
 XAAIsEasyPolygon(
    DDXPointPtr ptsIn,
    int count, 
@@ -194,7 +194,7 @@ XAAIsEasyPolygon(
     return POLY_IS_EASY;
 }
 
-void
+_X_EXPORT void
 XAAFillPolygonSolid(
     DrawablePtr	pDraw,
     GCPtr	pGC,
@@ -343,7 +343,7 @@ XAAFillPolygonSolid(
 
 
 
-void
+_X_EXPORT void
 XAAFillPolygonHelper(
     ScrnInfoPtr pScrn,
     DDXPointPtr	ptsIn,
@@ -658,7 +658,7 @@ CacheBltRectHelper (
 	\**********************/
 
 
-void
+_X_EXPORT void
 XAAFillPolygonStippled(
     DrawablePtr	pDraw,
     GCPtr	pGC,
@@ -818,7 +818,7 @@ XAAFillPolygonStippled(
 	\*******************/
 
 
-void
+_X_EXPORT void
 XAAFillPolygonTiled(
     DrawablePtr	pDraw,
     GCPtr	pGC,
diff --git a/hw/xfree86/xaa/xaaFillRect.c b/hw/xfree86/xaa/xaaFillRect.c
index cccd1fc..d4449f6 100644
--- a/hw/xfree86/xaa/xaaFillRect.c
+++ b/hw/xfree86/xaa/xaaFillRect.c
@@ -24,7 +24,7 @@ static void XAARenderCacheBltRects(GCPtr, int, BoxPtr, int, int);
 static void XAARenderImageWriteRects(GCPtr, int, BoxPtr, int, int);
 static void XAARenderPixmapCopyRects(GCPtr, int, BoxPtr, int, int);
 
-void
+_X_EXPORT void
 XAAPolyFillRect(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -399,7 +399,7 @@ XAAFillSolidRects(
 	\*********************/
 
 
-void
+_X_EXPORT void
 XAAFillMono8x8PatternRectsScreenOrigin(
     ScrnInfoPtr pScrn,
     int	fg, int bg, int rop,
@@ -449,7 +449,7 @@ XAAFillMono8x8PatternRectsScreenOrigin(
      SET_SYNC_FLAG(infoRec);
 }
 
-void
+_X_EXPORT void
 XAAFillMono8x8PatternRects(
     ScrnInfoPtr pScrn,
     int	fg, int bg, int rop,
@@ -511,7 +511,7 @@ XAAFillMono8x8PatternRects(
 	\**********************/
 
 
-void
+_X_EXPORT void
 XAAFillColor8x8PatternRectsScreenOrigin(
    ScrnInfoPtr pScrn,
    int rop,
@@ -546,7 +546,7 @@ XAAFillColor8x8PatternRectsScreenOrigin(
     SET_SYNC_FLAG(infoRec);
 }
 
-void
+_X_EXPORT void
 XAAFillColor8x8PatternRects(
    ScrnInfoPtr pScrn,
    int rop,
@@ -587,7 +587,7 @@ XAAFillColor8x8PatternRects(
 	|  Cache Blits  |
 	\***************/
 
-void 
+_X_EXPORT void 
 XAAFillCacheBltRects(
    ScrnInfoPtr pScrn,
    int rop,
@@ -709,7 +709,7 @@ XAAFillCacheBltRects(
 
 
 
-void 
+_X_EXPORT void 
 XAAFillCacheExpandRects(
    ScrnInfoPtr pScrn,
    int fg, int bg, int rop,
@@ -873,7 +873,7 @@ WriteColumn(
     }
 }
 
-void 
+_X_EXPORT void 
 XAAFillImageWriteRects(
     ScrnInfoPtr pScrn,
     int rop,
@@ -928,7 +928,7 @@ XAAFillImageWriteRects(
 	\*************/
 
 
-void
+_X_EXPORT void
 XAAClipAndRenderRects(
    GCPtr pGC, 
    ClipAndRenderRectsFunc BoxFunc, 
@@ -1018,7 +1018,7 @@ XAAClipAndRenderRects(
 }
 
 
-int
+_X_EXPORT int
 XAAGetRectClipBoxes(
     GCPtr pGC,
     BoxPtr pboxClippedBase,
diff --git a/hw/xfree86/xaa/xaaGC.c b/hw/xfree86/xaa/xaaGC.c
index e6083d5..46471ec 100644
--- a/hw/xfree86/xaa/xaaGC.c
+++ b/hw/xfree86/xaa/xaaGC.c
@@ -27,14 +27,14 @@ static void XAAChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
 static void XAADestroyClip(GCPtr pGC);
 static void XAACopyClip(GCPtr pgcDst, GCPtr pgcSrc);
 
-GCFuncs XAAGCFuncs = {
+_X_EXPORT GCFuncs XAAGCFuncs = {
     XAAValidateGC, XAAChangeGC, XAACopyGC, XAADestroyGC,
     XAAChangeClip, XAADestroyClip, XAACopyClip
 };
 
 extern GCOps XAAPixmapOps;
 
-Bool
+_X_EXPORT Bool
 XAACreateGC(GCPtr pGC)
 {
     ScreenPtr    pScreen = pGC->pScreen;
diff --git a/hw/xfree86/xaa/xaaGCmisc.c b/hw/xfree86/xaa/xaaGCmisc.c
index 5823cc0..0946072 100644
--- a/hw/xfree86/xaa/xaaGCmisc.c
+++ b/hw/xfree86/xaa/xaaGCmisc.c
@@ -19,7 +19,7 @@
 #include "gcstruct.h"
 #include "pixmapstr.h"
 
-void
+_X_EXPORT void
 XAAValidateCopyArea(
    GCPtr         pGC,
    unsigned long changes,
@@ -37,7 +37,7 @@ XAAValidateCopyArea(
 	pGC->ops->CopyArea = XAAFallbackOps.CopyArea;
 }
 
-void
+_X_EXPORT void
 XAAValidatePutImage(
    GCPtr         pGC,
    unsigned long changes,
@@ -56,7 +56,7 @@ XAAValidatePutImage(
 	pGC->ops->PutImage = XAAFallbackOps.PutImage;
 }
 
-void
+_X_EXPORT void
 XAAValidateCopyPlane(
    GCPtr         pGC,
    unsigned long changes,
@@ -75,7 +75,7 @@ XAAValidateCopyPlane(
 	pGC->ops->CopyPlane = XAAFallbackOps.CopyPlane;
 }
 
-void
+_X_EXPORT void
 XAAValidatePushPixels(
    GCPtr         pGC,
    unsigned long changes,
@@ -106,7 +106,7 @@ XAAValidatePushPixels(
    Validate functions if it breaks this assumption */
 
 
-void
+_X_EXPORT void
 XAAValidateFillSpans(
    GCPtr         pGC,
    unsigned long changes,
@@ -182,7 +182,7 @@ XAAValidateFillSpans(
    these, it will need to supply a new Validate functions if it breaks
    this assumption */
 
-void
+_X_EXPORT void
 XAAValidatePolyGlyphBlt(
    GCPtr         pGC,
    unsigned long changes,
@@ -237,7 +237,7 @@ XAAValidatePolyGlyphBlt(
    }
 }
 
-void
+_X_EXPORT void
 XAAValidateImageGlyphBlt(
    GCPtr         pGC,
    unsigned long changes,
@@ -298,7 +298,7 @@ XAAValidateImageGlyphBlt(
 }
 
 
-void
+_X_EXPORT void
 XAAValidatePolylines(
    GCPtr         pGC,
    unsigned long changes,
diff --git a/hw/xfree86/xaa/xaaImage.c b/hw/xfree86/xaa/xaaImage.c
index 28bec7a..29ab1c0 100644
--- a/hw/xfree86/xaa/xaaImage.c
+++ b/hw/xfree86/xaa/xaaImage.c
@@ -16,7 +16,7 @@
 #include "xaa.h"
 #include "xaalocal.h"
 
-void XAAMoveDWORDS_FixedBase(
+_X_EXPORT void XAAMoveDWORDS_FixedBase(
    register CARD32* dest,
    register CARD32* src,
    register int dwords )
@@ -60,7 +60,7 @@ _X_EXPORT void XAAMoveDWORDS(
      *(dest + 2) = *(src + 2);
 }
 
-void XAAMoveDWORDS_FixedSrc(
+_X_EXPORT void XAAMoveDWORDS_FixedSrc(
    register CARD32* dest,
    register CARD32* src,
    register int dwords )
@@ -172,7 +172,7 @@ XAAWritePixmap32To24(
 
 }
 
-void 
+_X_EXPORT void 
 XAAWritePixmap (
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -305,7 +305,7 @@ BAD_ALIGNMENT:
 }
 
 
-void 
+_X_EXPORT void 
 XAAWritePixmapScanline (
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -388,7 +388,7 @@ BAD_ALIGNMENT:
 }
 
 
-void
+_X_EXPORT void
 XAAPutImage(
     DrawablePtr pDraw,
     GCPtr       pGC,
diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
index 331945b..dbd91a2 100644
--- a/hw/xfree86/xaa/xaaInit.c
+++ b/hw/xfree86/xaa/xaaInit.c
@@ -57,7 +57,7 @@ _X_EXPORT DevPrivateKey XAAGetGCKey(void) {
     return XAAGCKey;
 }
 
-DevPrivateKey XAAGetPixmapKey(void) {
+_X_EXPORT DevPrivateKey XAAGetPixmapKey(void) {
     return XAAPixmapKey;
 }
 
diff --git a/hw/xfree86/xaa/xaaInitAccel.c b/hw/xfree86/xaa/xaaInitAccel.c
index 4087142..d8b2e95 100644
--- a/hw/xfree86/xaa/xaaInitAccel.c
+++ b/hw/xfree86/xaa/xaaInitAccel.c
@@ -109,7 +109,7 @@ static XF86ModuleVersionInfo xaaVersRec =
 
 _X_EXPORT XF86ModuleData xaaModuleData = { &xaaVersRec, NULL, NULL };
 
-Bool
+_X_EXPORT Bool
 XAAInitAccel(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
 {
     int index = pScreen->myNum;
diff --git a/hw/xfree86/xaa/xaaLineMisc.c b/hw/xfree86/xaa/xaaLineMisc.c
index cefb59a..4e19b55 100644
--- a/hw/xfree86/xaa/xaaLineMisc.c
+++ b/hw/xfree86/xaa/xaaLineMisc.c
@@ -15,7 +15,7 @@
 #include "xaalocal.h"
    
 
-void 
+_X_EXPORT void 
 XAASolidHorVertLineAsRects(
    ScrnInfoPtr pScrn,
    int x, int y, int len, int dir
@@ -29,7 +29,7 @@ XAASolidHorVertLineAsRects(
 }
    
 
-void 
+_X_EXPORT void 
 XAASolidHorVertLineAsTwoPoint(
    ScrnInfoPtr pScrn,
    int x, int y, int len, int dir
@@ -44,7 +44,7 @@ XAASolidHorVertLineAsTwoPoint(
 	(*infoRec->SubsequentSolidTwoPointLine)(pScrn, x, y, x, y + len, 0);
 }
    
-void 
+_X_EXPORT void 
 XAASolidHorVertLineAsBresenham(
    ScrnInfoPtr pScrn,
    int x, int y, int len, int dir
@@ -60,7 +60,7 @@ XAASolidHorVertLineAsBresenham(
 }
 
 
-void
+_X_EXPORT void
 XAAComputeDash(GCPtr pGC)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
diff --git a/hw/xfree86/xaa/xaaNonTEGlyph.c b/hw/xfree86/xaa/xaaNonTEGlyph.c
index 556650f..e291e31 100644
--- a/hw/xfree86/xaa/xaaNonTEGlyph.c
+++ b/hw/xfree86/xaa/xaaNonTEGlyph.c
@@ -37,7 +37,7 @@
 /* if the backing rectangle and text are of the same dimensions
 	then we can draw in one pass */
 
-void 
+_X_EXPORT void 
 #ifdef TRIPLE_BITS
 EXPNAME(XAANonTEGlyphRenderer3)(
 #else
@@ -90,7 +90,7 @@ EXPNAME(XAANonTEGlyphRenderer)(
 #ifndef FIXEDBASE
 /*  Scanline version of above gets built for LSBFIRST and MSBFIRST */
 
-void 
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAANonTEGlyphRendererScanline3)(
 #else
diff --git a/hw/xfree86/xaa/xaaNonTEText.c b/hw/xfree86/xaa/xaaNonTEText.c
index d32c0bb..f8f79ca 100644
--- a/hw/xfree86/xaa/xaaNonTEText.c
+++ b/hw/xfree86/xaa/xaaNonTEText.c
@@ -58,7 +58,7 @@ static int PolyGlyphBltNonTEColorExpansion(ScrnInfoPtr pScrn,
 ********************************************************************/
 
 
-int
+_X_EXPORT int
 XAAPolyText8NonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr	pGC,
@@ -86,7 +86,7 @@ XAAPolyText8NonTEColorExpansion(
 }
 
 
-int
+_X_EXPORT int
 XAAPolyText16NonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr	pGC,
@@ -116,7 +116,7 @@ XAAPolyText16NonTEColorExpansion(
 }
 
 
-void
+_X_EXPORT void
 XAAImageText8NonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr	pGC,
@@ -141,7 +141,7 @@ XAAImageText8NonTEColorExpansion(
 }
 
 
-void
+_X_EXPORT void
 XAAImageText16NonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr	pGC,
@@ -177,7 +177,7 @@ XAAImageText16NonTEColorExpansion(
 ********************************************************************/
 
 
-void
+_X_EXPORT void
 XAAImageGlyphBltNonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -197,7 +197,7 @@ XAAImageGlyphBltNonTEColorExpansion(
 	pGC->pCompositeClip, nglyph, (unsigned char*)pglyphBase, ppci);
 }
 
-void
+_X_EXPORT void
 XAAPolyGlyphBltNonTEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -541,7 +541,7 @@ PolyGlyphBltNonTEColorExpansion(
    indicates that part of the text string's bounding box is visible
    but not necessarily that any of the characters are visible */
 
-void XAANonTEGlyphRenderer(
+_X_EXPORT void XAANonTEGlyphRenderer(
    ScrnInfoPtr pScrn,
    int x, int y, int n,
    NonTEGlyphPtr glyphs,
diff --git a/hw/xfree86/xaa/xaaOffscreen.c b/hw/xfree86/xaa/xaaOffscreen.c
index 7c9d532..3d88e58 100644
--- a/hw/xfree86/xaa/xaaOffscreen.c
+++ b/hw/xfree86/xaa/xaaOffscreen.c
@@ -27,7 +27,7 @@
 #include "xf86fbman.h"
 #include "servermd.h"
 
-void
+_X_EXPORT void
 XAAMoveOutOffscreenPixmaps(ScreenPtr pScreen)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
@@ -44,7 +44,7 @@ XAAMoveOutOffscreenPixmaps(ScreenPtr pScreen)
 
 
 
-void
+_X_EXPORT void
 XAAMoveInOffscreenPixmaps(ScreenPtr pScreen)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
@@ -103,7 +103,7 @@ XAAMoveInOffscreenPixmaps(ScreenPtr pScreen)
 }
 
 
-void
+_X_EXPORT void
 XAARemoveAreaCallback(FBAreaPtr area)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(area->pScreen);
@@ -117,7 +117,7 @@ XAARemoveAreaCallback(FBAreaPtr area)
     DELIST_OFFSCREEN_PIXMAP(pPix);
 }
 
-void
+_X_EXPORT void
 XAAMoveOutOffscreenPixmap(PixmapPtr pPix) 
 {
     ScreenPtr pScreen = pPix->drawable.pScreen;
diff --git a/hw/xfree86/xaa/xaaOverlay.c b/hw/xfree86/xaa/xaaOverlay.c
index 273183e..a104e74 100644
--- a/hw/xfree86/xaa/xaaOverlay.c
+++ b/hw/xfree86/xaa/xaaOverlay.c
@@ -112,7 +112,7 @@ XAASetColorKey8_32(
     SET_SYNC_FLAG(infoRec);
 }
 
-void 
+_X_EXPORT void
 XAASetupOverlay8_32Planar(ScreenPtr pScreen)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
diff --git a/hw/xfree86/xaa/xaaPCache.c b/hw/xfree86/xaa/xaaPCache.c
index 069d818..76d3f80 100644
--- a/hw/xfree86/xaa/xaaPCache.c
+++ b/hw/xfree86/xaa/xaaPCache.c
@@ -160,7 +160,7 @@ FreePixmapCachePrivate(XAAPixmapCachePrivatePtr pPriv)
     xfree(pPriv);
 }
 
-void
+_X_EXPORT void
 XAAClosePixmapCache(ScreenPtr pScreen)
 {
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
@@ -630,7 +630,7 @@ GOT_EM:
 }
 
 
-void 
+_X_EXPORT void 
 XAAInitPixmapCache(	
     ScreenPtr pScreen, 
     RegionPtr areas,
@@ -1097,7 +1097,7 @@ static CARD32 StippleMasks[4] = {
 };
 #endif
 
-Bool
+_X_EXPORT Bool
 XAACheckStippleReducibility(PixmapPtr pPixmap)
 {
     XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
@@ -1195,7 +1195,7 @@ XAACheckStippleReducibility(PixmapPtr pPixmap)
 }
 
 
-Bool
+_X_EXPORT Bool
 XAACheckTileReducibility(PixmapPtr pPixmap, Bool checkMono)
 {
     XAAPixmapPtr pPriv = XAA_GET_PIXMAP_PRIVATE(pPixmap);
@@ -1401,7 +1401,7 @@ XAACheckTileReducibility(PixmapPtr pPixmap, Bool checkMono)
 }
 
 
-void XAATileCache(
+_X_EXPORT void XAATileCache(
    ScrnInfoPtr pScrn, 
    XAACacheInfoPtr pCache,
    int w, int h
@@ -1433,7 +1433,7 @@ void XAATileCache(
    SET_SYNC_FLAG(infoRec);
 }
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACacheTile(ScrnInfoPtr pScrn, PixmapPtr pPix)
 {
    int w = pPix->drawable.width;
@@ -1495,7 +1495,7 @@ XAACacheTile(ScrnInfoPtr pScrn, PixmapPtr pPix)
    return pCache;
 }
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACacheMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
 {
    int w = pPix->drawable.width;
@@ -1593,7 +1593,7 @@ XAACacheMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
    return pCache;
 }
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACachePlanarMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
 {
    int w = pPix->drawable.width;
@@ -1658,9 +1658,12 @@ XAACachePlanarMonoStipple(ScrnInfoPtr pScrn, PixmapPtr pPix)
 }
 
 _X_EXPORT XAACachePlanarMonoStippleProc
-XAAGetCachePlanarMonoStipple(void) { return XAACachePlanarMonoStipple; }
+_X_EXPORT XAAGetCachePlanarMonoStipple(void)
+{
+    return XAACachePlanarMonoStipple;
+}
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACacheStipple(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
 {
    int w = pPix->drawable.width;
@@ -1739,7 +1742,7 @@ XAACacheStipple(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
 
 
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACacheMono8x8Pattern(ScrnInfoPtr pScrn, int pat0, int pat1)
 {
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
@@ -1770,7 +1773,7 @@ XAACacheMono8x8Pattern(ScrnInfoPtr pScrn, int pat0, int pat1)
 
 
 
-XAACacheInfoPtr
+_X_EXPORT XAACacheInfoPtr
 XAACacheColor8x8Pattern(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
 {
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCRNINFOPTR(pScrn);
@@ -1840,7 +1843,7 @@ XAACacheColor8x8Pattern(ScrnInfoPtr pScrn, PixmapPtr pPix, int fg, int bg)
 }
 
 
-void 
+_X_EXPORT void 
 XAAWriteBitmapToCache(
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -1854,7 +1857,7 @@ XAAWriteBitmapToCache(
 					0, fg, bg, GXcopy, ~0);
 }
 
-void 
+_X_EXPORT void 
 XAAWriteBitmapToCacheLinear(
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -1892,7 +1895,7 @@ XAAWriteBitmapToCacheLinear(
 }
 
 
-void 
+_X_EXPORT void 
 XAAWritePixmapToCache(
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -1908,7 +1911,7 @@ XAAWritePixmapToCache(
 
 
 
-void 
+_X_EXPORT void 
 XAAWritePixmapToCacheLinear(
    ScrnInfoPtr pScrn,
    int x, int y, int w, int h,
@@ -1952,7 +1955,7 @@ XAAWritePixmapToCacheLinear(
 }
 
 
-void 
+_X_EXPORT void
 XAAWriteMono8x8PatternToCache(
    ScrnInfoPtr pScrn, 
    XAACacheInfoPtr pCache
@@ -1994,7 +1997,7 @@ XAAWriteMono8x8PatternToCache(
    xfree(data);
 }
 
-void 
+_X_EXPORT void
 XAAWriteColor8x8PatternToCache(
    ScrnInfoPtr pScrn, 
    PixmapPtr pPix, 
@@ -2090,7 +2093,7 @@ XAAWriteColor8x8PatternToCache(
 
 
 
-int
+_X_EXPORT int
 XAAStippledFillChooser(GCPtr pGC)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
@@ -2175,7 +2178,7 @@ XAAStippledFillChooser(GCPtr pGC)
 }
 
 
-int
+_X_EXPORT int
 XAAOpaqueStippledFillChooser(GCPtr pGC)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
@@ -2250,7 +2253,7 @@ XAAOpaqueStippledFillChooser(GCPtr pGC)
 
 
 
-int
+_X_EXPORT int
 XAATiledFillChooser(GCPtr pGC)
 {
     XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_GC(pGC);
@@ -2323,7 +2326,7 @@ static int RotateMasksY[4] = {
    0xFFFFFFFF, 0x00FFFFFF, 0x0000FFFF, 0x000000FF
 };
 
-void 
+_X_EXPORT void
 XAARotateMonoPattern(
     int *pat0, int *pat1,
     int xorg, int yorg,
@@ -2352,7 +2355,7 @@ XAARotateMonoPattern(
 
 
 
-void
+_X_EXPORT void
 XAAInvalidatePixmapCache(ScreenPtr pScreen)
 {
    XAAInfoRecPtr infoRec = GET_XAAINFORECPTR_FROM_SCREEN(pScreen);
diff --git a/hw/xfree86/xaa/xaaPict.c b/hw/xfree86/xaa/xaaPict.c
index e7d62a6..16f49b9 100644
--- a/hw/xfree86/xaa/xaaPict.c
+++ b/hw/xfree86/xaa/xaaPict.c
@@ -48,7 +48,7 @@
 #include "xf86fbman.h"
 #include "servermd.h"
 
-Bool
+_X_EXPORT Bool
 XAAGetPixelFromRGBA (
     CARD32 *pixel,
     CARD16 red,
@@ -91,7 +91,7 @@ XAAGetPixelFromRGBA (
 }
 
 
-Bool
+_X_EXPORT Bool
 XAAGetRGBAFromPixel(
     CARD32 pixel,
     CARD16 *red,
@@ -180,7 +180,7 @@ XAA_888_plus_PICT_a8_to_8888 (
     (pDraw->type == DRAWABLE_WINDOW || \
      (pDraw->type == DRAWABLE_PIXMAP && IS_OFFSCREEN_PIXMAP(pDraw)))
 
-Bool
+_X_EXPORT Bool
 XAADoComposite (
     CARD8      op,
     PicturePtr pSrc,
@@ -494,7 +494,7 @@ XAACompositeSrcCopy (PicturePtr pSrc,
     return;
 }
 
-void
+_X_EXPORT void
 XAAComposite (CARD8      op,
 	      PicturePtr pSrc,
 	      PicturePtr pMask,
@@ -562,7 +562,7 @@ XAAComposite (CARD8      op,
     XAA_RENDER_EPILOGUE(pScreen, Composite, XAAComposite);
 }
 
-Bool
+_X_EXPORT Bool
 XAADoGlyphs (CARD8         op,
 	   PicturePtr    pSrc,
 	   PicturePtr    pDst,
@@ -607,7 +607,7 @@ XAADoGlyphs (CARD8         op,
 }	   
 	 
 	
-void
+_X_EXPORT void
 XAAGlyphs (CARD8         op,
 	   PicturePtr    pSrc,
 	   PicturePtr    pDst,
diff --git a/hw/xfree86/xaa/xaaROP.c b/hw/xfree86/xaa/xaaROP.c
index b315e02..e05453f 100644
--- a/hw/xfree86/xaa/xaaROP.c
+++ b/hw/xfree86/xaa/xaaROP.c
@@ -14,7 +14,7 @@
 #include "xaalocal.h"
 
 
-int XAACopyROP[16] =
+_X_EXPORT int XAACopyROP[16] =
 {
    ROP_0,               /* GXclear */
    ROP_DSa,             /* GXand */
@@ -34,7 +34,7 @@ int XAACopyROP[16] =
    ROP_1                /* GXset */
 };
 
-int XAACopyROP_PM[16] =
+_X_EXPORT int XAACopyROP_PM[16] =
 {
    ROP_0,		/* not used */
    ROP_DSPnoa,
@@ -55,7 +55,7 @@ int XAACopyROP_PM[16] =
 };
 
 
-int XAAPatternROP[16]=
+_X_EXPORT int XAAPatternROP[16]=
 {
    ROP_0,
    ROP_DPa,
@@ -75,7 +75,7 @@ int XAAPatternROP[16]=
    ROP_1
 };
 
-int XAAPatternROP_PM[16] =
+_X_EXPORT int XAAPatternROP_PM[16] =
 {
    ROP_DPna,
    ROP_DPSnoa,
diff --git a/hw/xfree86/xaa/xaaRect.c b/hw/xfree86/xaa/xaaRect.c
index 0a7e174..35acdb0 100644
--- a/hw/xfree86/xaa/xaaRect.c
+++ b/hw/xfree86/xaa/xaaRect.c
@@ -20,7 +20,7 @@
 */
 
 
-void
+_X_EXPORT void
 XAAPolyRectangleThinSolid(
     DrawablePtr  pDrawable,
     GCPtr        pGC,    
diff --git a/hw/xfree86/xaa/xaaSpans.c b/hw/xfree86/xaa/xaaSpans.c
index 7d0943d..a3859bf 100644
--- a/hw/xfree86/xaa/xaaSpans.c
+++ b/hw/xfree86/xaa/xaaSpans.c
@@ -32,7 +32,7 @@ static void XAARenderCacheExpandSpans(
 static void XAARenderPixmapCopySpans(
 	GCPtr, int, DDXPointPtr, int*, int, int, int);
 
-void
+_X_EXPORT void
 XAAFillSpans(
     DrawablePtr pDraw,
     GC		*pGC,
@@ -396,7 +396,7 @@ XAARenderPixmapCopySpans(
 	\****************/
 
 
-void 
+_X_EXPORT void 
 XAAFillSolidSpans(
    ScrnInfoPtr pScrn,
    int fg, int rop,
@@ -432,7 +432,7 @@ XAAFillSolidSpans(
 	\***************/
 
 
-void 
+_X_EXPORT void 
 XAAFillMono8x8PatternSpansScreenOrigin(
    ScrnInfoPtr pScrn,
    int fg, int bg, int rop,
@@ -491,7 +491,7 @@ XAAFillMono8x8PatternSpansScreenOrigin(
 }
 
 
-void 
+_X_EXPORT void 
 XAAFillMono8x8PatternSpans(
    ScrnInfoPtr pScrn,
    int fg, int bg, int rop,
@@ -559,7 +559,7 @@ XAAFillMono8x8PatternSpans(
 	\****************/
 
 
-void 
+_X_EXPORT void 
 XAAFillColor8x8PatternSpansScreenOrigin(
    ScrnInfoPtr pScrn,
    int rop,
@@ -605,7 +605,7 @@ XAAFillColor8x8PatternSpansScreenOrigin(
 }
 
 
-void 
+_X_EXPORT void 
 XAAFillColor8x8PatternSpans(
    ScrnInfoPtr pScrn,
    int rop,
@@ -654,7 +654,7 @@ XAAFillColor8x8PatternSpans(
 	\*****************/
 
 
-void 
+_X_EXPORT void 
 XAAFillCacheBltSpans(
    ScrnInfoPtr pScrn,
    int rop,
@@ -713,7 +713,7 @@ XAAFillCacheBltSpans(
 	\****************/
 
 
-void 
+_X_EXPORT void 
 XAAFillCacheExpandSpans(
    ScrnInfoPtr pScrn,
    int fg, int bg, int rop,
@@ -774,7 +774,7 @@ XAAFillCacheExpandSpans(
 
 
 
-void
+_X_EXPORT void
 XAAClipAndRenderSpans(
     GCPtr pGC, 
     DDXPointPtr	ppt,
diff --git a/hw/xfree86/xaa/xaaStateChange.c b/hw/xfree86/xaa/xaaStateChange.c
index 57d8aa3..c88c79c 100644
--- a/hw/xfree86/xaa/xaaStateChange.c
+++ b/hw/xfree86/xaa/xaaStateChange.c
@@ -1497,7 +1497,7 @@ static Bool XAAStateWrapSetupForCPUToScreenTexture2(ScrnInfoPtr pScrn, int op,
 #endif
 
 /* Setup Function */
-Bool
+_X_EXPORT Bool
 XAAInitStateWrap(ScreenPtr pScreen, XAAInfoRecPtr infoRec)
 {
    ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
diff --git a/hw/xfree86/xaa/xaaStipple.c b/hw/xfree86/xaa/xaaStipple.c
index 4735f78..de877d2 100644
--- a/hw/xfree86/xaa/xaaStipple.c
+++ b/hw/xfree86/xaa/xaaStipple.c
@@ -23,7 +23,7 @@ static CARD32* StippleOver32_Inverted(CARD32*, CARD32*, int, int, int);
 #define stipple_get_scanline_func EXPNAME(XAAGetStippleScanlineFunc)
 #endif
 
-StippleScanlineProcPtr stipple_scanline_func[6] = {
+_X_EXPORT StippleScanlineProcPtr stipple_scanline_func[6] = {
    StipplePowerOfTwo,
    StippleUpTo32,
    StippleOver32,
@@ -83,7 +83,7 @@ _X_EXPORT StippleScanlineProcPtr *stipple_get_scanline_func(void) {
 
 #if !defined(FIXEDBASE) && !defined(MSBFIRST) && !defined(TRIPLE_BITS)
 
-unsigned int XAAShiftMasks[32] = {
+_X_EXPORT unsigned int XAAShiftMasks[32] = {
   /* gcc is rather pedantic about SHIFT_R(0xFFFFFFFF,32) */
           0x00000000    , SHIFT_R(0xFFFFFFFF,31),
   SHIFT_R(0xFFFFFFFF,30), SHIFT_R(0xFFFFFFFF,29),
@@ -105,7 +105,7 @@ unsigned int XAAShiftMasks[32] = {
 
 #endif
 
-void 
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAFillColorExpandRects3)(
 #else
@@ -241,7 +241,7 @@ SECOND_PASS:
 
 
 
-void 
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAFillColorExpandSpans3)(
 #else
@@ -352,7 +352,7 @@ SECOND_PASS:
 
 #ifndef FIXEDBASE
 
-void 
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAFillScanlineColorExpandRects3)(
 #else
@@ -465,7 +465,7 @@ SECOND_PASS:
      SET_SYNC_FLAG(infoRec);
 }
 
-void 
+_X_EXPORT void
 #ifdef TRIPLE_BITS
 EXPNAME(XAAFillScanlineColorExpandSpans3)(
 #else
diff --git a/hw/xfree86/xaa/xaaTEGlyph.c b/hw/xfree86/xaa/xaaTEGlyph.c
index d1d12c7..86fb66c 100644
--- a/hw/xfree86/xaa/xaaTEGlyph.c
+++ b/hw/xfree86/xaa/xaaTEGlyph.c
@@ -78,7 +78,7 @@ static CARD32 *DrawTETextScanlineWidth9(CARD32 *base, unsigned int **glyphp,
 #define glyph_get_scanline_func EXPNAME(XAAGetGlyphScanlineFunc)
 
 
-GlyphScanlineFuncPtr glyph_scanline_func[32] = {
+_X_EXPORT GlyphScanlineFuncPtr glyph_scanline_func[32] = {
    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,  
    DrawTETextScanlineGeneric, DrawTETextScanlineGeneric,
    DrawTETextScanlineGeneric, 
@@ -143,7 +143,7 @@ _X_EXPORT GlyphScanlineFuncPtr *glyph_get_scanline_func(void) {
 /* This gets built for MSBFIRST or LSBFIRST with FIXEDBASE or not.
 	A total of 4 versions */
 
-void 
+_X_EXPORT void
 EXPNAME(XAATEGlyphRenderer)(
     ScrnInfoPtr pScrn,
     int x, int y, int w, int h, int skipleft, int startline, 
@@ -239,7 +239,7 @@ THE_END:
 
 ********************************************************************/
 
-void 
+_X_EXPORT void
 EXPNAME(XAATEGlyphRenderer3)(
     ScrnInfoPtr pScrn,
     int x, int y, int w, int h, int skipleft, int startline, 
@@ -340,7 +340,7 @@ THE_END:
 #ifndef FIXEDBASE
 /*  Scanline version of above gets built for LSBFIRST and MSBFIRST */
 
-void 
+_X_EXPORT void
 EXPNAME(XAATEGlyphRendererScanline)(
     ScrnInfoPtr pScrn,
     int x, int y, int w, int h, int skipleft, int startline, 
@@ -415,7 +415,7 @@ THE_END:
     SET_SYNC_FLAG(infoRec);
 }
 
-void 
+_X_EXPORT void
 EXPNAME(XAATEGlyphRendererScanline3)(
     ScrnInfoPtr pScrn,
     int x, int y, int w, int h, int skipleft, int startline, 
diff --git a/hw/xfree86/xaa/xaaTEText.c b/hw/xfree86/xaa/xaaTEText.c
index fc44572..7357862 100644
--- a/hw/xfree86/xaa/xaaTEText.c
+++ b/hw/xfree86/xaa/xaaTEText.c
@@ -50,7 +50,7 @@ static void XAAGlyphBltTEColorExpansion(ScrnInfoPtr pScrn, int xInit,
 ********************************************************************/
 
 
-int
+_X_EXPORT int
 XAAPolyText8TEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -74,7 +74,7 @@ XAAPolyText8TEColorExpansion(
 }
 
 
-int
+_X_EXPORT int
 XAAPolyText16TEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -99,7 +99,7 @@ XAAPolyText16TEColorExpansion(
 }
 
 
-void
+_X_EXPORT void
 XAAImageText8TEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -123,7 +123,7 @@ XAAImageText8TEColorExpansion(
 }
 
 
-void
+_X_EXPORT void
 XAAImageText16TEColorExpansion(
     DrawablePtr pDraw,
     GCPtr pGC,
@@ -158,7 +158,7 @@ XAAImageText16TEColorExpansion(
 ********************************************************************/
 
 
-void
+_X_EXPORT void
 XAAImageGlyphBltTEColorExpansion(
     DrawablePtr pDrawable,
     GCPtr pGC,
@@ -178,7 +178,7 @@ XAAImageGlyphBltTEColorExpansion(
 	pGC->pCompositeClip, nglyph, (unsigned char*)pglyphBase, ppci);
 }
 
-void
+_X_EXPORT void
 XAAPolyGlyphBltTEColorExpansion(
     DrawablePtr pDrawable,
     GCPtr pGC,
diff --git a/hw/xfree86/xaa/xaaTables.c b/hw/xfree86/xaa/xaaTables.c
index c7fa28a..b6b7185 100644
--- a/hw/xfree86/xaa/xaaTables.c
+++ b/hw/xfree86/xaa/xaaTables.c
@@ -6,7 +6,7 @@
  * bit order within a byte.
  */
 
-unsigned int byte_expand3[256] =
+_X_EXPORT unsigned int byte_expand3[256] =
 {
     0x000000, 0x000007, 0x000038, 0x00003F, 0x0001C0, 0x0001C7, 0x0001F8, 0x0001FF,
     0x000E00, 0x000E07, 0x000E38, 0x000E3F, 0x000FC0, 0x000FC7, 0x000FF8, 0x000FFF,
@@ -50,7 +50,7 @@ unsigned int byte_expand3[256] =
  * byte.
  */
 
-unsigned int byte_reversed_expand3[256] =
+_X_EXPORT unsigned int byte_reversed_expand3[256] =
 {
     0x000000, 0x0000E0, 0x00001C, 0x0000FC, 0x008003, 0x0080E3, 0x00801F, 0x0080FF,
     0x007000, 0x0070E0, 0x00701C, 0x0070FC, 0x00F003, 0x00F0E3, 0x00F01F, 0x00F0FF,
diff --git a/hw/xfree86/xaa/xaaWideLine.c b/hw/xfree86/xaa/xaaWideLine.c
index a684d66..aacc305 100644
--- a/hw/xfree86/xaa/xaaWideLine.c
+++ b/hw/xfree86/xaa/xaaWideLine.c
@@ -785,7 +785,7 @@ XAALineJoin (
 }
 
 
-void
+_X_EXPORT void
 XAAPolylinesWideSolid (
    DrawablePtr  pDrawable,
    GCPtr        pGC,
diff --git a/mi/mibank.c b/mi/mibank.c
index dcaf4a1..84f7559 100644
--- a/mi/mibank.c
+++ b/mi/mibank.c
@@ -2210,7 +2210,7 @@ miInitializeBanking(
  * cannot exist.  This function exists because the DDX needs to be able to
  * determine this width before initializing a frame buffer.
  */
-int
+_X_EXPORT int
 miScanLineWidth(
     unsigned int     xsize,         /* pixels */
     unsigned int     ysize,         /* pixels */
diff --git a/mi/mibitblt.c b/mi/mibitblt.c
index 3e82a55..dbd2ed6 100644
--- a/mi/mibitblt.c
+++ b/mi/mibitblt.c
@@ -73,7 +73,7 @@ extern int ffs(int);
  *     set them in the destination with SetSpans
  * We let SetSpans worry about clipping to the destination.
  */
-RegionPtr
+_X_EXPORT RegionPtr
 miCopyArea(DrawablePtr  pSrcDrawable,
            DrawablePtr  pDstDrawable,
            GCPtr        pGC,
@@ -548,7 +548,7 @@ miOpqStipDrawable(DrawablePtr pDraw, GCPtr pGC, RegionPtr prgnSrc,
  * build a source clip
  * Use the bitmap we've built up as a Stipple for the destination 
  */
-RegionPtr
+_X_EXPORT RegionPtr
 miCopyPlane( DrawablePtr pSrcDrawable,
              DrawablePtr pDstDrawable,
              GCPtr pGC,
diff --git a/mi/micursor.c b/mi/micursor.c
index f6ae8f4..8b16490 100644
--- a/mi/micursor.c
+++ b/mi/micursor.c
@@ -54,7 +54,7 @@ SOFTWARE.
 #include "mi.h"
 #include "inputstr.h"
 
-void
+_X_EXPORT void
 miRecolorCursor(DeviceIntPtr pDev, ScreenPtr pScr,
                 CursorPtr pCurs, Bool displayed)
 {
diff --git a/mi/midash.c b/mi/midash.c
index ba64d35..40c741b 100644
--- a/mi/midash.c
+++ b/mi/midash.c
@@ -52,7 +52,7 @@ SOFTWARE.
 #include "mistruct.h"
 #include "mifpoly.h"
 
-void
+_X_EXPORT void
 miStepDash (
     int dist,			/* distance to step */
     int *pDashIndex,		/* current dash */
diff --git a/mi/mieq.c b/mi/mieq.c
index 82f0c66..8a4f5fc 100644
--- a/mi/mieq.c
+++ b/mi/mieq.c
@@ -81,7 +81,7 @@ typedef struct _EventQueue {
 
 static EventQueueRec miEventQueue;
 
-Bool
+_X_EXPORT Bool
 mieqInit(void)
 {
     int i;
@@ -103,7 +103,7 @@ mieqInit(void)
 }
 
 /* Ensure all events in the EQ are at least size bytes. */
-void
+_X_EXPORT void
 mieqResizeEvents(int min_size)
 {
     int i;
@@ -119,7 +119,7 @@ mieqResizeEvents(int min_size)
  * called from regular code.
  */
 
-void
+_X_EXPORT void
 mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
 {
     unsigned int           oldtail = miEventQueue.tail;
@@ -219,7 +219,7 @@ mieqEnqueue(DeviceIntPtr pDev, xEvent *e)
     miEventQueue.tail = (oldtail + 1) % QUEUE_SIZE;
 }
 
-void
+_X_EXPORT void
 mieqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)
 {
     EnqueueScreen(pDev) = pScreen;
@@ -227,7 +227,7 @@ mieqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)
 	DequeueScreen(pDev) = pScreen;
 }
 
-void
+_X_EXPORT void
 mieqSetHandler(int event, mieqHandler handler)
 {
     if (handler && miEventQueue.handlers[event])
@@ -300,7 +300,7 @@ CopyGetMasterEvent(DeviceIntPtr mdev, xEvent* original,
 }
 
 /* Call this from ProcessInputEvents(). */
-void
+_X_EXPORT void
 mieqProcessInputEvents(void)
 {
     mieqHandler handler;
diff --git a/mi/miexpose.c b/mi/miexpose.c
index f8a9e2f..d1b64b5 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -341,7 +341,7 @@ miHandleExposures(DrawablePtr pSrcDrawable, DrawablePtr pDstDrawable,
 
 /* send GraphicsExpose events, or a NoExpose event, based on the region */
 
-void
+_X_EXPORT void
 miSendGraphicsExpose (ClientPtr client, RegionPtr pRgn, XID drawable,
                       int major, int minor)
 {
@@ -388,7 +388,7 @@ miSendGraphicsExpose (ClientPtr client, RegionPtr pRgn, XID drawable,
 }
 
 
-void
+_X_EXPORT void
 miSendExposures( WindowPtr pWin, RegionPtr pRgn, int dx, int dy)
 {
     BoxPtr pBox;
@@ -514,7 +514,7 @@ miWindowExposures( WindowPtr pWin, RegionPtr prgn, RegionPtr other_exposed)
 	REGION_DESTROY( pWin->drawable.pScreen, exposures);
 }
 
-void
+_X_EXPORT void
 miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
 {
     ScreenPtr	pScreen = pWin->drawable.pScreen;
diff --git a/mi/mifpolycon.c b/mi/mifpolycon.c
index 4a3acfd..0ccc075 100644
--- a/mi/mifpolycon.c
+++ b/mi/mifpolycon.c
@@ -70,7 +70,7 @@ static int GetFPolyYBounds(SppPointPtr pts, int n, double yFtrans,
  *	line algorithm with y as the major axis. There's some funny linear
  *	interpolation involved because of the subpixel postioning.
  */
-void
+_X_EXPORT void
 miFillSppPoly(
     DrawablePtr		dst,
     GCPtr		pgc,
diff --git a/mi/miinitext.c b/mi/miinitext.c
index 92d6cd2..f669faa 100644
--- a/mi/miinitext.c
+++ b/mi/miinitext.c
@@ -353,7 +353,7 @@ static ExtensionToggle ExtensionToggleList[] =
     { NULL, NULL }
 };
 
-Bool EnableDisableExtension(char *name, Bool enable)
+_X_EXPORT Bool EnableDisableExtension(char *name, Bool enable)
 {
     ExtensionToggle *ext = &ExtensionToggleList[0];
 
@@ -367,7 +367,7 @@ Bool EnableDisableExtension(char *name, Bool enable)
     return FALSE;
 }
 
-void EnableDisableExtensionError(char *name, Bool enable)
+_X_EXPORT void EnableDisableExtensionError(char *name, Bool enable)
 {
     ExtensionToggle *ext = &ExtensionToggleList[0];
 
@@ -381,7 +381,7 @@ void EnableDisableExtensionError(char *name, Bool enable)
 #ifndef XFree86LOADER
 
 /*ARGSUSED*/
-void
+_X_EXPORT void
 InitExtensions(int argc, char *argv[])
 {
     if (!noGEExtension) GEExtensionInit();
diff --git a/mi/mipointer.c b/mi/mipointer.c
index b998cd4..da4ea94 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -346,7 +346,7 @@ miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
  * Syncronize the sprite with the cursor - called from ProcessInputEvents
  */
 
-void
+_X_EXPORT void
 miPointerUpdateSprite (DeviceIntPtr pDev)
 {
     ScreenPtr		pScreen;
@@ -419,7 +419,7 @@ miPointerUpdateSprite (DeviceIntPtr pDev)
     }
 }
 
-void
+_X_EXPORT void
 miPointerSetScreen(DeviceIntPtr pDev, int screen_no, int x, int y)
 {
 	miPointerScreenPtr pScreenPriv;
diff --git a/mi/mipolycon.c b/mi/mipolycon.c
index 6e38896..085bed3 100644
--- a/mi/mipolycon.c
+++ b/mi/mipolycon.c
@@ -71,7 +71,7 @@ static int getPolyYBounds(DDXPointPtr pts, int n, int *by, int *ty);
  *     For a derivation of the algorithm, see the author of
  *     this code.
  */
-Bool
+_X_EXPORT Bool
 miFillConvexPoly(
     DrawablePtr dst,
     GCPtr	pgc,
diff --git a/mi/mipolygen.c b/mi/mipolygen.c
index 04bc2c6..400d54d 100644
--- a/mi/mipolygen.c
+++ b/mi/mipolygen.c
@@ -65,7 +65,7 @@ SOFTWARE.
  *     See fillpoly.h for a complete description of the algorithm.
  */
 
-Bool
+_X_EXPORT Bool
 miFillGeneralPoly(
     DrawablePtr dst,
     GCPtr	pgc,
diff --git a/mi/mipushpxl.c b/mi/mipushpxl.c
index 4b97890..87ca144 100644
--- a/mi/mipushpxl.c
+++ b/mi/mipushpxl.c
@@ -92,7 +92,7 @@ bitsizeof(int) padding and sacnline unit == bitsizeof(int).)
  * in order to have both (MSB_FIRST and LSB_FIRST) versions of this
  * in the server, we need to rename one of them
  */
-void
+_X_EXPORT void
 miPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDrawable,
              int dx, int dy, int xOrg, int yOrg)
 {
diff --git a/mi/miregion.c b/mi/miregion.c
index bbeac87..c03a68c 100644
--- a/mi/miregion.c
+++ b/mi/miregion.c
@@ -221,10 +221,10 @@ if (((numRects) < ((reg)->data->size >> 1)) && ((reg)->data->size > 50)) \
 _X_EXPORT BoxRec miEmptyBox = {0, 0, 0, 0};
 _X_EXPORT RegDataRec miEmptyData = {0, 0};
 
-RegDataRec  miBrokenData = {0, 0};
+_X_EXPORT RegDataRec  miBrokenData = {0, 0};
 static RegionRec   miBrokenRegion = { { 0, 0, 0, 0 }, &miBrokenData };
 
-extern void
+_X_EXPORT void
 InitRegions (void)
 {
     pixman_region_set_static_pointers (&miEmptyBox, &miEmptyData, &miBrokenData);
@@ -284,7 +284,7 @@ miRegionEqual(RegionPtr reg1, RegionPtr reg2)
 }
 
 #ifdef DEBUG
-Bool
+_X_EXPORT Bool
 miValidRegion(RegionPtr reg)
 {
     int i, numRects;
@@ -350,7 +350,7 @@ miRegionUninit(RegionPtr pReg)
     pixman_region_fini (pReg);
 }
 
-Bool
+_X_EXPORT Bool
 miRegionBreak (RegionPtr pReg)
 {
     xfreeData (pReg);
@@ -1586,7 +1586,7 @@ miRegionNotEmpty(RegionPtr pReg)
     return pixman_region_not_empty (pReg);
 }
 
-Bool
+_X_EXPORT Bool
 miRegionBroken(RegionPtr pReg)
 {
     good(pReg);
diff --git a/mi/miscrinit.c b/mi/miscrinit.c
index 28d3316..7bcb4ad 100644
--- a/mi/miscrinit.c
+++ b/mi/miscrinit.c
@@ -171,7 +171,7 @@ miCreateScreenResources(ScreenPtr pScreen)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 miScreenDevPrivateInit(ScreenPtr pScreen, int width, pointer pbits)
 {
     miScreenInitParmsPtr pScrInitParms;
@@ -296,7 +296,7 @@ miScreenInit(
 static int privateKeyIndex;
 static DevPrivateKey privateKey = &privateKeyIndex;
 
-DevPrivateKey
+_X_EXPORT DevPrivateKey
 miAllocateGCPrivateIndex()
 {
     return privateKey;
diff --git a/mi/mispans.c b/mi/mispans.c
index e59d711..9785889 100644
--- a/mi/mispans.c
+++ b/mi/mispans.c
@@ -65,7 +65,7 @@ Written by Joel McCormack, Summer 1989.
 */
 
 
-void miInitSpanGroup(spanGroup)
+_X_EXPORT void miInitSpanGroup(spanGroup)
     SpanGroup *spanGroup;
 {
     spanGroup->size = 0;
@@ -181,7 +181,7 @@ static void miSubtractSpans (SpanGroup *spanGroup, Spans *sub)
     }
 }
 
-void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
+_X_EXPORT void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
 {
     int ymin, ymax;
     int spansCount;
@@ -214,7 +214,7 @@ void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
     }
 } /* AppendSpans */
 
-void miFreeSpanGroup(SpanGroup *spanGroup)
+_X_EXPORT void miFreeSpanGroup(SpanGroup *spanGroup)
 {
     if (spanGroup->group != NULL) xfree(spanGroup->group);
 }
@@ -372,7 +372,7 @@ miDisposeSpanGroup (SpanGroup *spanGroup)
     }
 }
 
-void miFillUniqueSpanGroup(DrawablePtr pDraw, GCPtr pGC, SpanGroup *spanGroup)
+_X_EXPORT void miFillUniqueSpanGroup(DrawablePtr pDraw, GCPtr pGC, SpanGroup *spanGroup)
 {
     int    		i;
     Spans  		*spans;
diff --git a/mi/mivaltree.c b/mi/mivaltree.c
index 2585422..bb8bce3 100644
--- a/mi/mivaltree.c
+++ b/mi/mivaltree.c
@@ -106,7 +106,7 @@ Equipment Corporation.
 /*
  * Compute the visibility of a shaped window
  */
-int
+_X_EXPORT int
 miShapedWindowIn (ScreenPtr pScreen, RegionPtr universe, RegionPtr bounding,
                   BoxPtr rect, int x, int y)
 {
@@ -166,7 +166,7 @@ miShapedWindowIn (ScreenPtr pScreen, RegionPtr universe, RegionPtr bounding,
 static GetRedirectBorderClipProcPtr	miGetRedirectBorderClipProc;
 static SetRedirectBorderClipProcPtr	miSetRedirectBorderClipProc;
 
-void
+_X_EXPORT void
 miRegisterRedirectBorderClipProc (SetRedirectBorderClipProcPtr setBorderClip,
 				  GetRedirectBorderClipProcPtr getBorderClip)
 {
@@ -589,7 +589,7 @@ miTreeObscured(
  *-----------------------------------------------------------------------
  */
 /*ARGSUSED*/
-int
+_X_EXPORT int
 miValidateTree (
     WindowPtr		pParent,    /* Parent to validate */
     WindowPtr		pChild,     /* First child of pParent that was
diff --git a/mi/miwindow.c b/mi/miwindow.c
index 498c8a6..8e4be64 100644
--- a/mi/miwindow.c
+++ b/mi/miwindow.c
@@ -122,7 +122,7 @@ miClearToBackground(WindowPtr pWin,
 	REGION_DESTROY(pScreen, pBSReg);
 }
 
-void
+_X_EXPORT void
 miMarkWindow(WindowPtr pWin)
 {
     ValidatePtr val;
@@ -137,7 +137,7 @@ miMarkWindow(WindowPtr pWin)
     pWin->valdata = val;
 }
 
-Bool
+_X_EXPORT Bool
 miMarkOverlappedWindows(WindowPtr pWin, WindowPtr pFirst, WindowPtr *ppLayerWin)
 {
     BoxPtr box;
@@ -223,7 +223,7 @@ miMarkOverlappedWindows(WindowPtr pWin, WindowPtr pFirst, WindowPtr *ppLayerWin)
  *    regions, translate the regions, restore any backing store,
  *    and then send any regions still exposed to the client
  *****/
-void
+_X_EXPORT void
 miHandleValidateExposures(WindowPtr pWin)
 {
     WindowPtr pChild;
@@ -260,7 +260,7 @@ miHandleValidateExposures(WindowPtr pWin)
     }
 }
 
-void
+_X_EXPORT void
 miMoveWindow(WindowPtr pWin, int x, int y, WindowPtr pNextSib, VTKind kind)
 {
     WindowPtr pParent;
@@ -369,7 +369,7 @@ miRecomputeExposures (
     return WT_NOMATCH;
 }
 
-void
+_X_EXPORT void
 miSlideAndSizeWindow(WindowPtr pWin,
                      int x, int y,
                      unsigned int w, unsigned int h,
@@ -681,7 +681,7 @@ miSlideAndSizeWindow(WindowPtr pWin,
 	WindowsRestructured ();
 }
 
-WindowPtr
+_X_EXPORT WindowPtr
 miGetLayerWindow(WindowPtr pWin)
 {
     return pWin->firstChild;
@@ -694,7 +694,7 @@ miGetLayerWindow(WindowPtr pWin)
  *    and send appropriate exposure events
  */
 
-void
+_X_EXPORT void
 miSetShape(WindowPtr pWin)
 {
     Bool	WasViewable = (Bool)(pWin->viewable);
@@ -750,7 +750,7 @@ miSetShape(WindowPtr pWin)
 
 /* Keeps the same inside(!) origin */
 
-void
+_X_EXPORT void
 miChangeBorderWidth(WindowPtr pWin, unsigned int width)
 {
     int oldwidth;
@@ -804,7 +804,7 @@ miChangeBorderWidth(WindowPtr pWin, unsigned int width)
 	WindowsRestructured ();
 }
 
-void
+_X_EXPORT void
 miMarkUnrealizedWindow(WindowPtr pChild, WindowPtr pWin, Bool fromConfigure)
 {
     if ((pChild != pWin) || fromConfigure)
diff --git a/mi/mizerline.c b/mi/mizerline.c
index a415d73..e1e8e6e 100644
--- a/mi/mizerline.c
+++ b/mi/mizerline.c
@@ -363,7 +363,7 @@ miZeroLine(
     xfree(pspanInit);
 }
 
-void
+_X_EXPORT void
 miZeroDashLine(
             DrawablePtr dst,
             GCPtr pgc,
diff --git a/miext/damage/damage.c b/miext/damage/damage.c
index fa2f279..74d87e3 100644
--- a/miext/damage/damage.c
+++ b/miext/damage/damage.c
@@ -1859,7 +1859,7 @@ damageCloseScreen (int i, ScreenPtr pScreen)
  * Public functions for consumption outside this file.
  */
 
-Bool
+_X_EXPORT Bool
 DamageSetup (ScreenPtr pScreen)
 {
     DamageScrPrivPtr	pScrPriv;
@@ -1898,7 +1898,7 @@ DamageSetup (ScreenPtr pScreen)
     return TRUE;
 }
 
-DamagePtr
+_X_EXPORT DamagePtr
 DamageCreate (DamageReportFunc  damageReport,
 	      DamageDestroyFunc	damageDestroy,
 	      DamageReportLevel	damageLevel,
@@ -1930,7 +1930,7 @@ DamageCreate (DamageReportFunc  damageReport,
     return pDamage;
 }
 
-void
+_X_EXPORT void
 DamageRegister (DrawablePtr pDrawable,
 		DamagePtr   pDamage)
 {
@@ -1958,7 +1958,7 @@ DamageRegister (DrawablePtr pDrawable,
     damageInsertDamage (getDrawableDamageRef (pDrawable), pDamage);
 }
 
-void
+_X_EXPORT void
 DamageDrawInternal (ScreenPtr pScreen, Bool enable)
 {
     damageScrPriv (pScreen);
@@ -1966,7 +1966,7 @@ DamageDrawInternal (ScreenPtr pScreen, Bool enable)
     pScrPriv->internalLevel += enable ? 1 : -1;
 }
 
-void
+_X_EXPORT void
 DamageUnregister (DrawablePtr	    pDrawable,
 		  DamagePtr	    pDamage)
 {
@@ -2001,7 +2001,7 @@ DamageUnregister (DrawablePtr	    pDrawable,
     damageRemoveDamage (getDrawableDamageRef (pDrawable), pDamage);
 }
 
-void
+_X_EXPORT void
 DamageDestroy (DamagePtr    pDamage)
 {
     if (pDamage->damageDestroy)
@@ -2011,7 +2011,7 @@ DamageDestroy (DamagePtr    pDamage)
     xfree (pDamage);
 }
 
-Bool
+_X_EXPORT Bool
 DamageSubtract (DamagePtr	    pDamage,
 		const RegionPtr	    pRegion)
 {
@@ -2044,7 +2044,7 @@ DamageSubtract (DamagePtr	    pDamage,
     return REGION_NOTEMPTY (pDrawable->pScreen, &pDamage->damage);
 }
 
-void
+_X_EXPORT void
 DamageEmpty (DamagePtr	    pDamage)
 {
     REGION_EMPTY (pDamage->pDrawable->pScreen, &pDamage->damage);
diff --git a/miext/shadow/shadow.c b/miext/shadow/shadow.c
index 21f1de2..a18a420 100644
--- a/miext/shadow/shadow.c
+++ b/miext/shadow/shadow.c
@@ -37,7 +37,7 @@
 #include    "shadow.h"
 
 static int shadowScrPrivateKeyIndex;
-DevPrivateKey shadowScrPrivateKey = &shadowScrPrivateKeyIndex;
+_X_EXPORT DevPrivateKey shadowScrPrivateKey = &shadowScrPrivateKeyIndex;
 
 #define wrap(priv, real, mem) {\
     priv->mem = real->mem; \
@@ -131,7 +131,7 @@ shadowReportFunc(DamagePtr pDamage, RegionPtr pRegion, void *closure)
 }
 #endif
 
-Bool
+_X_EXPORT Bool
 shadowSetup(ScreenPtr pScreen)
 {
     shadowBufPtr pBuf;
@@ -173,7 +173,7 @@ shadowSetup(ScreenPtr pScreen)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 shadowAdd(ScreenPtr pScreen, PixmapPtr pPixmap, ShadowUpdateProc update,
 	  ShadowWindowProc window, int randr, void *closure)
 {
@@ -210,7 +210,7 @@ shadowAdd(ScreenPtr pScreen, PixmapPtr pPixmap, ShadowUpdateProc update,
     return TRUE;
 }
 
-void
+_X_EXPORT void
 shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap)
 {
     shadowBuf(pScreen);
@@ -228,7 +228,7 @@ shadowRemove(ScreenPtr pScreen, PixmapPtr pPixmap)
 				 (pointer) pScreen);
 }
 
-Bool
+_X_EXPORT Bool
 shadowInit(ScreenPtr pScreen, ShadowUpdateProc update, ShadowWindowProc window)
 {
     PixmapPtr pPixmap;
diff --git a/miext/shadow/shalloc.c b/miext/shadow/shalloc.c
index 72aa28b..5aefb7d 100644
--- a/miext/shadow/shalloc.c
+++ b/miext/shadow/shalloc.c
@@ -37,7 +37,7 @@
 #include    "gcstruct.h"
 #include    "shadow.h"
 
-void *
+_X_EXPORT void *
 shadowAlloc (int width, int height, int bpp)
 {
     int	    stride;
diff --git a/miext/shadow/shpacked.c b/miext/shadow/shpacked.c
index 678f8c6..f4717ff 100644
--- a/miext/shadow/shpacked.c
+++ b/miext/shadow/shpacked.c
@@ -40,7 +40,7 @@
 #include    "shadow.h"
 #include    "fb.h"
 
-void
+_X_EXPORT void
 shadowUpdatePacked (ScreenPtr	    pScreen,
 		    shadowBufPtr    pBuf)
 {
@@ -112,4 +112,7 @@ shadowUpdatePacked (ScreenPtr	    pScreen,
     }
 }
 
-shadowUpdateProc shadowUpdatePackedWeak(void) { return shadowUpdatePacked; }
+_X_EXPORT shadowUpdateProc
+shadowUpdatePackedWeak(void) {
+    return shadowUpdatePacked;
+}
diff --git a/miext/shadow/shplanar.c b/miext/shadow/shplanar.c
index b5983dc..5fc86ee 100644
--- a/miext/shadow/shplanar.c
+++ b/miext/shadow/shplanar.c
@@ -86,7 +86,7 @@
 }
 #endif
 
-void
+_X_EXPORT void
 shadowUpdatePlanar4 (ScreenPtr	    pScreen,
 		     shadowBufPtr   pBuf)
 {
@@ -171,10 +171,10 @@ shadowUpdatePlanar4 (ScreenPtr	    pScreen,
     }
 }
 
-shadowUpdateProc shadowUpdatePlanar4Weak(void) {
+_X_EXPORT shadowUpdateProc shadowUpdatePlanar4Weak(void) {
     return shadowUpdatePlanar4;
 }
 
-shadowUpdateProc shadowUpdatePlanar4x8Weak(void) {
+_X_EXPORT shadowUpdateProc shadowUpdatePlanar4x8Weak(void) {
     return shadowUpdatePlanar4x8;
 }
diff --git a/miext/shadow/shplanar8.c b/miext/shadow/shplanar8.c
index 6d8defa..a4a392b 100644
--- a/miext/shadow/shplanar8.c
+++ b/miext/shadow/shplanar8.c
@@ -89,7 +89,7 @@
 }
 #endif
 
-void
+_X_EXPORT void
 shadowUpdatePlanar4x8 (ScreenPtr	pScreen,
 		       shadowBufPtr	pBuf)
 {
diff --git a/miext/shadow/shrotate.c b/miext/shadow/shrotate.c
index 673cd76..fd15915 100644
--- a/miext/shadow/shrotate.c
+++ b/miext/shadow/shrotate.c
@@ -48,7 +48,7 @@
 #define TOP_TO_BOTTOM	2
 #define BOTTOM_TO_TOP	-2
 
-void
+_X_EXPORT void
 shadowUpdateRotatePacked (ScreenPtr	pScreen,
 			  shadowBufPtr	pBuf)
 {
@@ -308,6 +308,6 @@ shadowUpdateRotatePacked (ScreenPtr	pScreen,
     }
 }
 
-shadowUpdateProc shadowUpdateRotatePackedWeak(void) {
+_X_EXPORT shadowUpdateProc shadowUpdateRotatePackedWeak(void) {
     return shadowUpdateRotatePacked;
 }
diff --git a/os/WaitFor.c b/os/WaitFor.c
index d6dd995..eb163b6 100644
--- a/os/WaitFor.c
+++ b/os/WaitFor.c
@@ -142,7 +142,7 @@ static OsTimerPtr timers = NULL;
  *     pClientsReady is an array to store ready client->index values into.
  *****************/
 
-int
+_X_EXPORT int
 WaitForSomething(int *pClientsReady)
 {
     int i;
@@ -475,7 +475,7 @@ TimerSet(OsTimerPtr timer, int flags, CARD32 millis,
     return timer;
 }
 
-Bool
+_X_EXPORT Bool
 TimerForce(OsTimerPtr timer)
 {
     OsTimerPtr *prev;
@@ -518,7 +518,7 @@ TimerFree(OsTimerPtr timer)
     xfree(timer);
 }
 
-void
+_X_EXPORT void
 TimerCheck(void)
 {
     CARD32 now = GetTimeInMillis();
@@ -527,7 +527,7 @@ TimerCheck(void)
 	DoTimer(timers, now, &timers);
 }
 
-void
+_X_EXPORT void
 TimerInit(void)
 {
     OsTimerPtr timer;
@@ -626,7 +626,7 @@ ScreenSaverTimeoutExpire(OsTimerPtr timer,CARD32 now,pointer arg)
 
 static OsTimerPtr ScreenSaverTimer = NULL;
 
-void
+_X_EXPORT void
 FreeScreenSaverTimer(void)
 {
     if (ScreenSaverTimer) {
@@ -635,7 +635,7 @@ FreeScreenSaverTimer(void)
     }
 }
 
-void
+_X_EXPORT void
 SetScreenSaverTimer(void)
 {
     CARD32 timeout = 0;
diff --git a/os/access.c b/os/access.c
index 50fc5f9..670ec36 100644
--- a/os/access.c
+++ b/os/access.c
@@ -179,7 +179,7 @@ SOFTWARE.
 #endif
 #endif
 
-Bool defeatAccessControl = FALSE;
+_X_EXPORT Bool defeatAccessControl = FALSE;
 
 #define acmp(a1, a2, len) memcmp((char *)(a1), (char *)(a2), len)
 #define acopy(a1, a2, len) memmove((char *)(a2), (char *)(a1), len)
@@ -240,7 +240,7 @@ static void siTypesInitialize(void);
  * local host to the access list
  */
 
-void
+_X_EXPORT void
 EnableLocalHost (void)
 {
     if (!UsingXdmcp)
@@ -253,7 +253,7 @@ EnableLocalHost (void)
 /*
  * called when authorization is enabled to keep us secure
  */
-void
+_X_EXPORT void
 DisableLocalHost (void)
 {
     HOST *self;
@@ -271,7 +271,7 @@ DisableLocalHost (void)
  * adds local hosts manually when needed
  */
 
-void
+_X_EXPORT void
 AccessUsingXdmcp (void)
 {
     UsingXdmcp = TRUE;
@@ -321,7 +321,7 @@ ifioctl (int fd, int cmd, char *arg)
  */
 
 #if !defined(SIOCGIFCONF) 
-void
+_X_EXPORT void
 DefineSelf (int fd)
 {
 #if !defined(TCPCONN) && !defined(STREAMSCONN) && !defined(UNIXCONN) && !defined(MNX_TCPCONN)
@@ -847,7 +847,7 @@ DefineSelf (int fd)
 #endif /* hpux && !HAS_IFREQ */
 
 #ifdef XDMCP
-void
+_X_EXPORT void
 AugmentSelf(pointer from, int len)
 {
     int family;
@@ -873,7 +873,7 @@ AugmentSelf(pointer from, int len)
 }
 #endif
 
-void
+_X_EXPORT void
 AddLocalHosts (void)
 {
     HOST    *self;
@@ -887,7 +887,7 @@ AddLocalHosts (void)
 }
 
 /* Reset access control list to initial hosts */
-void
+_X_EXPORT void
 ResetHosts (char *display)
 {
     register HOST	*host;
@@ -1132,7 +1132,7 @@ _X_EXPORT Bool LocalClient(ClientPtr client)
  * 
  * Used by XShm to test access rights to shared memory segments
  */
-int
+_X_EXPORT int
 LocalClientCred(ClientPtr client, int *pUid, int *pGid)
 {
     LocalClientCredRec *lcc;
@@ -1161,7 +1161,7 @@ LocalClientCred(ClientPtr client, int *pUid, int *pGid)
  * Used by localuser & localgroup ServerInterpreted access control forms below
  * Used by AuthAudit to log who local connections came from
  */
-int
+_X_EXPORT int
 GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
 {
 #if defined(HAS_GETPEEREID) || defined(HAS_GETPEERUCRED) || defined(SO_PEERCRED)
@@ -1260,7 +1260,7 @@ GetLocalClientCreds(ClientPtr client, LocalClientCredRec **lccp)
 #endif
 }
 
-void
+_X_EXPORT void
 FreeLocalClientCreds(LocalClientCredRec *lcc)
 {
     if (lcc != NULL) {
@@ -1290,7 +1290,7 @@ AuthorizedClient(ClientPtr client)
 /* Add a host to the access control list.  This is the external interface
  * called from the dispatcher */
 
-int
+_X_EXPORT int
 AddHost (ClientPtr	client,
 	 int            family,
 	 unsigned       length,        /* of bytes in pAddr */
@@ -1335,7 +1335,7 @@ AddHost (ClientPtr	client,
     return BadAlloc;
 }
 
-Bool
+_X_EXPORT Bool
 ForEachHostInFamily (int	    family,
 		     Bool    (*func)(
 			 unsigned char * /* addr */,
@@ -1387,7 +1387,7 @@ NewHost (int		family,
 
 /* Remove a host from the access control list */
 
-int
+_X_EXPORT int
 RemoveHost (
     ClientPtr		client,
     int                 family,
@@ -1441,7 +1441,7 @@ RemoveHost (
 }
 
 /* Get all hosts in the access control list */
-int
+_X_EXPORT int
 GetHosts (
     pointer		*data,
     int			*pnHosts,
@@ -1540,7 +1540,7 @@ CheckAddr (
 /* Check if a host is not in the access control list. 
  * Returns 1 if host is invalid, 0 if we've found it. */
 
-int
+_X_EXPORT int
 InvalidHost (
     register struct sockaddr	*saddr,
     int				len,
@@ -1651,7 +1651,7 @@ ConvertAddr (
     }
 }
 
-int
+_X_EXPORT int
 ChangeAccessControl(
     ClientPtr client,
     int fEnabled)
@@ -1664,7 +1664,7 @@ ChangeAccessControl(
 }
 
 /* returns FALSE if xhost + in effect, else TRUE */
-int
+_X_EXPORT int
 GetAccessControl(void)
 {
     return AccessEnabled;
diff --git a/os/auth.c b/os/auth.c
index a852e1c..4a67b37 100644
--- a/os/auth.c
+++ b/os/auth.c
@@ -100,7 +100,7 @@ static char *authorization_file = (char *)NULL;
 
 static Bool ShouldLoadAuth = TRUE;
 
-void
+_X_EXPORT void
 InitAuthorization (char *file_name)
 {
     authorization_file = file_name;
@@ -145,7 +145,7 @@ LoadAuthorization (void)
  * XdmcpInit calls this function to discover all authorization
  * schemes supported by the display
  */
-void
+_X_EXPORT void
 RegisterAuthorizations (void)
 {
     int	    i;
@@ -156,7 +156,7 @@ RegisterAuthorizations (void)
 }
 #endif
 
-XID
+_X_EXPORT XID
 CheckAuthorization (
     unsigned int name_length,
     char	*name,
@@ -221,7 +221,7 @@ CheckAuthorization (
     return (XID) ~0L;
 }
 
-void
+_X_EXPORT void
 ResetAuthorization (void)
 {
     int	i;
@@ -232,7 +232,7 @@ ResetAuthorization (void)
     ShouldLoadAuth = TRUE;
 }
 
-int
+_X_EXPORT int
 AuthorizationFromID (
 	XID 		id,
 	unsigned short	*name_lenp,
@@ -253,7 +253,7 @@ AuthorizationFromID (
     return 0;
 }
 
-int
+_X_EXPORT int
 RemoveAuthorization (
 	unsigned short	name_length,
 	char		*name,
@@ -273,7 +273,7 @@ RemoveAuthorization (
     return 0;
 }
 
-int
+_X_EXPORT int
 AddAuthorization (unsigned name_length, char *name, unsigned data_length, char *data)
 {
     int	i;
@@ -291,7 +291,7 @@ AddAuthorization (unsigned name_length, char *name, unsigned data_length, char *
 
 #ifdef XCSECURITY
 
-XID
+_X_EXPORT XID
 GenerateAuthorization(
 	unsigned name_length,
 	char	*name,
diff --git a/os/backtrace.c b/os/backtrace.c
index b52dcde..e51b930 100644
--- a/os/backtrace.c
+++ b/os/backtrace.c
@@ -30,7 +30,7 @@
 #ifdef HAVE_BACKTRACE
 #include <execinfo.h>
 
-void xorg_backtrace(void)
+_X_EXPORT void xorg_backtrace(void)
 {
     void *array[32]; /* deeper nesting than this means something's wrong */
     size_t size, i;
@@ -168,7 +168,7 @@ static int xorg_backtrace_pstack(void) {
 
 # if defined(HAVE_PSTACK) || defined(HAVE_WALKCONTEXT)
 
-void xorg_backtrace(void) {
+_X_EXPORT void xorg_backtrace(void) {
 
     ErrorF("\nBacktrace:\n");
 
@@ -195,7 +195,7 @@ void xorg_backtrace(void) {
 # else
 
 /* Default fallback if we can't find any way to get a backtrace */
-void xorg_backtrace(void) { return; }
+_X_EXPORT void xorg_backtrace(void) { return; }
 
 # endif
 #endif
diff --git a/os/connection.c b/os/connection.c
index ddb2d6c..9153d15 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -141,12 +141,12 @@ fd_set LastSelectMask;		/* mask returned from last select call */
 fd_set ClientsWithInput;	/* clients with FULL requests in buffer */
 fd_set ClientsWriteBlocked;	/* clients who cannot receive output */
 fd_set OutputPending;		/* clients with reply/event data ready to go */
-int MaxClients = 0;
+_X_EXPORT int MaxClients = 0;
 Bool NewOutputPending;		/* not yet attempted to write some new output */
 Bool AnyClientsWriteBlocked;	/* true if some client blocked on write */
 
 static Bool RunFromSmartParent;	/* send SIGUSR1 to parent process */
-Bool PartialNetwork;		/* continue even if unable to bind all addrs */
+_X_EXPORT Bool PartialNetwork;	/* continue even if unable to bind all addrs */
 static Pid_t ParentProcess;
 
 static Bool debug_conns = FALSE;
@@ -273,7 +273,7 @@ lookup_trans_conn (int fd)
 
 /* Set MaxClients and lastfdesc, and allocate ConnectionTranslation */
 
-void
+_X_EXPORT void
 InitConnectionLimits(void)
 {
     lastfdesc = -1;
@@ -358,7 +358,7 @@ InitParentProcess(void)
 #endif
 }
 
-void
+_X_EXPORT void
 NotifyParentProcess(void)
 {
 #if !defined(WIN32)
@@ -375,7 +375,7 @@ NotifyParentProcess(void)
  *    At initialization, create the sockets to listen on for new clients.
  *****************/
 
-void
+_X_EXPORT void
 CreateWellKnownSockets(void)
 {
     int		i;
@@ -442,7 +442,7 @@ CreateWellKnownSockets(void)
 #endif
 }
 
-void
+_X_EXPORT void
 ResetWellKnownSockets (void)
 {
     int i;
@@ -493,7 +493,7 @@ ResetWellKnownSockets (void)
 #endif
 }
 
-void
+_X_EXPORT void
 CloseWellKnownConnections(void)
 {
     int i;
@@ -618,7 +618,7 @@ AuthAudit (ClientPtr client, Bool letin,
 #endif	
 }
 
-XID
+_X_EXPORT XID
 AuthorizationIDOfClient(ClientPtr client)
 {
     if (client->osPrivate)
@@ -647,7 +647,7 @@ AuthorizationIDOfClient(ClientPtr client)
  *
  *****************************************************************/
 
-char * 
+_X_EXPORT char * 
 ClientAuthorized(ClientPtr client, 
     unsigned int proto_n, char *auth_proto, 
     unsigned int string_n, char *auth_string)
@@ -798,7 +798,7 @@ AllocNewConnection (XtransConnInfo trans_conn, int fd, CARD32 conn_time)
  *****************/
 
 /*ARGSUSED*/
-Bool
+_X_EXPORT Bool
 EstablishNewConnections(ClientPtr clientUnused, pointer closure)
 {
     fd_set  readyconnections;     /* set of listeners that are ready */
@@ -980,7 +980,7 @@ CloseDownFileDescriptor(OsCommPtr oc)
  *    to check each and every socket individually.
  *****************/
 
-void
+_X_EXPORT void
 CheckConnections(void)
 {
 #ifndef WIN32
@@ -1040,7 +1040,7 @@ CheckConnections(void)
  *    Delete client from AllClients and free resources 
  *****************/
 
-void
+_X_EXPORT void
 CloseDownConnection(ClientPtr client)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -1098,7 +1098,7 @@ RemoveEnabledDevice(int fd)
  *    This routine is "undone" by ListenToAllClients()
  *****************/
 
-int
+_X_EXPORT int
 OnlyListenToOneClient(ClientPtr client)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -1135,7 +1135,7 @@ OnlyListenToOneClient(ClientPtr client)
  *    Undoes OnlyListentToOneClient()
  ****************/
 
-void
+_X_EXPORT void
 ListenToAllClients(void)
 {
     if (GrabInProgress)
@@ -1213,7 +1213,7 @@ AttendClient (ClientPtr client)
 
 /* make client impervious to grabs; assume only executing client calls this */
 
-void
+_X_EXPORT void
 MakeClientGrabImpervious(ClientPtr client)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -1232,7 +1232,7 @@ MakeClientGrabImpervious(ClientPtr client)
 
 /* make client pervious to grabs; assume only executing client calls this */
 
-void
+_X_EXPORT void
 MakeClientGrabPervious(ClientPtr client)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
diff --git a/os/io.c b/os/io.c
index f07993e..e902ee5 100644
--- a/os/io.c
+++ b/os/io.c
@@ -191,7 +191,7 @@ YieldControlDeath(void)
     timesThisConnection = 0;
 }
 
-int
+_X_EXPORT int
 ReadRequestFromClient(ClientPtr client)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -465,7 +465,7 @@ ReadRequestFromClient(ClientPtr client)
  *
  **********************/
 
-Bool
+_X_EXPORT Bool
 InsertFakeRequest(ClientPtr client, char *data, int count)
 {
     OsCommPtr oc = (OsCommPtr)client->osPrivate;
@@ -599,7 +599,7 @@ static const int padlength[4] = {0, 3, 2, 1};
  *
  **********************/
 
-void
+_X_EXPORT void
 FlushAllOutput(void)
 {
     register int index, base;
@@ -672,7 +672,7 @@ FlushAllOutput(void)
 #endif /* WIN32 */
 }
 
-void
+_X_EXPORT void
 FlushIfCriticalOutputPending(void)
 {
     if (CriticalOutputPending)
@@ -1087,7 +1087,7 @@ FreeOsBuffers(OsCommPtr oc)
     }
 }
 
-void
+_X_EXPORT void
 ResetOsBuffers(void)
 {
     ConnectionInputPtr oci;
diff --git a/os/log.c b/os/log.c
index 97b98f0..d659324 100644
--- a/os/log.c
+++ b/os/log.c
@@ -100,7 +100,7 @@ OR PERFORMANCE OF THIS SOFTWARE.
 
 
 #ifdef DDXOSVERRORF
-void (*OsVendorVErrorFProc)(const char *, va_list args) = NULL;
+_X_EXPORT void (*OsVendorVErrorFProc)(const char *, va_list args) = NULL;
 #endif
 
 static FILE *logFile = NULL;
@@ -155,7 +155,7 @@ static Bool needBuffer = TRUE;
  * string.
  */
 
-const char *
+_X_EXPORT const char *
 LogInit(const char *fname, const char *backup)
 {
     char *logFileName = NULL;
@@ -217,7 +217,7 @@ LogInit(const char *fname, const char *backup)
     return logFileName;
 }
 
-void
+_X_EXPORT void
 LogClose(void)
 {
     if (logFile) {
@@ -226,7 +226,7 @@ LogClose(void)
     }
 }
 
-Bool
+_X_EXPORT Bool
 LogSetParameter(LogParameter param, int value)
 {
     switch (param) {
@@ -420,7 +420,7 @@ static int nrepeat = 0;
 static int oldlen = -1;
 static OsTimerPtr auditTimer = NULL;
 
-void 
+_X_EXPORT void 
 FreeAuditTimer(void)
 {
     if (auditTimer != NULL) {
@@ -451,7 +451,7 @@ AuditPrefix(void)
     return tmpBuf;
 }
 
-void
+_X_EXPORT void
 AuditF(const char * f, ...)
 {
     va_list args;
@@ -482,7 +482,7 @@ AuditFlush(OsTimerPtr timer, CARD32 now, pointer arg)
     }
 }
 
-void
+_X_EXPORT void
 VAuditF(const char *f, va_list args)
 {
     char *prefix;
@@ -577,7 +577,7 @@ Error(char *str)
 	LogWrite(-1, strerror(saveErrno));
 }
 
-void
+_X_EXPORT void
 LogPrintMarkers(void)
 {
     /* Show what the message marker symbols mean. */
diff --git a/os/oscolor.c b/os/oscolor.c
index 7f6b938..a066129 100644
--- a/os/oscolor.c
+++ b/os/oscolor.c
@@ -1571,7 +1571,7 @@ static const BuiltinColor BuiltinColors[] = {
 
 #define NUM_BUILTIN_COLORS  (sizeof (BuiltinColors) / sizeof (BuiltinColors[0]))
 
-Bool
+_X_EXPORT Bool
 OsLookupColor(int		screen,
 	      char		*name,
 	      unsigned int	len,
diff --git a/os/osinit.c b/os/osinit.c
index 74e2457..92bd90b 100644
--- a/os/osinit.c
+++ b/os/osinit.c
@@ -79,16 +79,16 @@ SOFTWARE.
 
 extern char *display;
 #ifdef RLIMIT_DATA
-int limitDataSpace = -1;
+_X_EXPORT int limitDataSpace = -1;
 #endif
 #ifdef RLIMIT_STACK
-int limitStackSpace = -1;
+_X_EXPORT int limitStackSpace = -1;
 #endif
 #ifdef RLIMIT_NOFILE
-int limitNoFile = -1;
+_X_EXPORT int limitNoFile = -1;
 #endif
 
-void
+_X_EXPORT void
 OsInit(void)
 {
     static Bool been_here = FALSE;
@@ -202,7 +202,7 @@ OsInit(void)
 	    SmartScheduleDisable = TRUE;
 }
 
-void
+_X_EXPORT void
 OsCleanup(Bool terminating)
 {
     if (terminating)
diff --git a/os/strcasecmp.c b/os/strcasecmp.c
index ca1051d..268fa1e 100644
--- a/os/strcasecmp.c
+++ b/os/strcasecmp.c
@@ -35,7 +35,7 @@
 #include "dix.h"
 
 #ifdef NEED_STRCASECMP
-int
+_X_EXPORT int
 xstrcasecmp(const char *str1, const char *str2)
 {
     const u_char *us1 = (const u_char *)str1, *us2 = (const u_char *)str2;
@@ -51,7 +51,7 @@ xstrcasecmp(const char *str1, const char *str2)
 #endif
 
 #ifdef NEED_STRNCASECMP
-int
+_X_EXPORT int
 xstrncasecmp(const char *s1, const char *s2, size_t n)
 {
     if (n != 0) {
diff --git a/os/strcasestr.c b/os/strcasestr.c
index b3d4549..cbc84f1 100644
--- a/os/strcasestr.c
+++ b/os/strcasestr.c
@@ -42,7 +42,7 @@
  * Find the first occurrence of find in s, ignore case.
  */
 #ifdef NEED_STRCASESTR
-char *
+_X_EXPORT char *
 xstrcasestr(const char *s, const char *find)
 {
         char c, sc;
diff --git a/os/strlcat.c b/os/strlcat.c
index 91ceabb..b753a7a 100644
--- a/os/strlcat.c
+++ b/os/strlcat.c
@@ -30,7 +30,7 @@
  * Returns strlen(src) + MIN(siz, strlen(initial dst)).
  * If retval >= siz, truncation occurred.
  */
-size_t
+_X_EXPORT size_t
 strlcat(char *dst, const char *src, size_t siz)
 {
 	register char *d = dst;
diff --git a/os/strlcpy.c b/os/strlcpy.c
index aa9d042..341d028 100644
--- a/os/strlcpy.c
+++ b/os/strlcpy.c
@@ -27,7 +27,7 @@
  * will be copied.  Always NUL terminates (unless siz == 0).
  * Returns strlen(src); if retval >= siz, truncation occurred.
  */
-size_t
+_X_EXPORT size_t
 strlcpy(char *dst, const char *src, size_t siz)
 {
 	register char *d = dst;
diff --git a/os/utils.c b/os/utils.c
index 39a40e4..54fb120 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -198,13 +198,13 @@ _X_EXPORT Bool noGEExtension = FALSE;
 
 #include <errno.h>
 
-Bool CoreDump;
+_X_EXPORT Bool CoreDump;
 
 #ifdef PANORAMIX
-Bool PanoramiXExtensionDisabledHack = FALSE;
+_X_EXPORT Bool PanoramiXExtensionDisabledHack = FALSE;
 #endif
 
-int auditTrailLevel = 1;
+_X_EXPORT int auditTrailLevel = 1;
 
 #if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED)
 #define HAS_SAVED_IDS_AND_SETEUID
@@ -212,7 +212,7 @@ int auditTrailLevel = 1;
 
 static char *dev_tty_from_init = NULL;	/* since we need to parse it anyway */
 
-OsSigHandlerPtr
+_X_EXPORT OsSigHandlerPtr
 OsSignal(sig, handler)
     int sig;
     OsSigHandlerPtr handler;
@@ -261,7 +261,7 @@ static Bool nolock = FALSE;
  *      contained inside is valid.  If so, then die.  Otherwise, create
  *      the lock file containing the PID.
  */
-void
+_X_EXPORT void
 LockServer(void)
 {
   char tmp[PATH_MAX], pid_str[12];
@@ -387,7 +387,7 @@ LockServer(void)
  * UnlockServer --
  *      Remove the server lock file.
  */
-void
+_X_EXPORT void
 UnlockServer(void)
 {
   if (nolock) return;
@@ -401,7 +401,7 @@ UnlockServer(void)
 /* Force connections to close on SIGHUP from init */
 
 /*ARGSUSED*/
-SIGVAL
+_X_EXPORT SIGVAL
 AutoResetServer (int sig)
 {
     int olderrno = errno;
@@ -471,7 +471,7 @@ AdjustWaitForDelay (pointer waitTime, unsigned long newdelay)
     }
 }
 
-void UseMsg(void)
+_X_EXPORT void UseMsg(void)
 {
     ErrorF("use: X [:<display>] [option]\n");
     ErrorF("-a #                   mouse acceleration (pixels)\n");
@@ -577,7 +577,7 @@ VerifyDisplayName(const char *d)
  * and allows ddx to handle additional fields.  It is not allowed to modify
  * argc or any of the strings pointed to by argv.
  */
-void
+_X_EXPORT void
 ProcessCommandLine(int argc, char *argv[])
 {
     int i, skip;
@@ -1167,7 +1167,7 @@ Xfree(pointer ptr)
 #endif /* !INTERNAL_MALLOC */
 
 
-char *
+_X_EXPORT char *
 Xstrdup(const char *s)
 {
     char *sd;
@@ -1205,7 +1205,7 @@ XNFstrdup(const char *s)
 #define SMART_SCHEDULE_TIMER		ITIMER_REAL
 #endif
 
-void
+_X_EXPORT void
 SmartScheduleStopTimer (void)
 {
 #ifdef SMART_SCHEDULE_POSSIBLE
@@ -1221,7 +1221,7 @@ SmartScheduleStopTimer (void)
 #endif
 }
 
-void
+_X_EXPORT void
 SmartScheduleStartTimer (void)
 {
 #ifdef SMART_SCHEDULE_POSSIBLE
@@ -1245,7 +1245,7 @@ SmartScheduleTimer (int sig)
 }
 #endif
 
-Bool
+_X_EXPORT Bool
 SmartScheduleInit (void)
 {
 #ifdef SMART_SCHEDULE_POSSIBLE
@@ -1276,7 +1276,7 @@ static sigset_t	PreviousSignalMask;
 static int	BlockedSignalCount;
 #endif
 
-void
+_X_EXPORT void
 OsBlockSignals (void)
 {
 #ifdef SIG_BLOCK
@@ -1314,7 +1314,7 @@ OsBlockSignals (void)
 #endif
 }
 
-void
+_X_EXPORT void
 OsReleaseSignals (void)
 {
 #ifdef SIG_BLOCK
@@ -1336,7 +1336,7 @@ OsReleaseSignals (void)
  * as well.  As it is now, xkbcomp messages don't end up in the log file.
  */
 
-int
+_X_EXPORT int
 System(char *command)
 {
     int pid, p;
@@ -1395,7 +1395,7 @@ static struct pid {
 
 OsSigHandlerPtr old_alarm = NULL; /* XXX horrible awful hack */
 
-pointer
+_X_EXPORT pointer
 Popen(char *command, char *type)
 {
     struct pid *cur;
@@ -1480,7 +1480,7 @@ Popen(char *command, char *type)
 }
 
 /* fopen that drops privileges */
-pointer
+_X_EXPORT pointer
 Fopen(char *file, char *type)
 {
     FILE *iop;
@@ -1573,7 +1573,7 @@ Fopen(char *file, char *type)
 #endif /* HAS_SAVED_IDS_AND_SETEUID */
 }
 
-int
+_X_EXPORT int
 Pclose(pointer iop)
 {
     struct pid *cur, *last;
@@ -1613,7 +1613,7 @@ Pclose(pointer iop)
     return pid == -1 ? -1 : pstat;
 }
 
-int 
+_X_EXPORT int 
 Fclose(pointer iop)
 {
 #ifdef HAS_SAVED_IDS_AND_SETEUID
@@ -1701,7 +1701,7 @@ enum BadCode {
 #endif
 
 void
-CheckUserParameters(int argc, char **argv, char **envp)
+_X_EXPORT CheckUserParameters(int argc, char **argv, char **envp)
 {
     enum BadCode bad = NotBad;
     int i = 0, j;
@@ -1838,7 +1838,7 @@ CheckUserParameters(int argc, char **argv, char **envp)
 #include <pwd.h>
 #endif /* USE_PAM */
 
-void
+_X_EXPORT void
 CheckUserAuthorization(void)
 {
 #ifdef USE_PAM
diff --git a/os/xprintf.c b/os/xprintf.c
index 07eaa1f..4be4e7a 100644
--- a/os/xprintf.c
+++ b/os/xprintf.c
@@ -43,7 +43,7 @@
 # endif
 #endif
     
-char *
+_X_EXPORT char *
 Xvprintf(const char *format, va_list va)
 {
     char *ret;
@@ -63,7 +63,7 @@ Xvprintf(const char *format, va_list va)
     return ret;
 }
 
-char *Xprintf(const char *format, ...)
+_X_EXPORT char *Xprintf(const char *format, ...)
 {
     char *ret;
     va_list va;
@@ -73,7 +73,7 @@ char *Xprintf(const char *format, ...)
     return ret;
 }
 
-char *
+_X_EXPORT char *
 XNFvprintf(const char *format, va_list va)
 {
     char *ret;
@@ -93,7 +93,7 @@ XNFvprintf(const char *format, va_list va)
     return ret;
 }
 
-char *XNFprintf(const char *format, ...)
+_X_EXPORT char *XNFprintf(const char *format, ...)
 {
     char *ret;
     va_list va;
diff --git a/randr/mirandr.c b/randr/mirandr.c
index 05375e4..266f83b 100644
--- a/randr/mirandr.c
+++ b/randr/mirandr.c
@@ -34,7 +34,7 @@
 #include "randrstr.h"
 #include <stdio.h>
 
-Bool
+_X_EXPORT Bool
 miRRGetInfo (ScreenPtr pScreen, Rotation *rotations)
 {
     return TRUE;
@@ -44,7 +44,7 @@ miRRGetInfo (ScreenPtr pScreen, Rotation *rotations)
  * Any hardware that can actually change anything will need something
  * different here
  */
-Bool
+_X_EXPORT Bool
 miRRCrtcSet (ScreenPtr	pScreen,
 	     RRCrtcPtr	crtc,
 	     RRModePtr	mode,
@@ -64,7 +64,7 @@ miRRCrtcSetGamma (ScreenPtr	pScreen,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 miRROutputSetProperty (ScreenPtr	    pScreen,
 		       RROutputPtr	    output,
 		       Atom		    property,
@@ -73,7 +73,7 @@ miRROutputSetProperty (ScreenPtr	    pScreen,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 miRROutputGetProperty (ScreenPtr	    pScreen,
 		       RROutputPtr	    output,
 		       Atom		    property)
@@ -81,7 +81,7 @@ miRROutputGetProperty (ScreenPtr	    pScreen,
 	return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 miRROutputValidateMode (ScreenPtr	    pScreen,
 			RROutputPtr	    output,
 			RRModePtr	    mode)
@@ -89,7 +89,7 @@ miRROutputValidateMode (ScreenPtr	    pScreen,
     return FALSE;
 }
 
-void
+_X_EXPORT void
 miRRModeDestroy (ScreenPtr  pScreen,
 		 RRModePtr  mode)
 {
@@ -104,7 +104,7 @@ miRRModeDestroy (ScreenPtr  pScreen,
  * XXX what to do here....
  */
 
-Bool
+_X_EXPORT Bool
 miRandRInit (ScreenPtr pScreen)
 {
     rrScrPrivPtr    pScrPriv;
diff --git a/randr/randr.c b/randr/randr.c
index 230d816..5a60cc9 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -53,14 +53,14 @@ static int	RRNScreens;
 static int ProcRRDispatch (ClientPtr pClient);
 static int SProcRRDispatch (ClientPtr pClient);
 
-int	RREventBase;
-int	RRErrorBase;
-RESTYPE RRClientType, RREventType; /* resource types for event masks */
+_X_EXPORT int	RREventBase;
+_X_EXPORT int	RRErrorBase;
+_X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event masks */
 static int RRClientPrivateKeyIndex;
-DevPrivateKey RRClientPrivateKey = &RRClientPrivateKeyIndex;
+_X_EXPORT DevPrivateKey RRClientPrivateKey = &RRClientPrivateKeyIndex;
 
 static int rrPrivKeyIndex;
-DevPrivateKey rrPrivKey = &rrPrivKeyIndex;
+_X_EXPORT DevPrivateKey rrPrivKey = &rrPrivKeyIndex;
 
 static void
 RRClientCallback (CallbackListPtr	*list,
@@ -196,7 +196,7 @@ SRRNotifyEvent (xEvent *from,
 
 static int RRGeneration;
 
-Bool RRInit (void)
+_X_EXPORT Bool RRInit (void)
 {
     if (RRGeneration != serverGeneration)
     {
@@ -211,7 +211,7 @@ Bool RRInit (void)
     return TRUE;
 }
 
-Bool RRScreenInit(ScreenPtr pScreen)
+_X_EXPORT Bool RRScreenInit(ScreenPtr pScreen)
 {
     rrScrPrivPtr   pScrPriv;
 
@@ -314,7 +314,7 @@ RRFreeEvents (pointer data, XID id)
     return 1;
 }
 
-void
+_X_EXPORT void
 RRExtensionInit (void)
 {
     ExtensionEntry *extEntry;
@@ -398,7 +398,7 @@ TellChanged (WindowPtr pWin, pointer value)
 /*
  * Something changed; send events and adjust pointer position
  */
-void
+_X_EXPORT void
 RRTellChanged (ScreenPtr pScreen)
 {
     rrScrPriv (pScreen);
@@ -431,7 +431,7 @@ RRTellChanged (ScreenPtr pScreen)
  * Return the first output which is connected to an active CRTC
  * Used in emulating 1.0 behaviour
  */
-RROutputPtr
+_X_EXPORT RROutputPtr
 RRFirstOutput (ScreenPtr pScreen)
 {
     rrScrPriv(pScreen);
@@ -451,7 +451,7 @@ RRFirstOutput (ScreenPtr pScreen)
     return NULL;
 }
 
-CARD16
+_X_EXPORT CARD16
 RRVerticalRefresh (xRRModeInfo *mode)
 {
     CARD32  refresh;
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 5d270ce..102ef6d 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -24,12 +24,12 @@
 #include "swaprep.h"
 #include "registry.h"
 
-RESTYPE	RRCrtcType;
+_X_EXPORT RESTYPE	RRCrtcType;
 
 /*
  * Notify the CRTC of some change
  */
-void
+_X_EXPORT void
 RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged)
 {
     ScreenPtr	pScreen = crtc->pScreen;
@@ -51,7 +51,7 @@ RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged)
 /*
  * Create a CRTC
  */
-RRCrtcPtr
+_X_EXPORT RRCrtcPtr
 RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
 {
     RRCrtcPtr	    crtc;
@@ -108,7 +108,7 @@ RRCrtcCreate (ScreenPtr pScreen, void *devPrivate)
 /*
  * Set the allowed rotations on a CRTC
  */
-void
+_X_EXPORT void
 RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations)
 {
     crtc->rotations = rotations;
@@ -117,7 +117,7 @@ RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations)
 /*
  * Set whether transforms are allowed on a CRTC
  */
-void
+_X_EXPORT void
 RRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms)
 {
     crtc->transforms = transforms;
@@ -127,7 +127,7 @@ RRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms)
  * Notify the extension that the Crtc has been reconfigured,
  * the driver calls this whenever it has updated the mode
  */
-Bool
+_X_EXPORT Bool
 RRCrtcNotify (RRCrtcPtr	    crtc,
 	      RRModePtr	    mode,
 	      int	    x,
@@ -245,7 +245,7 @@ RRCrtcNotify (RRCrtcPtr	    crtc,
     return TRUE;
 }
 
-void
+_X_EXPORT void
 RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -298,7 +298,7 @@ RRCrtcPendingProperties (RRCrtcPtr crtc)
 /*
  * Request that the Crtc be reconfigured
  */
-Bool
+_X_EXPORT Bool
 RRCrtcSet (RRCrtcPtr    crtc,
 	   RRModePtr	mode,
 	   int		x,
@@ -390,7 +390,7 @@ RRCrtcSet (RRCrtcPtr    crtc,
 /*
  * Return crtc transform
  */
-RRTransformPtr
+_X_EXPORT RRTransformPtr
 RRCrtcGetTransform (RRCrtcPtr crtc)
 {
     RRTransformPtr  transform = &crtc->client_pending_transform;
@@ -403,7 +403,7 @@ RRCrtcGetTransform (RRCrtcPtr crtc)
 /*
  * Check whether the pending and current transforms are the same
  */
-Bool
+_X_EXPORT Bool
 RRCrtcPendingTransform (RRCrtcPtr crtc)
 {
     return memcmp (&crtc->client_current_transform.transform,
@@ -414,7 +414,7 @@ RRCrtcPendingTransform (RRCrtcPtr crtc)
 /*
  * Destroy a Crtc at shutdown
  */
-void
+_X_EXPORT void
 RRCrtcDestroy (RRCrtcPtr crtc)
 {
     FreeResource (crtc->id, 0);
@@ -454,7 +454,7 @@ RRCrtcDestroyResource (pointer value, XID pid)
  * Request that the Crtc gamma be changed
  */
 
-Bool
+_X_EXPORT Bool
 RRCrtcGammaSet (RRCrtcPtr   crtc,
 		CARD16	    *red,
 		CARD16	    *green,
@@ -485,7 +485,7 @@ RRCrtcGammaSet (RRCrtcPtr   crtc,
  * in the RRCrtcRec
  */
 
-Bool
+_X_EXPORT Bool
 RRCrtcGammaNotify (RRCrtcPtr	crtc)
 {
     return TRUE;    /* not much going on here */
@@ -516,7 +516,7 @@ RRModeGetScanoutSize (RRModePtr mode, PictTransformPtr transform,
 /**
  * Returns the width/height that the crtc scans out from the framebuffer
  */
-void
+_X_EXPORT void
 RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
 {
     return RRModeGetScanoutSize (crtc->mode, &crtc->transform, width, height);
@@ -526,7 +526,7 @@ RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height)
  * Set the size of the gamma table at server startup time
  */
 
-Bool
+_X_EXPORT Bool
 RRCrtcGammaSetSize (RRCrtcPtr	crtc,
 		    int		size)
 {
@@ -555,7 +555,7 @@ RRCrtcGammaSetSize (RRCrtcPtr	crtc,
  * Set the pending CRTC transformation
  */
 
-int
+_X_EXPORT int
 RRCrtcTransformSet (RRCrtcPtr		crtc,
 		    PictTransformPtr	transform,
 		    struct pixman_f_transform *f_transform,
@@ -607,7 +607,7 @@ RRCrtcTransformSet (RRCrtcPtr		crtc,
 /*
  * Initialize crtc type
  */
-Bool
+_X_EXPORT Bool
 RRCrtcInit (void)
 {
     RRCrtcType = CreateNewResourceType (RRCrtcDestroyResource);
@@ -617,7 +617,7 @@ RRCrtcInit (void)
     return TRUE;
 }
 
-int
+_X_EXPORT int
 ProcRRGetCrtcInfo (ClientPtr client)
 {
     REQUEST(xRRGetCrtcInfoReq);
@@ -724,7 +724,7 @@ ProcRRGetCrtcInfo (ClientPtr client)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRSetCrtcConfig (ClientPtr client)
 {
     REQUEST(xRRSetCrtcConfigReq);
@@ -977,7 +977,7 @@ sendReply:
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRGetCrtcGammaSize (ClientPtr client)
 {
     REQUEST(xRRGetCrtcGammaSizeReq);
@@ -1003,7 +1003,7 @@ ProcRRGetCrtcGammaSize (ClientPtr client)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRGetCrtcGamma (ClientPtr client)
 {
     REQUEST(xRRGetCrtcGammaReq);
@@ -1046,7 +1046,7 @@ ProcRRGetCrtcGamma (ClientPtr client)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRSetCrtcGamma (ClientPtr client)
 {
     REQUEST(xRRSetCrtcGammaReq);
@@ -1077,7 +1077,7 @@ ProcRRSetCrtcGamma (ClientPtr client)
 
 /* Version 1.3 additions */
 
-int
+_X_EXPORT int
 ProcRRSetCrtcTransform (ClientPtr client)
 {
     REQUEST(xRRSetCrtcTransformReq);
@@ -1165,7 +1165,7 @@ transform_encode (ClientPtr client, xRenderTransform *wire, PictTransform *pict)
 	SwapLongs ((CARD32 *) wire, sizeof (xRenderTransform));
 }
 
-int
+_X_EXPORT int
 ProcRRGetCrtcTransform (ClientPtr client)
 {
     REQUEST(xRRGetCrtcTransformReq);
diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c
index 64af6ce..e9a70f0 100644
--- a/randr/rrdispatch.c
+++ b/randr/rrdispatch.c
@@ -25,7 +25,7 @@
 #define SERVER_RANDR_MAJOR	1
 #define SERVER_RANDR_MINOR	3
 
-Bool
+_X_EXPORT Bool
 RRClientKnowsRates (ClientPtr	pClient)
 {
     rrClientPriv(pClient);
@@ -181,7 +181,7 @@ ProcRRSelectInput (ClientPtr client)
     return Success;
 }
 
-int (*ProcRandrVector[RRNumberRequests])(ClientPtr) = {
+_X_EXPORT int (*ProcRandrVector[RRNumberRequests])(ClientPtr) = {
     ProcRRQueryVersion,	/* 0 */
 /* we skip 1 to make old clients fail pretty immediately */
     NULL,			/* 1 ProcRandrOldGetScreenInfo */
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
index 38314de..20acf57 100644
--- a/randr/rrinfo.c
+++ b/randr/rrinfo.c
@@ -177,7 +177,7 @@ RRScanOldConfig (ScreenPtr pScreen, Rotation rotations)
 /*
  * Poll the driver for changed information
  */
-Bool
+_X_EXPORT Bool
 RRGetInfo (ScreenPtr pScreen)
 {
     rrScrPriv (pScreen);
@@ -207,7 +207,7 @@ RRGetInfo (ScreenPtr pScreen)
 /*
  * Register the range of sizes for the screen
  */
-void
+_X_EXPORT void
 RRScreenSetSizeRange (ScreenPtr	pScreen,
 		      CARD16	minWidth,
 		      CARD16	minHeight,
@@ -248,7 +248,7 @@ RRScreenSizeMatches (RRScreenSizePtr  a,
     return TRUE;
 }
 
-RRScreenSizePtr
+_X_EXPORT RRScreenSizePtr
 RRRegisterSize (ScreenPtr	    pScreen,
 		short		    width, 
 		short		    height,
@@ -282,7 +282,7 @@ RRRegisterSize (ScreenPtr	    pScreen,
     return &pNew[pScrPriv->nSizes-1];
 }
 
-Bool RRRegisterRate (ScreenPtr		pScreen,
+_X_EXPORT Bool RRRegisterRate (ScreenPtr		pScreen,
 		     RRScreenSizePtr	pSize,
 		     int		rate)
 {
@@ -307,7 +307,7 @@ Bool RRRegisterRate (ScreenPtr		pScreen,
     return TRUE;
 }
 
-Rotation
+_X_EXPORT Rotation
 RRGetRotation(ScreenPtr pScreen)
 {
     RROutputPtr	output = RRFirstOutput (pScreen);
@@ -318,7 +318,7 @@ RRGetRotation(ScreenPtr pScreen)
     return output->crtc->rotation;
 }
 
-void
+_X_EXPORT void
 RRSetCurrentConfig (ScreenPtr		pScreen,
 		    Rotation		rotation,
 		    int			rate,
diff --git a/randr/rrmode.c b/randr/rrmode.c
index 2fa4403..0c847a1 100644
--- a/randr/rrmode.c
+++ b/randr/rrmode.c
@@ -23,7 +23,7 @@
 #include "randrstr.h"
 #include "registry.h"
 
-RESTYPE	RRModeType;
+_X_EXPORT RESTYPE	RRModeType;
 
 static Bool
 RRModeEqual (xRRModeInfo *a, xRRModeInfo *b)
@@ -112,7 +112,7 @@ RRModeFindByName (const char	*name,
     return NULL;
 }
 
-RRModePtr
+_X_EXPORT RRModePtr
 RRModeGet (xRRModeInfo	*modeInfo,
 	   const char	*name)
 {
@@ -157,7 +157,7 @@ RRModeCreateUser (ScreenPtr	pScreen,
     return mode;
 }
 
-RRModePtr *
+_X_EXPORT RRModePtr *
 RRModesForScreen (ScreenPtr pScreen, int *num_ret)
 {
     rrScrPriv(pScreen);
@@ -228,7 +228,7 @@ RRModesForScreen (ScreenPtr pScreen, int *num_ret)
     return screen_modes;
 }
 
-void
+_X_EXPORT void
 RRModeDestroy (RRModePtr mode)
 {
     int	m;
@@ -261,7 +261,7 @@ RRModeDestroyResource (pointer value, XID pid)
     return 1;
 }
 
-Bool
+_X_EXPORT Bool
 RRModeInit (void)
 {
     assert (num_modes == 0);
@@ -273,7 +273,7 @@ RRModeInit (void)
     return TRUE;
 }
 
-int
+_X_EXPORT int
 ProcRRCreateMode (ClientPtr client)
 {
     REQUEST(xRRCreateModeReq);
@@ -325,7 +325,7 @@ ProcRRCreateMode (ClientPtr client)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRDestroyMode (ClientPtr client)
 {
     REQUEST(xRRDestroyModeReq);
@@ -346,7 +346,7 @@ ProcRRDestroyMode (ClientPtr client)
     return Success;
 }
 
-int
+_X_EXPORT int
 ProcRRAddOutputMode (ClientPtr client)
 {
     REQUEST(xRRAddOutputModeReq);
@@ -372,7 +372,7 @@ ProcRRAddOutputMode (ClientPtr client)
     return RROutputAddUserMode (output, mode);
 }
 
-int
+_X_EXPORT int
 ProcRRDeleteOutputMode (ClientPtr client)
 {
     REQUEST(xRRDeleteOutputModeReq);
diff --git a/randr/rroutput.c b/randr/rroutput.c
index 1ecde31..b98fc54 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -23,12 +23,12 @@
 #include "randrstr.h"
 #include "registry.h"
 
-RESTYPE	RROutputType;
+_X_EXPORT RESTYPE	RROutputType;
 
 /*
  * Notify the output of some change
  */
-void
+_X_EXPORT void
 RROutputChanged (RROutputPtr output, Bool configChanged)
 {
     ScreenPtr	pScreen = output->pScreen;
@@ -47,7 +47,7 @@ RROutputChanged (RROutputPtr output, Bool configChanged)
  * Create an output
  */
 
-RROutputPtr
+_X_EXPORT RROutputPtr
 RROutputCreate (ScreenPtr   pScreen,
 		const char  *name,
 		int	    nameLength,
@@ -110,7 +110,7 @@ RROutputCreate (ScreenPtr   pScreen,
 /*
  * Notify extension that output parameters have been changed
  */
-Bool
+_X_EXPORT Bool
 RROutputSetClones (RROutputPtr  output,
 		   RROutputPtr  *clones,
 		   int		numClones)
@@ -143,7 +143,7 @@ RROutputSetClones (RROutputPtr  output,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RROutputSetModes (RROutputPtr	output,
 		  RRModePtr	*modes,
 		  int		numModes,
@@ -187,7 +187,7 @@ RROutputSetModes (RROutputPtr	output,
     return TRUE;
 }
 
-int
+_X_EXPORT int
 RROutputAddUserMode (RROutputPtr    output,
 		     RRModePtr	    mode)
 {
@@ -227,7 +227,7 @@ RROutputAddUserMode (RROutputPtr    output,
     return Success;
 }
 
-int
+_X_EXPORT int
 RROutputDeleteUserMode (RROutputPtr output,
 			RRModePtr   mode)
 {
@@ -256,7 +256,7 @@ RROutputDeleteUserMode (RROutputPtr output,
     return Success;
 }
 
-Bool
+_X_EXPORT Bool
 RROutputSetCrtcs (RROutputPtr	output,
 		  RRCrtcPtr	*crtcs,
 		  int		numCrtcs)
@@ -289,7 +289,7 @@ RROutputSetCrtcs (RROutputPtr	output,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RROutputSetConnection (RROutputPtr  output,
 		       CARD8	    connection)
 {
@@ -300,7 +300,7 @@ RROutputSetConnection (RROutputPtr  output,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RROutputSetSubpixelOrder (RROutputPtr output,
 			  int	      subpixelOrder)
 {
@@ -312,7 +312,7 @@ RROutputSetSubpixelOrder (RROutputPtr output,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RROutputSetPhysicalSize (RROutputPtr	output,
 			 int		mmWidth,
 			 int		mmHeight)
@@ -326,7 +326,7 @@ RROutputSetPhysicalSize (RROutputPtr	output,
 }
 
 
-void
+_X_EXPORT void
 RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output)
 {
     ScreenPtr pScreen = pWin->drawable.pScreen;
@@ -362,7 +362,7 @@ RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output)
 /*
  * Destroy a Output at shutdown
  */
-void
+_X_EXPORT void
 RROutputDestroy (RROutputPtr output)
 {
     FreeResource (output->id, 0);
@@ -415,7 +415,7 @@ RROutputDestroyResource (pointer value, XID pid)
 /*
  * Initialize output type
  */
-Bool
+_X_EXPORT Bool
 RROutputInit (void)
 {
     RROutputType = CreateNewResourceType (RROutputDestroyResource);
@@ -427,7 +427,7 @@ RROutputInit (void)
 
 #define OutputInfoExtra	(SIZEOF(xRRGetOutputInfoReply) - 32)
 				
-int
+_X_EXPORT int
 ProcRRGetOutputInfo (ClientPtr client)
 {
     REQUEST(xRRGetOutputInfoReq);
diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index 6b934c0..35472fc 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -100,7 +100,7 @@ RRPointerToNearestCrtc (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, RRCr
     pScrPriv->pointerCrtc = nearest;
 }
 
-void
+_X_EXPORT void
 RRPointerMoved (ScreenPtr pScreen, int x, int y)
 {
     rrScrPriv (pScreen);
@@ -133,7 +133,7 @@ RRPointerMoved (ScreenPtr pScreen, int x, int y)
  * When the screen is reconfigured, move all pointers to the nearest
  * CRTC
  */
-void
+_X_EXPORT void
 RRPointerScreenConfigured (ScreenPtr pScreen)
 {
     WindowPtr	pRoot;
diff --git a/randr/rrproperty.c b/randr/rrproperty.c
index 6ca7cc9..decf6cb 100644
--- a/randr/rrproperty.c
+++ b/randr/rrproperty.c
@@ -62,7 +62,7 @@ static void RRDeliverPropertyEvent(ScreenPtr pScreen, xEvent *event)
     WalkTree(pScreen, DeliverPropertyEvent, event);
 }
 
-void
+_X_EXPORT void
 RRDeleteAllOutputProperties (RROutputPtr output)
 {
     RRPropertyPtr prop, next;
@@ -127,7 +127,7 @@ RRDestroyOutputProperty (RRPropertyPtr prop)
     xfree(prop);
 }
 
-void
+_X_EXPORT void
 RRDeleteOutputProperty (RROutputPtr output, Atom property)
 {
     RRPropertyPtr	prop, *prev;
@@ -150,7 +150,7 @@ RRDeleteOutputProperty (RROutputPtr output, Atom property)
     }
 }
 
-int
+_X_EXPORT int
 RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
 			int format, int mode, unsigned long len,
 			pointer value, Bool sendevent, Bool pending)
@@ -275,7 +275,7 @@ RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
     return(Success);
 }
 
-Bool
+_X_EXPORT Bool
 RRPostPendingProperties (RROutputPtr output)
 {
     RRPropertyValuePtr	pending_value;
@@ -317,7 +317,7 @@ RRPostPendingProperties (RROutputPtr output)
     return ret;
 }
 
-RRPropertyPtr
+_X_EXPORT RRPropertyPtr
 RRQueryOutputProperty (RROutputPtr output, Atom property)
 {
     RRPropertyPtr   prop;
@@ -328,7 +328,7 @@ RRQueryOutputProperty (RROutputPtr output, Atom property)
     return NULL;
 }
 		       
-RRPropertyValuePtr
+_X_EXPORT RRPropertyValuePtr
 RRGetOutputProperty (RROutputPtr output, Atom property, Bool pending)
 {
     RRPropertyPtr   prop = RRQueryOutputProperty (output, property);
@@ -349,7 +349,7 @@ RRGetOutputProperty (RROutputPtr output, Atom property, Bool pending)
     }
 }
 
-int
+_X_EXPORT int
 RRConfigureOutputProperty (RROutputPtr output, Atom property,
 			   Bool pending, Bool range, Bool immutable,
 			   int num_values, INT32 *values)
@@ -406,7 +406,7 @@ RRConfigureOutputProperty (RROutputPtr output, Atom property,
     return Success;
 }
 
-int
+_X_EXPORT int
 ProcRRListOutputProperties (ClientPtr client)
 {
     REQUEST(xRRListOutputPropertiesReq);
@@ -454,7 +454,7 @@ ProcRRListOutputProperties (ClientPtr client)
     return(client->noClientException);
 }
 
-int
+_X_EXPORT int
 ProcRRQueryOutputProperty (ClientPtr client)
 {
     REQUEST(xRRQueryOutputPropertyReq);
@@ -503,7 +503,7 @@ ProcRRQueryOutputProperty (ClientPtr client)
     return(client->noClientException);
 }
 
-int
+_X_EXPORT int
 ProcRRConfigureOutputProperty (ClientPtr client)
 {
     REQUEST(xRRConfigureOutputPropertyReq);
@@ -524,7 +524,7 @@ ProcRRConfigureOutputProperty (ClientPtr client)
 				      (INT32 *) (stuff + 1));
 }
 
-int
+_X_EXPORT int
 ProcRRChangeOutputProperty (ClientPtr client)
 {
     REQUEST(xRRChangeOutputPropertyReq);
@@ -581,7 +581,7 @@ ProcRRChangeOutputProperty (ClientPtr client)
 	return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRDeleteOutputProperty (ClientPtr client)
 {
     REQUEST(xRRDeleteOutputPropertyReq);
@@ -604,7 +604,7 @@ ProcRRDeleteOutputProperty (ClientPtr client)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRGetOutputProperty (ClientPtr client)
 {
     REQUEST(xRRGetOutputPropertyReq);
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 7a8f2eb..e68d47a 100644
--- a/randr/rrscreen.c
+++ b/randr/rrscreen.c
@@ -70,7 +70,7 @@ RREditConnectionInfo (ScreenPtr pScreen)
     root->mmHeight = pScreen->mmHeight;
 }
 
-void
+_X_EXPORT void
 RRSendConfigNotify (ScreenPtr pScreen)
 {
     WindowPtr	pWin = WindowTable[pScreen->myNum];
@@ -91,7 +91,7 @@ RRSendConfigNotify (ScreenPtr pScreen)
     DeliverEvents(pWin, &event, 1, NullWindow);
 }
 
-void
+_X_EXPORT void
 RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen)
 {
     rrScrPriv (pScreen);
@@ -135,7 +135,7 @@ RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen)
  * The driver is responsible for calling this whenever it has changed
  * the size of the screen
  */
-void
+_X_EXPORT void
 RRScreenSizeNotify (ScreenPtr	pScreen)
 {
     rrScrPriv(pScreen);
@@ -170,7 +170,7 @@ RRScreenSizeNotify (ScreenPtr	pScreen)
 /*
  * Request that the screen be resized
  */
-Bool
+_X_EXPORT Bool
 RRScreenSizeSet (ScreenPtr  pScreen,
 		 CARD16	    width,
 		 CARD16	    height,
@@ -199,7 +199,7 @@ RRScreenSizeSet (ScreenPtr  pScreen,
 /*
  * Retrieve valid screen size range
  */
-int 
+_X_EXPORT int 
 ProcRRGetScreenSizeRange (ClientPtr client)
 {
     REQUEST(xRRGetScreenSizeRangeReq);
@@ -251,7 +251,7 @@ ProcRRGetScreenSizeRange (ClientPtr client)
     return (client->noClientException);
 }
 
-int
+_X_EXPORT int
 ProcRRSetScreenSize (ClientPtr client)
 {
     REQUEST(xRRSetScreenSizeReq);
@@ -463,13 +463,13 @@ rrGetScreenResources(ClientPtr client, Bool query)
     return client->noClientException;
 }
 
-int
+_X_EXPORT int
 ProcRRGetScreenResources (ClientPtr client)
 {
     return rrGetScreenResources(client, TRUE);
 }
     
-int
+_X_EXPORT int
 ProcRRGetScreenResourcesCurrent (ClientPtr client)
 {
     return rrGetScreenResources(client, FALSE);
@@ -578,7 +578,7 @@ RR10GetData (ScreenPtr pScreen, RROutputPtr output)
     return data;
 }
 
-int
+_X_EXPORT int
 ProcRRGetScreenInfo (ClientPtr client)
 {
     REQUEST(xRRGetScreenInfoReq);
@@ -732,7 +732,7 @@ ProcRRGetScreenInfo (ClientPtr client)
     return (client->noClientException);
 }
 
-int
+_X_EXPORT int
 ProcRRSetScreenConfig (ClientPtr client)
 {
     REQUEST(xRRSetScreenConfigReq);
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c
index 5a6dab5..1fa74ae 100644
--- a/randr/rrsdispatch.c
+++ b/randr/rrsdispatch.c
@@ -384,7 +384,7 @@ SProcRRGetCrtcTransform (ClientPtr client)
     return BadImplementation; 
 }
 
-int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
+_X_EXPORT int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
     SProcRRQueryVersion,	/* 0 */
 /* we skip 1 to make old clients fail pretty immediately */
     NULL,			/* 1 SProcRandrOldGetScreenInfo */
diff --git a/randr/rrtransform.c b/randr/rrtransform.c
index a901df4..bf45da3 100644
--- a/randr/rrtransform.c
+++ b/randr/rrtransform.c
@@ -23,7 +23,7 @@
 #include "randrstr.h"
 #include "rrtransform.h"
 
-void
+_X_EXPORT void
 RRTransformInit (RRTransformPtr transform)
 {
     pixman_transform_init_identity (&transform->transform);
@@ -34,14 +34,14 @@ RRTransformInit (RRTransformPtr transform)
     transform->nparams = 0;
 }
 
-void
+_X_EXPORT void
 RRTransformFini (RRTransformPtr transform)
 {
     if (transform->params)
 	xfree (transform->params);
 }
 
-Bool
+_X_EXPORT Bool
 RRTransformEqual (RRTransformPtr a, RRTransformPtr b)
 {
     if (a && pixman_transform_is_identity (&a->transform))
@@ -63,7 +63,7 @@ RRTransformEqual (RRTransformPtr a, RRTransformPtr b)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RRTransformSetFilter (RRTransformPtr	dst,
 		      PictFilterPtr	filter,
 		      xFixed		*params,
@@ -92,7 +92,7 @@ RRTransformSetFilter (RRTransformPtr	dst,
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 RRTransformCopy (RRTransformPtr dst, RRTransformPtr src)
 {
     if (src && pixman_transform_is_identity (&src->transform))
@@ -127,7 +127,7 @@ RRTransformCopy (RRTransformPtr dst, RRTransformPtr src)
  *
  * Return TRUE if the resulting transform is not a simple translation.
  */
-Bool
+_X_EXPORT Bool
 RRTransformCompute (int			    x,
 		    int			    y,
 		    int			    width,
diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c
index 544666f..d2c3f29 100644
--- a/randr/rrxinerama.c
+++ b/randr/rrxinerama.c
@@ -425,7 +425,7 @@ SProcRRXineramaDispatch(ClientPtr client)
     return BadRequest;
 }
 
-void
+_X_EXPORT void
 RRXineramaExtensionInit(void)
 {
 #ifdef PANORAMIX
diff --git a/render/animcur.c b/render/animcur.c
index d80094d..c151492 100644
--- a/render/animcur.c
+++ b/render/animcur.c
@@ -345,7 +345,7 @@ AnimCurRecolorCursor (DeviceIntPtr pDev,
     Wrap (as, pScreen, RecolorCursor, AnimCurRecolorCursor);
 }
 
-Bool
+_X_EXPORT Bool
 AnimCurInit (ScreenPtr pScreen)
 {
     AnimCurScreenPtr    as;
@@ -378,7 +378,7 @@ AnimCurInit (ScreenPtr pScreen)
     return TRUE;
 }
 
-int
+_X_EXPORT int
 AnimCursorCreate (CursorPtr *cursors, CARD32 *deltas, int ncursor, CursorPtr *ppCursor, ClientPtr client, XID cid)
 {
     CursorPtr	pCursor;
diff --git a/render/filter.c b/render/filter.c
index 21eedca..fa9f986 100644
--- a/render/filter.c
+++ b/render/filter.c
@@ -46,7 +46,7 @@ static int  nfilterNames;
  * standard but not required filters don't have constant indices
  */
 
-int
+_X_EXPORT int
 PictureGetFilterId (char *filter, int len, Bool makeit)
 {
     int	    i;
@@ -102,7 +102,7 @@ PictureSetDefaultIds (void)
     return TRUE;
 }
 
-char *
+_X_EXPORT char *
 PictureGetFilterName (int id)
 {
     if (0 <= id && id < nfilterNames)
@@ -193,7 +193,7 @@ PictureSetFilterAlias (ScreenPtr pScreen, char *filter, char *alias)
     return TRUE;
 }
 
-PictFilterPtr
+_X_EXPORT PictFilterPtr
 PictureFindFilter (ScreenPtr pScreen, char *name, int len)
 {
     PictureScreenPtr    ps = GetPictureScreen(pScreen);
@@ -244,7 +244,7 @@ convolutionFilterValidateParams (ScreenPtr pScreen,
 }
 
 
-Bool
+_X_EXPORT Bool
 PictureSetDefaultFilters (ScreenPtr pScreen)
 {
     if (!filterNames)
@@ -268,7 +268,7 @@ PictureSetDefaultFilters (ScreenPtr pScreen)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 PictureResetFilters (ScreenPtr pScreen)
 {
     PictureScreenPtr    ps = GetPictureScreen(pScreen);
@@ -278,7 +278,7 @@ PictureResetFilters (ScreenPtr pScreen)
     PictureFreeFilterIds ();
 }
 
-int
+_X_EXPORT int
 SetPictureFilter (PicturePtr pPicture, char *name, int len, xFixed *params, int nparams)
 {
     PictFilterPtr	pFilter;
@@ -312,7 +312,7 @@ SetPictureFilter (PicturePtr pPicture, char *name, int len, xFixed *params, int
     return SetPicturePictFilter (pPicture, pFilter, params, nparams);
 }
 
-int
+_X_EXPORT int
 SetPicturePictFilter (PicturePtr pPicture, PictFilterPtr pFilter,
 		      xFixed *params, int nparams)
 {
diff --git a/render/glyph.c b/render/glyph.c
index 87b332e..36d073f 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -96,7 +96,7 @@ FreeGlyphPrivates (GlyphPtr glyph)
     glyph->devPrivates = NULL;
 }
 
-void
+_X_EXPORT void
 GlyphUninit (ScreenPtr pScreen)
 {
     PictureScreenPtr ps = GetPictureScreen (pScreen);
@@ -129,7 +129,7 @@ GlyphUninit (ScreenPtr pScreen)
     }
 }
 
-GlyphHashSetPtr
+_X_EXPORT GlyphHashSetPtr
 FindGlyphHashSet (CARD32 filled)
 {
     int	i;
@@ -140,7 +140,7 @@ FindGlyphHashSet (CARD32 filled)
     return 0;
 }
 
-GlyphRefPtr
+_X_EXPORT GlyphRefPtr
 FindGlyphRef (GlyphHashPtr	hash,
 	      CARD32		signature,
 	      Bool		match,
@@ -192,7 +192,7 @@ FindGlyphRef (GlyphHashPtr	hash,
     return gr;
 }
 
-int
+_X_EXPORT int
 HashGlyph (xGlyphInfo    *gi,
 	   CARD8	 *bits,
 	   unsigned long size,
@@ -229,7 +229,7 @@ HashGlyph (xGlyphInfo    *gi,
     return Success;
 }
 
-GlyphPtr
+_X_EXPORT GlyphPtr
 FindGlyphByHash (unsigned char sha1[20], int format)
 {
     GlyphRefPtr gr;
@@ -272,7 +272,7 @@ CheckDuplicates (GlyphHashPtr hash, char *where)
 #define DuplicateRef(a,b)
 #endif
 
-void
+_X_EXPORT void
 FreeGlyph (GlyphPtr glyph, int format)
 {
     CheckDuplicates (&globalGlyphs[format], "FreeGlyph");
@@ -321,7 +321,7 @@ FreeGlyph (GlyphPtr glyph, int format)
     }
 }
 
-void
+_X_EXPORT void
 AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
 {
     GlyphRefPtr	    gr;
@@ -366,7 +366,7 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
     CheckDuplicates (&globalGlyphs[glyphSet->fdepth], "AddGlyph bottom");
 }
 
-Bool
+_X_EXPORT Bool
 DeleteGlyph (GlyphSetPtr glyphSet, Glyph id)
 {
     GlyphRefPtr     gr;
@@ -384,7 +384,7 @@ DeleteGlyph (GlyphSetPtr glyphSet, Glyph id)
     return FALSE;
 }
 
-GlyphPtr
+_X_EXPORT GlyphPtr
 FindGlyph (GlyphSetPtr glyphSet, Glyph id)
 {
     GlyphPtr        glyph;
@@ -395,7 +395,7 @@ FindGlyph (GlyphSetPtr glyphSet, Glyph id)
     return glyph;
 }
 
-GlyphPtr
+_X_EXPORT GlyphPtr
 AllocateGlyph (xGlyphInfo *gi, int fdepth)
 {
     PictureScreenPtr ps;
@@ -438,7 +438,7 @@ bail:
     return 0;
 }
     
-Bool
+_X_EXPORT Bool
 AllocateGlyphHash (GlyphHashPtr hash, GlyphHashSetPtr hashSet)
 {
     hash->table = xcalloc (hashSet->size, sizeof (GlyphRefRec));
@@ -449,7 +449,7 @@ AllocateGlyphHash (GlyphHashPtr hash, GlyphHashSetPtr hashSet)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 ResizeGlyphHash (GlyphHashPtr hash, CARD32 change, Bool global)
 {
     CARD32	    tableEntries;
@@ -492,14 +492,14 @@ ResizeGlyphHash (GlyphHashPtr hash, CARD32 change, Bool global)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 ResizeGlyphSet (GlyphSetPtr glyphSet, CARD32 change)
 {
     return (ResizeGlyphHash (&glyphSet->hash, change, FALSE) &&
 	    ResizeGlyphHash (&globalGlyphs[glyphSet->fdepth], change, TRUE));
 }
 			    
-GlyphSetPtr
+_X_EXPORT GlyphSetPtr
 AllocateGlyphSet (int fdepth, PictFormatPtr format)
 {
     GlyphSetPtr	glyphSet;
@@ -527,7 +527,7 @@ AllocateGlyphSet (int fdepth, PictFormatPtr format)
     return glyphSet;	
 }
 
-int
+_X_EXPORT int
 FreeGlyphSet (pointer	value,
 	      XID       gid)
 {
@@ -632,14 +632,14 @@ CompositeGlyphs (CARD8		op,
     (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, lists, glyphs);
 }
 
-Bool
+_X_EXPORT Bool
 miRealizeGlyph (ScreenPtr pScreen,
 		GlyphPtr  glyph)
 {
     return TRUE;
 }
 
-void
+_X_EXPORT void
 miUnrealizeGlyph (ScreenPtr pScreen,
 		  GlyphPtr  glyph)
 {
diff --git a/render/miindex.c b/render/miindex.c
index 4e0cf00..4105269 100644
--- a/render/miindex.c
+++ b/render/miindex.c
@@ -232,7 +232,7 @@ FindBestGray (miIndexedPtr pIndexed, Pixel *pixels, int num, int gray)
     return best;
 }
 
-Bool
+_X_EXPORT Bool
 miInitIndexed (ScreenPtr	pScreen,
 	       PictFormatPtr	pFormat)
 {
@@ -318,7 +318,7 @@ miInitIndexed (ScreenPtr	pScreen,
     return TRUE;
 }
 
-void
+_X_EXPORT void
 miCloseIndexed (ScreenPtr	pScreen,
 		PictFormatPtr	pFormat)
 {
@@ -334,7 +334,7 @@ miCloseIndexed (ScreenPtr	pScreen,
     }
 }
 
-void
+_X_EXPORT void
 miUpdateIndexed (ScreenPtr	pScreen,
 		 PictFormatPtr	pFormat,
 		 int		ndef,
diff --git a/render/mipict.c b/render/mipict.c
index 2fadd8c..abb6239 100644
--- a/render/mipict.c
+++ b/render/mipict.c
@@ -37,20 +37,20 @@
 #define __inline
 #endif
 
-int
+_X_EXPORT int
 miCreatePicture (PicturePtr pPicture)
 {
     return Success;
 }
 
-void
+_X_EXPORT void
 miDestroyPicture (PicturePtr pPicture)
 {
     if (pPicture->freeCompClip)
 	REGION_DESTROY(pPicture->pDrawable->pScreen, pPicture->pCompositeClip);
 }
 
-void
+_X_EXPORT void
 miDestroyPictureClip (PicturePtr pPicture)
 {
     switch (pPicture->clientClipType) {
@@ -71,7 +71,7 @@ miDestroyPictureClip (PicturePtr pPicture)
     pPicture->clientClipType = CT_NONE;
 }    
 
-int
+_X_EXPORT int
 miChangePictureClip (PicturePtr    pPicture,
 		     int	   type,
 		     pointer	   value,
@@ -116,14 +116,14 @@ miChangePictureClip (PicturePtr    pPicture,
     return Success;
 }
 
-void
+_X_EXPORT void
 miChangePicture (PicturePtr pPicture,
 		 Mask       mask)
 {
     return;
 }
 
-void
+_X_EXPORT void
 miValidatePicture (PicturePtr pPicture,
 		   Mask       mask)
 {
@@ -248,14 +248,14 @@ miValidatePicture (PicturePtr pPicture,
     }
 }
 
-int
+_X_EXPORT int
 miChangePictureTransform (PicturePtr	pPicture,
 			  PictTransform *transform)
 {
     return Success;
 }
 
-int
+_X_EXPORT int
 miChangePictureFilter (PicturePtr pPicture,
 		       int	  filter,
 		       xFixed     *params,
@@ -341,7 +341,7 @@ miClipPictureSrc (RegionPtr	pRegion,
     }
 }
 
-void
+_X_EXPORT void
 miCompositeSourceValidate (PicturePtr	pPicture,
 			   INT16	x,
 			   INT16	y,
@@ -494,7 +494,7 @@ miComputeCompositeRegion (RegionPtr	pRegion,
     return TRUE;
 }
 
-void
+_X_EXPORT void
 miRenderColorToPixel (PictFormatPtr format,
 		      xRenderColor  *color,
 		      CARD32	    *pixel)
@@ -545,7 +545,7 @@ miFillColor (CARD32 pixel, int bits)
     return (CARD16) pixel;
 }
 
-Bool
+_X_EXPORT Bool
 miIsSolidAlpha (PicturePtr pSrc)
 {
     ScreenPtr	pScreen;
@@ -579,7 +579,7 @@ miIsSolidAlpha (PicturePtr pSrc)
     }
 }
 
-void
+_X_EXPORT void
 miRenderPixelToColor (PictFormatPtr format,
 		      CARD32	    pixel,
 		      xRenderColor  *color)
diff --git a/render/mitrap.c b/render/mitrap.c
index 8bdc8a8..05ec09e 100644
--- a/render/mitrap.c
+++ b/render/mitrap.c
@@ -34,7 +34,7 @@
 #include "picturestr.h"
 #include "mipict.h"
 
-PicturePtr
+_X_EXPORT PicturePtr
 miCreateAlphaPicture (ScreenPtr	    pScreen, 
 		      PicturePtr    pDst,
 		      PictFormatPtr pPictFormat,
@@ -94,7 +94,7 @@ miLineFixedX (xLineFixed *l, xFixed y, Bool ceil)
     return l->p1.x + (xFixed) (ex / dy);
 }
 
-void
+_X_EXPORT void
 miTrapezoidBounds (int ntrap, xTrapezoid *traps, BoxPtr box)
 {
     box->y1 = MAXSHORT;
@@ -127,7 +127,7 @@ miTrapezoidBounds (int ntrap, xTrapezoid *traps, BoxPtr box)
     }
 }
 
-void
+_X_EXPORT void
 miTrapezoids (CARD8	    op,
 	      PicturePtr    pSrc,
 	      PicturePtr    pDst,
diff --git a/render/mitri.c b/render/mitri.c
index a92c19b..f811c77 100644
--- a/render/mitri.c
+++ b/render/mitri.c
@@ -33,7 +33,7 @@
 #include "picturestr.h"
 #include "mipict.h"
 
-void
+_X_EXPORT void
 miPointFixedBounds (int npoint, xPointFixed *points, BoxPtr bounds)
 {
     bounds->x1 = xFixedToInt (points->x);
@@ -61,13 +61,13 @@ miPointFixedBounds (int npoint, xPointFixed *points, BoxPtr bounds)
     }
 }
 
-void
+_X_EXPORT void
 miTriangleBounds (int ntri, xTriangle *tris, BoxPtr bounds)
 {
     miPointFixedBounds (ntri * 3, (xPointFixed *) tris, bounds);
 }
 
-void
+_X_EXPORT void
 miTriangles (CARD8	    op,
 	     PicturePtr	    pSrc,
 	     PicturePtr	    pDst,
@@ -126,7 +126,7 @@ miTriangles (CARD8	    op,
     }
 }
 
-void
+_X_EXPORT void
 miTriStrip (CARD8	    op,
 	    PicturePtr	    pSrc,
 	    PicturePtr	    pDst,
@@ -157,7 +157,7 @@ miTriStrip (CARD8	    op,
     xfree (tris);
 }
 
-void
+_X_EXPORT void
 miTriFan (CARD8		op,
 	  PicturePtr	pSrc,
 	  PicturePtr	pDst,
diff --git a/render/picture.c b/render/picture.c
index d672ebc..0be9997 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -46,14 +46,14 @@
 static int PictureScreenPrivateKeyIndex;
 _X_EXPORT DevPrivateKey PictureScreenPrivateKey = &PictureScreenPrivateKeyIndex;
 static int PictureWindowPrivateKeyIndex;
-DevPrivateKey	PictureWindowPrivateKey = &PictureWindowPrivateKeyIndex;
+_X_EXPORT DevPrivateKey	PictureWindowPrivateKey = &PictureWindowPrivateKeyIndex;
 static int	PictureGeneration;
-RESTYPE		PictureType;
-RESTYPE		PictFormatType;
-RESTYPE		GlyphSetType;
-int		PictureCmapPolicy = PictureCmapPolicyDefault;
+_X_EXPORT RESTYPE		PictureType;
+_X_EXPORT RESTYPE		PictFormatType;
+_X_EXPORT RESTYPE		GlyphSetType;
+_X_EXPORT int		PictureCmapPolicy = PictureCmapPolicyDefault;
 
-Bool
+_X_EXPORT Bool
 PictureDestroyWindow (WindowPtr pWindow)
 {
     ScreenPtr		pScreen = pWindow->drawable.pScreen;
@@ -75,7 +75,7 @@ PictureDestroyWindow (WindowPtr pWindow)
     return ret;
 }
 
-Bool
+_X_EXPORT Bool
 PictureCloseScreen (int index, ScreenPtr pScreen)
 {
     PictureScreenPtr    ps = GetPictureScreen(pScreen);
@@ -95,7 +95,7 @@ PictureCloseScreen (int index, ScreenPtr pScreen)
     return ret;
 }
 
-void
+_X_EXPORT void
 PictureStoreColors (ColormapPtr pColormap, int ndef, xColorItem *pdef)
 {
     ScreenPtr		pScreen = pColormap->pScreen;
@@ -163,7 +163,7 @@ addFormat (FormatInitRec    formats[256],
 
 #define Mask(n)	((n) == 32 ? 0xffffffff : ((1 << (n))-1))
 
-PictFormatPtr
+_X_EXPORT PictFormatPtr
 PictureCreateDefaultFormats (ScreenPtr pScreen, int *nformatp)
 {
     int		    nformats, f;
@@ -401,7 +401,7 @@ PictureFindVisual (ScreenPtr pScreen, VisualID visual)
     return 0;
 }
 
-Bool
+_X_EXPORT Bool
 PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format)
 {
     PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
@@ -441,7 +441,7 @@ PictureInitIndexedFormats (ScreenPtr pScreen)
     return TRUE;
 }
 
-Bool
+_X_EXPORT Bool
 PictureFinishInit (void)
 {
     int	    s;
@@ -478,7 +478,7 @@ PictureGetSubpixelOrder (ScreenPtr pScreen)
     return ps->subpixel;
 }
     
-PictFormatPtr
+_X_EXPORT PictFormatPtr
 PictureMatchVisual (ScreenPtr pScreen, int depth, VisualPtr pVisual)
 {
     PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
@@ -531,7 +531,7 @@ PictureMatchVisual (ScreenPtr pScreen, int depth, VisualPtr pVisual)
     return 0;
 }
 
-PictFormatPtr
+_X_EXPORT PictFormatPtr
 PictureMatchFormat (ScreenPtr pScreen, int depth, CARD32 f)
 {
     PictureScreenPtr    ps = GetPictureScreenIfSet(pScreen);
@@ -551,7 +551,7 @@ PictureMatchFormat (ScreenPtr pScreen, int depth, CARD32 f)
     return 0;
 }
 
-int
+_X_EXPORT int
 PictureParseCmapPolicy (const char *name)
 {
     if ( strcmp (name, "default" ) == 0)
@@ -668,7 +668,7 @@ PictureInit (ScreenPtr pScreen, PictFormatPtr formats, int nformats)
     return TRUE;
 }
 
-void
+_X_EXPORT void
 SetPictureToDefaults (PicturePtr    pPicture)
 {
     pPicture->refcnt = 1;
@@ -702,7 +702,7 @@ SetPictureToDefaults (PicturePtr    pPicture)
     pPicture->pSourcePict = 0;
 }
 
-PicturePtr
+_X_EXPORT PicturePtr
 CreatePicture (Picture		pid,
 	       DrawablePtr	pDrawable,
 	       PictFormatPtr	pFormat,
@@ -797,7 +797,7 @@ static unsigned int INTERPOLATE_PIXEL_256(unsigned int x, unsigned int a,
     return x;
 }
 
-CARD32
+_X_EXPORT CARD32
 PictureGradientColor (PictGradientStopPtr stop1,
 		      PictGradientStopPtr stop2,
 		      CARD32	          x)
@@ -868,7 +868,7 @@ static PicturePtr createSourcePicture(void)
     return pPicture;
 }
 
-PicturePtr
+_X_EXPORT PicturePtr
 CreateSolidPicture (Picture pid, xRenderColor *color, int *error)
 {
     PicturePtr pPicture;
@@ -890,7 +890,7 @@ CreateSolidPicture (Picture pid, xRenderColor *color, int *error)
     return pPicture;
 }
 
-PicturePtr
+_X_EXPORT PicturePtr
 CreateLinearGradientPicture (Picture pid, xPointFixed *p1, xPointFixed *p2,
                              int nStops, xFixed *stops, xRenderColor *colors, int *error)
 {
@@ -929,7 +929,7 @@ CreateLinearGradientPicture (Picture pid, xPointFixed *p1, xPointFixed *p2,
 
 #define FixedToDouble(x) ((x)/65536.)
 
-PicturePtr
+_X_EXPORT PicturePtr
 CreateRadialGradientPicture (Picture pid, xPointFixed *inner, xPointFixed *outer,
                              xFixed innerRadius, xFixed outerRadius,
                              int nStops, xFixed *stops, xRenderColor *colors, int *error)
@@ -979,7 +979,7 @@ CreateRadialGradientPicture (Picture pid, xPointFixed *inner, xPointFixed *outer
     return pPicture;
 }
 
-PicturePtr
+_X_EXPORT PicturePtr
 CreateConicalGradientPicture (Picture pid, xPointFixed *center, xFixed angle,
                               int nStops, xFixed *stops, xRenderColor *colors, int *error)
 {
@@ -1020,7 +1020,7 @@ CreateConicalGradientPicture (Picture pid, xPointFixed *center, xFixed angle,
 
 #define NEXT_PTR(_type) ((_type) ulist++->ptr)
 
-int
+_X_EXPORT int
 ChangePicture (PicturePtr	pPicture,
 	       Mask		vmask,
 	       XID		*vlist,
@@ -1249,7 +1249,7 @@ ChangePicture (PicturePtr	pPicture,
     return error;
 }
 
-int
+_X_EXPORT int
 SetPictureClipRects (PicturePtr	pPicture,
 		     int	xOrigin,
 		     int	yOrigin,
@@ -1277,7 +1277,7 @@ SetPictureClipRects (PicturePtr	pPicture,
     return result;
 }
 
-int
+_X_EXPORT int
 SetPictureClipRegion (PicturePtr    pPicture,
                       int           xOrigin,
                       int           yOrigin,
@@ -1335,7 +1335,7 @@ transformIsIdentity(PictTransform *t)
             (t->matrix[2][1] == 0));
 }
 
-int
+_X_EXPORT int
 SetPictureTransform (PicturePtr	    pPicture,
 		     PictTransform  *transform)
 {
@@ -1374,7 +1374,7 @@ SetPictureTransform (PicturePtr	    pPicture,
     return Success;
 }
 
-void
+_X_EXPORT void
 CopyPicture (PicturePtr	pSrc,
 	     Mask	mask,
 	     PicturePtr	pDst)
@@ -1471,7 +1471,7 @@ ValidateOnePicture (PicturePtr pPicture)
     }
 }
 
-void
+_X_EXPORT void
 ValidatePicture(PicturePtr pPicture)
 {
     ValidateOnePicture (pPicture);
@@ -1479,7 +1479,7 @@ ValidatePicture(PicturePtr pPicture)
 	ValidateOnePicture (pPicture->alphaMap);
 }
 
-int
+_X_EXPORT int
 FreePicture (pointer	value,
 	     XID	pid)
 {
@@ -1535,7 +1535,7 @@ FreePicture (pointer	value,
     return Success;
 }
 
-int
+_X_EXPORT int
 FreePictFormat (pointer	pPictFormat,
 		XID     pid)
 {
@@ -1647,7 +1647,7 @@ ReduceCompositeOp (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
     return op;
 }
 
-void
+_X_EXPORT void
 CompositePicture (CARD8		op,
 		  PicturePtr	pSrc,
 		  PicturePtr	pMask,
@@ -1686,7 +1686,7 @@ CompositePicture (CARD8		op,
 		       height);
 }
 
-void
+_X_EXPORT void
 CompositeRects (CARD8		op,
 		PicturePtr	pDst,
 		xRenderColor	*color,
@@ -1699,7 +1699,7 @@ CompositeRects (CARD8		op,
     (*ps->CompositeRects) (op, pDst, color, nRect, rects);
 }
 
-void
+_X_EXPORT void
 CompositeTrapezoids (CARD8	    op,
 		     PicturePtr	    pSrc,
 		     PicturePtr	    pDst,
@@ -1716,7 +1716,7 @@ CompositeTrapezoids (CARD8	    op,
     (*ps->Trapezoids) (op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, traps);
 }
 
-void
+_X_EXPORT void
 CompositeTriangles (CARD8	    op,
 		    PicturePtr	    pSrc,
 		    PicturePtr	    pDst,
@@ -1733,7 +1733,7 @@ CompositeTriangles (CARD8	    op,
     (*ps->Triangles) (op, pSrc, pDst, maskFormat, xSrc, ySrc, ntriangles, triangles);
 }
 
-void
+_X_EXPORT void
 CompositeTriStrip (CARD8	    op,
 		   PicturePtr	    pSrc,
 		   PicturePtr	    pDst,
@@ -1750,7 +1750,7 @@ CompositeTriStrip (CARD8	    op,
     (*ps->TriStrip) (op, pSrc, pDst, maskFormat, xSrc, ySrc, npoints, points);
 }
 
-void
+_X_EXPORT void
 CompositeTriFan (CARD8		op,
 		 PicturePtr	pSrc,
 		 PicturePtr	pDst,
@@ -1767,7 +1767,7 @@ CompositeTriFan (CARD8		op,
     (*ps->TriFan) (op, pSrc, pDst, maskFormat, xSrc, ySrc, npoints, points);
 }
 
-void
+_X_EXPORT void
 AddTraps (PicturePtr	pPicture,
 	  INT16		xOff,
 	  INT16		yOff,
diff --git a/render/render.c b/render/render.c
index 7cb93bd..663ed24 100644
--- a/render/render.c
+++ b/render/render.c
@@ -210,9 +210,9 @@ int	(*SProcRenderVector[RenderNumberRequests])(ClientPtr) = {
     SProcRenderCreateConicalGradient
 };
 
-int	RenderErrBase;
+_X_EXPORT int	RenderErrBase;
 static int RenderClientPrivateKeyIndex;
-DevPrivateKey RenderClientPrivateKey = &RenderClientPrivateKeyIndex;
+_X_EXPORT DevPrivateKey RenderClientPrivateKey = &RenderClientPrivateKeyIndex;
 
 typedef struct _RenderClient {
     int	    major_version;
@@ -234,7 +234,7 @@ RenderClientCallback (CallbackListPtr	*list,
     pRenderClient->minor_version = 0;
 }
 
-void
+_X_EXPORT void
 RenderExtensionInit (void)
 {
     ExtensionEntry *extEntry;
@@ -3265,7 +3265,7 @@ PanoramiXRenderAddTraps (ClientPtr client)
     return result;
 }
 
-void
+_X_EXPORT void
 PanoramiXRenderInit (void)
 {
     int	    i;
@@ -3295,7 +3295,7 @@ PanoramiXRenderInit (void)
     ProcRenderVector[X_RenderAddTraps] = PanoramiXRenderAddTraps;
 }
 
-void
+_X_EXPORT void
 PanoramiXRenderReset (void)
 {
     int	    i;
diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c
index 790aede..2a50c15 100644
--- a/xkb/XKBAlloc.c
+++ b/xkb/XKBAlloc.c
@@ -41,7 +41,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 /***===================================================================***/
 
 /*ARGSUSED*/
-Status
+_X_EXPORT Status
 XkbAllocCompatMap(XkbDescPtr xkb,unsigned which,unsigned nSI)
 {
 XkbCompatMapPtr	compat;
@@ -88,7 +88,7 @@ XkbSymInterpretRec *prev_interpret;
 }
 
 
-void
+_X_EXPORT void
 XkbFreeCompatMap(XkbDescPtr xkb,unsigned which,Bool freeMap)
 {
 register XkbCompatMapPtr compat;
@@ -115,7 +115,7 @@ register XkbCompatMapPtr compat;
 
 /***===================================================================***/
 
-Status
+_X_EXPORT Status
 XkbAllocNames(XkbDescPtr xkb,unsigned which,int nTotalRG,int nTotalAliases)
 {
 XkbNamesPtr	names;
@@ -195,7 +195,7 @@ XkbNamesPtr	names;
     return Success;
 }
 
-void
+_X_EXPORT void
 XkbFreeNames(XkbDescPtr xkb,unsigned which,Bool freeMap)
 {
 XkbNamesPtr	names;
@@ -244,7 +244,7 @@ XkbNamesPtr	names;
 /***===================================================================***/
 
 /*ARGSUSED*/
-Status
+_X_EXPORT Status
 XkbAllocControls(XkbDescPtr xkb,unsigned which)
 {
     if (xkb==NULL)
@@ -271,7 +271,7 @@ XkbFreeControls(XkbDescPtr xkb,unsigned which,Bool freeMap)
 
 /***===================================================================***/
 
-Status 
+_X_EXPORT Status 
 XkbAllocIndicatorMaps(XkbDescPtr xkb)
 {
     if (xkb==NULL)
@@ -296,7 +296,7 @@ XkbFreeIndicatorMaps(XkbDescPtr xkb)
 
 /***====================================================================***/
 
-XkbDescRec	*
+_X_EXPORT XkbDescRec	*
 XkbAllocKeyboard(void)
 {
 XkbDescRec *xkb;
@@ -307,7 +307,7 @@ XkbDescRec *xkb;
     return xkb;
 }
 
-void
+_X_EXPORT void
 XkbFreeKeyboard(XkbDescPtr xkb,unsigned which,Bool freeAll)
 {
     if (xkb==NULL)
diff --git a/xkb/XKBMAlloc.c b/xkb/XKBMAlloc.c
index 178b5b8..daefe47 100644
--- a/xkb/XKBMAlloc.c
+++ b/xkb/XKBMAlloc.c
@@ -43,7 +43,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 /***====================================================================***/
 
-Status
+_X_EXPORT Status
 XkbAllocClientMap(XkbDescPtr xkb,unsigned which,unsigned nTotalTypes)
 {
 register int	i;
@@ -124,7 +124,7 @@ XkbClientMapPtr map;
     return Success;
 }
 
-Status
+_X_EXPORT Status
 XkbAllocServerMap(XkbDescPtr xkb,unsigned which,unsigned nNewActions)
 {
 register int	i;
@@ -259,7 +259,7 @@ XkbCopyKeyType(XkbKeyTypePtr from,XkbKeyTypePtr into)
     return Success;
 }
 
-Status
+_X_EXPORT Status
 XkbCopyKeyTypes(XkbKeyTypePtr from,XkbKeyTypePtr into,int num_types)
 {
 register int i,rtrn;
@@ -273,7 +273,7 @@ register int i,rtrn;
     return Success;
 }
 
-Status
+_X_EXPORT Status
 XkbResizeKeyType(	XkbDescPtr	xkb,
 			int		type_ndx,
 			int		map_count,
@@ -471,7 +471,7 @@ KeyCode		matchingKeys[XkbMaxKeyCount],nMatchingKeys;
     return Success;
 }
 
-KeySym *
+_X_EXPORT KeySym *
 XkbResizeKeySyms(XkbDescPtr xkb,int key,int needed)
 {
 register int i,nSyms,nKeySyms;
@@ -551,7 +551,7 @@ _ExtendRange(	unsigned int 	old_flags,
     return old_flags;
 }
 
-Status
+_X_EXPORT Status
 XkbChangeKeycodeRange(	XkbDescPtr	xkb,
 			int 		minKC,
 			int 		maxKC,
@@ -751,7 +751,7 @@ int	tmp;
     return Success;
 }
 
-XkbAction *
+_X_EXPORT XkbAction *
 XkbResizeKeyActions(XkbDescPtr xkb,int key,int needed)
 {
 register int i,nActs;
@@ -801,7 +801,7 @@ XkbAction *newActs;
     return &xkb->server->acts[xkb->server->key_acts[key]];
 }
 
-void
+_X_EXPORT void
 XkbFreeClientMap(XkbDescPtr xkb,unsigned what,Bool freeMap)
 {
 XkbClientMapPtr	map;
@@ -859,7 +859,7 @@ XkbClientMapPtr	map;
     return;
 }
 
-void
+_X_EXPORT void
 XkbFreeServerMap(XkbDescPtr xkb,unsigned what,Bool freeMap)
 {
 XkbServerMapPtr	map;
diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c
index a9d8b17..45db351 100644
--- a/xkb/XKBMisc.c
+++ b/xkb/XKBMisc.c
@@ -46,7 +46,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define	CORE_SYM(i)	(i<map_width?core_syms[i]:NoSymbol)
 #define	XKB_OFFSET(g,l)	(((g)*groupsWidth)+(l))
 
-int
+_X_EXPORT int
 XkbKeyTypesForCoreSymbols(	XkbDescPtr	xkb,
 				int		map_width,
 				KeySym *	core_syms,
@@ -318,7 +318,7 @@ unsigned	tmp;
 
 #define	IBUF_SIZE	8
 
-Bool
+_X_EXPORT Bool
 XkbApplyCompatMapToKey(XkbDescPtr xkb,KeyCode key,XkbChangesPtr changes)
 {
 KeySym *		syms;
@@ -467,7 +467,7 @@ unsigned		changed,tmp;
     return True;
 }
 
-Status
+_X_EXPORT Status
 XkbChangeTypesOfKey(	XkbDescPtr		 xkb,
 			int		 	 key,
 			int			 nGroups,
@@ -591,7 +591,7 @@ int		width,nOldGroups,oldWidth,newTypes[XkbNumKbdGroups];
 
 /***====================================================================***/
 
-Bool
+_X_EXPORT Bool
 XkbVirtualModsToReal(XkbDescPtr xkb,unsigned virtual_mask,unsigned *mask_rtrn)
 {
 register int i,bit;
@@ -689,7 +689,7 @@ unsigned int		mask;
     return;
 }
 
-Bool
+_X_EXPORT Bool
 XkbApplyVirtualModChanges(XkbDescPtr xkb,unsigned changed,XkbChangesPtr changes)
 {
 register int	i;
diff --git a/xkb/ddxBeep.c b/xkb/ddxBeep.c
index 74d868c..1851e62 100644
--- a/xkb/ddxBeep.c
+++ b/xkb/ddxBeep.c
@@ -314,7 +314,7 @@ Atom		name;
     return next;
 }
 
-int
+_X_EXPORT int
 XkbDDXAccessXBeep(DeviceIntPtr dev,unsigned what,unsigned which)
 {
 XkbSrvInfoRec	*xkbInfo= dev->key->xkbInfo;
diff --git a/xkb/ddxCtrls.c b/xkb/ddxCtrls.c
index 34ea0bd..86a4aff 100644
--- a/xkb/ddxCtrls.c
+++ b/xkb/ddxCtrls.c
@@ -39,7 +39,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <xkbsrv.h>
 #include <X11/extensions/XI.h>
 
-void
+_X_EXPORT void
 XkbDDXKeybdCtrlProc(DeviceIntPtr dev,KeybdCtrl *ctrl)
 {
 int realRepeat;
@@ -54,7 +54,7 @@ int realRepeat;
 }
 
 
-int
+_X_EXPORT int
 XkbDDXUsesSoftRepeat(DeviceIntPtr pXDev)
 {
 #ifndef XKB_ALWAYS_USES_SOFT_REPEAT
@@ -80,7 +80,7 @@ XkbDDXUsesSoftRepeat(DeviceIntPtr pXDev)
 #endif
 }
 
-void
+_X_EXPORT void
 XkbDDXChangeControls(DeviceIntPtr dev,XkbControlsPtr old,XkbControlsPtr new)
 {
 unsigned	changed, i;
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index b68a28b..66a4cc4 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -42,7 +42,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 extern	int	DeviceValuator;
 
-void
+_X_EXPORT void
 XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
 {
 int *			devVal;
diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c
index 3f010f9..191ada8 100644
--- a/xkb/ddxFakeMtn.c
+++ b/xkb/ddxFakeMtn.c
@@ -47,7 +47,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "mipointer.h"
 #include "mipointrst.h"
 
-void
+_X_EXPORT void
 XkbDDXFakePointerMotion(unsigned flags,int x,int y)
 {
 int 		   oldX,oldY;
diff --git a/xkb/ddxInit.c b/xkb/ddxInit.c
index 4c78a62..ae22b65 100644
--- a/xkb/ddxInit.c
+++ b/xkb/ddxInit.c
@@ -39,7 +39,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <xkbsrv.h>
 #include <X11/extensions/XI.h>
 
-int
+_X_EXPORT int
 XkbDDXInitDevice(DeviceIntPtr dev)
 {
     return 1;
diff --git a/xkb/ddxKeyClick.c b/xkb/ddxKeyClick.c
index 51d78f5..59e1488 100644
--- a/xkb/ddxKeyClick.c
+++ b/xkb/ddxKeyClick.c
@@ -39,7 +39,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <xkbsrv.h>
 #include <X11/extensions/XI.h>
 
-void
+_X_EXPORT void
 XkbDDXKeyClick(DeviceIntPtr pXDev,int keycode,int synthetic)
 {
     return;
diff --git a/xkb/ddxKillSrv.c b/xkb/ddxKillSrv.c
index 3b5fd53..6c44118 100644
--- a/xkb/ddxKillSrv.c
+++ b/xkb/ddxKillSrv.c
@@ -38,7 +38,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "windowstr.h"
 #include <xkbsrv.h>
 
-int
+_X_EXPORT int
 XkbDDXTerminateServer(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     if (dev != inputInfo.keyboard)
diff --git a/xkb/ddxLEDs.c b/xkb/ddxLEDs.c
index b4c8086..941e66c 100644
--- a/xkb/ddxLEDs.c
+++ b/xkb/ddxLEDs.c
@@ -47,7 +47,7 @@ XkbDDXUpdateIndicators(DeviceIntPtr dev,CARD32 new)
     return;
 }
 
-void
+_X_EXPORT void
 XkbDDXUpdateDeviceIndicators(	DeviceIntPtr		dev,
 				XkbSrvLedInfoPtr 	sli,
 				CARD32 			new)
diff --git a/xkb/ddxList.c b/xkb/ddxList.c
index ae3a7f7..d551d82 100644
--- a/xkb/ddxList.c
+++ b/xkb/ddxList.c
@@ -276,7 +276,7 @@ char	tmpname[PATH_MAX];
 /***====================================================================***/
 
 /* ARGSUSED */
-Status
+_X_EXPORT Status
 XkbDDXList(DeviceIntPtr	dev,XkbSrvListInfoPtr list,ClientPtr client)
 {
 Status	status;
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index 4d5dfb6..6b6575d 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -329,7 +329,7 @@ FILE *	file;
     return file;
 }
 
-unsigned
+_X_EXPORT unsigned
 XkbDDXLoadKeymapByNames(	DeviceIntPtr		keybd,
 				XkbComponentNamesPtr	names,
 				unsigned		want,
@@ -379,7 +379,7 @@ unsigned	missing;
     return (need|want)&(~missing);
 }
 
-Bool
+_X_EXPORT Bool
 XkbDDXNamesFromRules(	DeviceIntPtr		keybd,
 			char *			rules_name,
 			XkbRF_VarDefsPtr	defs,
diff --git a/xkb/ddxPrivate.c b/xkb/ddxPrivate.c
index f67e20c..807f350 100644
--- a/xkb/ddxPrivate.c
+++ b/xkb/ddxPrivate.c
@@ -8,7 +8,7 @@
 #include "windowstr.h"
 #include <xkbsrv.h>
 
-int
+_X_EXPORT int
 XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     return 0;
diff --git a/xkb/ddxVT.c b/xkb/ddxVT.c
index 55c82a8..eff2f4b 100644
--- a/xkb/ddxVT.c
+++ b/xkb/ddxVT.c
@@ -38,7 +38,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "windowstr.h"
 #include <xkbsrv.h>
 
-int
+_X_EXPORT int
 XkbDDXSwitchScreen(DeviceIntPtr dev,KeyCode key,XkbAction *act)
 {
     return 1;
diff --git a/xkb/maprules.c b/xkb/maprules.c
index b25d929..f6e60a7 100644
--- a/xkb/maprules.c
+++ b/xkb/maprules.c
@@ -833,7 +833,7 @@ int	len, ndx;
 
 /***====================================================================***/
 
-Bool
+_X_EXPORT Bool
 XkbRF_GetComponents(	XkbRF_RulesPtr		rules,
 			XkbRF_VarDefsPtr	defs,
 			XkbComponentNamesPtr	names)
@@ -868,7 +868,7 @@ XkbRF_GetComponents(	XkbRF_RulesPtr		rules,
 		names->compat && names->geometry ) || names->keymap;
 }
 
-XkbRF_RulePtr
+_X_EXPORT XkbRF_RulePtr
 XkbRF_AddRule(XkbRF_RulesPtr	rules)
 {
     if (rules->sz_rules<1) {
@@ -890,7 +890,7 @@ XkbRF_AddRule(XkbRF_RulesPtr	rules)
     return &rules->rules[rules->num_rules++];
 }
 
-XkbRF_GroupPtr
+_X_EXPORT XkbRF_GroupPtr
 XkbRF_AddGroup(XkbRF_RulesPtr	rules)
 {
     if (rules->sz_groups<1) {
@@ -912,7 +912,7 @@ XkbRF_AddGroup(XkbRF_RulesPtr	rules)
     return &rules->groups[rules->num_groups++];
 }
 
-Bool
+_X_EXPORT Bool
 XkbRF_LoadRules(FILE *file, XkbRF_RulesPtr rules)
 {
 InputLine	line;
@@ -945,7 +945,7 @@ XkbRF_GroupRec  tgroup,*group;
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbRF_LoadRulesByName(char *base,char *locale,XkbRF_RulesPtr rules)
 {
 FILE *		file;
@@ -986,7 +986,7 @@ Bool		ok;
 #define HEAD_OPTION	4
 #define	HEAD_EXTRA	5
 
-XkbRF_VarDescPtr
+_X_EXPORT XkbRF_VarDescPtr
 XkbRF_AddVarDesc(XkbRF_DescribeVarsPtr	vars)
 {
     if (vars->sz_desc<1) {
@@ -1008,7 +1008,7 @@ XkbRF_AddVarDesc(XkbRF_DescribeVarsPtr	vars)
     return &vars->desc[vars->num_desc++];
 }
 
-XkbRF_VarDescPtr
+_X_EXPORT XkbRF_VarDescPtr
 XkbRF_AddVarDescCopy(XkbRF_DescribeVarsPtr vars,XkbRF_VarDescPtr from)
 {
 XkbRF_VarDescPtr	nd;
@@ -1020,7 +1020,7 @@ XkbRF_VarDescPtr	nd;
     return nd;
 }
 
-XkbRF_DescribeVarsPtr 
+_X_EXPORT XkbRF_DescribeVarsPtr 
 XkbRF_AddVarToDescribe(XkbRF_RulesPtr rules,char *name)
 {
     if (rules->sz_extra<1) {
@@ -1048,7 +1048,7 @@ XkbRF_AddVarToDescribe(XkbRF_RulesPtr rules,char *name)
     return &rules->extra[rules->num_extra++];
 }
 
-Bool
+_X_EXPORT Bool
 XkbRF_LoadDescriptions(FILE *file,XkbRF_RulesPtr rules)
 {
 InputLine		line;
@@ -1144,7 +1144,7 @@ int			len,headingtype,extra_ndx = 0;
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbRF_LoadDescriptionsByName(char *base,char *locale,XkbRF_RulesPtr rules)
 {
 FILE *		file;
@@ -1179,7 +1179,7 @@ Bool		ok;
 
 /***====================================================================***/
 
-XkbRF_RulesPtr
+_X_EXPORT XkbRF_RulesPtr
 XkbRF_Load(char *base,char *locale,Bool wantDesc,Bool wantRules)
 {
 XkbRF_RulesPtr	rules;
@@ -1199,7 +1199,7 @@ XkbRF_RulesPtr	rules;
     return rules;
 }
 
-XkbRF_RulesPtr
+_X_EXPORT XkbRF_RulesPtr
 XkbRF_Create(int szRules,int szExtra) 
 {
 XkbRF_RulesPtr rules;
@@ -1247,7 +1247,7 @@ register int i;
     return;
 }
 
-void
+_X_EXPORT void
 XkbRF_Free(XkbRF_RulesPtr rules,Bool freeRules)
 {
 int		i;
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 7c1edea..90ce011 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -43,11 +43,11 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include <X11/extensions/XI.h>
 
-	int	XkbEventBase;
+_X_EXPORT int	XkbEventBase;
 static	int	XkbErrorBase;
-	int	XkbReqCode;
-	int	XkbKeyboardErrorCode;
-CARD32	xkbDebugFlags = 0;
+_X_EXPORT int	XkbReqCode;
+_X_EXPORT int	XkbKeyboardErrorCode;
+_X_EXPORT CARD32 xkbDebugFlags = 0;
 static CARD32	xkbDebugCtrls = 0;
 
 static RESTYPE	RT_XKBCLIENT;
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index 2baa70d..ccdc033 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -42,7 +42,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 _X_EXPORT int	XkbDfltRepeatDelay=	660;
 _X_EXPORT int	XkbDfltRepeatInterval=	40;
-pointer	XkbLastRepeatEvent=	NULL;
+_X_EXPORT pointer XkbLastRepeatEvent=	NULL;
 
 #define	DFLT_TIMEOUT_CTRLS (XkbAX_KRGMask|XkbStickyKeysMask|XkbMouseKeysMask)
 #define	DFLT_TIMEOUT_OPTS  (XkbAX_IndicatorFBMask)
@@ -55,7 +55,7 @@ static unsigned int XkbDfltAccessXTimeoutOptionsValues= 0;
 unsigned int	XkbDfltAccessXFeedback= XkbAccessXFeedbackMask;
 unsigned short	XkbDfltAccessXOptions=  XkbAX_AllOptionsMask & ~(XkbAX_IndicatorFBMask|XkbAX_SKReleaseFBMask|XkbAX_SKRejectFBMask);
 
-void
+_X_EXPORT void
 AccessXComputeCurveFactor(XkbSrvInfoPtr xkbi,XkbControlsPtr ctrls)
 {
     xkbi->mouseKeysCurve= 1.0+(((double)ctrls->mk_curve)*0.001);
@@ -64,7 +64,7 @@ AccessXComputeCurveFactor(XkbSrvInfoPtr xkbi,XkbControlsPtr ctrls)
     return;
 }
 
-void
+_X_EXPORT void
 AccessXInit(DeviceIntPtr keybd)
 {
 XkbSrvInfoPtr	xkbi = keybd->key->xkbInfo;
@@ -317,7 +317,7 @@ KeyCode		key;
     return xkbi->desc->ctrls->repeat_interval;
 }
 
-void
+_X_EXPORT void
 AccessXCancelRepeatKey(XkbSrvInfoPtr xkbi,KeyCode key)
 {
     if (xkbi->repeatKey==key)
@@ -442,7 +442,7 @@ XkbSrvLedInfoPtr	sli;
 /* Returns FALSE if the event needs further processing.			*/
 /*									*/
 /************************************************************************/
-Bool
+_X_EXPORT Bool
 AccessXFilterPressEvent(	register xEvent *	xE, 
 				register DeviceIntPtr	keybd, 
 				int			count)
@@ -572,7 +572,7 @@ KeySym *	sym = XkbKeySymsPtr(xkbi->desc,key);
 /* Returns FALSE if the event needs further processing.			*/
 /*									*/
 /************************************************************************/
-Bool
+_X_EXPORT Bool
 AccessXFilterReleaseEvent(	register xEvent *	xE, 
 				register DeviceIntPtr	keybd, 
 				int			count)
@@ -682,7 +682,7 @@ Bool		ignoreKeyEvent = FALSE;
 /************************************************************************/
 extern int xkbDevicePrivateIndex;
 extern void xkbUnwrapProc(DeviceIntPtr, DeviceHandleProc, pointer);
-void
+_X_EXPORT void
 ProcessPointerEvent(	register xEvent  *	xE, 
 			register DeviceIntPtr	mouse, 
 			int		        count)
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 94420cf..a260629 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -43,9 +43,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define EXTENSION_EVENT_BASE 64
 
 static int xkbDevicePrivateKeyIndex;
-DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKeyIndex;
+_X_EXPORT DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKeyIndex;
 
-void
+_X_EXPORT void
 xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
                    pointer data)
 {
@@ -61,7 +61,7 @@ xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
 }
 
 
-void
+_X_EXPORT void
 XkbSetExtension(DeviceIntPtr device, ProcessInputProc proc)
 {
     xkbDeviceInfoPtr xkbPrivPtr;
@@ -1130,7 +1130,7 @@ register int	i,send;
     return send;
 }
 
-void
+_X_EXPORT void
 XkbHandleActions(DeviceIntPtr dev,DeviceIntPtr kbd,xEvent *xE,int count)
 {
 int		key,bit,i;
@@ -1315,7 +1315,7 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev);
     return;
 }
 
-int
+_X_EXPORT int
 XkbLatchModifiers(DeviceIntPtr pXDev,CARD8 mask,CARD8 latches)
 {
 XkbSrvInfoPtr	xkbi;
@@ -1342,7 +1342,7 @@ unsigned	clear;
     return BadValue;
 }
 
-int
+_X_EXPORT int
 XkbLatchGroup(DeviceIntPtr pXDev,int group)
 {
 XkbSrvInfoPtr	xkbi;
@@ -1364,7 +1364,7 @@ XkbAction	act;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbClearAllLatchesAndLocks(	DeviceIntPtr		dev,
 				XkbSrvInfoPtr		xkbi,
 				Bool			genEv,
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index 151849c..fe44ee9 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -43,7 +43,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbSendNewKeyboardNotify(DeviceIntPtr kbd,xkbNewKeyboardNotify *pNKN)
 {		
 register int	i;
@@ -100,7 +100,7 @@ CARD16		changed;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbSendStateNotify(DeviceIntPtr kbd,xkbStateNotify *pSN)
 {
 XkbSrvInfoPtr	xkbi;
@@ -161,7 +161,7 @@ register CARD16	changed,bState;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbSendMapNotify(DeviceIntPtr kbd,xkbMapNotify *pMN)
 {
 int 		i;
@@ -203,7 +203,7 @@ CARD16		changed;
     return;
 }
 
-int
+_X_EXPORT int
 XkbComputeControlsNotify(	DeviceIntPtr	 	kbd,
 				XkbControlsPtr		old,
 				XkbControlsPtr		new,
@@ -282,7 +282,7 @@ CARD32 		changedControls;
     return 1;
 }
 
-void
+_X_EXPORT void
 XkbSendControlsNotify(DeviceIntPtr kbd,xkbControlsNotify *pCN)
 {
 int			initialized;
@@ -382,7 +382,7 @@ CARD32		state,changed;
 }
 
 
-void
+_X_EXPORT void
 XkbHandleBell(	BOOL		 force,
 		BOOL		 eventOnly,
 		DeviceIntPtr	 kbd,
@@ -467,7 +467,7 @@ XID		winID = 0;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendAccessXNotify(DeviceIntPtr kbd,xkbAccessXNotify *pEv)
 {
 int		initialized;
@@ -512,7 +512,7 @@ CARD16		sk_delay,db_delay;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendNamesNotify(DeviceIntPtr kbd,xkbNamesNotify *pEv)
 {
 int		initialized;
@@ -561,7 +561,7 @@ CARD32		changedIndicators;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendCompatMapNotify(DeviceIntPtr kbd,xkbCompatMapNotify *pEv)
 {
 int		initialized;
@@ -609,7 +609,7 @@ CARD16		firstSI = 0, nSI = 0, nTotalSI = 0;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendActionMessage(DeviceIntPtr kbd,xkbActionMessage *pEv)
 {
 int		 initialized;
@@ -652,7 +652,7 @@ Time 		 time = 0;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendExtensionDeviceNotify(	DeviceIntPtr 			dev,
 				ClientPtr			client,
 				xkbExtensionDeviceNotify *	pEv)
@@ -716,7 +716,7 @@ CARD16		 reason, supported = 0;
     return;
 }
 
-void
+_X_EXPORT void
 XkbSendNotification(	DeviceIntPtr		kbd,
 			XkbChangesPtr		pChanges,
 			XkbEventCausePtr	cause)
@@ -945,7 +945,7 @@ XkbSrvInfoPtr	xkbi;
 
 /***====================================================================***/
 
-XkbInterestPtr	
+_X_EXPORT XkbInterestPtr	
 XkbFindClientResource(DevicePtr inDev,ClientPtr client)
 {
 DeviceIntPtr	dev = (DeviceIntPtr)inDev;
@@ -963,7 +963,7 @@ XkbInterestPtr	interest;
     return NULL;
 }
 
-XkbInterestPtr	
+_X_EXPORT XkbInterestPtr	
 XkbAddClientResource(DevicePtr inDev,ClientPtr client,XID id)
 {
 DeviceIntPtr	dev = (DeviceIntPtr)inDev;
@@ -997,7 +997,7 @@ XkbInterestPtr	interest;
     return NULL;
 }
 
-int
+_X_EXPORT int
 XkbRemoveResourceClient(DevicePtr inDev,XID id) 
 {
 XkbSrvInfoPtr	xkbi;
diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c
index 0b93e87..35da3e9 100644
--- a/xkb/xkbInit.c
+++ b/xkb/xkbInit.c
@@ -114,8 +114,8 @@ typedef struct	_SrvXkmInfo {
 #define	XKB_DFLT_RULES_PROP	True
 #endif
 
-char	*		XkbBaseDirectory=	XKB_BASE_DIRECTORY;
-char	*		XkbBinDirectory=	XKB_BIN_DIRECTORY;
+_X_EXPORT char	*	XkbBaseDirectory=	XKB_BASE_DIRECTORY;
+_X_EXPORT char	*	XkbBinDirectory=	XKB_BIN_DIRECTORY;
 static int	 	XkbWantAccessX=		0;	
 
 static Bool		rulesDefined=		False;
@@ -271,7 +271,7 @@ XkbSetRulesDflts(char *rulesFile,char *model,char *layout,
     return;
 }
 
-void
+_X_EXPORT void
 XkbDeleteRulesDflts()
 {
     _XkbFree(XkbRulesFile);
@@ -474,7 +474,7 @@ XkbControlsPtr	ctrls;
     return Success;
 }
 
-void
+_X_EXPORT void
 XkbInitDevice(DeviceIntPtr pXDev)
 {
 int			i;
@@ -724,7 +724,7 @@ XkbDescPtr              xkb;
 	 * This function also computes the autorepeat accelerators for the
 	 * default indicator feedback.
 	 */
-int
+_X_EXPORT int
 XkbFinishDeviceInit(DeviceIntPtr pXDev)
 {
 XkbSrvInfoPtr		xkbi;
@@ -767,7 +767,7 @@ XkbSrvLedInfoPtr	sli;
 	 * fixed-size structures for the device.   Don't free anything that
 	 * is part of this larger block.
 	 */
-void
+_X_EXPORT void
 XkbFreeInfo(XkbSrvInfoPtr xkbi)
 {
     if (xkbi->radioGroups) {
@@ -817,7 +817,7 @@ extern unsigned int	XkbDfltAccessXTimeoutMask;
 extern unsigned int	XkbDfltAccessXFeedback;
 extern unsigned char	XkbDfltAccessXOptions;
 
-int
+_X_EXPORT int
 XkbProcessArguments(int argc,char *argv[],int i)
 {
     if (strcmp(argv[i],"-kb")==0) {
@@ -903,7 +903,7 @@ XkbProcessArguments(int argc,char *argv[],int i)
     return 0;
 }
 
-void
+_X_EXPORT void
 XkbUseMsg(void)
 {
     ErrorF("-kb                    disable the X Keyboard Extension\n");
diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c
index edc389f..bd6b537 100644
--- a/xkb/xkbLEDs.c
+++ b/xkb/xkbLEDs.c
@@ -53,7 +53,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 	 * any extension devices might be affected in check_devs_rtrn.
 	 */
 
-unsigned
+_X_EXPORT unsigned
 XkbIndicatorsToUpdate(	DeviceIntPtr	dev,
 			unsigned long 	state_changes,
 			Bool		enable_changes)
@@ -352,7 +352,7 @@ XkbSrvLedInfoPtr	sli;
 	 * ChangeKeyboardMapping request.
 	 */
 
-void
+_X_EXPORT void
 XkbSetIndicators(	DeviceIntPtr		dev,
 			CARD32			affect,
 			CARD32			values,
@@ -408,7 +408,7 @@ unsigned 			side_affected;
 	 * the state of any extension device indicators as necessary.
 	 */
 
-void
+_X_EXPORT void
 XkbUpdateIndicators(	DeviceIntPtr		dev,
 			register CARD32		update,
 			Bool			check_edevs,
@@ -439,7 +439,7 @@ XkbSrvLedInfoPtr	sli;
 	 * be affected by a particular change in keyboard state or controls.
 	 */
 
-void
+_X_EXPORT void
 XkbCheckIndicatorMaps(DeviceIntPtr dev,XkbSrvLedInfoPtr sli,unsigned which)
 {
 register unsigned	i,bit;
@@ -512,7 +512,7 @@ XkbDescPtr		xkb;
 	 * If 'needed_parts' is non-zero, this function makes sure that any
 	 * of the parts speicified therein are allocated.
 	 */
-XkbSrvLedInfoPtr
+_X_EXPORT XkbSrvLedInfoPtr
 XkbAllocSrvLedInfo(	DeviceIntPtr		dev,
 			KbdFeedbackPtr		kf,
 			LedFeedbackPtr		lf,
@@ -602,7 +602,7 @@ Bool			checkNames;
     return sli;
 }
 
-void
+_X_EXPORT void
 XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli)
 {
     if ((sli->flags&XkbSLI_IsDefault)==0) {
@@ -623,7 +623,7 @@ XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli)
  * thus the new copy behaves like the original one and can be freed with
  * XkbFreeSrvLedInfo.
  */
-XkbSrvLedInfoPtr
+_X_EXPORT XkbSrvLedInfoPtr
 XkbCopySrvLedInfo(	DeviceIntPtr		from,
 			XkbSrvLedInfoPtr	src,
 			KbdFeedbackPtr		kf,
@@ -668,7 +668,7 @@ finish:
 	 *
 	 */
 
-XkbSrvLedInfoPtr 
+_X_EXPORT XkbSrvLedInfoPtr 
 XkbFindSrvLedInfo(	DeviceIntPtr		dev,
 			unsigned		class,
 			unsigned		id,
@@ -724,7 +724,7 @@ XkbSrvLedInfoPtr	sli;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbFlushLedEvents(	DeviceIntPtr			dev,
 			DeviceIntPtr			kbd,
 			XkbSrvLedInfoPtr		sli,
@@ -757,7 +757,7 @@ XkbFlushLedEvents(	DeviceIntPtr			dev,
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbApplyLedNameChanges(	DeviceIntPtr 			dev,
 			XkbSrvLedInfoPtr		sli,
 			unsigned			changed_names,
@@ -834,7 +834,7 @@ xkbExtensionDeviceNotify	my_ed;
 	 * request) for the change, as reported in some XKB events.
 	 */
 
-void
+_X_EXPORT void
 XkbApplyLedMapChanges(	DeviceIntPtr 			dev,
 			XkbSrvLedInfoPtr		sli,
 			unsigned			changed_maps,
@@ -890,7 +890,7 @@ xkbExtensionDeviceNotify	my_ed;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbApplyLedStateChanges(DeviceIntPtr 			dev,
 			XkbSrvLedInfoPtr		sli,
 			unsigned			changed_leds,
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index a3f715c..2646360 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -42,7 +42,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbProcessKeyboardEvent(xEvent *xE,DeviceIntPtr keybd,int count)
 {
 KeyClassPtr	keyc = keybd->key;
@@ -187,7 +187,7 @@ int             xiEvent;
     return;
 }
 
-void
+_X_EXPORT void
 ProcessKeyboardEvent(xEvent *xE,DeviceIntPtr keybd,int count)
 {
 
diff --git a/xkb/xkbSwap.c b/xkb/xkbSwap.c
index 1a513b3..0ad64a9 100644
--- a/xkb/xkbSwap.c
+++ b/xkb/xkbSwap.c
@@ -531,7 +531,7 @@ register int	n;
     return ProcXkbSetDebuggingFlags(client);
 }
 
-int
+_X_EXPORT int
 SProcXkbDispatch (ClientPtr client)
 {
     REQUEST(xReq);
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index aafc1ab..3f3d8a0 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -69,11 +69,11 @@ DEALINGS IN THE SOFTWARE.
 #include "xkbgeom.h"
 #include "xkb.h"
 
-int	XkbDisableLockActions = 0;
+_X_EXPORT int	XkbDisableLockActions = 0;
 
 /***====================================================================***/
 
-int
+_X_EXPORT int
 _XkbLookupAnyDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
 		    Mask access_mode, int *xkb_err)
 {
@@ -91,7 +91,7 @@ _XkbLookupAnyDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
     return rc;
 }
 
-int
+_X_EXPORT int
 _XkbLookupKeyboard(DeviceIntPtr *pDev, int id, ClientPtr client,
 		   Mask access_mode, int *xkb_err)
 {
@@ -114,7 +114,7 @@ _XkbLookupKeyboard(DeviceIntPtr *pDev, int id, ClientPtr client,
     return Success;
 }
 
-int
+_X_EXPORT int
 _XkbLookupBellDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
 		     Mask access_mode, int *xkb_err)
 {
@@ -134,7 +134,7 @@ _XkbLookupBellDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
     return Success;
 }
 
-int
+_X_EXPORT int
 _XkbLookupLedDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
 		    Mask access_mode, int *xkb_err)
 {
@@ -157,7 +157,7 @@ _XkbLookupLedDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
     return Success;
 }
 
-int
+_X_EXPORT int
 _XkbLookupButtonDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
 		       Mask access_mode, int *xkb_err)
 {
@@ -177,7 +177,7 @@ _XkbLookupButtonDevice(DeviceIntPtr *pDev, int id, ClientPtr client,
     return Success;
 }
 
-void
+_X_EXPORT void
 XkbSetActionKeyMods(XkbDescPtr xkb,XkbAction *act,unsigned mods)
 {
 register unsigned	tmp;
@@ -199,7 +199,7 @@ register unsigned	tmp;
     return;
 }
 
-unsigned
+_X_EXPORT unsigned
 XkbMaskForVMask(XkbDescPtr xkb,unsigned vmask)
 {
 register int i,bit;
@@ -214,7 +214,7 @@ register unsigned mask;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbUpdateKeyTypesFromCore(	DeviceIntPtr	pXDev,
 				KeyCode	 	first,
 				CARD8	 	num,
@@ -268,7 +268,7 @@ XkbMapChangesPtr	mc;
     return;
 }
 
-void
+_X_EXPORT void
 XkbUpdateDescActions(	XkbDescPtr		xkb,
 			KeyCode		 	first,
 			CARD8		 	num,
@@ -327,7 +327,7 @@ register unsigned	key;
     return;
 }
 
-void
+_X_EXPORT void
 XkbUpdateActions(	DeviceIntPtr	 	pXDev,
 			KeyCode		 	first,
 			CARD8		 	num,
@@ -358,7 +358,7 @@ CARD8 *			repeat;
     return;
 }
 
-void
+_X_EXPORT void
 XkbUpdateCoreDescription(DeviceIntPtr keybd,Bool resize)
 {
 register int		key,tmp;
@@ -574,7 +574,7 @@ CARD8			keysPerMod[XkbNumModifiers];
     return;
 }
 
-void
+_X_EXPORT void
 XkbSetRepeatKeys(DeviceIntPtr pXDev,int key,int onoff)
 {
     if (pXDev && pXDev->key && pXDev->key->xkbInfo) {
@@ -598,7 +598,7 @@ XkbSetRepeatKeys(DeviceIntPtr pXDev,int key,int onoff)
     return;
 }
 
-void
+_X_EXPORT void
 XkbApplyMappingChange(	DeviceIntPtr	kbd,
 			CARD8		 request,
 			KeyCode		 firstKey,
@@ -640,7 +640,7 @@ unsigned	 	check;
     return;
 }
 
-void
+_X_EXPORT void
 XkbDisableComputedAutoRepeats(DeviceIntPtr dev,unsigned key)
 {
 XkbSrvInfoPtr	xkbi = dev->key->xkbInfo;
@@ -655,7 +655,7 @@ xkbMapNotify	mn;
     return;
 }
 
-unsigned
+_X_EXPORT unsigned
 XkbStateChangedFlags(XkbStatePtr old,XkbStatePtr new)
 {
 int		changed;
@@ -700,7 +700,7 @@ XkbCompatMapPtr	map;
     return;
 }
 
-unsigned
+_X_EXPORT unsigned
 XkbAdjustGroup(int group,XkbControlsPtr ctrls)
 {
 unsigned	act;
@@ -741,7 +741,7 @@ unsigned	act;
     return group;
 }
 
-void
+_X_EXPORT void
 XkbComputeDerivedState(XkbSrvInfoPtr xkbi)
 {
 XkbStatePtr	state= &xkbi->state;
@@ -773,7 +773,7 @@ unsigned char	grp;
 
 /***====================================================================***/
 
-void
+_X_EXPORT void
 XkbCheckSecondaryEffects(	XkbSrvInfoPtr		xkbi,
 				unsigned		which,
 				XkbChangesPtr 		changes,
@@ -793,7 +793,7 @@ XkbCheckSecondaryEffects(	XkbSrvInfoPtr		xkbi,
 
 /***====================================================================***/
 
-Bool
+_X_EXPORT Bool
 XkbEnableDisableControls(	XkbSrvInfoPtr		xkbi,
 				unsigned long		change,
 				unsigned long		newValues,
@@ -842,7 +842,7 @@ XkbSrvLedInfoPtr	sli;
 
 #define	MAX_TOC	16
 
-XkbGeometryPtr 
+_X_EXPORT XkbGeometryPtr
 XkbLookupNamedGeometry(DeviceIntPtr dev,Atom name,Bool *shouldFree)
 {
 XkbSrvInfoPtr	xkbi=	dev->key->xkbInfo;
@@ -860,7 +860,7 @@ XkbDescPtr	xkb=	xkbi->desc;
     return NULL;
 }
 
-void
+_X_EXPORT void
 XkbConvertCase(register KeySym sym, KeySym *lower, KeySym *upper)
 {
     *lower = sym;
diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
index ae752e9..50b175a 100644
--- a/xkb/xkbfmisc.c
+++ b/xkb/xkbfmisc.c
@@ -48,7 +48,7 @@
 #include "xkbgeom.h"
 #include "xkb.h"
 
-unsigned
+_X_EXPORT unsigned
 _XkbKSCheckCase(KeySym ks)
 {
 unsigned	set,rtrn;
@@ -157,7 +157,7 @@ _AddIncl(	FILE *		file,
     return;
 }
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBKeymapForNames(	FILE *			file,
 				XkbComponentNamesPtr	names,
 				XkbDescPtr		xkb,
@@ -354,7 +354,7 @@ unsigned	wantNames,wantConfig,wantDflts;
 
 /***====================================================================***/
 
-int
+_X_EXPORT int
 XkbFindKeycodeByName(XkbDescPtr xkb,char *name,Bool use_aliases)
 {
 register int	i;
@@ -387,7 +387,7 @@ register int	i;
 }
 
 
-unsigned
+_X_EXPORT unsigned
 XkbConvertGetByNameComponents(Bool toXkm,unsigned orig)
 {
 unsigned	rtrn;
@@ -423,7 +423,7 @@ static unsigned char componentSpecLegal[] = {
 	0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff
 };
 
-void
+_X_EXPORT void
 XkbEnsureSafeMapName(char *name)
 {
    if (name==NULL)
@@ -440,7 +440,7 @@ XkbEnsureSafeMapName(char *name)
 
 #define	UNMATCHABLE(c)	(((c)=='(')||((c)==')')||((c)=='/'))
 
-Bool
+_X_EXPORT Bool
 XkbNameMatchesPattern(char *name,char *ptrn)
 {
     while (ptrn[0]!='\0') {
diff --git a/xkb/xkbout.c b/xkb/xkbout.c
index 229cc92..d5e8416 100644
--- a/xkb/xkbout.c
+++ b/xkb/xkbout.c
@@ -98,7 +98,7 @@ WriteXKBAction(FILE *file,XkbDescPtr xkb,XkbAnyAction *action)
 
 /***====================================================================***/
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBKeycodes(	FILE *			file,
 			XkbDescPtr		xkb,
 			Bool			topLevel,
@@ -158,7 +158,7 @@ char *			alternate;
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBKeyTypes(	FILE *			file,
 			XkbDescPtr              xkb,
 			Bool			topLevel,
@@ -265,7 +265,7 @@ WriteXKBIndicatorMap(	FILE *			file,
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBCompatMap(	FILE *			file,
 			XkbDescPtr              xkb,
 			Bool			topLevel,
@@ -340,7 +340,7 @@ XkbSymInterpretPtr	interp;
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBSymbols(	FILE *			file,
 			XkbDescPtr              xkb,
 			Bool			topLevel,
@@ -791,7 +791,7 @@ int		dfltKeyColor = 0;
     return True;
 }
 
-Bool
+_X_EXPORT Bool
 XkbWriteXKBGeometry(	FILE *			file,
 			XkbDescPtr              xkb,
 			Bool			topLevel,
diff --git a/xkb/xkbtext.c b/xkb/xkbtext.c
index d08c915..18c42ba 100644
--- a/xkb/xkbtext.c
+++ b/xkb/xkbtext.c
@@ -68,7 +68,7 @@ char *rtrn;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbAtomText(Atom atm,unsigned format)
 {
 char	*rtrn,*tmp;
@@ -100,7 +100,7 @@ char	*rtrn,*tmp;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbVModIndexText(XkbDescPtr xkb,unsigned ndx,unsigned format)
 {
 register int len;
@@ -134,7 +134,7 @@ char  numBuf[20];
     return rtrn;
 }
 
-char *
+_X_EXPORT char *
 XkbVModMaskText(        XkbDescPtr	xkb,
 			unsigned	modMask,
 			unsigned	mask,
@@ -216,7 +216,7 @@ static char *modNames[XkbNumModifiers] = {
     "Shift", "Lock", "Control", "Mod1", "Mod2", "Mod3", "Mod4", "Mod5"
 };
 
-char *
+_X_EXPORT char *
 XkbModIndexText(unsigned ndx,unsigned format)
 {
 char *	rtrn;
@@ -241,7 +241,7 @@ char	buf[100];
     return rtrn;
 }
 
-char *
+_X_EXPORT char *
 XkbModMaskText(unsigned mask,unsigned format)
 {
 register int i,bit;
@@ -281,7 +281,7 @@ char buf[64],*rtrn;
 /***====================================================================***/
 
 /*ARGSUSED*/
-char *
+_X_EXPORT char *
 XkbConfigText(unsigned config,unsigned format)
 {
 static char *buf;
@@ -328,7 +328,7 @@ static char *buf;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbKeysymText(KeySym sym,unsigned format)
 {
 static char buf[32],*rtrn;
@@ -339,7 +339,7 @@ static char buf[32],*rtrn;
     return rtrn;
 }
 
-char *
+_X_EXPORT char *
 XkbKeyNameText(char *name,unsigned format)
 {
 char *buf;
@@ -368,7 +368,7 @@ static char *siMatchText[5] = {
 	"NoneOf", "AnyOfOrNone", "AnyOf", "AllOf", "Exactly"
 };
 
-char *
+_X_EXPORT char *
 XkbSIMatchText(unsigned type,unsigned format)
 {
 static char buf[40];
@@ -402,7 +402,7 @@ static char *imWhichNames[]= {
 	"compat"
 };
 
-char *
+_X_EXPORT char *
 XkbIMWhichStateMaskText(unsigned use_which,unsigned format)
 {
 int		len;
@@ -461,7 +461,7 @@ static char *ctrlNames[] = {
 	"ignoreGroupLock"
 };
 
-char *
+_X_EXPORT char *
 XkbControlsMaskText(unsigned ctrls,unsigned format)
 {
 int		len;
@@ -508,7 +508,7 @@ char *		buf;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbStringText(char *str,unsigned format)
 {
 char *	buf;
@@ -568,7 +568,7 @@ Bool	ok;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbGeomFPText(int val,unsigned format)
 {
 int	whole,frac;
@@ -588,7 +588,7 @@ char *	buf;
     return buf;
 }
 
-char *
+_X_EXPORT char *
 XkbDoodadTypeText(unsigned type,unsigned format)
 {
 char *	buf;
@@ -628,7 +628,7 @@ static char *actionTypeNames[XkbSA_NumActions]= {
     "DeviceBtn",    "LockDeviceBtn"
 };
 
-char *
+_X_EXPORT char *
 XkbActionTypeText(unsigned type,unsigned format)
 {
 static char buf[32];
@@ -1125,7 +1125,7 @@ static actionCopy	copyActionArgs[XkbSA_NumActions] = {
 
 #define	ACTION_SZ	256
 
-char *
+_X_EXPORT char *
 XkbActionText(XkbDescPtr xkb,XkbAction *action,unsigned format)
 {
 char	buf[ACTION_SZ],*tmp;
@@ -1153,7 +1153,7 @@ int	sz;
     return tmp;
 }
 
-char *
+_X_EXPORT char *
 XkbBehaviorText(XkbDescPtr xkb,XkbBehavior *behavior,unsigned format)
 {
 char	buf[256],*tmp;
@@ -1210,7 +1210,7 @@ char	buf[256],*tmp;
 
 /***====================================================================***/
 
-char *
+_X_EXPORT char *
 XkbIndentText(unsigned size)
 {
 static char buf[32];
diff --git a/xkb/xkmread.c b/xkb/xkmread.c
index b14a5be..f9b4025 100644
--- a/xkb/xkmread.c
+++ b/xkb/xkmread.c
@@ -43,7 +43,7 @@
 #include "xkbsrv.h"
 #include "xkbgeom.h"
 
-Atom
+_X_EXPORT Atom
 XkbInternAtom(char *str,Bool only_if_exists)
 {
     if (str==NULL)
@@ -51,7 +51,7 @@ XkbInternAtom(char *str,Bool only_if_exists)
     return MakeAtom(str,strlen(str),!only_if_exists);
 }
 
-char *
+_X_EXPORT char *
 _XkbDupString(char *str)
 {
 char *new;
@@ -1026,7 +1026,7 @@ XkbGeometrySizesRec	sizes;
     return nRead;
 }
 
-Bool
+_X_EXPORT Bool
 XkmProbe(FILE *file)
 {
 unsigned hdr,tmp;
@@ -1043,7 +1043,7 @@ int	 nRead=0;
     return 1;
 }
 
-static Bool
+_X_EXPORT static Bool
 XkmReadTOC(FILE *file,xkmFileInfo* file_info,int max_toc,xkmSectionInfo *toc)
 {
 unsigned hdr,tmp;
@@ -1077,7 +1077,7 @@ unsigned i,size_toc;
 /***====================================================================***/
 
 #define	MAX_TOC	16
-unsigned
+_X_EXPORT unsigned
 XkmReadFile(FILE *file,unsigned need,unsigned want,XkbDescPtr *xkb)
 {
 register unsigned	i;


More information about the xorg-commit mailing list