summaryrefslogtreecommitdiff
path: root/hurd
diff options
context:
space:
mode:
authorneal <neal>2008-02-06 15:55:28 +0000
committerneal <neal>2008-02-06 15:55:28 +0000
commitb9a03ef381d1b7c92b96537515829a06ad7360be (patch)
treefcc680f3496d3f65d50108994b766e5a6d1e144d /hurd
parent3355d3b116a2ce1d1e3220bbcca42dc0ced68aae (diff)
hurd/
2008-02-06 Neal H. Walfield <neal@gnu.org> * folio.h (folio_object_cap): New function. viengoos/ 2008-02-06 Neal H. Walfield <neal@gnu.org> * as.c (do_index): New function. (as_build_internal): Don't index a page table directly. Instead, use the above new function.
Diffstat (limited to 'hurd')
-rw-r--r--hurd/ChangeLog4
-rw-r--r--hurd/folio.h33
2 files changed, 37 insertions, 0 deletions
diff --git a/hurd/ChangeLog b/hurd/ChangeLog
index 4691d72..08a7ae3 100644
--- a/hurd/ChangeLog
+++ b/hurd/ChangeLog
@@ -1,3 +1,7 @@
+2008-02-06 Neal H. Walfield <neal@gnu.org>
+
+ * folio.h (folio_object_cap): New function.
+
2008-02-05 Neal H. Walfield <neal@gnu.org>
* folio.h (struct folio) [RM_INTERN]: Remove field dhazard,
diff --git a/hurd/folio.h b/hurd/folio.h
index 9b1b934..a37ebb3 100644
--- a/hurd/folio.h
+++ b/hurd/folio.h
@@ -275,6 +275,39 @@ folio_object_content_set (struct folio *folio, int object,
folio->misc[object + 1].content = content;
}
#endif /* RM_INTERN */
+
+/* Return a cap designating folio FOLIO's OBJECT'th object. */
+#ifdef RM_INTERN
+/* This needs to be a macro as we use object_to_object_desc which is
+ made available by object.h but object.h includes this file. */
+#define folio_object_cap(__foc_folio, __foc_object) \
+ ({ \
+ struct cap __foc_cap; \
+ \
+ __foc_cap.type = folio_object_type (__foc_folio, __foc_object); \
+ __foc_cap.version = folio_object_version (__foc_folio, \
+ __foc_object); \
+ __foc_cap.weak_p = false; \
+ \
+ struct cap_properties __foc_cap_properties \
+ = CAP_PROPERTIES (folio_object_policy (__foc_folio, __foc_object), \
+ CAP_ADDR_TRANS_VOID); \
+ CAP_PROPERTIES_SET (&__foc_cap, __foc_cap_properties); \
+ \
+ __foc_cap.oid \
+ = object_to_object_desc ((struct object *) __foc_folio)->oid \
+ + 1 + __foc_object; \
+ \
+ __foc_cap; \
+ })
+#else
+static inline struct cap
+folio_object_cap (struct folio *folio, int object)
+{
+ assert (0 <= object && object < FOLIO_OBJECTS);
+ return folio->objects[object];
+}
+#endif
#define RPC_STUB_PREFIX rm
#define RPC_ID_PREFIX RM