I have a set of instructions for X floating about as an email.
That threw up the following:

The kernel (If you are trying for X and DRI:)

1. The only acceptable mention of DRM in the kernel is
# CONFIG_DRM is not set
Anything else breaks the DRM code. Don't ask me - I just found
out. Mebbe a line in the book on that page?

2. You need to keep the compiled Xorg source, and the compiled
kernel source if you are to have a hope of getting the DRM
functional. Mebbe a line into the book on that as well?

3. You also may need 'forced unloading of kernel modules' if you
have framebuffer support compiled in, and want DRI when in X.

4. A comment to include CONFIG_PAX_NOELFRELOCS might be based on
the rather vitriolic set-to that was 
http://bugs.freedesktop.org/show_bug.cgi?id=4197
I gather most have it, but it seems like a must-have.

If the X instructions work for others, the book might usefully
base something on them. Even if you don't, libGL.so.1.2 might be
checked for textrels (readelf -d |grep TEXTREL) on your current
build.

Here's the mesa-6.4-pic-notextrel.patch
-- 

        With best Regards,


        Declan Moriarty.
diff -urp -x depend Mesa-6.4-old/configs/linux-dri-x86 
Mesa-6.4/configs/linux-dri-x86
--- Mesa-6.4-old/configs/linux-dri-x86  2005-11-30 11:07:47.000000000 +0100
+++ Mesa-6.4/configs/linux-dri-x86      2005-11-30 12:06:46.000000000 +0100
@@ -5,9 +5,6 @@ include $(TOP)/configs/linux-dri
 
 CONFIG_NAME = linux-dri-x86
 
-# Unnecessary on x86, generally.
-PIC_FLAGS = 
-
 # Add -m32 to CFLAGS:
 ARCH_FLAGS = -m32
 
diff -urp -x depend Mesa-6.4-old/src/mesa/x86/glapi_x86.S 
Mesa-6.4/src/mesa/x86/glapi_x86.S
--- Mesa-6.4-old/src/mesa/x86/glapi_x86.S       2005-10-21 00:52:17.000000000 
+0200
+++ Mesa-6.4/src/mesa/x86/glapi_x86.S   2005-11-30 13:14:11.000000000 +0100
@@ -82,7 +82,7 @@ GL_PREFIX(fn, fn_alt):                                        
\
 ALIGNTEXT16;                                           \
 GLOBL_FN(GL_PREFIX(fn, fn_alt));                       \
 GL_PREFIX(fn, fn_alt):                                 \
-       MOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;  \
+       CALL(GL_PREFIX(get_dispatchbase, get_dispatchbase)) ;\
        TEST_L(EAX, EAX) ;                              \
        JE(1f) ;                                        \
        JMP(GL_OFFSET(off)) ;                           \
@@ -93,7 +93,7 @@ GL_PREFIX(fn, fn_alt):                                        
\
 ALIGNTEXT16;                                           \
 GLOBL_FN(GL_PREFIX(fn, fn_alt));                       \
 GL_PREFIX(fn, fn_alt):                                 \
-       MOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;  \
+       CALL(GL_PREFIX(get_dispatchbase, get_dispatchbase)) ;\
        TEST_L(EAX, EAX) ;                              \
        JE(1f) ;                                        \
        JMP(GL_OFFSET(off)) ;                           \
@@ -104,7 +104,7 @@ GL_PREFIX(fn, fn_alt):                                      
\
 ALIGNTEXT16;                                           \
 GLOBL_FN(GL_PREFIX(fn, fn_alt));                       \
 GL_PREFIX(fn, fn_alt):                                 \
-       MOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ;  \
+       CALL(GL_PREFIX(get_dispatchbase, get_dispatchbase)) ;\
        JMP(GL_OFFSET(off))
 #endif
 
@@ -119,6 +119,14 @@ GL_PREFIX(fn, fn_alt):                                     
\
 
 SEG_TEXT
 
