The copyinmsg() and copyoutmsg() routines are defined per-arch (in
i386/i386/locore.S and friends) but have never had cross-arch
declarations.  Each kern/ caller has historically picked them up
through an arch-specific header, or via implicit declaration.

Declare them in <ipc/copy_user.h> alongside the other copy_user
helpers, with copyoutmsg becoming an alias for copyout when not
building a 64-bit kernel with a 32-bit userland (the only case
where the two diverge today).  Add the missing include to
kern/exception.c which uses both.
---
 ipc/copy_user.h  | 15 +++++++++++++++
 kern/exception.c |  1 +
 2 files changed, 16 insertions(+)

diff --git a/ipc/copy_user.h b/ipc/copy_user.h
index a57b3ee5..33beacd0 100644
--- a/ipc/copy_user.h
+++ b/ipc/copy_user.h
@@ -25,6 +25,21 @@
 #include <machine/locore.h>
 #include <mach/message.h>
 
+int copyinmsg(
+       const void      *userbuf,
+       void            *kernelbuf,
+       size_t          usize,
+       size_t          ksize);
+
+#ifdef USER32
+int copyoutmsg(
+       const void      *kernelbuf,
+       void            *userbuf,
+       size_t          ksize);
+#else
+#define copyoutmsg     copyout
+#endif
+
 /*
  * 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
diff --git a/kern/exception.c b/kern/exception.c
index 7139b466..cc023d45 100644
--- a/kern/exception.c
+++ b/kern/exception.c
@@ -30,6 +30,7 @@
 #include <mach/port.h>
 #include <mach/mig_errors.h>
 #include <machine/locore.h>
+#include <ipc/copy_user.h>
 #include <ipc/port.h>
 #include <ipc/ipc_entry.h>
 #include <ipc/ipc_notify.h>
-- 
2.54.0


Reply via email to