summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/picprog-non-intel-support.patch
diff options
context:
space:
mode:
authorEfraim Flashner <efraim@flashner.co.il>2017-12-10 12:38:26 +0200
committerEfraim Flashner <efraim@flashner.co.il>2017-12-10 12:38:48 +0200
commit316fd29f9b6b0941367f54f431ef99695b16a9e5 (patch)
tree6b5f414128e819ea654036365397179a8b5048c2 /gnu/packages/patches/picprog-non-intel-support.patch
parent981bccf11cbd777f1d11579bd20c802bebe3adee (diff)
gnu: picprog: Fix non-Intel support.
* gnu/packages/patches/picprog-non-intel-support.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/embedded.scm (picprog)[source]: Add patch. [arguments]: Skip building the 'testport' binary.
Diffstat (limited to 'gnu/packages/patches/picprog-non-intel-support.patch')
-rw-r--r--gnu/packages/patches/picprog-non-intel-support.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/gnu/packages/patches/picprog-non-intel-support.patch b/gnu/packages/patches/picprog-non-intel-support.patch
new file mode 100644
index 0000000000..8908207011
--- /dev/null
+++ b/gnu/packages/patches/picprog-non-intel-support.patch
@@ -0,0 +1,74 @@
+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