summaryrefslogtreecommitdiff
path: root/hw/xfree86/loader/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xfree86/loader/loader.c')
-rw-r--r--hw/xfree86/loader/loader.c1001
1 files changed, 525 insertions, 476 deletions
diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c
index e09fa50b0..39ba510a1 100644
--- a/hw/xfree86/loader/loader.c
+++ b/hw/xfree86/loader/loader.c
@@ -1,7 +1,6 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/loader.c,v 1.63 2002/11/25 14:05:03 eich Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/loader/loader.c,v 1.71 2003/11/06 18:38:13 tsi Exp $ */
/*
- *
* Copyright 1995-1998 by Metro Link, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
@@ -22,6 +21,33 @@
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
+/*
+ * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
@@ -35,7 +61,7 @@
#include <string.h>
#if defined(linux) && \
(defined(__alpha__) || defined(__powerpc__) || defined(__ia64__) \
- || defined(__x86_64__))
+ || defined(__AMD64__))
#include <malloc.h>
#endif
#include <stdarg.h>
@@ -73,7 +99,7 @@ int check_unresolved_sema = 0;
#endif
#ifdef __UNIXOS2__
-void * os2ldcalloc(size_t,size_t);
+void *os2ldcalloc(size_t, size_t);
#endif
#ifdef HANDLE_IN_HASH_ENTRY
@@ -84,11 +110,11 @@ void * os2ldcalloc(size_t,size_t);
#define MAX_HANDLE 256
#define HANDLE_FREE 0
#define HANDLE_USED 1
-static char freeHandles[MAX_HANDLE] ;
-static int refCount[MAX_HANDLE] ;
+static char freeHandles[MAX_HANDLE];
+static int refCount[MAX_HANDLE];
#endif
-#if defined(__sparc__) && defined(__GNUC__)
+#if defined(__sparc__) && defined(__GNUC__) && !defined(__FreeBSD__)
# define SYMFUNCDOT(func) { "." #func, (funcptr)&__sparc_dot_ ## func },
# if !defined(__OpenBSD__)
# define SYMFUNCDOT89(func) { "." #func, (funcptr)&func ## _sparcv89 },
@@ -108,24 +134,25 @@ DEFFUNCDOT(div)
DEFFUNCDOT(udiv)
#ifdef linux
static LOOKUP SparcV89LookupTab[] = {
- SYMFUNCDOT89(rem)
- SYMFUNCDOT89(urem)
- SYMFUNCDOT89(mul)
- SYMFUNCDOT89(umul)
- SYMFUNCDOT89(div)
- SYMFUNCDOT89(udiv)
- { 0, 0 }
+ SYMFUNCDOT89(rem)
+ SYMFUNCDOT89(urem)
+ SYMFUNCDOT89(mul)
+ SYMFUNCDOT89(umul)
+ SYMFUNCDOT89(div)
+ SYMFUNCDOT89(udiv)
+ {0, 0}
};
#endif
static LOOKUP SparcLookupTab[] = {
- SYMFUNCDOT(rem)
- SYMFUNCDOT(urem)
- SYMFUNCDOT(mul)
- SYMFUNCDOT(umul)
- SYMFUNCDOT(div)
- SYMFUNCDOT(udiv)
- { 0, 0 }
+ SYMFUNCDOT(rem)
+ SYMFUNCDOT(urem)
+ SYMFUNCDOT(mul)
+ SYMFUNCDOT(umul)
+ SYMFUNCDOT(div)
+ SYMFUNCDOT(udiv)
+ {0, 0}
};
+
#ifdef linux
#if defined(__GNUC__) && defined(__GLIBC__)
#define HWCAP_SPARC_MULDIV 8
@@ -138,29 +165,32 @@ sparcUseHWMulDiv(void)
FILE *f;
char buffer[1024];
char *p;
+
#if defined(__GNUC__) && defined(__GLIBC__)
unsigned long *hwcap;
+
__asm(".weak _dl_hwcap");
-
+
hwcap = &_dl_hwcap;
- __asm("" : "=r" (hwcap) : "0" (hwcap));
+ __asm("": "=r"(hwcap):"0"(hwcap));
if (hwcap) {
- if (*hwcap & HWCAP_SPARC_MULDIV)
- return 1;
- else
- return 0;
+ if (*hwcap & HWCAP_SPARC_MULDIV)
+ return 1;
+ else
+ return 0;
}
#endif
- f = fopen("/proc/cpuinfo","r");
- if (!f) return 0;
+ f = fopen("/proc/cpuinfo", "r");
+ if (!f)
+ return 0;
while (fgets(buffer, 1024, f) != NULL) {
- if (!strncmp (buffer, "type", 4)) {
- p = strstr (buffer, "sun4");
- if (p && (p[4] == 'u' || p[4] == 'd' || p[4] == 'm')) {
- fclose(f);
- return 1;
- }
- }
+ if (!strncmp(buffer, "type", 4)) {
+ p = strstr(buffer, "sun4");
+ if (p && (p[4] == 'u' || p[4] == 'd' || p[4] == 'm')) {
+ fclose(f);
+ return 1;
+ }
+ }
}
fclose(f);
return 0;
@@ -191,8 +221,8 @@ LDRCommonPtr ldrCommons;
int nCommons;
typedef struct {
- int num;
- const char ** list;
+ int num;
+ const char **list;
} symlist;
/*
@@ -210,119 +240,127 @@ static int fatalReqSym = 0;
static int _GetModuleType(int, long);
static loaderPtr _LoaderListPush(void);
static loaderPtr _LoaderListPop(int);
-/*ARGSUSED*/
-static void ARCHIVEResolveSymbols(void *unused) {}
-/*ARGSUSED*/
-static int ARCHIVECheckForUnresolved(void *v) { return 0; }
-/*ARGSUSED*/
-static char *ARCHIVEAddressToSection(void *modptr, unsigned long address)
-{ return NULL; }
-/*ARGSUSED*/
-static void ARCHIVEUnload(void *unused2) {}
+ /*ARGSUSED*/ static void
+ARCHIVEResolveSymbols(void *unused)
+{
+}
+ /*ARGSUSED*/ static int
+ARCHIVECheckForUnresolved(void *v)
+{
+ return 0;
+}
+ /*ARGSUSED*/ static char *
+ARCHIVEAddressToSection(void *modptr, unsigned long address)
+{
+ return NULL;
+}
+ /*ARGSUSED*/ static void
+ARCHIVEUnload(void *unused2)
+{
+}
/*
* Array containing entry points for different formats.
*/
static loader_funcs funcs[] = {
- /* LD_ARCHIVE */
- {ARCHIVELoadModule,
- ARCHIVEResolveSymbols,
- ARCHIVECheckForUnresolved,
- ARCHIVEAddressToSection,
- ARCHIVEUnload, {0,0,0,0,0}},
- /* LD_ELFOBJECT */
- {ELFLoadModule,
- ELFResolveSymbols,
- ELFCheckForUnresolved,
- ELFAddressToSection,
- ELFUnloadModule, {0,0,0,0,0}},
- /* LD_COFFOBJECT */
- {COFFLoadModule,
- COFFResolveSymbols,
- COFFCheckForUnresolved,
- COFFAddressToSection,
- COFFUnloadModule, {0,0,0,0,0}},
- /* LD_XCOFFOBJECT */
- {COFFLoadModule,
- COFFResolveSymbols,
- COFFCheckForUnresolved,
- COFFAddressToSection,
- COFFUnloadModule, {0,0,0,0,0}},
- /* LD_AOUTOBJECT */
- {AOUTLoadModule,
- AOUTResolveSymbols,
- AOUTCheckForUnresolved,
- AOUTAddressToSection,
- AOUTUnloadModule, {0,0,0,0,0}},
- /* LD_AOUTDLOBJECT */
+ /* LD_ARCHIVE */
+ {ARCHIVELoadModule,
+ ARCHIVEResolveSymbols,
+ ARCHIVECheckForUnresolved,
+ ARCHIVEAddressToSection,
+ ARCHIVEUnload, {0, 0, 0, 0, 0}},
+ /* LD_ELFOBJECT */
+ {ELFLoadModule,
+ ELFResolveSymbols,
+ ELFCheckForUnresolved,
+ ELFAddressToSection,
+ ELFUnloadModule, {0, 0, 0, 0, 0}},
+ /* LD_COFFOBJECT */
+ {COFFLoadModule,
+ COFFResolveSymbols,
+ COFFCheckForUnresolved,
+ COFFAddressToSection,
+ COFFUnloadModule, {0, 0, 0, 0, 0}},
+ /* LD_XCOFFOBJECT */
+ {COFFLoadModule,
+ COFFResolveSymbols,
+ COFFCheckForUnresolved,
+ COFFAddressToSection,
+ COFFUnloadModule, {0, 0, 0, 0, 0}},
+ /* LD_AOUTOBJECT */
+ {AOUTLoadModule,
+ AOUTResolveSymbols,
+ AOUTCheckForUnresolved,
+ AOUTAddressToSection,
+ AOUTUnloadModule, {0, 0, 0, 0, 0}},
+ /* LD_AOUTDLOBJECT */
#ifdef DLOPEN_SUPPORT
- {DLLoadModule,
- DLResolveSymbols,
- DLCheckForUnresolved,
- ARCHIVEAddressToSection,
- DLUnloadModule, {0,0,0,0,0}},
+ {DLLoadModule,
+ DLResolveSymbols,
+ DLCheckForUnresolved,
+ ARCHIVEAddressToSection,
+ DLUnloadModule, {0, 0, 0, 0, 0}},
#else
- {AOUTLoadModule,
- AOUTResolveSymbols,
- AOUTCheckForUnresolved,
- AOUTAddressToSection,
- AOUTUnloadModule, {0,0,0,0,0}},
+ {AOUTLoadModule,
+ AOUTResolveSymbols,
+ AOUTCheckForUnresolved,
+ AOUTAddressToSection,
+ AOUTUnloadModule, {0, 0, 0, 0, 0}},
#endif
- /* LD_ELFDLOBJECT */
+ /* LD_ELFDLOBJECT */
#ifdef DLOPEN_SUPPORT
- {DLLoadModule,
- DLResolveSymbols,
- DLCheckForUnresolved,
- ARCHIVEAddressToSection,
- DLUnloadModule, {0,0,0,0,0}},
+ {DLLoadModule,
+ DLResolveSymbols,
+ DLCheckForUnresolved,
+ ARCHIVEAddressToSection,
+ DLUnloadModule, {0, 0, 0, 0, 0}},
#else
- {ELFLoadModule,
- ELFResolveSymbols,
- ELFCheckForUnresolved,
- ELFAddressToSection,
- ELFUnloadModule, {0,0,0,0,0}},
+ {ELFLoadModule,
+ ELFResolveSymbols,
+ ELFCheckForUnresolved,
+ ELFAddressToSection,
+ ELFUnloadModule, {0, 0, 0, 0, 0}},
#endif
- };
-
-int numloaders=sizeof(funcs)/sizeof(loader_funcs);
+};
+int numloaders = sizeof(funcs) / sizeof(loader_funcs);
void
LoaderInit(void)
{
const char *osname = NULL;
- LoaderAddSymbols(-1, -1, miLookupTab ) ;
- LoaderAddSymbols(-1, -1, xfree86LookupTab ) ;
- LoaderAddSymbols(-1, -1, dixLookupTab ) ;
- LoaderAddSymbols(-1, -1, fontLookupTab ) ;
- LoaderAddSymbols(-1, -1, extLookupTab );
-#ifdef __sparc__
+ LoaderAddSymbols(-1, -1, miLookupTab);
+ LoaderAddSymbols(-1, -1, xfree86LookupTab);
+ LoaderAddSymbols(-1, -1, dixLookupTab);
+ LoaderAddSymbols(-1, -1, fontLookupTab);
+ LoaderAddSymbols(-1, -1, extLookupTab);
+#if defined(__sparc__) && !defined(__FreeBSD__)
#ifdef linux
if (sparcUseHWMulDiv())
- LoaderAddSymbols(-1, -1, SparcV89LookupTab ) ;
+ LoaderAddSymbols(-1, -1, SparcV89LookupTab);
else
#endif
- LoaderAddSymbols(-1, -1, SparcLookupTab ) ;
-#endif
+ LoaderAddSymbols(-1, -1, SparcLookupTab);
+#endif
xf86MsgVerb(X_INFO, 2, "Module ABI versions:\n");
xf86ErrorFVerb(2, "\t%s: %d.%d\n", ABI_CLASS_ANSIC,
- GET_ABI_MAJOR(LoaderVersionInfo.ansicVersion),
- GET_ABI_MINOR(LoaderVersionInfo.ansicVersion));
+ GET_ABI_MAJOR(LoaderVersionInfo.ansicVersion),
+ GET_ABI_MINOR(LoaderVersionInfo.ansicVersion));
xf86ErrorFVerb(2, "\t%s: %d.%d\n", ABI_CLASS_VIDEODRV,
- GET_ABI_MAJOR(LoaderVersionInfo.videodrvVersion),
- GET_ABI_MINOR(LoaderVersionInfo.videodrvVersion));
+ GET_ABI_MAJOR(LoaderVersionInfo.videodrvVersion),
+ GET_ABI_MINOR(LoaderVersionInfo.videodrvVersion));
xf86ErrorFVerb(2, "\t%s : %d.%d\n", ABI_CLASS_XINPUT,
- GET_ABI_MAJOR(LoaderVersionInfo.xinputVersion),
- GET_ABI_MINOR(LoaderVersionInfo.xinputVersion));
+ GET_ABI_MAJOR(LoaderVersionInfo.xinputVersion),
+ GET_ABI_MINOR(LoaderVersionInfo.xinputVersion));
xf86ErrorFVerb(2, "\t%s : %d.%d\n", ABI_CLASS_EXTENSION,
- GET_ABI_MAJOR(LoaderVersionInfo.extensionVersion),
- GET_ABI_MINOR(LoaderVersionInfo.extensionVersion));
+ GET_ABI_MAJOR(LoaderVersionInfo.extensionVersion),
+ GET_ABI_MINOR(LoaderVersionInfo.extensionVersion));
xf86ErrorFVerb(2, "\t%s : %d.%d\n", ABI_CLASS_FONT,
- GET_ABI_MAJOR(LoaderVersionInfo.fontVersion),
- GET_ABI_MINOR(LoaderVersionInfo.fontVersion));
+ GET_ABI_MAJOR(LoaderVersionInfo.fontVersion),
+ GET_ABI_MINOR(LoaderVersionInfo.fontVersion));
LoaderGetOS(&osname, NULL, NULL, NULL);
if (osname)
@@ -330,13 +368,13 @@ LoaderInit(void)
#if defined(linux) && \
(defined(__alpha__) || defined(__powerpc__) || defined(__ia64__) \
- || ( defined __x86_64__ && ! defined UseMMAP && ! defined DoMMAPedMerge))
+ || ( defined __AMD64__ && ! defined UseMMAP && ! defined DoMMAPedMerge))
/*
* The glibc malloc uses mmap for large allocations anyway. This breaks
* some relocation types because the offset overflow. See loader.h for more
* details. We need to turn off this behavior here.
*/
- mallopt(M_MMAP_MAX,0);
+ mallopt(M_MMAP_MAX, 0);
#endif
}
@@ -350,84 +388,83 @@ LoaderInit(void)
static int
_GetModuleType(int fd, long offset)
{
- unsigned char buf[256]; /* long enough for the largest magic type */
+ unsigned char buf[256]; /* long enough for the largest magic type */
- if( read(fd,buf,sizeof(buf)) < 0 ) {
+ if (read(fd, buf, sizeof(buf)) < 0) {
return -1;
}
-
#ifdef DEBUG
- ErrorF("Checking module type %10s\n", buf );
- ErrorF("Checking module type %x %x %x %x\n", buf[0], buf[1], buf[2], buf[3] );
+ ErrorF("Checking module type %10s\n", buf);
+ ErrorF("Checking module type %x %x %x %x\n", buf[0], buf[1], buf[2],
+ buf[3]);
#endif
- lseek(fd,offset,SEEK_SET);
+ lseek(fd, offset, SEEK_SET);
- if (strncmp((char *) buf, ARMAG, SARMAG) == 0) {
+ if (strncmp((char *)buf, ARMAG, SARMAG) == 0) {
return LD_ARCHIVE;
}
-
#if defined(AIAMAG)
/* LynxOS PPC style archives */
- if (strncmp((char *) buf, AIAMAG, SAIAMAG) == 0) {
+ if (strncmp((char *)buf, AIAMAG, SAIAMAG) == 0) {
return LD_ARCHIVE;
}
#endif
- if (strncmp((char *) buf, ELFMAG, SELFMAG) == 0) {
- if( *((Elf32_Half *)(buf + ELFDLOFF)) == ELFDLMAG ) {
+ if (strncmp((char *)buf, ELFMAG, SELFMAG) == 0) {
+ if (*((Elf32_Half *) (buf + ELFDLOFF)) == ELFDLMAG) {
return LD_ELFDLOBJECT;
} else {
return LD_ELFOBJECT;
}
}
- if( buf[0] == 0x4c && buf[1] == 0x01 ) {
+ if (buf[0] == 0x4c && buf[1] == 0x01) {
/* I386MAGIC */
return LD_COFFOBJECT;
}
- if( buf[0] == 0x01 && buf[1] == 0xdf ) {
+ if (buf[0] == 0x01 && buf[1] == 0xdf) {
/* XCOFFMAGIC */
return LD_COFFOBJECT;
- }
- if( buf[0] == 0x0d && buf[1] == 0x01 ) {
+ }
+ if (buf[0] == 0x0d && buf[1] == 0x01) {
/* ZCOFFMAGIC (LynxOS) */
return LD_COFFOBJECT;
}
- if( buf[0] == 0x00 && buf[1] == 0x86 && buf[2] == 0x01 && buf[3] == 0x07) {
- /* AOUTMAGIC */
- return LD_AOUTOBJECT;
+ if (buf[0] == 0x00 && buf[1] == 0x86 && buf[2] == 0x01 && buf[3] == 0x07) {
+ /* AOUTMAGIC */
+ return LD_AOUTOBJECT;
}
- if (buf[0] == 0x07 && buf[1] == 0x01 && (buf[2] == 0x64 || buf[2] == 0x86))
- {
- /* AOUTMAGIC, (Linux OMAGIC, old impure format, also used by OS/2 */
- return LD_AOUTOBJECT;
+ if (buf[0] == 0x07 && buf[1] == 0x01
+ && (buf[2] == 0x64 || buf[2] == 0x86)) {
+ /* AOUTMAGIC, (Linux OMAGIC, old impure format, also used by OS/2 */
+ return LD_AOUTOBJECT;
}
- if (buf[0] == 0x07 && buf[1] == 0x01 && buf[2] == 0x00 && buf[3] == 0x00)
- {
- /* AOUTMAGIC, BSDI */
- return LD_AOUTOBJECT;
+ if (buf[0] == 0x07 && buf[1] == 0x01 && buf[2] == 0x00 && buf[3] == 0x00) {
+ /* AOUTMAGIC, BSDI */
+ return LD_AOUTOBJECT;
}
- if ((buf[0] == 0xc0 && buf[1] == 0x86) || /* big endian form */
- (buf[3] == 0xc0 && buf[2] == 0x86)) { /* little endian form */
- /* i386 shared object */
- return LD_AOUTDLOBJECT;
+ if ((buf[0] == 0xc0 && buf[1] == 0x86) || /* big endian form */
+ (buf[3] == 0xc0 && buf[2] == 0x86)) { /* little endian form */
+ /* i386 shared object */
+ return LD_AOUTDLOBJECT;
}
return LD_UNKNOWN;
}
+static int offsetbias = 0; /* offset into archive */
-static int offsetbias=0; /* offset into archive */
/*
* _LoaderFileToMem() loads the contents of a file into memory using
* the most efficient method for a platform.
*/
void *
-_LoaderFileToMem(int fd, unsigned long offset,int size, char *label)
+_LoaderFileToMem(int fd, unsigned long offset, int size, char *label)
{
#ifdef UseMMAP
- unsigned long ret;
+ unsigned long ret;
+
# ifdef MmapPageAlign
unsigned long pagesize;
unsigned long new_size;
@@ -437,7 +474,8 @@ _LoaderFileToMem(int fd, unsigned long offset,int size, char *label)
# define MMAP_PROT (PROT_READ|PROT_WRITE|PROT_EXEC)
# ifdef DEBUGMEM
- ErrorF("_LoaderFileToMem(%d,%u(%u),%d,%s)",fd,offset,offsetbias,size,label);
+ ErrorF("_LoaderFileToMem(%d,%u(%u),%d,%s)", fd, offset, offsetbias, size,
+ label);
# endif
# ifdef MmapPageAlign
pagesize = getpagesize();
@@ -446,81 +484,84 @@ _LoaderFileToMem(int fd, unsigned long offset,int size, char *label)
new_off = (offset + offsetbias) / pagesize;
new_off *= pagesize;
new_off_bias = (offset + offsetbias) - new_off;
- if ((new_off_bias + size) > new_size) new_size += pagesize;
- ret = (unsigned long) mmap(0,new_size,MMAP_PROT,MAP_PRIVATE
-# ifdef __x86_64__
- | MAP_32BIT
+ if ((new_off_bias + size) > new_size)
+ new_size += pagesize;
+ ret = (unsigned long)mmap(0, new_size, MMAP_PROT, MAP_PRIVATE
+# ifdef __AMD64__
+ | MAP_32BIT
# endif
- ,
- fd,new_off);
- if(ret == -1)
- FatalError("mmap() failed: %s\n", strerror(errno) );
+ , fd, new_off);
+ if (ret == -1)
+ FatalError("mmap() failed: %s\n", strerror(errno));
return (void *)(ret + new_off_bias);
# else
- ret = (unsigned long) mmap(0,size,MMAP_PROT,MAP_PRIVATE
-# ifdef __x86_64__
- | MAP_32BIT
+ ret = (unsigned long)mmap(0, size, MMAP_PROT, MAP_PRIVATE
+# ifdef __AMD64__
+ | MAP_32BIT
# endif
- ,
- fd,offset + offsetbias);
- if(ret == -1)
- FatalError("mmap() failed: %s\n", strerror(errno) );
+ , fd, offset + offsetbias);
+ if (ret == -1)
+ FatalError("mmap() failed: %s\n", strerror(errno));
return (void *)ret;
# endif
#else
char *ptr;
# ifdef DEBUGMEM
- ErrorF("_LoaderFileToMem(%d,%u(%u),%d,%s)",fd,offset,offsetbias,size,label);
+ ErrorF("_LoaderFileToMem(%d,%u(%u),%d,%s)", fd, offset, offsetbias, size,
+ label);
# endif
- if(size == 0){
+ if (size == 0) {
# ifdef DEBUGMEM
- ErrorF("=NULL\n",ptr);
+ ErrorF("=NULL\n", ptr);
# endif
return NULL;
}
-
# ifndef __UNIXOS2__
- if( (ptr=xf86loadercalloc(size,1)) == NULL )
- FatalError("_LoaderFileToMem() malloc failed\n" );
+ if ((ptr = xf86loadercalloc(size, 1)) == NULL)
+ FatalError("_LoaderFileToMem() malloc failed\n");
# else
- if( (ptr=os2ldcalloc(size,1)) == NULL )
- FatalError("_LoaderFileToMem() malloc failed\n" );
+ if ((ptr = os2ldcalloc(size, 1)) == NULL)
+ FatalError("_LoaderFileToMem() malloc failed\n");
# endif
# if defined(linux) && defined(__ia64__)
{
unsigned long page_size = getpagesize();
unsigned long round;
- round = (unsigned long)ptr & (page_size-1);
- mprotect(ptr - round, (size+round+page_size-1) & ~(page_size-1),
- PROT_READ|PROT_WRITE|PROT_EXEC);
+ round = (unsigned long)ptr & (page_size - 1);
+ mprotect(ptr - round,
+ (size + round + page_size - 1) & ~(page_size - 1),
+ PROT_READ | PROT_WRITE | PROT_EXEC);
}
# endif
- if(lseek(fd,offset+offsetbias,SEEK_SET)<0)
- FatalError("\n_LoaderFileToMem() lseek() failed: %s\n",strerror(errno));
+ if (lseek(fd, offset + offsetbias, SEEK_SET) < 0)
+ FatalError("\n_LoaderFileToMem() lseek() failed: %s\n",
+ strerror(errno));
- if(read(fd,ptr,size)!=size)
- FatalError("\n_LoaderFileToMem() read() failed: %s\n",strerror(errno));
+ if (read(fd, ptr, size) != size)
+ FatalError("\n_LoaderFileToMem() read() failed: %s\n",
+ strerror(errno));
# if (defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)) \
- && defined(__powerpc__)
+ && defined(__powerpc__)
/*
* Keep the instruction cache in sync with changes in the
* main memory.
*/
- {
- int i;
- for (i = 0; i < size; i += 16)
- ppc_flush_icache(ptr+i);
- ppc_flush_icache(ptr+size-1);
- }
+ {
+ int i;
+
+ for (i = 0; i < size; i += 16)
+ ppc_flush_icache(ptr + i);
+ ppc_flush_icache(ptr + size - 1);
+ }
# endif
# ifdef DEBUGMEM
- ErrorF("=%lx\n",ptr);
+ ErrorF("=%lx\n", ptr);
# endif
return (void *)ptr;
@@ -535,25 +576,26 @@ _LoaderFreeFileMem(void *addr, int size)
{
#if defined (UseMMAP) && defined (MmapPageAlign)
unsigned long pagesize = getpagesize();
- memType i_addr = (memType)addr;
+ memType i_addr = (memType) addr;
unsigned long new_size;
#endif
#ifdef DEBUGMEM
- ErrorF("_LoaderFreeFileMem(%x,%d)\n",addr,size);
+ ErrorF("_LoaderFreeFileMem(%x,%d)\n", addr, size);
#endif
#ifdef UseMMAP
# if defined (MmapPageAlign)
- i_addr /= pagesize;
- i_addr *= pagesize;
+ i_addr /= pagesize;
+ i_addr *= pagesize;
new_size = (size + pagesize - 1) / pagesize;
new_size *= pagesize;
- if (((memType)addr - i_addr + size) > new_size) new_size += pagesize;
- munmap((void *)i_addr,new_size);
+ if (((memType) addr - i_addr + size) > new_size)
+ new_size += pagesize;
+ munmap((void *)i_addr, new_size);
# else
- munmap((void *)addr,size);
+ munmap((void *)addr, size);
# endif
#else
- if(size == 0)
+ if (size == 0)
return;
xf86loaderfree(addr);
@@ -565,43 +607,44 @@ _LoaderFreeFileMem(void *addr, int size)
int
_LoaderFileRead(int fd, unsigned int offset, void *buf, int size)
{
- if(lseek(fd,offset+offsetbias,SEEK_SET)<0)
- FatalError("_LoaderFileRead() lseek() failed: %s\n", strerror(errno) );
+ if (lseek(fd, offset + offsetbias, SEEK_SET) < 0)
+ FatalError("_LoaderFileRead() lseek() failed: %s\n", strerror(errno));
- if(read(fd,buf,size)!=size)
- FatalError("_LoaderFileRead() read() failed: %s\n", strerror(errno) );
+ if (read(fd, buf, size) != size)
+ FatalError("_LoaderFileRead() read() failed: %s\n", strerror(errno));
return size;
}
-static loaderPtr listHead = (loaderPtr) 0 ;
+static loaderPtr listHead = (loaderPtr) 0;
static loaderPtr
_LoaderListPush()
{
- loaderPtr item = xf86loadercalloc(1, sizeof (struct _loader));
- item->next = listHead ;
- listHead = item;
+ loaderPtr item = xf86loadercalloc(1, sizeof(struct _loader));
- return item;
+ item->next = listHead;
+ listHead = item;
+
+ return item;
}
static loaderPtr
_LoaderListPop(int handle)
{
- loaderPtr item=listHead;
- loaderPtr *bptr=&listHead; /* pointer to previous node */
+ loaderPtr item = listHead;
+ loaderPtr *bptr = &listHead; /* pointer to previous node */
- while(item) {
- if( item->handle == handle ) {
- *bptr=item->next; /* remove this from the list */
+ while (item) {
+ if (item->handle == handle) {
+ *bptr = item->next; /* remove this from the list */
return item;
- }
- bptr=&(item->next);
- item=item->next;
}
+ bptr = &(item->next);
+ item = item->next;
+ }
- return 0;
+ return 0;
}
/*
@@ -612,30 +655,30 @@ _LoaderListPop(int handle)
char *
_LoaderHandleToName(int handle)
{
- loaderPtr item=listHead;
- loaderPtr aritem=NULL;
- loaderPtr lastitem=NULL;
+ loaderPtr item = listHead;
+ loaderPtr aritem = NULL;
+ loaderPtr lastitem = NULL;
- if ( handle < 0 ) {
+ if (handle < 0) {
return "(built-in)";
- }
- while(item) {
- if( item->handle == handle ) {
- if( strchr(item->name,':') == NULL )
- aritem=item;
+ }
+ while (item) {
+ if (item->handle == handle) {
+ if (strchr(item->name, ':') == NULL)
+ aritem = item;
else
- lastitem=item;
- }
- item=item->next;
+ lastitem = item;
}
+ item = item->next;
+ }
- if( aritem )
- return aritem->name;
+ if (aritem)
+ return aritem->name;
- if( lastitem )
- return lastitem->name;
+ if (lastitem)
+ return lastitem->name;
- return 0;
+ return 0;
}
/*
@@ -646,23 +689,23 @@ _LoaderHandleToName(int handle)
char *
_LoaderHandleToCanonicalName(int handle)
{
- loaderPtr item=listHead;
- loaderPtr lastitem=NULL;
+ loaderPtr item = listHead;
+ loaderPtr lastitem = NULL;
- if ( handle < 0 ) {
+ if (handle < 0) {
return "(built-in)";
- }
- while(item) {
- if( item->handle == handle ) {
- lastitem=item;
+ }
+ while (item) {
+ if (item->handle == handle) {
+ lastitem = item;
}
- item=item->next;
- }
+ item = item->next;
+ }
- if( lastitem )
- return lastitem->cname;
+ if (lastitem)
+ return lastitem->cname;
- return NULL;
+ return NULL;
}
/*
@@ -673,30 +716,30 @@ _LoaderHandleToCanonicalName(int handle)
char *
_LoaderModuleToName(int module)
{
- loaderPtr item=listHead;
- loaderPtr aritem=NULL;
- loaderPtr lastitem=NULL;
+ loaderPtr item = listHead;
+ loaderPtr aritem = NULL;
+ loaderPtr lastitem = NULL;
- if ( module < 0 ) {
+ if (module < 0) {
return "(built-in)";
- }
- while(item) {
- if( item->module == module ) {
- if( strchr(item->name,':') == NULL )
- aritem=item;
+ }
+ while (item) {
+ if (item->module == module) {
+ if (strchr(item->name, ':') == NULL)
+ aritem = item;
else
- lastitem=item;
+ lastitem = item;
}
- item=item->next;
- }
+ item = item->next;
+ }
- if( aritem )
- return aritem->name;
+ if (aritem)
+ return aritem->name;
- if( lastitem )
- return lastitem->name;
+ if (lastitem)
+ return lastitem->name;
- return 0;
+ return 0;
}
/*
@@ -705,28 +748,28 @@ _LoaderModuleToName(int module)
*/
int
_LoaderAddressToSection(const unsigned long address, const char **module,
- const char ** section)
+ const char **section)
{
- loaderPtr item=listHead;
+ loaderPtr item = listHead;
- while(item) {
- if( (*section=item->funcs->AddressToSection(item->private, address)) != NULL ) {
- *module=_LoaderModuleToName(item->module);
- return 1;
+ while (item) {
+ if ((*section =
+ item->funcs->AddressToSection(item->private, address)) != NULL) {
+ *module = _LoaderModuleToName(item->module);
+ return 1;
}
- item=item->next;
- }
+ item = item->next;
+ }
- return 0;
+ return 0;
}
-
/*
* Add a list of symbols to the referenced list.
*/
static void
-AppendSymbol(symlist *list, const char *sym)
+AppendSymbol(symlist * list, const char *sym)
{
list->list = xnfrealloc(list->list, (list->num + 1) * sizeof(char **));
list->list[list->num] = sym;
@@ -734,7 +777,7 @@ AppendSymbol(symlist *list, const char *sym)
}
static void
-AppendSymList(symlist *list, const char **syms)
+AppendSymList(symlist * list, const char **syms)
{
while (*syms) {
AppendSymbol(list, *syms);
@@ -743,7 +786,7 @@ AppendSymList(symlist *list, const char **syms)
}
static int
-SymInList(symlist *list, char *sym)
+SymInList(symlist * list, char *sym)
{
int i;
@@ -760,12 +803,12 @@ LoaderVRefSymbols(const char *sym0, va_list args)
const char *s;
if (sym0 == NULL)
- return;
+ return;
s = sym0;
do {
- AppendSymbol(&refList, s);
- s = va_arg(args, const char *);
+ AppendSymbol(&refList, s);
+ s = va_arg(args, const char *);
} while (s != NULL);
}
@@ -877,112 +920,110 @@ _LoaderHandleUnresolved(char *symbol, char *module)
symbol, module);
}
}
- return(fatalsym);
+ return (fatalsym);
}
/*
* Handle an archive.
*/
void *
-ARCHIVELoadModule(loaderPtr modrec, int arfd, LOOKUP **ppLookup)
+ARCHIVELoadModule(loaderPtr modrec, int arfd, LOOKUP ** ppLookup)
{
loaderPtr tmp = NULL;
void *ret = NULL;
- unsigned char magic[SARMAG];
- struct ar_hdr hdr;
+ unsigned char magic[SARMAG];
+ struct ar_hdr hdr;
+
#if defined(__powerpc__) && defined(Lynx)
- struct fl_hdr fhdr;
- char name[255];
- int namlen;
+ struct fl_hdr fhdr;
+ char name[255];
+ int namlen;
#endif
- unsigned int size;
- unsigned int offset;
- int arnamesize, modnamesize;
- char *slash, *longname;
- char *nametable = NULL;
- int nametablelen = 0;
+ unsigned int size;
+ unsigned int offset;
+ int arnamesize, modnamesize;
+ char *slash, *longname;
+ char *nametable = NULL;
+ int nametablelen = 0;
LOOKUP *lookup_ret, *p;
- LOOKUP *myLookup = NULL; /* Does realloc behave if ptr == 0? */
+ LOOKUP *myLookup = NULL; /* Does realloc behave if ptr == 0? */
int modtype;
int i;
int numsyms = 0;
- int resetoff;
/* lookup_ret = xf86loadermalloc(sizeof (LOOKUP *)); */
- arnamesize=strlen(modrec->name);
+ arnamesize = strlen(modrec->name);
#if !(defined(__powerpc__) && defined(Lynx))
- read(arfd,magic,SARMAG);
+ read(arfd, magic, SARMAG);
- if(strncmp((const char *)magic,ARMAG,SARMAG) != 0 ) {
- ErrorF("ARCHIVELoadModule: wrong magic!!\n" );
+ if (strncmp((const char *)magic, ARMAG, SARMAG) != 0) {
+ ErrorF("ARCHIVELoadModule: wrong magic!!\n");
return NULL;
}
- resetoff=SARMAG;
#else
- read(arfd,&fhdr,FL_HSZ);
+ read(arfd, &fhdr, FL_HSZ);
- if(strncmp(fhdr.fl_magic,AIAMAG,SAIAMAG) != 0 ) {
- ErrorF("ARCHIVELoadModule: wrong magic!!\n" );
+ if (strncmp(fhdr.fl_magic, AIAMAG, SAIAMAG) != 0) {
+ ErrorF("ARCHIVELoadModule: wrong magic!!\n");
return NULL;
}
- resetoff=FL_HSZ;
#endif /* __powerpc__ && Lynx */
#ifdef DEBUGAR
- ErrorF("Looking for archive members starting at offset %o\n", offset );
+ ErrorF("Looking for archive members starting at offset %o\n", offset);
#endif
- while( read(arfd,&hdr,sizeof(struct ar_hdr)) ) {
+ while (read(arfd, &hdr, sizeof(struct ar_hdr))) {
longname = NULL;
- sscanf(hdr.ar_size,"%d",&size);
+ sscanf(hdr.ar_size, "%u", &size);
#if defined(__powerpc__) && defined(Lynx)
- sscanf(hdr.ar_namlen,"%d",&namlen);
- name[0]=hdr.ar_name[0];
- name[1]=hdr.ar_name[1];
- read(arfd,&name[2],namlen);
- name[namlen]='\0';
- offset=lseek(arfd,0,SEEK_CUR);
- if( offset&0x1 ) /* odd value */
- offset=lseek(arfd,1,SEEK_CUR); /* make it an even boundary */
+ sscanf(hdr.ar_namlen, "%d", &namlen);
+ name[0] = hdr.ar_name[0];
+ name[1] = hdr.ar_name[1];
+ read(arfd, &name[2], namlen);
+ name[namlen] = '\0';
+ offset = lseek(arfd, 0, SEEK_CUR);
+ if (offset & 0x1) /* odd value */
+ offset = lseek(arfd, 1, SEEK_CUR); /* make it an even boundary */
#endif
- offset=lseek(arfd,0,SEEK_CUR);
+ offset = lseek(arfd, 0, SEEK_CUR);
/* Check for a Symbol Table */
- if( (hdr.ar_name[0] == '/' && hdr.ar_name[1] == ' ') ||
+ if ((hdr.ar_name[0] == '/' && hdr.ar_name[1] == ' ') ||
#if defined(__powerpc__) && defined(Lynx)
namlen == 0 ||
#endif
- strncmp(hdr.ar_name, "__.SYMDEF", 9) == 0 ) {
+ strncmp(hdr.ar_name, "__.SYMDEF", 9) == 0) {
/* If the file name is NULL, then it is a symbol table */
#ifdef DEBUGAR
ErrorF("Symbol Table Member '%16.16s', size %d, offset %d\n",
- hdr.ar_name, size, offset );
- ErrorF("Symbol table size %d\n", size );
+ hdr.ar_name, size, offset);
+ ErrorF("Symbol table size %d\n", size);
#endif
- offset=lseek(arfd,offset+size,SEEK_SET);
- if( offset&0x1 ) /* odd value */
- offset=lseek(arfd,1,SEEK_CUR); /* make it an even boundary */
+ offset = lseek(arfd, offset + size, SEEK_SET);
+ if (offset & 0x1) /* odd value */
+ offset = lseek(arfd, 1, SEEK_CUR); /* make it an even boundary */
continue;
}
/* Check for a String Table */
- if( hdr.ar_name[0] == '/' && hdr.ar_name[1] == '/') {
+ if (hdr.ar_name[0] == '/' && hdr.ar_name[1] == '/') {
/* If the file name is '/', then it is a string table */
#ifdef DEBUGAR
ErrorF("String Table Member '%16.16s', size %d, offset %d\n",
- hdr.ar_name, size, offset );
- ErrorF("String table size %d\n", size );
+ hdr.ar_name, size, offset);
+ ErrorF("String table size %d\n", size);
#endif
nametablelen = size;
- nametable=(char *)xf86loadermalloc(nametablelen);
+ nametable = (char *)xf86loadermalloc(nametablelen);
read(arfd, nametable, size);
- offset=lseek(arfd,0,SEEK_CUR);
+ offset = lseek(arfd, 0, SEEK_CUR);
/* offset=lseek(arfd,offset+size,SEEK_SET); */
- if( offset&0x1 ) /* odd value */
- offset=lseek(arfd,1,SEEK_CUR); /* make it an even boundary */
+ if (offset & 0x1) /* odd value */
+ offset = lseek(arfd, 1, SEEK_CUR); /* make it an even boundary */
continue;
}
@@ -990,50 +1031,50 @@ ARCHIVELoadModule(loaderPtr modrec, int arfd, LOOKUP **ppLookup)
/* SYS V r4 style long member name */
int nameoffset = atol(&hdr.ar_name[1]);
char *membername;
+
if (!nametable) {
- ErrorF( "Missing string table whilst processing %s\n",
- modrec->name ) ;
+ ErrorF("Missing string table whilst processing %s\n",
+ modrec->name);
offsetbias = 0;
return NULL;
}
if (nameoffset > nametablelen) {
- ErrorF( "Invalid string table offset (%s) whilst processing %s\n",
- hdr.ar_name, modrec->name ) ;
+ ErrorF("Invalid string table offset (%s) whilst processing %s\n", hdr.ar_name, modrec->name);
offsetbias = 0;
xf86loaderfree(nametable);
return NULL;
}
membername = nametable + nameoffset;
- slash=strchr(membername,'/');
+ slash = strchr(membername, '/');
if (slash)
*slash = '\0';
longname = xf86loadermalloc(arnamesize + strlen(membername) + 2);
- strcpy(longname,modrec->name);
- strcat(longname,":");
- strcat(longname,membername);
+ strcpy(longname, modrec->name);
+ strcat(longname, ":");
+ strcat(longname, membername);
} else if (hdr.ar_name[0] == '#' && hdr.ar_name[1] == '1' &&
hdr.ar_name[2] == '/') {
/* BSD 4.4 style long member name */
- if (sscanf(hdr.ar_name+3, "%d", &modnamesize) != 1) {
+ if (sscanf(hdr.ar_name + 3, "%d", &modnamesize) != 1) {
ErrorF("Bad archive member %s\n", hdr.ar_name);
offsetbias = 0;
return NULL;
}
/* allocate space for fully qualified name */
longname = xf86loadermalloc(arnamesize + modnamesize + 2);
- strcpy(longname,modrec->name);
- strcat(longname,":");
- i = read(arfd, longname+modnamesize+1, modnamesize);
+ strcpy(longname, modrec->name);
+ strcat(longname, ":");
+ i = read(arfd, longname + modnamesize + 1, modnamesize);
if (i != modnamesize) {
- ErrorF("Bad archive member %d\n", hdr.ar_name);
+ ErrorF("Bad archive member %s\n", hdr.ar_name);
xf86loaderfree(longname);
offsetbias = 0;
return NULL;
- }
+ }
longname[i] = '\0';
offset += i;
size -= i;
- } else {
+ } else {
/* Regular archive member */
#ifdef DEBUGAR
ErrorF("Member '%16.16s', size %d, offset %x\n",
@@ -1042,87 +1083,85 @@ ARCHIVELoadModule(loaderPtr modrec, int arfd, LOOKUP **ppLookup)
#else
name,
#endif
- size, offset );
+ size, offset);
#endif
- slash=strchr(hdr.ar_name,'/');
+ slash = strchr(hdr.ar_name, '/');
if (slash == NULL) {
/* BSD format without trailing slash */
- slash = strchr(hdr.ar_name,' ');
- }
+ slash = strchr(hdr.ar_name, ' ');
+ }
/* SM: Make sure we do not overwrite other parts of struct */
-
- if((slash - hdr.ar_name) > sizeof(hdr.ar_name))
- slash = hdr.ar_name + sizeof(hdr.ar_name) -1;
- *slash='\000';
+
+ if ((slash - hdr.ar_name) > sizeof(hdr.ar_name))
+ slash = hdr.ar_name + sizeof(hdr.ar_name) - 1;
+ *slash = '\000';
}
- if( (modtype=_GetModuleType(arfd,offset)) < 0 ) {
- ErrorF( "%s is an unrecognized module type\n", hdr.ar_name ) ;
- offsetbias=0;
+ if ((modtype = _GetModuleType(arfd, offset)) < 0) {
+ ErrorF("%s is an unrecognized module type\n", hdr.ar_name);
+ offsetbias = 0;
if (nametable)
xf86loaderfree(nametable);
return NULL;
}
- tmp=_LoaderListPush();
+ tmp = _LoaderListPush();
tmp->handle = modrec->handle;
tmp->module = moduleseq++;
tmp->cname = xf86loadermalloc(strlen(modrec->cname) + 1);
strcpy(tmp->cname, modrec->cname);
- tmp->funcs=&funcs[modtype];
+ tmp->funcs = &funcs[modtype];
if (longname == NULL) {
- modnamesize=strlen(hdr.ar_name);
- tmp->name=(char *)xf86loadermalloc(arnamesize+modnamesize+2 );
- strcpy(tmp->name,modrec->name);
- strcat(tmp->name,":");
- strcat(tmp->name,hdr.ar_name);
-
+ modnamesize = strlen(hdr.ar_name);
+ tmp->name =
+ (char *)xf86loadermalloc(arnamesize + modnamesize + 2);
+ strcpy(tmp->name, modrec->name);
+ strcat(tmp->name, ":");
+ strcat(tmp->name, hdr.ar_name);
+
} else {
tmp->name = longname;
}
- offsetbias=offset;
+ offsetbias = offset;
- if((tmp->private = funcs[modtype].LoadModule(tmp, arfd,
- &lookup_ret))
- == NULL) {
- ErrorF( "Failed to load %s\n", hdr.ar_name ) ;
- offsetbias=0;
+ if ((tmp->private = funcs[modtype].LoadModule(tmp, arfd, &lookup_ret))
+ == NULL) {
+ ErrorF("Failed to load %s\n", hdr.ar_name);
+ offsetbias = 0;
if (nametable)
xf86loaderfree(nametable);
return NULL;
}
- offset=lseek(arfd,offset+size,SEEK_SET);
- if( offset&0x1 ) /* odd value */
- lseek(arfd,1,SEEK_CUR); /* make it an even boundary */
+ offset = lseek(arfd, offset + size, SEEK_SET);
+ if (offset & 0x1) /* odd value */
+ lseek(arfd, 1, SEEK_CUR); /* make it an even boundary */
- if (tmp->private == (void *) -1L) {
+ if (tmp->private == (void *)-1L) {
ErrorF("Skipping \"%s\": No symbols found\n", tmp->name);
continue;
- }
- else
+ } else
ret = tmp->private;
/* Add the lookup table returned from funcs.LoadModule to the
* one we're going to return.
*/
- for (i = 0, p = lookup_ret; p && p->symName; i++, p++)
- ;
+ for (i = 0, p = lookup_ret; p && p->symName; i++, p++) ;
if (i) {
myLookup = xf86loaderrealloc(myLookup, (numsyms + i + 1)
- * sizeof (LOOKUP));
+ * sizeof(LOOKUP));
if (!myLookup)
- continue; /* Oh well! */
+ continue; /* Oh well! */
- memcpy(&(myLookup[numsyms]), lookup_ret, i * sizeof (LOOKUP));
+ memcpy(&(myLookup[numsyms]), lookup_ret, i * sizeof(LOOKUP));
numsyms += i;
myLookup[numsyms].symName = 0;
}
xf86loaderfree(lookup_ret);
}
/* xf86loaderfree(lookup_ret); */
- offsetbias=0;
+ offsetbias = 0;
*ppLookup = myLookup;
if (nametable)
@@ -1141,9 +1180,9 @@ ARCHIVELoadModule(loaderPtr modrec, int arfd, LOOKUP **ppLookup)
LoaderRelocPtr
_LoaderGetRelocations(void *mod)
{
- loader_funcs *formatrec = (loader_funcs *)mod;
+ loader_funcs *formatrec = (loader_funcs *) mod;
- return &(formatrec->pRelocs);
+ return &(formatrec->pRelocs);
}
/*
@@ -1154,13 +1193,13 @@ int
LoaderOpen(const char *module, const char *cname, int handle,
int *errmaj, int *errmin, int *wasLoaded)
{
- loaderPtr tmp ;
- int new_handle, modtype ;
+ loaderPtr tmp;
+ int new_handle, modtype;
int fd;
LOOKUP *pLookup;
#if defined(DEBUG)
- ErrorF("LoaderOpen(%s)\n", module );
+ ErrorF("LoaderOpen(%s)\n", module);
#endif
/*
@@ -1171,26 +1210,26 @@ LoaderOpen(const char *module, const char *cname, int handle,
*/
if (handle >= 0) {
tmp = listHead;
- while ( tmp ) {
+ while (tmp) {
#ifdef DEBUGLIST
- ErrorF("strcmp(%x(%s),{%x} %x(%s))\n", module,module,&(tmp->name),
- tmp->name,tmp->name );
+ ErrorF("strcmp(%x(%s),{%x} %x(%s))\n", module, module,
+ &(tmp->name), tmp->name, tmp->name);
#endif
- if ( ! strcmp( module, tmp->name )) {
+ if (!strcmp(module, tmp->name)) {
refCount[tmp->handle]++;
if (wasLoaded)
*wasLoaded = 1;
xf86MsgVerb(X_INFO, 2, "Reloading %s\n", module);
return tmp->handle;
}
- tmp = tmp->next ;
+ tmp = tmp->next;
}
}
/*
* OK, it's a new one. Add it.
*/
- xf86Msg(X_INFO, "Loading %s\n", module ) ;
+ xf86Msg(X_INFO, "Loading %s\n", module);
if (wasLoaded)
*wasLoaded = 0;
@@ -1198,54 +1237,62 @@ LoaderOpen(const char *module, const char *cname, int handle,
* Find a free handle.
*/
new_handle = 1;
- while ( freeHandles[new_handle] && new_handle < MAX_HANDLE )
- new_handle ++ ;
-
- if ( new_handle == MAX_HANDLE ) {
- xf86Msg(X_ERROR, "Out of loader space\n" ) ; /* XXX */
- if(errmaj) *errmaj = LDR_NOSPACE;
- if(errmin) *errmin = LDR_NOSPACE;
- return -1 ;
+ while (freeHandles[new_handle] && new_handle < MAX_HANDLE)
+ new_handle++;
+
+ if (new_handle == MAX_HANDLE) {
+ xf86Msg(X_ERROR, "Out of loader space\n"); /* XXX */
+ if (errmaj)
+ *errmaj = LDR_NOSPACE;
+ if (errmin)
+ *errmin = LDR_NOSPACE;
+ return -1;
}
- freeHandles[new_handle] = HANDLE_USED ;
+ freeHandles[new_handle] = HANDLE_USED;
refCount[new_handle] = 1;
- if( (fd=open(module, O_RDONLY)) < 0 ) {
- xf86Msg(X_ERROR, "Unable to open %s\n", module );
- freeHandles[new_handle] = HANDLE_FREE ;
- if(errmaj) *errmaj = LDR_NOMODOPEN;
- if(errmin) *errmin = errno;
- return -1 ;
+ if ((fd = open(module, O_RDONLY)) < 0) {
+ xf86Msg(X_ERROR, "Unable to open %s\n", module);
+ freeHandles[new_handle] = HANDLE_FREE;
+ if (errmaj)
+ *errmaj = LDR_NOMODOPEN;
+ if (errmin)
+ *errmin = errno;
+ return -1;
}
- if( (modtype=_GetModuleType(fd,0)) < 0 ) {
- xf86Msg(X_ERROR, "%s is an unrecognized module type\n", module ) ;
- freeHandles[new_handle] = HANDLE_FREE ;
- if(errmaj) *errmaj = LDR_UNKTYPE;
- if(errmin) *errmin = LDR_UNKTYPE;
+ if ((modtype = _GetModuleType(fd, 0)) < 0) {
+ xf86Msg(X_ERROR, "%s is an unrecognized module type\n", module);
+ freeHandles[new_handle] = HANDLE_FREE;
+ if (errmaj)
+ *errmaj = LDR_UNKTYPE;
+ if (errmin)
+ *errmin = LDR_UNKTYPE;
return -1;
}
- tmp=_LoaderListPush();
+ tmp = _LoaderListPush();
tmp->name = xf86loadermalloc(strlen(module) + 1);
strcpy(tmp->name, module);
tmp->cname = xf86loadermalloc(strlen(cname) + 1);
strcpy(tmp->cname, cname);
tmp->handle = new_handle;
tmp->module = moduleseq++;
- tmp->funcs=&funcs[modtype];
+ tmp->funcs = &funcs[modtype];
- if((tmp->private = funcs[modtype].LoadModule(tmp,fd, &pLookup)) == NULL) {
- xf86Msg(X_ERROR, "Failed to load %s\n", module ) ;
+ if ((tmp->private = funcs[modtype].LoadModule(tmp, fd, &pLookup)) == NULL) {
+ xf86Msg(X_ERROR, "Failed to load %s\n", module);
_LoaderListPop(new_handle);
- freeHandles[new_handle] = HANDLE_FREE ;
- if(errmaj) *errmaj = LDR_NOLOAD;
- if(errmin) *errmin = LDR_NOLOAD;
+ freeHandles[new_handle] = HANDLE_FREE;
+ if (errmaj)
+ *errmaj = LDR_NOLOAD;
+ if (errmin)
+ *errmin = LDR_NOLOAD;
return -1;
}
- if (tmp->private != (void *) -1L) {
+ if (tmp->private != (void *)-1L) {
LoaderAddSymbols(new_handle, tmp->module, pLookup);
xf86loaderfree(pLookup);
}
@@ -1273,16 +1320,17 @@ LoaderSymbol(const char *sym)
{
int i;
itemPtr item = NULL;
+
for (i = 0; i < numloaders; i++)
funcs[i].ResolveSymbols(&funcs[i]);
item = (itemPtr) LoaderHashFind(sym);
- if ( item )
- return item->address ;
+ if (item)
+ return item->address;
else
#ifdef DLOPEN_SUPPORT
- return(DLFindSymbol(sym));
+ return (DLFindSymbol(sym));
#else
return NULL;
#endif
@@ -1292,36 +1340,37 @@ int
LoaderResolveSymbols(void)
{
int i;
- for(i=0;i<numloaders;i++)
+
+ for (i = 0; i < numloaders; i++)
funcs[i].ResolveSymbols(&funcs[i]);
return 0;
}
int
-LoaderCheckUnresolved(int delay_flag )
+LoaderCheckUnresolved(int delay_flag)
{
- int i,ret=0;
- LoaderResolveOptions delayFlag = delay_flag;
+ int i, ret = 0;
+ LoaderResolveOptions delayFlag = (LoaderResolveOptions)delay_flag;
- LoaderResolveSymbols();
+ LoaderResolveSymbols();
- if (delayFlag == LD_RESOLV_NOW) {
- if (check_unresolved_sema > 0)
- check_unresolved_sema--;
- else
- xf86Msg(X_WARNING, "LoaderCheckUnresolved: not enough "
- "MAGIC_DONT_CHECK_UNRESOLVED\n");
- }
+ if (delayFlag == LD_RESOLV_NOW) {
+ if (check_unresolved_sema > 0)
+ check_unresolved_sema--;
+ else
+ xf86Msg(X_WARNING, "LoaderCheckUnresolved: not enough "
+ "MAGIC_DONT_CHECK_UNRESOLVED\n");
+ }
- if (!check_unresolved_sema || delayFlag == LD_RESOLV_FORCE)
- for(i=0;i<numloaders;i++)
- if (funcs[i].CheckForUnresolved(&funcs[i]))
- ret=1;
+ if (!check_unresolved_sema || delayFlag == LD_RESOLV_FORCE)
+ for (i = 0; i < numloaders; i++)
+ if (funcs[i].CheckForUnresolved(&funcs[i]))
+ ret = 1;
- if (fatalReqSym)
- FatalError("Some required symbols were unresolved\n");
+ if (fatalReqSym)
+ FatalError("Some required symbols were unresolved\n");
- return ret;
+ return ret;
}
void xf86LoaderTrap(void);
@@ -1334,59 +1383,60 @@ xf86LoaderTrap(void)
void
LoaderDefaultFunc(void)
{
- ErrorF("\n\n\tThis should not happen!\n"
- "\tAn unresolved function was called!\n");
+ ErrorF("\n\n\tThis should not happen!\n"
+ "\tAn unresolved function was called!\n");
- xf86LoaderTrap();
-
- FatalError("\n");
+ xf86LoaderTrap();
+
+ FatalError("\n");
}
int
LoaderUnload(int handle)
{
- loaderRec fakeHead ;
- loaderPtr tmp = & fakeHead ;
+ loaderRec fakeHead;
+ loaderPtr tmp = &fakeHead;
- if ( handle < 0 || handle > MAX_HANDLE )
+ if (handle < 0 || handle > MAX_HANDLE)
return -1;
- /*
- * check the reference count, only free it if it goes to zero
- */
- if (--refCount[handle])
+ /*
+ * check the reference count, only free it if it goes to zero
+ */
+ if (--refCount[handle])
return 0;
- /*
- * find the loaderRecs associated with this handle.
- */
-
- while( (tmp=_LoaderListPop(handle)) != NULL ) {
- if( strchr(tmp->name,':') == NULL ) {
- /* It is not a member of an archive */
- xf86Msg(X_INFO, "Unloading %s\n", tmp->name ) ;
+ /*
+ * find the loaderRecs associated with this handle.
+ */
+
+ while ((tmp = _LoaderListPop(handle)) != NULL) {
+ if (strchr(tmp->name, ':') == NULL) {
+ /* It is not a member of an archive */
+ xf86Msg(X_INFO, "Unloading %s\n", tmp->name);
}
tmp->funcs->LoaderUnload(tmp->private);
xf86loaderfree(tmp->name);
xf86loaderfree(tmp->cname);
xf86loaderfree(tmp);
- }
-
- freeHandles[handle] = HANDLE_FREE ;
+ }
+
+ freeHandles[handle] = HANDLE_FREE;
-return 0;
+ return 0;
}
void
LoaderDuplicateSymbol(const char *symbol, const int handle)
{
ErrorF("Duplicate symbol %s in %s\n", symbol,
- listHead ? listHead->name : "(built-in)");
+ listHead ? listHead->name : "(built-in)");
ErrorF("Also defined in %s\n", _LoaderHandleToName(handle));
FatalError("Module load failure\n");
}
/* GDB Sync function */
-void _loader_debug_state()
+void
+_loader_debug_state()
{
}
@@ -1395,18 +1445,17 @@ unsigned long LoaderOptions = 0;
void
LoaderResetOptions(void)
{
- LoaderOptions = 0;
+ LoaderOptions = 0;
}
void
LoaderSetOptions(unsigned long opts)
{
- LoaderOptions |= opts;
+ LoaderOptions |= opts;
}
void
LoaderClearOptions(unsigned long opts)
{
- LoaderOptions &= ~opts;
+ LoaderOptions &= ~opts;
}
-