From 87c7399305b30045a856d737bbfd8f59b8f52392 Mon Sep 17 00:00:00 2001 From: Rodrigo Rebello Date: Fri, 6 Nov 2015 12:14:01 -0200 Subject: [PATCH] opl: limit use of ioperm/inb/outb to x86 architecture The use of I/O ports in the Linux driver to directly control OPL chips is x86 specific and only really makes sense for x86-based PC's with compatible hardware. For some architectures (e.g. ARM), ioperm, inb and outb do exist and are detected by the configure script (via AC_CHECK_FUNCS(ioperm)), but their use is inappropriate in these cases and should be avoided. In some other scenarios, like when using a GNU toolchain + uClibc for PowerPC, the build even fails with the following error: opl_linux.c:26:20: fatal error: sys/io.h: No such file or directory That is so because ioperm() is exported by uClibc and gets detected by configure, which enables the "Linux" driver via definition of HAVE_IOPERM, but in practice 'sys/io.h' is missing for ppc (inb/outb is not implemented, and the call to ioperm() would return EIO anyway). So, besides testing for HAVE_IOPERM, also test if either __i386__ or __x86_64__ are defined before enabling this OPL driver. Upstream-status: accepted, not yet released. https://github.com/chocolate-doom/chocolate-doom/pull/638 Signed-off-by: Rodrigo Rebello --- opl/opl.c | 4 ++-- opl/opl_linux.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/opl/opl.c b/opl/opl.c index 60f027d..0d25689 100644 --- a/opl/opl.c +++ b/opl/opl.c @@ -27,7 +27,7 @@ //#define OPL_DEBUG_TRACE -#ifdef HAVE_IOPERM +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM) extern opl_driver_t opl_linux_driver; #endif #if defined(HAVE_LIBI386) || defined(HAVE_LIBAMD64) @@ -40,7 +40,7 @@ extern opl_driver_t opl_sdl_driver; static opl_driver_t *drivers[] = { -#ifdef HAVE_IOPERM +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM) &opl_linux_driver, #endif #if defined(HAVE_LIBI386) || defined(HAVE_LIBAMD64) diff --git a/opl/opl_linux.c b/opl/opl_linux.c index 5df5d46..19e4c3e 100644 --- a/opl/opl_linux.c +++ b/opl/opl_linux.c @@ -17,7 +17,7 @@ #include "config.h" -#ifdef HAVE_IOPERM +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM) #include #include @@ -99,5 +99,5 @@ opl_driver_t opl_linux_driver = OPL_Timer_AdjustCallbacks, }; -#endif /* #ifdef HAVE_IOPERM */ +#endif /* #if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM) */ -- 2.1.4