+GL_PREFIX(get_dispatchbase, get_dispatchbase):
+       /* store eip then the dispatch table base in eax */
+       MOV_L(CONST(_GLOBAL_OFFSET_TABLE_), EDX)
+       MOV_L(REGIND(ESP), EAX)
+       ADD_L(REGOFF(-4, EAX), EAX)
+       MOV_L(REGBID(EAX, EDX, GLNAME(_glapi_Dispatch)@GOTOFF), EAX)
+       RET
+
 #ifdef GLX_USE_TLS
 
        GLOBL   GLNAME(_x86_get_dispatch)
@@ -135,9 +143,13 @@ EXTERN GLNAME(pthread_getspecific)
 
 ALIGNTEXT16
 GLNAME(_x86_get_dispatch):
+       MOV_L(CONST(_GLOBAL_OFFSET_TABLE_), EDX)
+       MOV_L(REGIND(ESP), EAX)
+       ADD_L(REGOFF(-4, EAX), EAX)
        SUB_L(CONST(24), ESP)
-       PUSH_L(GLNAME(_gl_DispatchTSD))
-       CALL(GLNAME(pthread_getspecific))
+       MOV_L(REGBID(EAX, EDX, GLNAME(_gl_DispatchTSD)@GOT), EAX)
+       PUSH_L(REGIND(EAX))
+       CALL(GLNAME([EMAIL PROTECTED]))
        ADD_L(CONST(28), ESP)
        RET
 #elif defined(THREADS)
diff -urp -x depend Mesa-6.4-old/src/mesa/x86/mmx_blend.S 
Mesa-6.4/src/mesa/x86/mmx_blend.S
--- Mesa-6.4-old/src/mesa/x86/mmx_blend.S       2004-04-26 12:10:25.000000000 
+0200
+++ Mesa-6.4/src/mesa/x86/mmx_blend.S   2005-11-30 11:17:29.000000000 +0100
@@ -303,7 +303,7 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 #define LLTAG(x) LLBL2(x,_min)
 
 #define INIT \
-    MOVQ       ( CONTENT(const_80), MM7 )      /* 0x80| 0x80| 0x80| 0x80| 
0x80| 0x80| 0x80| 0x80*/
+    MOVQ       ( CONTENT(REGOFF([EMAIL PROTECTED], EDX)), MM7 )        /* 
0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )                                           
                        ;\
@@ -327,7 +327,7 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 #define LLTAG(x) LLBL2(x,_max)
 
 #define INIT \
-    MOVQ       ( CONTENT(const_80), MM7 )      /* 0x80| 0x80| 0x80| 0x80| 
0x80| 0x80| 0x80| 0x80*/
+    MOVQ       ( CONTENT(REGOFF([EMAIL PROTECTED], EDX)), MM7 )        /* 
0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )                                           
                        ;\
@@ -352,7 +352,7 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 
 #define INIT \
     PXOR       ( MM0, MM0 )                    /*   0x0000  |   0x0000  |   
0x0000  |   0x0000  */     ;\
-    MOVQ       ( CONTENT(const_0080), MM7 )    /*   0x0080  |   0x0080  |   
0x0080  |   0x0080  */
+    MOVQ       ( CONTENT(REGOFF([EMAIL PROTECTED], EDX)), MM7 )        /*   
0x0080  |   0x0080  |   0x0080  |   0x0080  */
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )                                           
                        ;\
diff -urp -x depend Mesa-6.4-old/src/mesa/x86/mmx_blendtmp.h 
Mesa-6.4/src/mesa/x86/mmx_blendtmp.h
--- Mesa-6.4-old/src/mesa/x86/mmx_blendtmp.h    2005-01-04 15:33:47.000000000 
+0100
+++ Mesa-6.4/src/mesa/x86/mmx_blendtmp.h        2005-11-30 11:13:27.000000000 
+0100
@@ -12,6 +12,12 @@
  * 
  */
 ALIGNTEXT16
