When not using dlopen ia64 needs an extra cache flush to ensure the icache
is coherent when modules are loaded (Alex Williamson).
This commit is contained in:
parent
55dc930a18
commit
231c00e8fb
|
@ -478,7 +478,7 @@ __ustw (unsigned long r5, unsigned short * r11)
|
||||||
# ifndef __INTEL_COMPILER
|
# ifndef __INTEL_COMPILER
|
||||||
# define ia64_flush_cache(Addr) \
|
# define ia64_flush_cache(Addr) \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"fc %0;;;" \
|
"fc.i %0;;;" \
|
||||||
"sync.i;;;" \
|
"sync.i;;;" \
|
||||||
"mf;;;" \
|
"mf;;;" \
|
||||||
"srlz.i;;;" \
|
"srlz.i;;;" \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.3 2004/10/30 20:33:43 alanc Exp $ */
|
/* $XdotOrg: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.4 2004/11/09 15:58:41 ajax Exp $ */
|
||||||
/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.61tsi Exp $ */
|
/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/elfloader.c,v 1.61tsi Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2799,6 +2799,14 @@ ELFCollectSections(ELFModulePtr elffile, int pass, int *totalsize,
|
||||||
mprotect( (char *)elffile->lsection[j].saddr - round,
|
mprotect( (char *)elffile->lsection[j].saddr - round,
|
||||||
SecSize(i) + round, PROT_READ | PROT_WRITE | PROT_EXEC);
|
SecSize(i) + round, 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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case SHT_SYMTAB:
|
case SHT_SYMTAB:
|
||||||
|
|
Loading…
Reference in New Issue