From: Isaac Dunham <idunham@lavabit.com>
To: musl@lists.openwall.com
Subject: Re: [PATCH 1/10] ioperm & iopl
Date: Mon, 6 Aug 2012 20:29:25 -0700 [thread overview]
Message-ID: <20120806202925.596eff5c@newbook> (raw)
In-Reply-To: <20120806192241.2ed1108f@newbook>
[-- Attachment #1: Type: text/plain, Size: 172 bytes --]
Per conversation on IRC, here's a patch that moves everything of
importance from sys/io.h to bits/io.h.
bits/io.h is based on klibc sys/io.h, in this case.
Isaac Dunham
[-- Attachment #2: fix-io_h.diff --]
[-- Type: text/x-patch, Size: 9147 bytes --]
diff --git a/arch/i386/bits/io.h b/arch/i386/bits/io.h
new file mode 100644
index 0000000..1a81e56
--- /dev/null
+++ b/arch/i386/bits/io.h
@@ -0,0 +1,154 @@
+/* ----------------------------------------------------------------------- *
+ *
+ * Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall
+ * be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#ifndef _BITS_IO_H
+#define _BITS_IO_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int iopl(int);
+int ioperm(unsigned long, unsigned long, int);
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outb(unsigned char __v, unsigned short __p)
+{
+ asm volatile ("outb %0,%1" : : "a" (__v), "dN" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outw(unsigned short __v, unsigned short __p)
+{
+ asm volatile ("outw %0,%1" : : "a" (__v), "dN" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outl(unsigned int __v, unsigned short __p)
+{
+ asm volatile ("outl %0,%1" : : "a" (__v), "dN" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned char inb(unsigned short __p)
+{
+ unsigned char __v;
+ asm volatile ("inb %1,%0" : "=a" (__v) : "dN" (__p));
+ return __v;
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned short inw(unsigned short __p)
+{
+ unsigned short __v;
+ asm volatile ("inw %1,%0" : "=a" (__v) : "dN" (__p));
+ return __v;
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned int inl(unsigned short __p)
+{
+ unsigned int __v;
+ asm volatile ("inl %1,%0" : "=a" (__v) : "dN" (__p));
+ return __v;
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsb(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsb"
+ : "+S" (__d), "+c" (__n)
+ : "d" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsw(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsw"
+ : "+S" (__d), "+c" (__n)
+ : "d" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsl(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsl"
+ : "+S" (__d), "+c"(__n)
+ : "d" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insb(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insb"
+ : "+D" (__d), "+c" (__n)
+ : "d" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insw(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insw"
+ : "+D" (__d), "+c" (__n)
+ : "d" (__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insl(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insl"
+ : "+D" (__d), "+c" (__n)
+ : "d" (__p));
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/arch/x86_64/bits/io.h b/arch/x86_64/bits/io.h
new file mode 100644
index 0000000..9d16816
--- /dev/null
+++ b/arch/x86_64/bits/io.h
@@ -0,0 +1,149 @@
+/* ----------------------------------------------------------------------- *
+ *
+ * Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall
+ * be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#ifndef _BITS_IO_H
+#define _BITS_IO_H
+
+int iopl(int);
+int ioperm(unsigned long, unsigned long, int);
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outb(unsigned char __v, unsigned short __p)
+{
+ asm volatile ("outb %0,%1" : : "a" (__v), "dN"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outw(unsigned short __v, unsigned short __p)
+{
+ asm volatile ("outw %0,%1" : : "a" (__v), "dN"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outl(unsigned int __v, unsigned short __p)
+{
+ asm volatile ("outl %0,%1" : : "a" (__v), "dN"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned char inb(unsigned short __p)
+{
+ unsigned char __v;
+ asm volatile ("inb %1,%0" : "=a" (__v) : "dN"(__p));
+ return __v;
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned short inw(unsigned short __p)
+{
+ unsigned short __v;
+ asm volatile ("inw %1,%0" : "=a" (__v) : "dN"(__p));
+ return __v;
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static unsigned int inl(unsigned short __p)
+{
+ unsigned int __v;
+ asm volatile ("inl %1,%0" : "=a" (__v) : "dN"(__p));
+ return __v;
+}
+
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsb(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsb"
+ : "+S" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsw(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsw"
+ : "+S" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void outsl(unsigned short __p, const void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; outsl"
+ : "+S" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insb(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insb"
+ : "+D" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insw(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insw"
+ : "+D" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#if __STDC_VERSION__ >= 199901L
+inline
+#endif
+static void insl(unsigned short __p, void *__d, unsigned long __n)
+{
+ asm volatile ("cld; rep; insl"
+ : "+D" (__d), "+c"(__n)
+ : "d"(__p));
+}
+
+#endif
diff --git a/include/sys/io.h b/include/sys/io.h
index a6ba467..6a7c442 100644
--- a/include/sys/io.h
+++ b/include/sys/io.h
@@ -1,13 +1,7 @@
#ifndef _SYS_IO_H
#define _SYS_IO_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-int ioperm(unsigned long, unsigned long, int);
-int iopl(int);
+#include <bits/io.h>
-#ifdef __cplusplus
-}
#endif
#endif
diff --git a/src/linux/ioperm.c b/src/linux/ioperm.c
index 6d7c37d..08c6d8b 100644
--- a/src/linux/ioperm.c
+++ b/src/linux/ioperm.c
@@ -1,7 +1,8 @@
-#include <sys/io.h>
#include "syscall.h"
#ifdef SYS_ioperm
+#include <sys/io.h>
+
int ioperm(unsigned long from, unsigned long num, int turn_on)
{
return syscall(SYS_ioperm, from, num, turn_on);
diff --git a/src/linux/iopl.c b/src/linux/iopl.c
index 5a626e1..835d3d4 100644
--- a/src/linux/iopl.c
+++ b/src/linux/iopl.c
@@ -1,7 +1,8 @@
-#include <sys/io.h>
#include "syscall.h"
#ifdef SYS_iopl
+#include <sys/io.h>
+
int iopl(int level)
{
return syscall(SYS_iopl, level);
prev parent reply other threads:[~2012-08-07 3:29 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-23 1:13 Isaac Dunham
2012-07-23 1:17 ` [PATCH 2/10] splice Isaac Dunham
2012-07-23 1:21 ` [PATCH 3/10] xattr syscalls Isaac Dunham
2012-07-24 18:06 ` orc
2012-07-23 1:24 ` [PATCH 4/10] pipe2 Isaac Dunham
2012-07-23 1:28 ` [PATCH 5/10] __sigsetjmp alias Isaac Dunham
2012-07-23 1:32 ` [PATCH 6/10] Provide private versions of locale/ functions Isaac Dunham
2012-07-23 1:33 ` [PATCH 7/10] __fcntl Isaac Dunham
2012-07-23 1:36 ` [PATCH 8/10] finite Isaac Dunham
2012-07-23 7:58 ` Szabolcs Nagy
2012-07-23 1:38 ` [PATCH 9/10] GLIBC ABI patches Isaac Dunham
2012-07-23 15:11 ` Arvid E. Picciani
2012-07-24 18:15 ` Igmar Palsenberg
2012-07-24 18:19 ` Gregor Richards
2012-07-24 18:23 ` Igmar Palsenberg
2012-07-24 18:29 ` Gregor Richards
2012-07-24 18:33 ` Igmar Palsenberg
2012-07-24 23:18 ` Rich Felker
2012-07-25 7:27 ` Arvid E. Picciani
2012-07-25 14:12 ` Luca Barbato
2012-07-25 15:19 ` Rich Felker
2012-07-25 15:52 ` Luca Barbato
2012-07-25 17:35 ` Rich Felker
2012-07-25 23:06 ` idunham
2012-07-23 1:40 ` [PATCH 10/10] More glibc ABI compatability Isaac Dunham
2012-08-07 2:22 ` [PATCH 1/10] ioperm & iopl Isaac Dunham
2012-08-07 3:29 ` Isaac Dunham [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120806202925.596eff5c@newbook \
--to=idunham@lavabit.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).