X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/1fc8f7a47d7d6db0c7ef6f554595670124b319c5..80a14787b97779d86558f414d23f7058b8654c94:/usb-driver.c diff --git a/usb-driver.c b/usb-driver.c index e2f275f..55a7463 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -41,6 +41,8 @@ #include #include #include +#include +#include #include "usb-driver.h" #include "config.h" #include "xpcu.h" @@ -559,6 +561,12 @@ FILE *fopen(const char *path, const char *mode) { if (!strcmp(path, "/proc/modules")) { DPRINTF("opening /proc/modules\n"); + if (!ret && errno == ENOENT) { + /* Hmm.. there appears to be no /proc/modules file + * fake it then */ + ret = (*func)("/dev/null", mode); + DPRINTF("No /proc/modules -- faking\n"); + } #ifdef NO_WINDRVR modulesfp = ret; modules_read = 0; @@ -649,20 +657,27 @@ int semop (int __semid, struct sembuf *__sops, size_t __nsops) { } #endif -#if __WORDSIZE == 32 -int uname (struct utsname *__name) { - static int (*func) (struct utsname*); +/* + * Ugly hack for ISE 12. They don't seem to open /proc/modules with + * open() anymore... + * echo '_Z14isModuleLoadedPci' | c++filt + */ +long int _Z14isModuleLoadedPci(char *module_name, int i) { + DPRINTF("_Z14isModuleLoadedPci: Checking for module %s (%d)\n", module_name, i); + + return 1; +} + +static void __attribute__ ((constructor)) libusbdriver_init(void) { + #if __WORDSIZE == 32 + struct utsname un; int ret; - if (!func) - func = (int (*) (struct utsname*)) dlsym(RTLD_NEXT, "uname"); - - ret = (*func)(__name); + ret = uname(&un); - if (ret == 0 && (!strcmp(__name->machine, "x86_64"))) { - strcpy(__name->machine, "i686"); + if (ret == 0 && (!strcmp(un.machine, "x86_64"))) { + DPRINTF("setting 32bit personality\n"); + (long)syscall(SYS_personality, PER_LINUX32); } - - return ret; + #endif } -#endif