summaryrefslogtreecommitdiff
path: root/debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch')
-rw-r--r--debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch147
1 files changed, 147 insertions, 0 deletions
diff --git a/debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch b/debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch
new file mode 100644
index 00000000..5c8f6201
--- /dev/null
+++ b/debian/patches/0001-hurd-add-an-Hurd-server-introspection-protocol.patch
@@ -0,0 +1,147 @@
+From a906f41d8d9f41da77bc32aece6983e88a17cc42 Mon Sep 17 00:00:00 2001
+From: Justus Winter <4winter@informatik.uni-hamburg.de>
+Date: Wed, 21 May 2014 16:40:12 +0200
+Subject: [PATCH hurd 1/8] hurd: add an Hurd server introspection protocol
+
+Most Hurd servers use libports to manage receive rights and the
+associated objects. These procedures can be used to query the state
+associated with receive rights managed by libports.
+
+The procedures are not specific to libports. Any Hurd server can
+implement this protocol. To do so, a server installs a send right in
+the array of well-known ports, under the key
+HURD_PORT_REGISTER_INTROSPECTION.
+
+* hurd/hurd_port.defs: New file.
+* hurd/hurd_types.h (HURD_PORT_REGISTER_INTROSPECTION): New macro.
+(HURD_PORT_REGISTER_MAX): Likewise.
+* hurd/subsystems: Add hurd_port subsystem.
+---
+ hurd/hurd_port.defs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ hurd/hurd_types.h | 7 +++++
+ hurd/subsystems | 1 +
+ 3 files changed, 86 insertions(+)
+ create mode 100644 hurd/hurd_port.defs
+
+diff --git a/hurd/hurd_port.defs b/hurd/hurd_port.defs
+new file mode 100644
+index 0000000..d1f46b3
+--- /dev/null
++++ b/hurd/hurd_port.defs
+@@ -0,0 +1,78 @@
++/* Hurd server introspection.
++
++ Copyright (C) 2014 Free Software Foundation, Inc.
++
++ This file is part of the GNU Hurd.
++
++ The GNU Hurd is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License as
++ published by the Free Software Foundation; either version 2, or (at
++ your option) any later version.
++
++ The GNU Hurd is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */
++
++subsystem hurd_port 39000;
++
++/* Hurd server introspection.
++
++ Most Hurd servers use libports to manage receive rights and the
++ associated objects. These procedures can be used to query the
++ state associated with receive rights managed by libports.
++
++ The procedures are not specific to libports. Any Hurd server can
++ implement this protocol. To do so, a server installs a send right
++ in the array of well-known ports, under the key
++ HURD_PORT_REGISTER_INTROSPECTION.
++
++ A client in possession of the servers task port can retrieve a copy
++ of this send right using mach_ports_lookup. */
++
++#include <hurd/hurd_types.defs>
++
++#ifdef HURD_PORT_IMPORTS
++HURD_PORT_IMPORTS
++#endif
++
++INTR_INTERFACE
++
++/* Return the number of hard and weak references of the object
++ directly associated with the receive right NAME.
++
++ Return EINVAL if NAME does not denote a receive right managed by
++ the port-to-object mapper, or if the concept of reference counting
++ simply does not apply. */
++routine hurd_port_get_refcounts (
++ introspection: mach_port_t;
++ name: mach_port_name_t;
++ waittime timeout: natural_t;
++ RPT
++ out hard: natural_t;
++ out weak: natural_t);
++
++/* Return a compact, human-readable description of the object related
++ with the receive right NAME.
++
++ This description is meant for debugging purposes and should include
++ relevant internal state. If possible, it should include
++ information that is meaningful in other contexts (like a file name,
++ or the inode number).
++
++ Return EINVAL if NAME does not denote a receive right managed by
++ the port-to-object mapper. */
++routine hurd_port_debug_info (
++ introspection: mach_port_t;
++ name: mach_port_name_t;
++ waittime timeout: natural_t;
++ RPT
++ out debug_info: string_t);
++
++routine hurd_port_trace_class_rpcs (
++ introspection: mach_port_t;
++ name: mach_port_name_t;
++ trace_port: mach_port_send_t);
+diff --git a/hurd/hurd_types.h b/hurd/hurd_types.h
+index 4341177..76a8201 100644
+--- a/hurd/hurd_types.h
++++ b/hurd/hurd_types.h
+@@ -23,6 +23,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+ #include <time.h> /* For struct timespec. */
+ #include <mach/std_types.h> /* For mach_port_t et al. */
+ #include <mach/message.h> /* For mach_msg_id_t et al. */
++#include <mach/mach_param.h> /* For TASK_PORT_REGISTER_MAX. */
+ #include <sys/types.h> /* For pid_t and uid_t. */
+
+ /* A string identifying this release of the GNU Hurd. Our
+@@ -372,4 +373,10 @@ enum
+ INIT_INT_MAX,
+ };
+
++/* Define the well-known ports available via mach_ports_lookup. */
++#define HURD_PORT_REGISTER_INTROSPECTION 0
++
++/* This is a fixed limit. */
++#define HURD_PORT_REGISTER_MAX TASK_PORT_REGISTER_MAX
++
+ #endif
+diff --git a/hurd/subsystems b/hurd/subsystems
+index c05895c..59893b2 100644
+--- a/hurd/subsystems
++++ b/hurd/subsystems
+@@ -36,6 +36,7 @@ tape 35000 Special control operations for magtapes
+ login 36000 Database of logged-in users
+ pfinet 37000 Internet configuration calls
+ password 38000 Password checker
++hurd_port 39000 Port debugging and introspection
+ <ioctl space> 100000- First subsystem of ioctl class 'f' (lowest class)
+ tioctl 156000 Ioctl class 't' (terminals)
+ tioctl 156200 (continued)
+--
+2.1.4
+