mailing list of musl libc
 help / color / mirror / code / Atom feed
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);

      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).