State of Zaphod dual screen support
David Mohr
damailings at mcbf.net
Mon Mar 8 10:19:52 PST 2010
On Mon, Mar 8, 2010 at 10:05 AM, Aaron Plattner <aplattner at nvidia.com> wrote:
> On Mon, Mar 08, 2010 at 08:38:04AM -0800, David Mohr wrote:
>> On Wed, Mar 3, 2010 at 1:24 PM, Aaron Plattner <aplattner at nvidia.com> wrote:
>> > On Tue, 2010-03-02 at 22:24 -0800, David Mohr wrote:
>> >> On Mon, Mar 1, 2010 at 6:07 PM, David Mohr <damailings at mcbf.net> wrote:
>> >> > On Mon, Mar 1, 2010 at 3:38 PM, Peter Hutterer <peter.hutterer at who-t.net> wrote:
>> >> >> On Mon, Mar 01, 2010 at 12:41:02AM -0700, David Mohr wrote:
>> >> >>> On Sun, Feb 28, 2010 at 11:37 PM, Peter Hutterer
>> >> >>> <peter.hutterer at who-t.net> wrote:
>> >> >>> > On Sun, Feb 28, 2010 at 11:29:12PM -0700, David Mohr wrote:
>> >> >>> >> I'm part of the minory who currently uses a Zaphod style dual monitor
>> >> >>> >> setup with separate X screens for every monitor. When I recently
>> >> >>> >> upgraded from 7.4 to 7.5, some utilites which I adopted[1] which
>> >> >>> >> manipulate the mouse cursor started malfunctioning. My two X screens
>> >> >>> >> are setup to be "apart" so that the mouse does not pass between them,
>> >> >>> >> and I use my utilities to move the mouse between the two screens. But
>> >> >>> >> with 7.5 every now and then a condition is triggered where the mouse
>> >> >>> >> cursor will just continually jump from screen to screen, keeping the X
>> >> >>> >> server at 100% CPU. I cannot even shut it down using
>> >> >>> >> CTRL-ALT-Backspace.
>> >> >>> >>
>> >> >>> >> I've noticed comments in other threads on this mailing list that
>> >> >>> >> Zaphod mode is not really supported any more (for completeness' sake,
>> >> >>> >> I'm using the binary Nvidia drivers). So my question is, is there
>> >> >>> >> value in trying to track down the bug in Xorg which causes the mouse
>> >> >>> >> to jump back and forth?
>> >> >>> >
>> >> >>> > yes. I've seen this myself and I have not yet identified the issue. it's a
>> >> >>> > server bug and unrelated to the binary driver. If you can help track this
>> >> >>> > issue down, it would be much appreciated.
>> >> >>>
>> >> >>> Ok. Unfortunately I have not been able to find reliable conditions for
>> >> >>> triggering the bug. I'll try again and see what I can find.
>> >> >>
>> >> >> i found using a wacom tablet with a xinerama setup and then switch back and
>> >> >> forth triggers it eventually. the problem is the "eventually" bit...
>> >> >
>> >> > Yes, it's similar for me. One of the tools I use switches the mouse
>> >> > over when it hits the edge of the screen, so it's warping the pointer
>> >> > relatively often. I can't reproduce the problem reliably, but if I
>> >> > keep going back and forth it doesn't take very long to trigger it.
>> >> >
>> >> >>> Is there any way to get good information out of the running X instance
>> >> >>> once the bug has been triggered? I can only think of sending a signal
>> >> >>> to get a core dump, but then I'm not sure how much useful information
>> >> >>> that would contain.
>> >> >>
>> >> >> once it happens, gdb in and single-stepping may be the only approach. a
>> >> >> backtrace would be great already, just to make sure if you're seeing the
>> >> >> same problem as I am.
>> >> >
>> >> > Ugh. Here the trouble begins. When I attach to the process with gdb,
>> >> > it tells me it's in nvidia_drv.so, which of course doesn't have
>> >> > debugging symbols. So I can't get a useful backtrace or start to
>> >> > single step.
>> >>
>> >> I tried it a second time and again was only able to break in
>> >> nvidia_drv.so. I'm wondering if I installed all the right debugging
>> >> packages. I use debian, so I installed xserver-xorg-core-dbg. Is that
>> >> sufficient?
>> >>
>> >> I don't have much experience with how gdb behaves if there are no
>> >> debugging symbols available in _part_ of the program. Could it be that
>> >> I can inspect the X server by setting a breakpoint somewhere and then
>> >> continuing?
>> >> If so, what would be a good place to put a breakpoint (I have no clue
>> >> about X internals)?
>> >
>> > Since the cursor is actively changing, you could try putting a
>> > breakpoint on xf86SetCursor.
>>
>> Thanks Aaron, the xf86SetCursor suggestion worked out. Unfortunately I
>> must admit I'm not sure how to proceed, since the execution path
>> constantly leads into the closed nvidia_drv module... Here is an
>> excerpt from my gdb session, maybe this is some help for Peter to
>> decide whether it's the same bug or not.
>>
>> (gdb) break xf86SetCursor
>> Breakpoint 1 at 0x8185b64: file
>> ../../../../hw/xfree86/ramdac/xf86HWCurs.c, line 115.
>> (gdb) cont
>> Continuing.
>>
>> Breakpoint 1, xf86SetCursor (pScreen=0x925a730, pCurs=0x0, x=0, y=0)
>> at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
>> 115 {
>> (gdb) n
>> 116 xf86CursorScreenPtr ScreenPriv =
>> (xf86CursorScreenPtr)dixLookupPrivate(
>> (gdb) n
>> 121 if (pCurs == NullCursor) {
>> (gdb)
>> 116 xf86CursorScreenPtr ScreenPriv =
>> (xf86CursorScreenPtr)dixLookupPrivate(
>> (gdb)
>> 118 xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
>> (gdb)
>> 121 if (pCurs == NullCursor) {
>> (gdb)
>> 122 (*infoPtr->HideCursor)(infoPtr->pScrn);
>> (gdb)
>> 0xb5ffb8f0 in ?? () from /usr/lib/xorg/modules/drivers/nvidia_drv.so
>> (gdb) n
>> Cannot find bounds of current function
>> (gdb) cont
>> Continuing.
>>
>> Breakpoint 1, xf86SetCursor (pScreen=0x922ba58, pCurs=0x9653e38, x=7, y=409)
>> at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
>> 115 {
>> (gdb) break xf86HWCurs.c:123
>> Breakpoint 2 at 0x8185b90: file
>> ../../../../hw/xfree86/ramdac/xf86HWCurs.c, line 123.
>> (gdb) cont
>> Continuing.
>>
>> Breakpoint 2, xf86SetCursor (pScreen=0x922ba58, pCurs=0x9653e38, x=7, y=409)
>> at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:126
>> 126 bits = dixLookupPrivate(&pCurs->devPrivates,
>> CursorScreenKey(pScreen));
>> (gdb) n
>> 128 x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX;
>> (gdb) n
>> 126 bits = dixLookupPrivate(&pCurs->devPrivates,
>> CursorScreenKey(pScreen));
>> (gdb) n
>> 128 x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX;
>> (gdb) n
>> 129 y -= infoPtr->pScrn->frameY0 + ScreenPriv->HotY;
>> (gdb) n
>> 132 if (!pCurs->bits->argb || !infoPtr->LoadCursorARGB)
>> (gdb) n
>> 139 if (!(infoPtr->Flags & HARDWARE_CURSOR_UPDATE_UNHIDDEN))
>> (gdb)
>> 143 if (pCurs->bits->argb && infoPtr->LoadCursorARGB)
>> (gdb)
>> 144 (*infoPtr->LoadCursorARGB) (infoPtr->pScrn, pCurs);
>> (gdb)
>> 0xb5ffc0b0 in ?? () from /usr/lib/xorg/modules/drivers/nvidia_drv.so
>>
>> If anyone has pointers for what I should look at, let me know. I'll
>> try to read some sources later this week, I haven't had the time to do
>> that yet.
>
> It's odd that GDB is getting confused when doing a "next" over the call
> through the function pointer. I'll bet it's because your X server is
> compiled with optimization, which also explains it jumping between lines
> 126 and 128 a few times. If you want to properly step through
> xf86SetCursor, you might be able to put a breakpoint on line 155, the last
> line of the function. You might also have better luck if you compile an X
> server without optimization.
Sure, I should've thought of that myself... I'll have to try that
another day though.
> You could start by getting a backtrace to see who is calling xf86SetCursor.
> Also, just continuing from there and seeing if it's hitting the breakpoint
> repeatedly would be a good thing to try.
It's definitely hitting the xf86SetCursor breakpoint repeatedly. I've
tried that a couple of times, and it always stops there. See below for
the backtraces. I also printed out *pScreen, which shows that the
cursor is rendered first on one screen, then on the other.
#0 0xb5cfd712 in ?? () from /usr/lib/xorg/modules/drivers/nvidia_drv.so
Breakpoint 1 at 0x8185b64: file
../../../../hw/xfree86/ramdac/xf86HWCurs.c, line 115.
Continuing.
Breakpoint 1, xf86SetCursor (pScreen=0x88b5730, pCurs=0x0, x=0, y=0)
at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
115 {
#0 xf86SetCursor (pScreen=0x88b5730, pCurs=0x0, x=0, y=0)
at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
#1 0x0818515c in xf86CursorSetCursor (pDev=0x8c9bd28,
pScreen=0x88b5730, pCurs=0x0, x=0, y=0)
at ../../../../hw/xfree86/ramdac/xf86Cursor.c:309
#2 0x0809f7f9 in miPointerUpdateSprite (pDev=0x8c9bd28) at
../../mi/mipointer.c:396
#3 0x080a00a6 in miPointerDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../mi/mipointer.c:197
#4 0x080eb716 in CursorDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../xfixes/cursor.c:157
#5 0x081b1f04 in AnimCurDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../render/animcur.c:247
#6 0x0807ec3e in UpdateSpriteForScreen (pDev=0x8c9bd28, pScreen=0x8886a58)
at ../../dix/events.c:3116
#7 0x0809fc0c in miPointerWarpCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, x=7, y=815)
at ../../mi/mipointer.c:343
#8 0x0816e311 in xf86WarpCursor (pDev=0x8c9bd28, pScreen=0x8886a58, x=7, y=815)
at ../../../../hw/xfree86/common/xf86Cursor.c:473
#9 0x0809f9be in miPointerSetCursorPosition (pDev=0x8c9bd28,
pScreen=0x8886a58, x=7, y=815,
generateEvent=1) at ../../mi/mipointer.c:239
#10 0x081b1897 in AnimCurSetCursorPosition (pDev=0x88b5730,
pScreen=0x8886a58, x=7, y=815,
generateEvent=1) at ../../render/animcur.c:266
#11 0x0807bcd0 in CheckPhysLimits (pDev=0x8c9bd28, cursor=<value
optimized out>, generateEvents=1,
confineToScreen=0, pScreen=0x0) at ../../dix/events.c:778
#12 0x0807c05b in ConfineCursorToWindow (pDev=0x8c9bd28, pWin=<value
optimized out>,
generateEvents=1, confineToScreen=0) at ../../dix/events.c:925
#13 0x080e5e2a in mieqProcessDeviceEvent (dev=0x8c9bd28,
event=0x8cdc638, screen=0x8886a58)
at ../../mi/mieq.c:388
#14 0x080e5f90 in mieqProcessInputEvents () at ../../mi/mieq.c:471
#15 0x080b3d57 in ProcessInputEvents () at
../../../../hw/xfree86/common/xf86Events.c:165
#16 0x08072f40 in Dispatch () at ../../dix/dispatch.c:407
#17 0x0806695a in main (argc=9, argv=0xbfab7ff4, envp=0xbfab801c) at
../../dix/main.c:285
$1 = (ScreenPtr) 0x88b5730
$2 = {myNum = 1, id = 0, width = 1680, height = 1050, mmWidth = 474,
mmHeight = 303,
numDepths = 7, rootDepth = 24 '\030', allowedDepths = 0x88b6368,
rootVisual = 319,
defColormap = 318, minInstalledCmaps = 1, maxInstalledCmaps = 1,
backingStoreSupport = 0 '\000',
saveUnderSupport = 0 '\000', whitePixel = 16777215, blackPixel = 0,
rgf = 0, GCperDepth = {
0x88efae0, 0x88efc00, 0x88efd30, 0x88efe60, 0x88eff90, 0x88f00c0,
0x88f01f0, 0x88f0320, 0x0},
PixmapPerDepth = {0x88f0450}, devPrivate = 0x88ef9c8, numVisuals =
84, visuals = 0x88b6f10,
CloseScreen = 0x80e8a20 <compCloseScreen>, QueryBestSize = 0x8184bf0
<xf86CursorQueryBestSize>,
SaveScreen = 0xb600f580, GetImage = 0x81a3a70 <miSpriteGetImage>,
GetSpans = 0x81a3870 <miSpriteGetSpans>,
PointerNonInterestBox = 0x809f0f0 <miPointerPointerNonInterestBox>,
SourceValidate = 0x81a36c0 <miSpriteSourceValidate>,
CreateWindow = 0x80e9d00 <compCreateWindow>, DestroyWindow =
0x80e9c00 <compDestroyWindow>,
PositionWindow = 0x80ea5a0 <compPositionWindow>,
ChangeWindowAttributes = 0x80e9140 <compChangeWindowAttributes>,
RealizeWindow = 0x80ea8c0 <compRealizeWindow>,
UnrealizeWindow = 0x80ea830 <compUnrealizeWindow>, ValidateTree = 0xb5fdf4f0,
PostValidateTree = 0xb5fdf370, WindowExposures = 0x817a610
<xf86XVWindowExposures>,
PaintWindowBackground = 0xb603b120, PaintWindowBorder = 0xb603b120,
CopyWindow = 0x80e9e40 <compCopyWindow>, ClearToBackground =
0x81ab6d0 <miClearToBackground>,
ClipNotify = 0x80e9620 <compClipNotify>, RestackWindow = 0,
CreatePixmap = 0xb60376b0,
DestroyPixmap = 0xb5fe2310, SaveDoomedAreas = 0, RestoreAreas = 0,
ExposeCopy = 0,
TranslateBackingStore = 0, ClearBackingStore = 0, DrawGuarantee = 0,
BackingStoreFuncs = {
SaveAreas = 0xb6033af0, RestoreAreas = 0xb60335c0, SetClipmaskRgn
= 0, GetImagePixmap = 0,
GetSpansPixmap = 0}, RealizeFont = 0xb5c91860 <wfbRealizeFont>,
UnrealizeFont = 0xb5c91870 <wfbUnrealizeFont>,
ConstrainCursor = 0x80a00f0 <miPointerConstrainCursor>,
CursorLimits = 0x81b18c0 <AnimCurCursorLimits>,
DisplayCursor = 0x81b1e70 <AnimCurDisplayCursor>,
RealizeCursor = 0x81b1770 <AnimCurRealizeCursor>,
UnrealizeCursor = 0x81b1d90 <AnimCurUnrealizeCursor>,
RecolorCursor = 0x81b1660 <AnimCurRecolorCursor>,
SetCursorPosition = 0x81b1810 <AnimCurSetCursorPosition>, CreateGC =
0x811afa0 <damageCreateGC>,
CreateColormap = 0x8175e70 <CMapCreateColormap>,
DestroyColormap = 0x8175c70 <CMapDestroyColormap>,
InstallColormap = 0x80e8980 <compInstallColormap>,
UninstallColormap = 0x816f400 <DGAUninstallColormap>,
ListInstalledColormaps = 0xb5c76560 <wfbListInstalledColormaps>,
StoreColors = 0x8175570 <CMapStoreColors>, ResolveColor = 0xb5c764c0
<wfbResolveColor>,
BitmapToRegion = 0xb5c904b0 <wfbPixmapToRegion>,
SendGraphicsExpose = 0x809e930 <miSendGraphicsExpose>,
BlockHandler = 0x80e9070 <compBlockHandler>, WakeupHandler =
0x8077300 <NoopDDA>,
blockData = 0x0, wakeupData = 0x0, devPrivates = 0x88ed868,
CreateScreenResources = 0x81a1dd0 <miCreateScreenResources>,
ModifyPixmapHeader = 0x81a18a0 <miModifyPixmapHeader>,
GetWindowPixmap = 0xb5c91d90 <_wfbGetWindowPixmap>, SetWindowPixmap
= 0xb5fde540,
GetScreenPixmap = 0x81a1a90 <miGetScreenPixmap>,
SetScreenPixmap = 0x81a1aa0 <miSetScreenPixmap>, pScratchPixmap = 0x8cc3a18,
totalPixmapSize = 48, MarkWindow = 0x81ab9e0 <miMarkWindow>,
MarkOverlappedWindows = 0x81ab840 <miMarkOverlappedWindows>,
ChangeSaveUnder = 0,
PostChangeSaveUnder = 0, MoveWindow = 0x80ea480 <compMoveWindow>,
ResizeWindow = 0x80ea360 <compResizeWindow>, GetLayerWindow =
0x81aa240 <miGetLayerWindow>,
HandleExposures = 0x81ab5c0 <miHandleValidateExposures>,
ReparentWindow = 0x80ea990 <compReparentWindow>, SetShape =
0x81aa5f0 <miSetShape>,
ChangeBorderWidth = 0x80ea260 <compChangeBorderWidth>,
MarkUnrealizedWindow = 0x81aa2d0 <miMarkUnrealizedWindow>,
DeviceCursorInitialize = 0x809ff10 <miPointerDeviceInitialize>,
DeviceCursorCleanup = 0x809fe60 <miPointerDeviceCleanup>}
Continuing.
Breakpoint 1, xf86SetCursor (pScreen=0x8886a58, pCurs=0x8b6e450, x=7, y=815)
at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
115 {
#0 xf86SetCursor (pScreen=0x8886a58, pCurs=0x8b6e450, x=7, y=815)
at ../../../../hw/xfree86/ramdac/xf86HWCurs.c:115
#1 0x0818508c in xf86CursorSetCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCurs=0x8b6e450,
x=<value optimized out>, y=<value optimized out>)
at ../../../../hw/xfree86/ramdac/xf86Cursor.c:344
#2 0x0809f84e in miPointerUpdateSprite (pDev=0x8c9bd28) at
../../mi/mipointer.c:402
#3 0x080a00a6 in miPointerDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../mi/mipointer.c:197
#4 0x080eb716 in CursorDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../xfixes/cursor.c:157
#5 0x081b1f04 in AnimCurDisplayCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, pCursor=0x8b6e450)
at ../../render/animcur.c:247
#6 0x0807ec3e in UpdateSpriteForScreen (pDev=0x8c9bd28, pScreen=0x8886a58)
at ../../dix/events.c:3116
#7 0x0809fc0c in miPointerWarpCursor (pDev=0x8c9bd28,
pScreen=0x8886a58, x=7, y=815)
at ../../mi/mipointer.c:343
#8 0x0816e311 in xf86WarpCursor (pDev=0x8c9bd28, pScreen=0x8886a58, x=7, y=815)
at ../../../../hw/xfree86/common/xf86Cursor.c:473
#9 0x0809f9be in miPointerSetCursorPosition (pDev=0x8c9bd28,
pScreen=0x8886a58, x=7, y=815,
generateEvent=1) at ../../mi/mipointer.c:239
#10 0x081b1897 in AnimCurSetCursorPosition (pDev=0x8886a58,
pScreen=0x8886a58, x=7, y=815,
generateEvent=1) at ../../render/animcur.c:266
#11 0x0807bcd0 in CheckPhysLimits (pDev=0x8c9bd28, cursor=<value
optimized out>, generateEvents=1,
confineToScreen=0, pScreen=0x7) at ../../dix/events.c:778
#12 0x0807c05b in ConfineCursorToWindow (pDev=0x8c9bd28, pWin=<value
optimized out>,
generateEvents=1, confineToScreen=0) at ../../dix/events.c:925
#13 0x080e5e2a in mieqProcessDeviceEvent (dev=0x8c9bd28,
event=0x8cdc638, screen=0x8886a58)
at ../../mi/mieq.c:388
#14 0x080e5f90 in mieqProcessInputEvents () at ../../mi/mieq.c:471
#15 0x080b3d57 in ProcessInputEvents () at
../../../../hw/xfree86/common/xf86Events.c:165
#16 0x08072f40 in Dispatch () at ../../dix/dispatch.c:407
#17 0x0806695a in main (argc=9, argv=0xbfab7ff4, envp=0xbfab801c) at
../../dix/main.c:285
$ print *pScreen
$3 = {myNum = 0, id = 0, width = 1280, height = 1024, mmWidth = 382,
mmHeight = 302,
numDepths = 7, rootDepth = 24 '\030', allowedDepths = 0x8887380,
rootVisual = 33,
defColormap = 32, minInstalledCmaps = 1, maxInstalledCmaps = 1,
backingStoreSupport = 0 '\000',
saveUnderSupport = 0 '\000', whitePixel = 16777215, blackPixel = 0,
rgf = 0, GCperDepth = {
0x88eed60, 0x88eee48, 0x88eef78, 0x88ef0a8, 0x88ef1d8, 0x88ef308,
0x88ef438, 0x88ef568, 0x0},
PixmapPerDepth = {0x88ef698}, devPrivate = 0x88a37d0, numVisuals =
84, visuals = 0x8887eb0,
CloseScreen = 0x80e8a20 <compCloseScreen>, QueryBestSize = 0x8184bf0
<xf86CursorQueryBestSize>,
SaveScreen = 0xb600f580, GetImage = 0x81a3a70 <miSpriteGetImage>,
GetSpans = 0x81a3870 <miSpriteGetSpans>,
PointerNonInterestBox = 0x809f0f0 <miPointerPointerNonInterestBox>,
SourceValidate = 0x81a36c0 <miSpriteSourceValidate>,
CreateWindow = 0x80e9d00 <compCreateWindow>, DestroyWindow =
0x80e9c00 <compDestroyWindow>,
PositionWindow = 0x80ea5a0 <compPositionWindow>,
ChangeWindowAttributes = 0x80e9140 <compChangeWindowAttributes>,
RealizeWindow = 0x80ea8c0 <compRealizeWindow>,
UnrealizeWindow = 0x80ea830 <compUnrealizeWindow>, ValidateTree = 0xb5fdf4f0,
PostValidateTree = 0xb5fdf370, WindowExposures = 0x817a610
<xf86XVWindowExposures>,
PaintWindowBackground = 0xb603b120, PaintWindowBorder = 0xb603b120,
CopyWindow = 0x80e9e40 <compCopyWindow>, ClearToBackground =
0x81ab6d0 <miClearToBackground>,
ClipNotify = 0x80e9620 <compClipNotify>, RestackWindow = 0,
CreatePixmap = 0xb60376b0,
DestroyPixmap = 0xb5fe2310, SaveDoomedAreas = 0, RestoreAreas = 0,
ExposeCopy = 0,
TranslateBackingStore = 0, ClearBackingStore = 0, DrawGuarantee = 0,
BackingStoreFuncs = {
SaveAreas = 0xb6033af0, RestoreAreas = 0xb60335c0, SetClipmaskRgn
= 0, GetImagePixmap = 0,
GetSpansPixmap = 0}, RealizeFont = 0xb5c91860 <wfbRealizeFont>,
UnrealizeFont = 0xb5c91870 <wfbUnrealizeFont>,
ConstrainCursor = 0x80a00f0 <miPointerConstrainCursor>,
CursorLimits = 0x81b18c0 <AnimCurCursorLimits>,
DisplayCursor = 0x80a0000 <miPointerDisplayCursor>,
RealizeCursor = 0x81b1770 <AnimCurRealizeCursor>,
UnrealizeCursor = 0x81b1d90 <AnimCurUnrealizeCursor>,
RecolorCursor = 0x81b1660 <AnimCurRecolorCursor>,
SetCursorPosition = 0x809f960 <miPointerSetCursorPosition>,
CreateGC = 0x811afa0 <damageCreateGC>, CreateColormap = 0x8175e70
<CMapCreateColormap>,
DestroyColormap = 0x8175c70 <CMapDestroyColormap>,
InstallColormap = 0x80e8980 <compInstallColormap>,
UninstallColormap = 0x816f400 <DGAUninstallColormap>,
ListInstalledColormaps = 0xb5c76560 <wfbListInstalledColormaps>,
StoreColors = 0x8175570 <CMapStoreColors>, ResolveColor = 0xb5c764c0
<wfbResolveColor>,
BitmapToRegion = 0xb5c904b0 <wfbPixmapToRegion>,
SendGraphicsExpose = 0x809e930 <miSendGraphicsExpose>,
BlockHandler = 0x80e9070 <compBlockHandler>, WakeupHandler =
0x8077300 <NoopDDA>,
blockData = 0x0, wakeupData = 0x0, devPrivates = 0x88ed6e0,
CreateScreenResources = 0x81a1dd0 <miCreateScreenResources>,
ModifyPixmapHeader = 0x81a18a0 <miModifyPixmapHeader>,
GetWindowPixmap = 0xb5c91d90 <_wfbGetWindowPixmap>, SetWindowPixmap
= 0xb5fde540,
GetScreenPixmap = 0x81a1a90 <miGetScreenPixmap>,
SetScreenPixmap = 0x81a1aa0 <miSetScreenPixmap>, pScratchPixmap = 0x8cd6a98,
totalPixmapSize = 48, MarkWindow = 0x81ab9e0 <miMarkWindow>,
MarkOverlappedWindows = 0x81ab840 <miMarkOverlappedWindows>,
ChangeSaveUnder = 0,
PostChangeSaveUnder = 0, MoveWindow = 0x80ea480 <compMoveWindow>,
ResizeWindow = 0x80ea360 <compResizeWindow>, GetLayerWindow =
0x81aa240 <miGetLayerWindow>,
HandleExposures = 0x81ab5c0 <miHandleValidateExposures>,
ReparentWindow = 0x80ea990 <compReparentWindow>, SetShape =
0x81aa5f0 <miSetShape>,
ChangeBorderWidth = 0x80ea260 <compChangeBorderWidth>,
MarkUnrealizedWindow = 0x81aa2d0 <miMarkUnrealizedWindow>,
DeviceCursorInitialize = 0x809ff10 <miPointerDeviceInitialize>,
DeviceCursorCleanup = 0x809fe60 <miPointerDeviceCleanup>}
~David
More information about the xorg
mailing list