summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-11-28 10:24:26 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-12-07 15:38:18 +0100
commitac30e16e8185883af52b4f45aad9f7a61e5c9911 (patch)
treee2d30574629204f2298f3545450f8151ef2cdc74
parent02ae7e436efa33b11227c251eb9bb3a036082fe1 (diff)
hurd: add intranpayload functions to all hurd types
For each hurd type defined in hurd_types.h, add a intranpayload function. If an X_INTRAN mutation is defined for a type, a corresponding X_INTRAN_PAYLOAD has to be defined. If no X_INTRAN mutation is defined, use ports_payload_get_name as intranpayload function, turning the payload back into an port name. * hurd/hurd_types.defs: Add intranpayload functions. * hurd/term.defs: Likewise. * hurd/default_pager.defs: Include `hurd_types.defs' for `MACH_PAYLOAD_TO_PORT'.
-rw-r--r--hurd/default_pager.defs1
-rw-r--r--hurd/hurd_types.defs120
-rw-r--r--hurd/term.defs3
3 files changed, 123 insertions, 1 deletions
diff --git a/hurd/default_pager.defs b/hurd/default_pager.defs
index 1a4290d5..a97bff2a 100644
--- a/hurd/default_pager.defs
+++ b/hurd/default_pager.defs
@@ -29,6 +29,7 @@
subsystem default_pager 2275;
+#include <hurd/hurd_types.defs> /* For `MACH_PAYLOAD_TO_PORT'. */
#include <mach/std_types.defs>
#include <mach/mach_types.defs>
#include <mach/default_pager_types.defs>
diff --git a/hurd/hurd_types.defs b/hurd/hurd_types.defs
index 129a68cf..57af6dc0 100644
--- a/hurd/hurd_types.defs
+++ b/hurd/hurd_types.defs
@@ -18,13 +18,67 @@ along with the GNU Hurd; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+/* The Hurd uses protected payloads to quickly look up the object
+ receiving a message. Looking up objects is optimized at the cost
+ of having to translate payloads back to port names if the server
+ function expect a port name rather than an object.
+
+ Support for this is implemented in libports. Almost all of Hurd's
+ servers use libports. For servers using libports, the optimized
+ lookup is completely transparent.
+
+ Servers not using libports are not using protected payloads
+ automatically. Define HURD_DEFAULT_PAYLOAD_TO_PORT to 1 (1 like
+ the identity function) for programs not using libports to avoid
+ injecting the default payload-to-port translation function which is
+ in libports. If you want to use protected payloads without
+ libports, you can use HURD_DEFAULT_PAYLOAD_TO_PORT to inject a
+ custom translation function. */
+
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+#if HURD_DEFAULT_PAYLOAD_TO_PORT
+/* Any non-numeric value will fail this test. If 1 (or any number) is
+ given, do not inject the default translator function. */
+#undef HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
+#else
+ import <hurd/ports.h>;
+#define HURD_DEFAULT_PAYLOAD_TO_PORT ports_payload_get_name
+#endif
+
+/* Override the mach_port_t. Use the default payload to port
+ translation function to convert payloads back to port names for
+ this type. */
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+#define MACH_PAYLOAD_TO_PORT HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
+
#include <mach/std_types.defs>
#include <mach/mach_types.defs>
#include <device/device_types.defs>
+
+/* The Hurd types. You can inject translation functions for type X
+ using the X_INTRAN, X_INTRAN_PAYLOAD, X_OUTTRAN, and X_DESTRUCTOR.
+
+ If you define X_INTRAN and your server is using libports, you also
+ have to define X_INTRAN_PAYLOAD.
+
+ If you do not use libports, and do not want to use the protected
+ payload mechanism, but you do want to use X_INTRAN, you must
+ provide a X_INTRAN_PAYLOAD that either ignores the message by
+ returning NULL, or indicates an error condition in some appropriate
+ way. If you do want to use the protected payload mechanism, make
+ sure you also define an appropriate HURD_DEFAULT_PAYLOAD_TO_PORT
+ translation function. */
type file_t = mach_port_copy_send_t
#ifdef FILE_INTRAN
intran: FILE_INTRAN
+intranpayload: FILE_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: file_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef FILE_OUTTRAN
outtran: FILE_OUTTRAN
@@ -37,6 +91,11 @@ destructor: FILE_DESTRUCTOR
type fsys_t = mach_port_copy_send_t
#ifdef FSYS_INTRAN
intran: FSYS_INTRAN
+intranpayload: FSYS_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: fsys_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef FSYS_OUTTRAN
outtran: FSYS_OUTTRAN
@@ -50,6 +109,11 @@ destructor: FSYS_DESTRUCTOR
type io_t = mach_port_copy_send_t
#ifdef IO_INTRAN
intran: IO_INTRAN
+intranpayload: IO_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: io_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef IO_OUTTRAN
outtran: IO_OUTTRAN
@@ -62,6 +126,11 @@ destructor: IO_DESTRUCTOR
type process_t = mach_port_copy_send_t
#ifdef PROCESS_INTRAN
intran: PROCESS_INTRAN
+intranpayload: PROCESS_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: process_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef PROCESS_OUTTRAN
outtran: PROCESS_OUTTRAN
@@ -74,6 +143,11 @@ destructor: PROCESS_DESTRUCTOR
type auth_t = mach_port_copy_send_t
#ifdef AUTH_INTRAN
intran: AUTH_INTRAN
+intranpayload: AUTH_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: auth_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef AUTH_OUTTRAN
outtran: AUTH_OUTTRAN
@@ -86,6 +160,11 @@ destructor: AUTH_DESTRUCTOR
type socket_t = mach_port_copy_send_t
#ifdef SOCKET_INTRAN
intran: SOCKET_INTRAN
+intranpayload: SOCKET_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: socket_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef SOCKET_OUTTRAN
outtran: SOCKET_OUTTRAN
@@ -99,6 +178,11 @@ destructor: SOCKET_DESTRUCTOR
type pf_t = mach_port_copy_send_t
#ifdef PF_INTRAN
intran: PF_INTRAN
+intranpayload: PF_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: pf_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef PF_OUTTRAN
outtran: PF_OUTTRAN
@@ -111,6 +195,11 @@ destructor: PF_DESTRUCTOR
type addr_port_t = mach_port_copy_send_t
#ifdef ADDRPORT_INTRAN
intran: ADDRPORT_INTRAN
+intranpayload: ADDRPORT_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: addr_port_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef ADDRPORT_OUTTRAN
outtran: ADDRPORT_OUTTRAN
@@ -123,6 +212,11 @@ destructor: ADDRPORT_DESTRUCTOR
type term_t = mach_port_copy_send_t
#ifdef TERM_INTRAN
intran: TERM_INTRAN
+intranpayload: TERM_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: term_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef TERM_OUTTRAN
outtran: TERM_OUTTRAN
@@ -135,6 +229,11 @@ destructor: TERM_DESTRUCTOR
type startup_t = mach_port_copy_send_t
#ifdef STARTUP_INTRAN
intran: STARTUP_INTRAN
+intranpayload: STARTUP_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: startup_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef STARTUP_OUTTRAN
outtran: STARTUP_OUTTRAN
@@ -147,6 +246,11 @@ destructor: STARTUP_DESTRUCTOR
type fs_notify_t = mach_port_copy_send_t
#ifdef FS_NOTIFY_INTRAN
intran: FS_NOTIFY_INTRAN
+intranpayload: FS_NOTIFY_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: fs_notify_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef FS_NOTIFY_OUTTRAN
outtran: FS_NOTIFY_OUTTRAN
@@ -159,6 +263,11 @@ destructor: FS_NOTIFY_DESTRUCTOR
type exec_startup_t = mach_port_copy_send_t
#ifdef EXEC_STARTUP_INTRAN
intran: EXEC_STARTUP_INTRAN
+intranpayload: EXEC_STARTUP_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: exec_startup_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef EXEC_STARTUP_OUTTRAN
outtran: EXEC_STARTUP_OUTTRAN
@@ -171,6 +280,11 @@ destructor: EXEC_STARTUP_DESTRUCTOR
type interrupt_t = mach_port_copy_send_t
#ifdef INTERRUPT_INTRAN
intran: INTERRUPT_INTRAN
+intranpayload: INTERRUPT_INTRAN_PAYLOAD
+#else
+#ifdef HURD_DEFAULT_PAYLOAD_TO_PORT
+intranpayload: exec_startup_t HURD_DEFAULT_PAYLOAD_TO_PORT
+#endif
#endif
#ifdef INTERRUPT_OUTTRAN
outtran: INTERRUPT_OUTTRAN
@@ -184,7 +298,11 @@ destructor: INTERRUPT_DESTRUCTOR
type proccoll_t = mach_port_copy_send_t;
type sreply_port_t = MACH_MSG_TYPE_MAKE_SEND_ONCE | polymorphic
- ctype: mach_port_t;
+ ctype: mach_port_t
+#ifdef MACH_PAYLOAD_TO_PORT
+intranpayload: mach_port_t MACH_PAYLOAD_TO_PORT
+#endif /* MACH_PAYLOAD_TO_PORT */
+;
/* These macros are used in some .defs files so that every routine has a
server reply port argument #ifdef REPLY_PORTS. */
diff --git a/hurd/term.defs b/hurd/term.defs
index 45d825de..29b94efd 100644
--- a/hurd/term.defs
+++ b/hurd/term.defs
@@ -33,6 +33,9 @@ type ctty_t = mach_port_copy_send_t
#ifdef CTTY_INTRAN
intran: CTTY_INTRAN
#endif
+#ifdef CTTY_INTRAN_PAYLOAD
+intranpayload: CTTY_INTRAN_PAYLOAD
+#endif
#ifdef CTTY_OUTTRAN
outtran: CTTY_OUTTRAN
#endif