X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/aed36bb341eaa4344cb548a6e78c5ac94b03a6cd..80a14787b97779d86558f414d23f7058b8654c94:/usb-driver.c diff --git a/usb-driver.c b/usb-driver.c index 264366b..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" @@ -655,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