- if (ret == 0 && (!strcmp(__name->machine, "x86_64"))) {
- strcpy(__name->machine, "i686");
+ return (*func)(__semid, __sops, __nsops);
+}
+#endif
+
+/*
+ * Ugly hack for ISE 12. Preload doesn't seem to work correctly for
+ * libImpactComm.so. Even though the file is still read with fopen(),
+ * the version from libc is used and not the one from this file.
+ * Replace the function calling fopen() instead...
+ * 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;
+}
+
+/* XilCommNS::CPortResources::Instance() */
+void* _ZN9XilCommNS14CPortResources8InstanceEv() {
+ static void* (*func) (void) = NULL;
+ char *filename = NULL;
+ void *ret;
+ int i;
+
+ if (!func) {
+ func = (void* (*) (void)) dlsym(RTLD_NEXT, "_ZN9XilCommNS14CPortResources8InstanceEv");
+
+ DPRINTF("Searching for filename starting at %p\n", func);
+ for(i = 0; i < 16384; i++) {
+ if (!strcmp(((char*)func)+i, "/proc/sys/dev/parport/%s/base-addr")) {
+ filename = ((char*)func)+i;
+ DPRINTF("Filename found at offset %p\n", (void*)(filename - ((char*)func)));
+ break;
+ }
+ }