Package: xserver-xfree86
Version: 4.3.0.dfsg.1-10
Severity: important
Tags: patch

ia64 needs an extra cache flush to ensure module text is coherent in
memory when loaded through the elfloader.  The mprotect alignment is
backported from existing upstream code.  The patch below brings this
section of code in line w/ current CVS HEAD for X.org.

        Alex

-- 
Alex Williamson                             HP Linux & Open Source Lab

--- xc/programs/Xserver/hw/xfree86/common/compiler.h    2005-03-31 
21:34:04.000000000 -0700
+++ xc/programs/Xserver/hw/xfree86/common/compiler.h    2005-03-31 
21:14:44.000000000 -0700
@@ -436,7 +436,7 @@
  */
 #    define ia64_flush_cache(Addr) \
        __asm__ __volatile__ ( \
-               "fc %0;;;" \
+               "fc.i %0;;;" \
                "sync.i;;;" \
                "mf;;;" \
                "srlz.i;;;" \
--- xc/programs/Xserver/hw/xfree86/loader/elfloader.c   2005-03-31 
21:34:05.000000000 -0700
+++ xc/programs/Xserver/hw/xfree86/loader/elfloader.c   2005-03-31 
22:22:46.000000000 -0700
@@ -2738,8 +2738,23 @@
        switch (SecType(i)) {
 #if defined(linux) || defined(__OpenBSD__)
        case SHT_PROGBITS:
-           mprotect(elffile->lsection[j].saddr, SecSize(i), 
-                    PROT_READ|PROT_WRITE|PROT_EXEC);
+            {
+               unsigned long page_size = getpagesize();
+               unsigned long round;
+
+               round = (unsigned long)(elffile->lsection[j].saddr) & 
(page_size-1);
+               mprotect(elffile->lsection[j].saddr - round,
+                   (SecSize(i)+round+page_size-1) & ~(page_size-1),
+                   PROT_READ|PROT_WRITE|PROT_EXEC);
+          }
+#ifdef __ia64__
+          {
+               int k;
+               for (k = 0; k < SecSize(i); k += 32)
+                   ia64_flush_cache(elffile->lsection[j].saddr+k);
+               ia64_flush_cache(elffile->lsection[j].saddr+SecSize(i)-1);
+          }
+#endif
            break;
 #endif
        case SHT_SYMTAB:




-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to