summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLD <luca@orpolo.org>2024-03-09 15:02:44 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-03-09 18:51:33 +0100
commitafec41f9d80cb1f923d0d4f76af832b036dc2f4f (patch)
tree2952a39068c1660b96f589593ab435de8e12fa94
parent8e726dc9abda7027922444a53eb3131c8e267666 (diff)
move x86 copy_user.[ch] to ipc/ and make it arch-indipendent
Message-ID: <20240309140244.347835-3-luca@orpolo.org>
-rw-r--r--Makefrag.am2
-rw-r--r--i386/Makefrag.am1
-rw-r--r--ipc/copy_user.c (renamed from x86_64/copy_user.c)7
-rw-r--r--ipc/copy_user.h (renamed from i386/i386/copy_user.h)18
-rw-r--r--ipc/ipc_kmsg.c2
-rw-r--r--ipc/ipc_mqueue.c2
-rw-r--r--ipc/mach_msg.c2
-rw-r--r--kern/ipc_mig.c2
-rw-r--r--x86_64/Makefrag.am1
9 files changed, 20 insertions, 17 deletions
diff --git a/Makefrag.am b/Makefrag.am
index 5b61a1d6..82fce628 100644
--- a/Makefrag.am
+++ b/Makefrag.am
@@ -76,6 +76,8 @@ endif
#
libkernel_a_SOURCES += \
+ ipc/copy_user.c \
+ ipc/copy_user.h \
ipc/ipc_entry.c \
ipc/ipc_entry.h \
ipc/ipc_init.c \
diff --git a/i386/Makefrag.am b/i386/Makefrag.am
index 58ee3273..5e7d4740 100644
--- a/i386/Makefrag.am
+++ b/i386/Makefrag.am
@@ -91,7 +91,6 @@ endif
#
libkernel_a_SOURCES += \
- i386/i386/copy_user.h \
i386/i386/cswitch.S \
i386/i386/debug_trace.S \
i386/i386/idt_inittab.S \
diff --git a/x86_64/copy_user.c b/ipc/copy_user.c
index c6e125d9..5c6329d3 100644
--- a/x86_64/copy_user.c
+++ b/ipc/copy_user.c
@@ -16,14 +16,15 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#ifdef __LP64__
+
#include <stddef.h>
#include <string.h>
+#include <ipc/copy_user.h>
#include <kern/debug.h>
#include <mach/boolean.h>
-#include <copy_user.h>
-
/* Mach field descriptors measure size in bits */
#define descsize_to_bytes(n) (n / 8)
@@ -611,3 +612,5 @@ int copyoutmsg (const void *kernelbuf, void *userbuf, const size_t ksize)
return 0;
}
+
+#endif /* __LP64__ */
diff --git a/i386/i386/copy_user.h b/ipc/copy_user.h
index 3d1c7278..a57b3ee5 100644
--- a/i386/i386/copy_user.h
+++ b/ipc/copy_user.h
@@ -28,7 +28,7 @@
/*
* The copyin_32to64() and copyout_64to32() routines are meant for data types
* that have different size in kernel and user space. They should be independent
- * of endianness and hopefully can be reused in the future on other archs.
+ * of endianness and hopefully can be reused on all archs.
* These types are e.g.:
* - port names vs port pointers, on a 64-bit kernel
* - memory addresses, on a 64-bit kernel and 32-bit user
@@ -71,23 +71,23 @@ static inline int copyout_address(const vm_offset_t *kaddr, rpc_vm_offset_t *uad
static inline int copyin_port(const mach_port_name_t *uaddr, mach_port_t *kaddr)
{
-#ifdef __x86_64__
+#ifdef __LP64__
return copyin_32to64(uaddr, kaddr);
-#else /* __x86_64__ */
+#else /* __LP64__ */
return copyin(uaddr, kaddr, sizeof(*uaddr));
-#endif /* __x86_64__ */
+#endif /* __LP64__ */
}
static inline int copyout_port(const mach_port_t *kaddr, mach_port_name_t *uaddr)
{
-#ifdef __x86_64__
+#ifdef __LP64__
return copyout_64to32(kaddr, uaddr);
-#else /* __x86_64__ */
+#else /* __LP64__ */
return copyout(kaddr, uaddr, sizeof(*kaddr));
-#endif /* __x86_64__ */
+#endif /* __LP64__ */
}
-#if defined(__x86_64__) && defined(USER32)
+#if defined(__LP64__) && defined(USER32)
/* For 32 bit userland, kernel and user land messages are not the same size. */
size_t msg_usize(const mach_msg_header_t *kmsg);
#else
@@ -95,6 +95,6 @@ static inline size_t msg_usize(const mach_msg_header_t *kmsg)
{
return kmsg->msgh_size;
}
-#endif /* __x86_64__ && USER32 */
+#endif /* __LP64__ && USER32 */
#endif /* COPY_USER_H */
diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
index bd843804..8bd645ff 100644
--- a/ipc/ipc_kmsg.c
+++ b/ipc/ipc_kmsg.c
@@ -42,7 +42,6 @@
#include <mach/message.h>
#include <mach/port.h>
#include <machine/locore.h>
-#include <machine/copy_user.h>
#include <kern/assert.h>
#include <kern/debug.h>
#include <kern/kalloc.h>
@@ -51,6 +50,7 @@
#include <vm/vm_kern.h>
#include <vm/vm_user.h>
#include <ipc/port.h>
+#include <ipc/copy_user.h>
#include <ipc/ipc_entry.h>
#include <ipc/ipc_kmsg.h>
#include <ipc/ipc_thread.h>
diff --git a/ipc/ipc_mqueue.c b/ipc/ipc_mqueue.c
index 44e1eb98..95308f35 100644
--- a/ipc/ipc_mqueue.c
+++ b/ipc/ipc_mqueue.c
@@ -36,13 +36,13 @@
#include <mach/port.h>
#include <mach/message.h>
-#include <machine/copy_user.h>
#include <kern/assert.h>
#include <kern/counters.h>
#include <kern/debug.h>
#include <kern/sched_prim.h>
#include <kern/ipc_sched.h>
#include <kern/ipc_kobject.h>
+#include <ipc/copy_user.h>
#include <ipc/ipc_mqueue.h>
#include <ipc/ipc_thread.h>
#include <ipc/ipc_kmsg.h>
diff --git a/ipc/mach_msg.c b/ipc/mach_msg.c
index 6194ef7b..ff5e5b09 100644
--- a/ipc/mach_msg.c
+++ b/ipc/mach_msg.c
@@ -39,7 +39,6 @@
#include <mach/kern_return.h>
#include <mach/port.h>
#include <mach/message.h>
-#include <machine/copy_user.h>
#include <kern/assert.h>
#include <kern/counters.h>
#include <kern/debug.h>
@@ -49,6 +48,7 @@
#include <kern/ipc_sched.h>
#include <kern/exception.h>
#include <vm/vm_map.h>
+#include <ipc/copy_user.h>
#include <ipc/ipc_kmsg.h>
#include <ipc/ipc_marequest.h>
#include <ipc/ipc_mqueue.h>
diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c
index d26d2c6d..b753a25f 100644
--- a/kern/ipc_mig.c
+++ b/kern/ipc_mig.c
@@ -30,7 +30,6 @@
#include <mach/mig_support.h>
#include <mach/thread_status.h>
#include <machine/locore.h>
-#include <machine/copy_user.h>
#include <kern/ast.h>
#include <kern/debug.h>
#include <kern/ipc_tt.h>
@@ -42,6 +41,7 @@
#include <kern/ipc_mig.h>
#include <vm/vm_map.h>
#include <vm/vm_user.h>
+#include <ipc/copy_user.h>
#include <ipc/port.h>
#include <ipc/ipc_kmsg.h>
#include <ipc/ipc_entry.h>
diff --git a/x86_64/Makefrag.am b/x86_64/Makefrag.am
index b0bc45c2..2bbed986 100644
--- a/x86_64/Makefrag.am
+++ b/x86_64/Makefrag.am
@@ -90,7 +90,6 @@ libkernel_a_SOURCES += \
i386/i386/percpu.h \
i386/i386/percpu.c \
x86_64/cswitch.S \
- x86_64/copy_user.c \
x86_64/debug_trace.S \
x86_64/idt_inittab.S \
x86_64/locore.S \