X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/b05f6dfed563db7c6d89e60d0fcf4d5bf8c03867..98b8ef391f9f508131d222080a79b3b3e72a4b22:/usb-driver.c diff --git a/usb-driver.c b/usb-driver.c index ff47ae3..ed78932 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include "usb-driver.h" @@ -61,13 +62,15 @@ static int modules_read = 0; #define NO_WINDRVR 1 void hexdump(unsigned char *buf, int len, char *prefix) { - int i; + int i = 0; - fprintf(stderr, "%s ", prefix); - for(i=0; i (long)(start + protectlen)) + protectlen += pagesize; + + DPRINTF("Unprotecting %zd bytes starting at %p\n", protectlen, start); + ret = mprotect(start, protectlen, PROT_READ|PROT_WRITE); + if (ret == -1) + perror("mprotect"); + + DPRINTF("Replacing %s with /dev/zero\n", filename); + strcpy(filename, "/dev/zero"); + + DPRINTF("Reprotecting %zd bytes starting at %p\n", protectlen, start); + ret = mprotect(start, protectlen, PROT_READ|PROT_EXEC); + if (ret == -1) + perror("mprotect"); + } + + DPRINTF("-> XilCommNS::CPortResources::Instance()\n"); + + ret = func(); + + DPRINTF("<- XilCommNS::CPortResources::Instance()\n"); + + return ret; +} + static void __attribute__ ((constructor)) libusbdriver_init(void) { int i; char buf[256]; @@ -689,14 +751,16 @@ static void __attribute__ ((constructor)) libusbdriver_init(void) { setenv("XIL_IMPACT_USE_WINDRIVER", "1", 1); #if __WORDSIZE == 32 - struct utsname un; - int ret; + { + struct utsname un; + int ret; - ret = uname(&un); + ret = uname(&un); - if (ret == 0 && (!strcmp(un.machine, "x86_64"))) { - DPRINTF("setting 32bit personality\n"); - (long)syscall(SYS_personality, PER_LINUX32); + if (ret == 0 && (!strcmp(un.machine, "x86_64"))) { + DPRINTF("setting 32bit personality\n"); + (long)syscall(SYS_personality, PER_LINUX32); + } } #endif }