Magellan Linux

Annotation of /trunk/xorg-old/patches-6.8.2-r10/0485_all_6.8.0-afb-cfb-dlloader-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 167 - (hide annotations) (download)
Tue May 8 20:58:51 2007 UTC (17 years ago) by niro
File size: 28674 byte(s)
-import

1 niro 167 https://bugs.freedesktop.org/show_bug.cgi?id=1114
2     http://bugs.gentoo.org/show_bug.cgi?id=61063
3    
4     Ferris McCormick:
5     This is the xorg-x11 patch which allows sunffb+cfb to work with dlloader.
6     According to ajax, only the sparc graphics drivers still use cfb, so the
7     change is needed only for sparc+xorg+dlloader, and dlloader is really only
8     needed for building xorg-hardened. (Without dlloader, xorg+hardened must
9     actually force 'softening'.)
10    
11     diff -urN xc.orig/programs/Xserver/afb/afbbres.c xc/programs/Xserver/afb/afbbres.c
12     --- xc.orig/programs/Xserver/afb/afbbres.c 2004-04-23 11:59:39.000000000 -0700
13     +++ xc/programs/Xserver/afb/afbbres.c 2004-12-12 20:34:24.837025688 -0800
14     @@ -79,8 +79,8 @@
15     register int yinc; /* increment to next scanline, in bytes */
16     register PixelType *addrl; /* bitmask long pointer */
17     register PixelType bit; /* current bit being set/cleared/etc. */
18     - PixelType leftbit = mask[0]; /* leftmost bit to process in new word */
19     - PixelType rightbit = mask[PPW-1]; /* rightmost bit to process in new word */
20     + PixelType leftbit = mfbGetmask(0); /* leftmost bit to process in new word */
21     + PixelType rightbit = mfbGetmask(PPW-1); /* rightmost bit to process in new word */
22    
23     register int e3 = e2-e1;
24     PixelType tmp;
25     @@ -103,7 +103,7 @@
26     addrlbase += sizeDst; /* @@@ NEXT PLANE @@@ */
27     len = saveLen;
28     e = saveE;
29     - bit = mask[x1 & PIM];
30     + bit = mfbGetmask(x1 & PIM);
31    
32     switch (rrops[d]) {
33     case RROP_BLACK:
34     diff -urN xc.orig/programs/Xserver/afb/afbbresd.c xc/programs/Xserver/afb/afbbresd.c
35     --- xc.orig/programs/Xserver/afb/afbbresd.c 2004-04-23 11:59:39.000000000 -0700
36     +++ xc/programs/Xserver/afb/afbbresd.c 2004-12-12 20:34:24.838025536 -0800
37     @@ -93,8 +93,8 @@
38     register PixelType *addrl;
39     register int e3 = e2-e1;
40     register unsigned long bit;
41     - PixelType leftbit = mask[0]; /* leftmost bit to process in new word */
42     - PixelType rightbit = mask[PPW-1]; /* rightmost bit to process in new word */
43     + PixelType leftbit = mfbGetmask(0); /* leftmost bit to process in new word */
44     + PixelType rightbit = mfbGetmask(PPW-1); /* rightmost bit to process in new word */
45     int dashIndex;
46     int dashOffset;
47     int dashRemaining;
48     @@ -125,7 +125,7 @@
49    
50     e = saveE;
51     len = saveLen;
52     - bit = mask[x1 & PIM];
53     + bit = mfbGetmask(x1 & PIM);
54    
55     rop = fgrop;
56     if (!isDoubleDash)
57     diff -urN xc.orig/programs/Xserver/afb/afbclip.c xc/programs/Xserver/afb/afbclip.c
58     --- xc.orig/programs/Xserver/afb/afbclip.c 2004-04-23 11:59:39.000000000 -0700
59     +++ xc/programs/Xserver/afb/afbclip.c 2004-12-12 20:34:24.838025536 -0800
60     @@ -102,7 +102,7 @@
61     register BoxPtr prectO, prectN;
62     BoxPtr FirstRect, rects, prectLineStart;
63     Bool fInBox, fSame;
64     - register PixelType mask0 = mask[0];
65     + register PixelType mask0 = mfbGetmask(0);
66     PixelType *pwLine;
67     int nWidth;
68    
69     diff -urN xc.orig/programs/Xserver/afb/afbhrzvert.c xc/programs/Xserver/afb/afbhrzvert.c
70     --- xc.orig/programs/Xserver/afb/afbhrzvert.c 2004-04-23 11:59:39.000000000 -0700
71     +++ xc/programs/Xserver/afb/afbhrzvert.c 2004-12-12 20:34:24.839025384 -0800
72     @@ -186,17 +186,17 @@
73    
74     switch (rrops[d]) {
75     case RROP_BLACK:
76     - bitmask = rmask[x1 & PIM];
77     + bitmask = mfbGetrmask(x1 & PIM);
78     Duff(len, *addrl &= bitmask; afbScanlineInc(addrl, nlwidth) );
79     break;
80    
81     case RROP_WHITE:
82     - bitmask = mask[x1 & PIM];
83     + bitmask = mfbGetmask(x1 & PIM);
84     Duff(len, *addrl |= bitmask; afbScanlineInc(addrl, nlwidth) );
85     break;
86    
87     case RROP_INVERT:
88     - bitmask = mask[x1 & PIM];
89     + bitmask = mfbGetmask(x1 & PIM);
90     Duff(len, *addrl ^= bitmask; afbScanlineInc(addrl, nlwidth) );
91     break;
92    
93     diff -urN xc.orig/programs/Xserver/afb/afbline.c xc/programs/Xserver/afb/afbline.c
94     --- xc.orig/programs/Xserver/afb/afbline.c 2004-04-23 11:59:39.000000000 -0700
95     +++ xc/programs/Xserver/afb/afbline.c 2004-12-12 20:34:24.855022952 -0800
96     @@ -401,13 +401,13 @@
97    
98     switch(rrops[d]) {
99     case RROP_BLACK:
100     - *addrl &= rmask[x2 & PIM];
101     + *addrl &= mfbGetrmask(x2 & PIM);
102     break;
103     case RROP_WHITE:
104     - *addrl |= mask[x2 & PIM];
105     + *addrl |= mfbGetmask(x2 & PIM);
106     break;
107     case RROP_INVERT:
108     - *addrl ^= mask[x2 & PIM];
109     + *addrl ^= mfbGetmask(x2 & PIM);
110     break;
111     case RROP_NOP:
112     break;
113     @@ -679,14 +679,14 @@
114    
115     switch (rop) {
116     case RROP_BLACK:
117     - *addrl &= rmask[x2 & PIM];
118     + *addrl &= mfbGetrmask(x2 & PIM);
119     break;
120     case RROP_WHITE:
121     - *addrl |= mask[x2 & PIM];
122     + *addrl |= mfbGetmask(x2 & PIM);
123     break;
124    
125     case RROP_INVERT:
126     - *addrl ^= mask[x2 & PIM];
127     + *addrl ^= mfbGetmask(x2 & PIM);
128     break;
129    
130     case RROP_NOP:
131     diff -urN xc.orig/programs/Xserver/afb/afbmodule.c xc/programs/Xserver/afb/afbmodule.c
132     --- xc.orig/programs/Xserver/afb/afbmodule.c 2004-04-23 11:59:39.000000000 -0700
133     +++ xc/programs/Xserver/afb/afbmodule.c 2004-12-12 20:34:24.859022344 -0800
134     @@ -30,6 +30,8 @@
135     #include "xf86Module.h"
136     #include "afb.h"
137    
138     +static MODULESETUPPROTO(afbSetup);
139     +
140     static XF86ModuleVersionInfo VersRec =
141     {
142     "afb",
143     @@ -44,6 +46,14 @@
144     {0,0,0,0} /* signature, to be patched into the file by a tool */
145     };
146    
147     -XF86ModuleData afbModuleData = { &VersRec, NULL, NULL };
148     +XF86ModuleData afbModuleData = { &VersRec, afbSetup, NULL };
149     +
150     +static pointer
151     +afbSetup(pointer module, pointer opts, int *errmaj, int *errmin)
152     +{
153     + /* This modules requires mfb, so load it */
154     + return LoadSubModule(module, "mfb", NULL, NULL, NULL, NULL,
155     + errmaj, errmin);
156     +}
157    
158     #endif
159     diff -urN xc.orig/programs/Xserver/afb/afbpixmap.c xc/programs/Xserver/afb/afbpixmap.c
160     --- xc.orig/programs/Xserver/afb/afbpixmap.c 2004-04-23 11:59:39.000000000 -0700
161     +++ xc/programs/Xserver/afb/afbpixmap.c 2004-12-12 20:34:24.860022192 -0800
162     @@ -164,7 +164,7 @@
163     if (rep*width != PPW)
164     return;
165    
166     - mask = endtab[width];
167     + mask = mfbGetendtab(width);
168    
169     p = (PixelType *)(pPixmap->devPrivate.ptr);
170    
171     @@ -206,7 +206,7 @@
172     while(pw < pwFinal) {
173     t = *pw;
174     *pw++ = SCRRIGHT(t, rw) |
175     - (SCRLEFT(t, (PPW-rw)) & endtab[rw]);
176     + (SCRLEFT(t, (PPW-rw)) & mfbGetendtab(rw));
177     }
178     } else {
179     /* We no longer do this. Validate doesn't try to rotate odd-size
180     diff -urN xc.orig/programs/Xserver/afb/afbpolypnt.c xc/programs/Xserver/afb/afbpolypnt.c
181     --- xc.orig/programs/Xserver/afb/afbpolypnt.c 2004-04-23 11:59:39.000000000 -0700
182     +++ xc/programs/Xserver/afb/afbpolypnt.c 2004-12-12 20:34:24.861022040 -0800
183     @@ -113,7 +113,7 @@
184     y = ppt->y + pDrawable->y;
185     if ((x >= pbox->x1) && (x < pbox->x2) &&
186     (y >= pbox->y1) && (y < pbox->y2))
187     - *afbScanline(addrl, x, y, nlwidth) &= rmask[x & PIM];
188     + *afbScanline(addrl, x, y, nlwidth) &= mfbGetrmask(x & PIM);
189     }
190     break;
191    
192     @@ -123,7 +123,7 @@
193     y = ppt->y + pDrawable->y;
194     if ((x >= pbox->x1) && (x < pbox->x2) &&
195     (y >= pbox->y1) && (y < pbox->y2))
196     - *afbScanline(addrl, x, y, nlwidth) |= mask[x & PIM];
197     + *afbScanline(addrl, x, y, nlwidth) |= mfbGetmask(x & PIM);
198     }
199     break;
200    
201     @@ -133,7 +133,7 @@
202     y = ppt->y + pDrawable->y;
203     if ((x >= pbox->x1) && (x < pbox->x2) &&
204     (y >= pbox->y1) && (y < pbox->y2))
205     - *afbScanline(addrl, x, y, nlwidth) ^= mask[x & PIM];
206     + *afbScanline(addrl, x, y, nlwidth) ^= mfbGetmask(x & PIM);
207     }
208     break;
209    
210     diff -urN xc.orig/programs/Xserver/afb/afbpushpxl.c xc/programs/Xserver/afb/afbpushpxl.c
211     --- xc.orig/programs/Xserver/afb/afbpushpxl.c 2004-04-23 11:59:39.000000000 -0700
212     +++ xc/programs/Xserver/afb/afbpushpxl.c 2004-12-12 20:34:24.861022040 -0800
213     @@ -184,7 +184,7 @@
214     pwEnd = pwLineStart + dxDivPPW;
215     while(pw < pwEnd) {
216     w = *pw;
217     - mask = endtab[1];
218     + mask = mfbGetendtab(1);
219     for(ib = 0; ib < PPW; ib++) {
220     if(w & mask) {
221     if(!fInBox) {
222     @@ -214,7 +214,7 @@
223     if(ibEnd) {
224     /* Process final partial word on line */
225     w = *pw;
226     - mask = endtab[1];
227     + mask = mfbGetendtab(1);
228     for(ib = 0; ib < ibEnd; ib++) {
229     if(w & mask) {
230     if(!fInBox) {
231     diff -urN xc.orig/programs/Xserver/afb/afbtegblt.c xc/programs/Xserver/afb/afbtegblt.c
232     --- xc.orig/programs/Xserver/afb/afbtegblt.c 2004-04-23 11:59:39.000000000 -0700
233     +++ xc/programs/Xserver/afb/afbtegblt.c 2004-12-12 20:34:24.862021888 -0800
234     @@ -296,7 +296,7 @@
235     widthGlyphs = widthGlyph * PGSZB;
236    
237     #ifdef USE_LEFTBITS
238     - glyphMask = endtab[widthGlyph];
239     + glyphMask = mfbGetendtab(widthGlyph);
240     glyphBytes = GLYPHWIDTHBYTESPADDED(*ppci);
241     #endif
242    
243     diff -urN xc.orig/programs/Xserver/cfb/Imakefile.inc xc/programs/Xserver/cfb/Imakefile.inc
244     --- xc.orig/programs/Xserver/cfb/Imakefile.inc 2004-04-25 19:39:58.000000000 -0700
245     +++ xc/programs/Xserver/cfb/Imakefile.inc 2004-12-12 20:34:24.863021736 -0800
246     @@ -65,6 +65,7 @@
247     XFMODOBJ = cfbmodule.o
248     #endif
249    
250     +XCOMM THIS IS STUPID
251     #if !(defined(IHaveModules) && defined(LinkDirectory))
252     CFBCMAP = cfbcmap.o
253     #endif
254     @@ -91,7 +92,7 @@
255     cfbtileoddC.o cfbtileoddG.o cfbtile32C.o cfbtile32G.o \
256     cfbfillsp.o cfbsetsp.o cfbscrinit.o cfballpriv.o \
257     cfbpntwin.o cfbmskbits.o cfbpixmap.o \
258     - $(CFBCMAP) cfbzerarcC.o cfbzerarcX.o cfbzerarcG.o \
259     + cfbcmap.o cfbzerarcC.o cfbzerarcX.o cfbzerarcG.o \
260     cfbfillarcC.o cfbfillarcG.o \
261     cfbigblt8.o cfbglblt8.o cfbtegblt.o cfbbstore.o \
262     cfbpolypnt.o \
263     diff -urN xc.orig/programs/Xserver/cfb/cfballpriv.c xc/programs/Xserver/cfb/cfballpriv.c
264     --- xc.orig/programs/Xserver/cfb/cfballpriv.c 2004-04-23 12:00:12.000000000 -0700
265     +++ xc/programs/Xserver/cfb/cfballpriv.c 2004-12-12 20:34:24.863021736 -0800
266     @@ -42,7 +42,7 @@
267     #include "cfbmskbits.h"
268     #include "mibstore.h"
269    
270     -#if PSZ==8
271     +#if 1 || PSZ==8
272     int cfbWindowPrivateIndex;
273     int cfbGCPrivateIndex;
274     #endif
275     diff -urN xc.orig/programs/Xserver/cfb/cfbbitblt.c xc/programs/Xserver/cfb/cfbbitblt.c
276     --- xc.orig/programs/Xserver/cfb/cfbbitblt.c 2004-04-23 12:00:12.000000000 -0700
277     +++ xc/programs/Xserver/cfb/cfbbitblt.c 2004-12-12 20:34:24.864021584 -0800
278     @@ -973,15 +973,15 @@
279     #else /* PSZ == 8 */
280    
281     #define mfbmaskbits(x, w, startmask, endmask, nlw) \
282     - startmask = starttab[(x)&0x1f]; \
283     - endmask = endtab[((x)+(w)) & 0x1f]; \
284     + startmask = mfbGetstarttab((x)&0x1f); \
285     + endmask = mfbGetendtab(((x)+(w)) & 0x1f); \
286     if (startmask) \
287     nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \
288     else \
289     nlw = (w) >> 5;
290    
291     #define mfbmaskpartialbits(x, w, mask) \
292     - mask = partmasks[(x)&0x1f][(w)&0x1f];
293     + mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f);
294    
295     #define LeftMost 0
296     #define StepBit(bit, inc) ((bit) += (inc))
297     @@ -1389,7 +1389,7 @@
298    
299     oldalu = pGC->alu;
300     if ((pGC->fgPixel & 1) == 0 && (pGC->bgPixel&1) == 1)
301     - pGC->alu = InverseAlu[pGC->alu];
302     + pGC->alu = mfbGetInverseAlu(pGC->alu);
303     else if ((pGC->fgPixel & 1) == (pGC->bgPixel & 1))
304     pGC->alu = mfbReduceRop(pGC->alu, pGC->fgPixel);
305     ret = cfbCopyPlaneReduce(pSrcDrawable, pDstDrawable,
306     diff -urN xc.orig/programs/Xserver/cfb/cfbcppl.c xc/programs/Xserver/cfb/cfbcppl.c
307     --- xc.orig/programs/Xserver/cfb/cfbcppl.c 2004-04-23 12:00:12.000000000 -0700
308     +++ xc/programs/Xserver/cfb/cfbcppl.c 2004-12-12 20:34:24.865021432 -0800
309     @@ -245,15 +245,15 @@
310     #else /* PSZ == 8 */
311    
312     #define mfbmaskbits(x, w, startmask, endmask, nlw) \
313     - startmask = starttab[(x)&0x1f]; \
314     - endmask = endtab[((x)+(w)) & 0x1f]; \
315     + startmask = mfbGetstarttab((x)&0x1f); \
316     + endmask = mfbGetendtab(((x)+(w)) & 0x1f); \
317     if (startmask) \
318     nlw = (((w) - (32 - ((x)&0x1f))) >> 5); \
319     else \
320     nlw = (w) >> 5;
321    
322     #define mfbmaskpartialbits(x, w, mask) \
323     - mask = partmasks[(x)&0x1f][(w)&0x1f];
324     + mask = mfbGetpartmasks((x)&0x1f,(w)&0x1f);
325    
326     #define LeftMost 0
327     #define StepBit(bit, inc) ((bit) += (inc))
328     diff -urN xc.orig/programs/Xserver/cfb/cfbgc.c xc/programs/Xserver/cfb/cfbgc.c
329     --- xc.orig/programs/Xserver/cfb/cfbgc.c 2004-04-23 12:00:12.000000000 -0700
330     +++ xc/programs/Xserver/cfb/cfbgc.c 2004-12-12 20:34:24.866021280 -0800
331     @@ -85,11 +85,13 @@
332     # define usePolyGlyphBlt miPolyGlyphBlt
333     #endif
334    
335     +void cfbUnPushPixels (GCPtr, PixmapPtr, DrawablePtr, int, int, int, int);
336     +
337     #ifdef FOUR_BIT_CODE
338     # define usePushPixels cfbPushPixels8
339     #else
340     #ifndef LOWMEMFTPT
341     -# define usePushPixels mfbPushPixels
342     +# define usePushPixels cfbUnPushPixels
343     #else
344     # define usePushPixels miPushPixels
345     #endif /* ifndef LOWMEMFTPT */
346     @@ -284,6 +286,14 @@
347     pGC->clientClip = NULL;
348     pGC->clientClipType = CT_NONE;
349    
350     + if (cfbNonTEOps.PushPixels == cfbUnPushPixels)
351     + {
352     + cfbTEOps1Rect.PushPixels = mfbPushPixelsWeak();
353     + cfbNonTEOps1Rect.PushPixels = mfbPushPixelsWeak();
354     + cfbTEOps.PushPixels = mfbPushPixelsWeak();
355     + cfbNonTEOps.PushPixels = mfbPushPixelsWeak();
356     + }
357     +
358     /*
359     * some of the output primitives aren't really necessary, since they
360     * will be filled in ValidateGC because of dix/CreateGC() setting all
361     @@ -767,7 +777,7 @@
362     #endif
363     #ifdef FOUR_BIT_CODE
364     #ifndef LOWMEMFTPT
365     - pGC->ops->PushPixels = mfbPushPixels;
366     + pGC->ops->PushPixels = mfbPushPixelsWeak();
367     #else
368     pGC->ops->PushPixels = miPushPixels;
369     #endif /* ifndef LOWMEMFTPT */
370     @@ -789,3 +799,17 @@
371     }
372     }
373     }
374     +
375     +/*
376     + * this is never called, it just exists to have its address
377     + * taken in mfbCreateGC.
378     + */
379     +static void
380     +cfbUnPushPixels (pGC, pBitmap, pDrawable, dx, dy, xOrg, yOrg)
381     + GCPtr pGC;
382     + PixmapPtr pBitmap;
383     + DrawablePtr pDrawable;
384     + int dx, dy, xOrg, yOrg;
385     +{
386     + return;
387     +}
388     diff -urN xc.orig/programs/Xserver/cfb/cfbglblt8.c xc/programs/Xserver/cfb/cfbglblt8.c
389     --- xc.orig/programs/Xserver/cfb/cfbglblt8.c 2004-04-23 12:00:12.000000000 -0700
390     +++ xc/programs/Xserver/cfb/cfbglblt8.c 2004-12-12 20:34:24.867021128 -0800
391     @@ -64,7 +64,6 @@
392    
393     #ifdef USE_LEFTBITS
394     typedef unsigned char *glyphPointer;
395     -extern CfbBits endtab[];
396    
397     #define GlyphBits(bits,width,dst) getleftbits(bits,width,dst); \
398     (dst) &= widthMask; \
399     @@ -251,7 +250,7 @@
400     #ifdef USE_LEFTBITS
401     w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
402     widthGlyph = PADGLYPHWIDTHBYTES(w);
403     - widthMask = endtab[w];
404     + widthMask = mfbGetendtab(w);
405     #endif
406     do {
407     dst = dstLine;
408     @@ -380,7 +379,7 @@
409     #ifdef USE_LEFTBITS
410     w = pci->metrics.rightSideBearing - pci->metrics.leftSideBearing;
411     widthGlyph = PADGLYPHWIDTHBYTES(w);
412     - widthMask = endtab[w];
413     + widthMask = mfbGetendtab(w);
414     #endif
415     switch (cfb8ComputeClipMasks32 (pBox, numRects, xG, yG, w, hTmp, clips))
416     {
417     diff -urN xc.orig/programs/Xserver/cfb/cfbmap.h xc/programs/Xserver/cfb/cfbmap.h
418     --- xc.orig/programs/Xserver/cfb/cfbmap.h 2004-04-23 12:00:12.000000000 -0700
419     +++ xc/programs/Xserver/cfb/cfbmap.h 2004-12-12 20:34:24.867021128 -0800
420     @@ -94,13 +94,17 @@
421     #undef cfbFillSpanTileOddGeneral
422     #undef cfbFinishScreenInit
423     #undef cfbGCFuncs
424     +#undef cfbGCPrivateIndex
425     #undef cfbGetImage
426     #undef cfbGetScreenPixmap
427     #undef cfbGetSpans
428     #undef cfbHorzS
429     #undef cfbImageGlyphBlt8
430     +#undef cfbInitializeColormap
431     +#undef cfbInstallColormap
432     #undef cfbLineSD
433     #undef cfbLineSS
434     +#undef cfbListInstalledColormaps
435     #undef cfbMapWindow
436     #undef cfbMatchCommon
437     #undef cfbNonTEOps
438     @@ -116,6 +120,7 @@
439     #undef cfbPositionWindow
440     #undef cfbPutImage
441     #undef cfbReduceRasterOp
442     +#undef cfbResolveColor
443     #undef cfbRestoreAreas
444     #undef cfbSaveAreas
445     #undef cfbScreenInit
446     @@ -136,11 +141,13 @@
447     #undef cfbTEOps1Rect
448     #undef cfbTile32FSCopy
449     #undef cfbTile32FSGeneral
450     +#undef cfbUninstallColormap
451     #undef cfbUnmapWindow
452     #undef cfbUnnaturalStippleFS
453     #undef cfbUnnaturalTileFS
454     #undef cfbValidateGC
455     #undef cfbVertS
456     +#undef cfbWindowPrivateIndex
457     #undef cfbXRotatePixmap
458     #undef cfbYRotatePixmap
459     #undef cfbZeroPolyArcSS8Copy
460     @@ -263,13 +270,17 @@
461     #define cfbFillSpanTileOddGeneral CFBNAME(FillSpanTileOddGeneral)
462     #define cfbFinishScreenInit CFBNAME(FinishScreenInit)
463     #define cfbGCFuncs CFBNAME(GCFuncs)
464     +#define cfbGCPrivateIndex CFBNAME(GCPrivateIndex)
465     #define cfbGetImage CFBNAME(GetImage)
466     #define cfbGetScreenPixmap CFBNAME(GetScreenPixmap)
467     #define cfbGetSpans CFBNAME(GetSpans)
468     #define cfbHorzS CFBNAME(HorzS)
469     #define cfbImageGlyphBlt8 CFBNAME(ImageGlyphBlt8)
470     +#define cfbInitializeColormap CFBNAME(InitializeColormap)
471     +#define cfbInstallColormap CFBNAME(InstallColormap)
472     #define cfbLineSD CFBNAME(LineSD)
473     #define cfbLineSS CFBNAME(LineSS)
474     +#define cfbListInstalledColormaps CFBNAME(ListInstalledColormaps)
475     #define cfbMapWindow CFBNAME(MapWindow)
476     #define cfbMatchCommon CFBNAME(MatchCommon)
477     #define cfbNonTEOps CFBNAME(NonTEOps)
478     @@ -285,6 +296,7 @@
479     #define cfbPositionWindow CFBNAME(PositionWindow)
480     #define cfbPutImage CFBNAME(PutImage)
481     #define cfbReduceRasterOp CFBNAME(ReduceRasterOp)
482     +#define cfbResolveColor CFBNAME(ResolveColor)
483     #define cfbRestoreAreas CFBNAME(RestoreAreas)
484     #define cfbSaveAreas CFBNAME(SaveAreas)
485     #define cfbScreenInit CFBNAME(ScreenInit)
486     @@ -305,11 +317,13 @@
487     #define cfbTEOps1Rect CFBNAME(TEOps1Rect)
488     #define cfbTile32FSCopy CFBNAME(Tile32FSCopy)
489     #define cfbTile32FSGeneral CFBNAME(Tile32FSGeneral)
490     +#define cfbUninstallColormap CFBNAME(UninstallColormap)
491     #define cfbUnmapWindow CFBNAME(UnmapWindow)
492     #define cfbUnnaturalStippleFS CFBNAME(UnnaturalStippleFS)
493     #define cfbUnnaturalTileFS CFBNAME(UnnaturalTileFS)
494     #define cfbValidateGC CFBNAME(ValidateGC)
495     #define cfbVertS CFBNAME(VertS)
496     +#define cfbWindowPrivateIndex CFBNAME(WindowPrivateIndex)
497     #define cfbXRotatePixmap CFBNAME(XRotatePixmap)
498     #define cfbYRotatePixmap CFBNAME(YRotatePixmap)
499     #define cfbZeroPolyArcSS8Copy CFBNAME(ZeroPolyArcSSCopy)
500     diff -urN xc.orig/programs/Xserver/cfb/cfbpixmap.c xc/programs/Xserver/cfb/cfbpixmap.c
501     --- xc.orig/programs/Xserver/cfb/cfbpixmap.c 2004-04-23 12:00:12.000000000 -0700
502     +++ xc/programs/Xserver/cfb/cfbpixmap.c 2004-12-12 20:34:24.868020976 -0800
503     @@ -60,8 +60,6 @@
504     #include "cfb.h"
505     #include "cfbmskbits.h"
506    
507     -extern CfbBits endtab[];
508     -
509     PixmapPtr
510     cfbCreatePixmap (pScreen, width, height, depth)
511     ScreenPtr pScreen;
512     @@ -160,7 +158,7 @@
513     if (rep*width != PGSZ)
514     return;
515    
516     - mask = endtab[width];
517     + mask = mfbGetendtab(width);
518    
519     p = (CfbBits *)(pPixmap->devPrivate.ptr);
520     for (h=0; h < pPixmap->drawable.height; h++)
521     diff -urN xc.orig/programs/Xserver/cfb/cfbscrinit.c xc/programs/Xserver/cfb/cfbscrinit.c
522     --- xc.orig/programs/Xserver/cfb/cfbscrinit.c 2004-04-23 12:00:12.000000000 -0700
523     +++ xc/programs/Xserver/cfb/cfbscrinit.c 2004-12-12 20:34:24.868020976 -0800
524     @@ -99,7 +99,7 @@
525     pScreen->defColormap = FakeClientID(0);
526     /* let CreateDefColormap do whatever it wants for pixels */
527     pScreen->blackPixel = pScreen->whitePixel = (Pixel) 0;
528     - pScreen->QueryBestSize = mfbQueryBestSize;
529     + pScreen->QueryBestSize = mfbQueryBestSizeWeak();
530     /* SaveScreen */
531     pScreen->GetImage = cfbGetImage;
532     pScreen->GetSpans = cfbGetSpans;
533     @@ -114,8 +114,8 @@
534     pScreen->CopyWindow = cfbCopyWindow;
535     pScreen->CreatePixmap = cfbCreatePixmap;
536     pScreen->DestroyPixmap = cfbDestroyPixmap;
537     - pScreen->RealizeFont = mfbRealizeFont;
538     - pScreen->UnrealizeFont = mfbUnrealizeFont;
539     + pScreen->RealizeFont = mfbRealizeFontWeak();
540     + pScreen->UnrealizeFont = mfbUnrealizeFontWeak();
541     pScreen->CreateGC = cfbCreateGC;
542     pScreen->CreateColormap = cfbInitializeColormap;
543     pScreen->DestroyColormap = DestroyColormapNoop;
544     @@ -124,7 +124,7 @@
545     pScreen->ListInstalledColormaps = cfbListInstalledColormaps;
546     pScreen->StoreColors = StoreColorsNoop;
547     pScreen->ResolveColor = cfbResolveColor;
548     - pScreen->BitmapToRegion = mfbPixmapToRegion;
549     + pScreen->BitmapToRegion = mfbPixmapToRegionWeak();
550    
551     mfbRegisterCopyPlaneProc (pScreen, cfbCopyPlane);
552     return TRUE;
553     diff -urN xc.orig/programs/Xserver/cfb/cfbtab.h xc/programs/Xserver/cfb/cfbtab.h
554     --- xc.orig/programs/Xserver/cfb/cfbtab.h 2004-04-23 12:00:12.000000000 -0700
555     +++ xc/programs/Xserver/cfb/cfbtab.h 2004-12-12 20:34:24.869020824 -0800
556     @@ -4,7 +4,9 @@
557     #define _CFBTAB_H_
558    
559     /* prototypes */
560     +#if 0
561     extern int starttab[32], endtab[32];
562     extern unsigned int partmasks[32][32];
563     +#endif
564    
565     #endif /* _CFBTAB_H_ */
566     diff -urN xc.orig/programs/Xserver/cfb/cfbteblt8.c xc/programs/Xserver/cfb/cfbteblt8.c
567     --- xc.orig/programs/Xserver/cfb/cfbteblt8.c 2004-04-23 12:00:12.000000000 -0700
568     +++ xc/programs/Xserver/cfb/cfbteblt8.c 2004-12-12 20:34:24.869020824 -0800
569     @@ -160,7 +160,6 @@
570     #endif
571    
572     #ifdef USE_LEFTBITS
573     -extern CfbBits endtab[];
574    
575     #define IncChar(c) (c = (glyphPointer) (((char *) c) + glyphBytes))
576    
577     @@ -408,7 +407,7 @@
578     #endif
579    
580     #ifdef USE_LEFTBITS
581     - glyphMask = endtab[widthGlyph];
582     + glyphMask = mfbGetendtab(widthGlyph);
583     glyphBytes = GLYPHWIDTHBYTESPADDED(*ppci);
584     #endif
585    
586     diff -urN xc.orig/programs/Xserver/cfb/cfbunmap.h xc/programs/Xserver/cfb/cfbunmap.h
587     --- xc.orig/programs/Xserver/cfb/cfbunmap.h 2003-11-25 11:28:27.000000000 -0800
588     +++ xc/programs/Xserver/cfb/cfbunmap.h 2004-12-12 20:34:24.871020520 -0800
589     @@ -93,13 +93,17 @@
590     #undef cfbFillSpanTileOddGeneral
591     #undef cfbFinishScreenInit
592     #undef cfbGCFuncs
593     +#undef cfbGCPrivateIndex
594     #undef cfbGetImage
595     #undef cfbGetScreenPixmap
596     #undef cfbGetSpans
597     #undef cfbHorzS
598     #undef cfbImageGlyphBlt8
599     +#undef cfbInitializeColormap
600     +#undef cfbInstallColormap
601     #undef cfbLineSD
602     #undef cfbLineSS
603     +#undef cfbListInstalledColormaps
604     #undef cfbMapWindow
605     #undef cfbMatchCommon
606     #undef cfbNonTEOps
607     @@ -115,6 +119,7 @@
608     #undef cfbPositionWindow
609     #undef cfbPutImage
610     #undef cfbReduceRasterOp
611     +#undef cfbResolveColor
612     #undef cfbRestoreAreas
613     #undef cfbSaveAreas
614     #undef cfbScreenInit
615     @@ -135,11 +140,13 @@
616     #undef cfbTEOps1Rect
617     #undef cfbTile32FSCopy
618     #undef cfbTile32FSGeneral
619     +#undef cfbUninstallColormap
620     #undef cfbUnmapWindow
621     #undef cfbUnnaturalStippleFS
622     #undef cfbUnnaturalTileFS
623     #undef cfbValidateGC
624     #undef cfbVertS
625     +#undef cfbWindowPrivateIndex
626     #undef cfbXRotatePixmap
627     #undef cfbYRotatePixmap
628     #undef cfbZeroPolyArcSS8Copy
629     diff -urN xc.orig/programs/Xserver/mfb/maskbits.c xc/programs/Xserver/mfb/maskbits.c
630     --- xc.orig/programs/Xserver/mfb/maskbits.c 2004-07-30 13:30:57.000000000 -0700
631     +++ xc/programs/Xserver/mfb/maskbits.c 2004-12-12 20:34:24.873020216 -0800
632     @@ -1053,5 +1053,9 @@
633     { O,O,O,I, }, /* set 0xf 1 */
634     };
635    
636     +mergeRopPtr mergeGetRopBits(int i) {
637     + return &mergeRopBits[i];
638     +}
639     +
640     #undef O
641     #undef I
642     diff -urN xc.orig/programs/Xserver/mfb/maskbits.h xc/programs/Xserver/mfb/maskbits.h
643     --- xc.orig/programs/Xserver/mfb/maskbits.h 2004-07-30 13:30:57.000000000 -0700
644     +++ xc/programs/Xserver/mfb/maskbits.h 2004-12-12 20:34:24.874020064 -0800
645     @@ -396,7 +396,7 @@
646     else \
647     { \
648     register int d = PPW-(x); \
649     - *(pdst) = (*(pdst) & endtab[x]) | (SCRRIGHT((src), x)); \
650     + *(pdst) = (*(pdst) & mfbGetendtab(x)) | (SCRRIGHT((src), x)); \
651     (pdst)[1] = ((pdst)[1] & mfbGetstarttab(n)) | \
652     (SCRLEFT(src, d) & mfbGetendtab(n)); \
653     } \
654     diff -urN xc.orig/programs/Xserver/mfb/mergerop.h xc/programs/Xserver/mfb/mergerop.h
655     --- xc.orig/programs/Xserver/mfb/mergerop.h 2004-04-23 12:54:25.000000000 -0700
656     +++ xc/programs/Xserver/mfb/mergerop.h 2004-12-12 20:34:24.875019912 -0800
657     @@ -39,6 +39,7 @@
658     } mergeRopRec, *mergeRopPtr;
659    
660     extern mergeRopRec mergeRopBits[16];
661     +extern mergeRopPtr mergeGetRopBits(int i);
662    
663     #if defined(PPW) && defined(PGSZ) && (PPW != PGSZ) /* cfb */
664     #define DeclareMergeRop() MfbBits _ca1 = 0, _cx1 = 0, _ca2 = 0, _cx2 = 0;
665     @@ -59,7 +60,7 @@
666     MfbBits _pm; \
667     mergeRopPtr _bits; \
668     _pm = PFILL(pm); \
669     - _bits = &mergeRopBits[alu]; \
670     + _bits = mergeGetRopBits(alu); \
671     _ca1 = _bits->ca1 & _pm; \
672     _cx1 = _bits->cx1 | ~_pm; \
673     _ca2 = _bits->ca2 & _pm; \
674     @@ -70,7 +71,7 @@
675     #define InitializeMergeRop24(alu,pm) {\
676     register int i; \
677     register MfbBits _pm = (pm) & 0xFFFFFF; \
678     - mergeRopPtr _bits = &mergeRopBits[alu]; \
679     + mergeRopPtr _bits = mergeGetRopBits(alu); \
680     MfbBits _bits_ca1 = _bits->ca1; \
681     MfbBits _bits_cx1 = _bits->cx1; \
682     MfbBits _bits_ca2 = _bits->ca2; \
683     @@ -88,7 +89,7 @@
684     #define InitializeMergeRop24(alu,pm) {\
685     register int i; \
686     register MfbBits _pm = (pm) & cfbmask[0]; \
687     - mergeRopPtr _bits = &mergeRopBits[alu]; \
688     + mergeRopPtr _bits = mergeGetRopBits(alu); \
689     MfbBits _bits_ca1 = _bits->ca1 & cfbmask[0]; \
690     MfbBits _bits_cx1 = _bits->cx1 & cfbmask[0]; \
691     MfbBits _bits_ca2 = _bits->ca2 & cfbmask[0]; \
692     @@ -111,7 +112,7 @@
693     #else /* mfb */
694     #define InitializeMergeRop(alu,pm) {\
695     mergeRopPtr _bits; \
696     - _bits = &mergeRopBits[alu]; \
697     + _bits = mergeGetRopBits(alu); \
698     _ca1 = _bits->ca1; \
699     _cx1 = _bits->cx1; \
700     _ca2 = _bits->ca2; \
701     @@ -328,7 +329,7 @@
702     #define MROP_DECLARE_REG() register MROP_DECLARE()
703     #define MROP_INITIALIZE(alu,pm) { \
704     mergeRopPtr _bits; \
705     - _bits = &mergeRopBits[alu]; \
706     + _bits = mergeGetRopBits(alu); \
707     _ca1 = _bits->ca1; \
708     _cx1 = _bits->cx1; \
709     }
710     diff -urN xc.orig/programs/Xserver/mfb/mfb.h xc/programs/Xserver/mfb/mfb.h
711     --- xc.orig/programs/Xserver/mfb/mfb.h 2004-07-30 13:30:57.000000000 -0700
712     +++ xc/programs/Xserver/mfb/mfb.h 2004-12-12 20:34:24.875019912 -0800
713     @@ -64,7 +64,7 @@
714     #include "mibstore.h"
715    
716     extern int InverseAlu[];
717     -
718     +extern int mfbGetInverseAlu(int i);
719    
720     /* warning: PixelType definition duplicated in maskbits.h */
721     #ifndef PixelType
722     @@ -229,6 +229,13 @@
723     extern RegionPtr mfbPixmapToRegion(
724     PixmapPtr /*pPix*/
725     );
726     +
727     +#ifndef MFB_PROTOTYPES_ONLY
728     +typedef RegionPtr (*mfbPixmapToRegionProc)(PixmapPtr);
729     +
730     +extern mfbPixmapToRegionProc *mfbPixmapToRegionWeak(void);
731     +#endif
732     +
733     /* mfbcmap.c */
734    
735     extern int mfbListInstalledColormaps(
736     @@ -371,6 +378,15 @@
737     ScreenPtr /*pscr*/,
738     FontPtr /*pFont*/
739     );
740     +
741     +#ifndef MFB_PROTOTYPES_ONLY
742     +typedef void (*mfbRealizeFontProc)(ScreenPtr, FontPtr);
743     +typedef void (*mfbUnrealizeFontProc)(ScreenPtr, FontPtr);
744     +
745     +extern mfbRealizeFontProc *mfbRealizeFontWeak(void);
746     +extern mfbUnrealizeFontProc *mfbUnrealizeFontWeak(void);
747     +#endif
748     +
749     /* mfbgc.c */
750    
751     extern Bool mfbCreateGC(
752     @@ -490,6 +506,14 @@
753     unsigned short * /*pheight*/,
754     ScreenPtr /*pScreen*/
755     );
756     +
757     +#ifndef MFB_PROTOTYPES_ONLY
758     +typedef void (*mfbQueryBestSizeProc)(int, unsigned short *, unsigned short *,
759     + ScreenPtr);
760     +
761     +extern mfbQueryBestSizeProc *mfbQueryBestSizeWeak(void);
762     +#endif
763     +
764     /* mfbpablack.c */
765    
766     extern void mfbSolidBlackArea(
767     @@ -680,6 +704,14 @@
768     int /*xOrg*/,
769     int /*yOrg*/
770     );
771     +
772     +#ifndef MFB_PROTOTYPES_ONLY
773     +typedef void (*mfbPushPixelsProc)(GCPtr, PixmapPtr, DrawablePtr, int, int,
774     + int, int);
775     +
776     +extern mfbPushPixelsProc *mfbPushPixelsWeak(void);
777     +#endif
778     +
779     /* mfbscrclse.c */
780    
781     extern Bool mfbCloseScreen(
782     diff -urN xc.orig/programs/Xserver/mfb/mfbclip.c xc/programs/Xserver/mfb/mfbclip.c
783     --- xc.orig/programs/Xserver/mfb/mfbclip.c 2004-04-23 12:54:25.000000000 -0700
784     +++ xc/programs/Xserver/mfb/mfbclip.c 2004-12-12 20:34:24.876019760 -0800
785     @@ -268,3 +268,9 @@
786     #endif
787     return(pReg);
788     }
789     +
790     +mfbPixmapToRegionProc *
791     +mfbPixmapToRegionWeak(void)
792     +{
793     + return mfbPixmapToRegion;
794     +}
795     diff -urN xc.orig/programs/Xserver/mfb/mfbfont.c xc/programs/Xserver/mfb/mfbfont.c
796     --- xc.orig/programs/Xserver/mfb/mfbfont.c 2003-11-14 08:48:57.000000000 -0800
797     +++ xc/programs/Xserver/mfb/mfbfont.c 2004-12-12 20:34:24.876019760 -0800
798     @@ -62,6 +62,12 @@
799     return (TRUE);
800     }
801    
802     +mfbRealizeFontProc *
803     +mfbRealizeFontWeak(void)
804     +{
805     + return mfbRealizeFont;
806     +}
807     +
808     /*ARGSUSED*/
809     Bool
810     mfbUnrealizeFont( pscr, pFont)
811     @@ -70,3 +76,9 @@
812     {
813     return (TRUE);
814     }
815     +
816     +mfbUnrealizeFontProc *
817     +mfbUnrealizeFontWeak(void)
818     +{
819     + return mfbUnrealizeFont;
820     +}
821     diff -urN xc.orig/programs/Xserver/mfb/mfbgc.c xc/programs/Xserver/mfb/mfbgc.c
822     --- xc.orig/programs/Xserver/mfb/mfbgc.c 2004-04-23 12:54:25.000000000 -0700
823     +++ xc/programs/Xserver/mfb/mfbgc.c 2004-12-12 20:34:24.877019608 -0800
824     @@ -1454,6 +1454,12 @@
825     GXset
826     };
827    
828     +int mfbGetInverseAlu(i)
829     + int i;
830     +{
831     + return InverseAlu[i];
832     +}
833     +
834     int
835     mfbReduceRop(alu, src)
836     register int alu;
837     diff -urN xc.orig/programs/Xserver/mfb/mfbmisc.c xc/programs/Xserver/mfb/mfbmisc.c
838     --- xc.orig/programs/Xserver/mfb/mfbmisc.c 2003-11-14 08:48:57.000000000 -0800
839     +++ xc/programs/Xserver/mfb/mfbmisc.c 2004-12-12 20:34:24.877019608 -0800
840     @@ -89,3 +89,8 @@
841     }
842     }
843    
844     +mfbQueryBestSizeProc *
845     +mfbQueryBestSizeWeak(void)
846     +{
847     + return mfbQueryBestSize;
848     +}
849     diff -urN xc.orig/programs/Xserver/mfb/mfbpushpxl.c xc/programs/Xserver/mfb/mfbpushpxl.c
850     --- xc.orig/programs/Xserver/mfb/mfbpushpxl.c 2004-04-23 12:54:25.000000000 -0700
851     +++ xc/programs/Xserver/mfb/mfbpushpxl.c 2004-12-12 20:34:24.878019456 -0800
852     @@ -276,3 +276,8 @@
853     (*pGC->ops->FillSpans)(pDrawable, pGC, ipt, pt, width, TRUE);
854     }
855     }
856     +
857     +mfbPushPixelsProc *mfbPushPixelsWeak(void)
858     +{
859     + return mfbPushPixels;
860     +}