+
+LLBL( TAG(mesa_mmx_blend_get_eip) ):
+    /* store eip in edx */
+    MOV_L      ( REGIND(ESP), EDX )
+    RET
+
 GLOBL GLNAME( TAG(_mesa_mmx_blend) )
 HIDDEN( TAG(_mesa_mmx_blend) )
 GLNAME( TAG(_mesa_mmx_blend) ):
@@ -30,6 +36,9 @@ GLNAME( TAG(_mesa_mmx_blend) ):
     MOV_L      ( REGOFF(20, EBP), EDI )         /* rgba */
     MOV_L      ( REGOFF(24, EBP), ESI )         /* dest */
 
+    CALL       ( LLBL( TAG(mesa_mmx_blend_get_eip) ) )
+    ADD_L      ( CONST(_GLOBAL_OFFSET_TABLE_), EDX )
+
     INIT
     
     TEST_L     ( CONST(4), EDI )               /* align rgba on an 8-byte 
boundary */
diff -urp -x depend Mesa-6.4-old/src/mesa/x86/read_rgba_span_x86.S 
Mesa-6.4/src/mesa/x86/read_rgba_span_x86.S
--- Mesa-6.4-old/src/mesa/x86/read_rgba_span_x86.S      2005-06-30 
13:42:56.000000000 +0200
+++ Mesa-6.4/src/mesa/x86/read_rgba_span_x86.S  2005-11-30 12:01:02.000000000 
+0100
@@ -75,6 +75,7 @@ mask:
  * at the correct places.
  */
 
+.text
 .globl _generic_read_RGBA_span_BGRA8888_REV_MMX
 .hidden _generic_read_RGBA_span_BGRA8888_REV_MMX
        .type   _generic_read_RGBA_span_BGRA8888_REV_MMX, @function
@@ -84,8 +85,17 @@ _generic_read_RGBA_span_BGRA8888_REV_MMX
 #ifdef USE_INNER_EMMS
        emms
 #endif
+
+#ifdef __PIC__
+# undef __i686 /* gcc define gets in our way */
+       call __i686.get_pc_thunk.bx
+       addl $_GLOBAL_OFFSET_TABLE_, %ebx
+       movq    [EMAIL PROTECTED], %mm1
+       movq    [EMAIL PROTECTED], %mm2
+#else
        movq    mask, %mm1
        movq    mask+16, %mm2
+#endif
 
        movl    8(%esp), %ebx   /* source pointer */
        movl    16(%esp), %edx  /* number of pixels to copy */
@@ -182,8 +192,16 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE
 #ifdef USE_INNER_EMMS
        emms
 #endif
+
+#ifdef __PIC__
+       call __i686.get_pc_thunk.bx
+       addl $_GLOBAL_OFFSET_TABLE_, %ebx
+       movq    [EMAIL PROTECTED], %mm1
+       movq    [EMAIL PROTECTED], %mm2
+#else
        movq    mask, %mm1
        movq    mask+16, %mm2
+#endif
 
        movl    16(%esp), %ebx  /* source pointer */
        movl    24(%esp), %edx  /* number of pixels to copy */
@@ -341,8 +359,15 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE
        pushl   %esi
        pushl   %ebx
 
+#ifdef __PIC__
+       call __i686.get_pc_thunk.bx
+       addl $_GLOBAL_OFFSET_TABLE_, %ebx
+       movdqa  [EMAIL PROTECTED], %xmm1
+       movdqa  [EMAIL PROTECTED], %xmm2
+#else
        movdqa  mask, %xmm1
        movdqa  mask+16, %xmm2
+#endif
 
        movl    12(%esp), %ebx  /* source pointer */
        movl    20(%esp), %edx  /* number of pixels to copy */
@@ -521,18 +546,30 @@ alpha:    .long   0x00000000
        .type   _generic_read_RGBA_span_RGB565_MMX, @function
 
 _generic_read_RGBA_span_RGB565_MMX:
