1
0

Don't overload uname but set personality in library constructor

This fixes planAhead crashing on startup
This commit is contained in:
Michael Gernoth 2010-05-23 01:18:13 +02:00
parent 9f78065e21
commit daa4fc041d

View File

@ -41,6 +41,8 @@
#include <bits/wordsize.h> #include <bits/wordsize.h>
#include <sys/ipc.h> #include <sys/ipc.h>
#include <sys/sem.h> #include <sys/sem.h>
#include <syscall.h>
#include <linux/personality.h>
#include "usb-driver.h" #include "usb-driver.h"
#include "config.h" #include "config.h"
#include "xpcu.h" #include "xpcu.h"
@ -655,24 +657,6 @@ int semop (int __semid, struct sembuf *__sops, size_t __nsops) {
} }
#endif #endif
#if __WORDSIZE == 32
int uname (struct utsname *__name) {
static int (*func) (struct utsname*);
int ret;
if (!func)
func = (int (*) (struct utsname*)) dlsym(RTLD_NEXT, "uname");
ret = (*func)(__name);
if (ret == 0 && (!strcmp(__name->machine, "x86_64"))) {
strcpy(__name->machine, "i686");
}
return ret;
}
#endif
/* /*
* Ugly hack for ISE 12. They don't seem to open /proc/modules with * Ugly hack for ISE 12. They don't seem to open /proc/modules with
* open() anymore... * open() anymore...
@ -683,3 +667,17 @@ int _Z14isModuleLoadedPci(char *module_name, int i) {
return 1; return 1;
} }
static void __attribute__ ((constructor)) libusbdriver_init(void) {
#if __WORDSIZE == 32
struct utsname un;
int ret;
ret = uname(&un);
if (ret == 0 && (!strcmp(un.machine, "x86_64"))) {
DPRINTF("setting 32bit personality\n");
(long)syscall(SYS_personality, PER_LINUX32);
}
#endif
}