https://sources.debian.org/data/main/p/picprog/1.9.1-3/debian/patches/20_iopl.patch Description: Avoid some functions in some architectures Upstream uses iopl() function and other architecture-dependent codes. This patch adds building switches to avoid them in some architectures. Author: Koichi Akabe <vbkaisetsu@gmail.com> Last-Update: 2011-11-30 --- picprog-1.9.1.orig/picport.cc +++ picprog-1.9.1/picport.cc @@ -38,7 +38,12 @@ #include <ctime> #include <sys/ioctl.h> -#include <sys/io.h> + +#if defined(__i386__) || defined(__x86_64__) + #include <sys/io.h> + #define HAVE_IOPL +#endif + #include <fcntl.h> #include <sys/time.h> #include <unistd.h> @@ -160,8 +165,12 @@ // Not root. Cannot use realtime scheduling. use_nanosleep = 0; } +#ifdef HAVE_IOPL if (iopl (3)) disable_interrupts = 0; +#else + disable_interrupts = 0; +#endif #ifdef CPU_SETSIZE // When computing the delay loops, we do not want the cpu's to change. @@ -403,13 +412,17 @@ { struct timeval tv1, tv2; gettimeofday (&tv1, 0); +#if defined(__i386__) or defined(__x86_64__) if (tsc_1000ns > 1 && disable_interrupts) asm volatile("pushf; cli"); +#endif set_clock_data (1, b); // set data, clock up delay (cable_delay); set_clock_data (0, b); // clock down +#if defined(__i386__) or defined(__x86_64__) if (tsc_1000ns > 1 && disable_interrupts) asm volatile("popf"); +#endif gettimeofday (&tv2, 0); // We may have spent a long time in an interrupt or in another task @@ -428,13 +441,17 @@ { struct timeval tv1, tv2; gettimeofday (&tv1, 0); +#if defined(__i386__) or defined(__x86_64__) if (tsc_1000ns > 1 && disable_interrupts) asm volatile("pushf; cli"); +#endif set_clock_data (1, 1); // clock up delay (cable_delay); set_clock_data (0, 1); // set data up, clock down +#if defined(__i386__) or defined(__x86_64__) if (tsc_1000ns > 1 && disable_interrupts) asm volatile("popf"); +#endif gettimeofday (&tv2, 0); // We may have spent a long time in an interrupt or in another task