+       pushl   %ebx
 
 #ifdef USE_INNER_EMMS
        emms
 #endif
 
-       movl    4(%esp), %eax   /* source pointer */
-       movl    8(%esp), %edx   /* destination pointer */
-       movl    12(%esp), %ecx  /* number of pixels to copy */
+#ifdef __PIC__
+       call __i686.get_pc_thunk.bx
+       addl $_GLOBAL_OFFSET_TABLE_, %ebx
+#endif
 
+       movl    8(%esp), %eax   /* source pointer */
+       movl    12(%esp), %edx  /* destination pointer */
+       movl    16(%esp), %ecx  /* number of pixels to copy */
+
+#ifdef __PIC__
+       movq    [EMAIL PROTECTED], %mm5
+       movq    [EMAIL PROTECTED], %mm6
+       movq    [EMAIL PROTECTED], %mm7
+#else
        movq    mask_565, %mm5
        movq    prescale, %mm6
        movq    scale, %mm7
+#endif
 
        sarl    $2, %ecx
        jle     .L01            /* Bail early if the count is negative. */
@@ -581,9 +618,13 @@ _generic_read_RGBA_span_RGB565_MMX:
        /* Always set the alpha value to 0xff.
         */
 
+#ifdef __PIC__
+       por     [EMAIL PROTECTED], %mm0
+       por     [EMAIL PROTECTED], %mm2
+#else
        por     alpha, %mm0
        por     alpha, %mm2
-
+#endif
 
        /* Pack the 16-bit values to 8-bit values and store the converted
         * pixel data.
@@ -609,8 +650,13 @@ _generic_read_RGBA_span_RGB565_MMX:
        pmulhuw %mm7, %mm0
        pmulhuw %mm7, %mm2
 
+#ifdef __PIC__
+       por     [EMAIL PROTECTED], %mm0
+       por     [EMAIL PROTECTED], %mm2
+#else
        por     alpha, %mm0
        por     alpha, %mm2
+#endif
 
        packuswb        %mm2, %mm0
 
@@ -626,7 +672,7 @@ _generic_read_RGBA_span_RGB565_MMX:
         * there is either 2 or 3 left, process 2.
          */
 
-       movl    12(%esp), %ecx
+       movl    16(%esp), %ecx
        testl   $0x02, %ecx
        je      .L04
 
@@ -647,8 +693,13 @@ _generic_read_RGBA_span_RGB565_MMX:
        pmulhuw %mm7, %mm0
        pmulhuw %mm7, %mm2
 
+#ifdef __PIC__
+       por     [EMAIL PROTECTED], %mm0
+       por     [EMAIL PROTECTED], %mm2
+#else
        por     alpha, %mm0
        por     alpha, %mm2
+#endif
 
        packuswb        %mm2, %mm0
 
@@ -675,7 +726,11 @@ _generic_read_RGBA_span_RGB565_MMX:
 #endif
        pmulhuw %mm7, %mm0
 
+#ifdef __PIC__
+       por     [EMAIL PROTECTED], %mm0
+#else
        por     alpha, %mm0
+#endif
 
        packuswb        %mm0, %mm0
 
@@ -685,5 +740,17 @@ _generic_read_RGBA_span_RGB565_MMX:
 #ifdef USE_INNER_EMMS
        emms
 #endif
+       popl    %ebx
+       ret
+
+#ifdef __PIC__
+       .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
+.globl __i686.get_pc_thunk.bx
+       .hidden  __i686.get_pc_thunk.bx
+       .type    __i686.get_pc_thunk.bx,@function
+__i686.get_pc_thunk.bx:
+       movl (%esp), %ebx
        ret
+#endif
+
 #endif /* !defined(__DJGPP__) && !defined(__MINGW32__) */
-- 
http://linuxfromscratch.org/mailman/listinfo/hlfs-dev
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to