-Parameter Info Block (PIB), all offsets in pointer-length words
- Name Offset Meaning
- buffer_size 0 Size of the destination buffer, excluding
+Parameter Info Block (PIB)
+ Name Size Meaning
+ buffer_size 32-bit Size of the destination buffer, excluding
Copy segments.
The total number of bytes in all of the segments that require a
- buffer to be created in the destination address space. This is
+ buffer to be created in the destination address space, with each
+ buffer individually rounded up to an 8-byte alignment. This is
specified so that the kernel can allocate one large buffer for all
- segments before traversing the segment list. When returning from a
- method, the buffer size only includes buffers allocated by the
- caller; "inout" segments where the caller specified a non-NULL ptr,
- and the callee did not increase the length, are not included
+ segments before traversing the segment list. When returning from
+ a method, the buffer size only includes buffers allocated by the
+ caller; "inout" segments where the caller specified a non-NULL
+ ptr, and the callee did not increase the length, are not included
(because the kernel does not need to allocate a caller-side buffer
- for them). The kernel may throw an exception if the actual
- size is greater than specified in this field.
+ for them). The kernel may throw an exception if the actual size
+ is greater than specified in this field.
This only covers the "normal" segments which are mapped only
for the duration of the call. Copy segments are handled
separately.
- copy_size 1 Size of all Copy segments.
+ copy_size 32-bit Size of all Copy segments.
- This is like buffer_size, but for Copy segments. The pages
+ This is like buffer_size, but for Copy segments.
- objlist_ptr 2 Pointer to the object list
- objlist_len 3 Length of the object list, in IDs
+ objlist_ptr pointer Pointer to the object list
+ newobj_ptr pointer Pointer to the new object list.
+ objlist_len 32-bit Length of the object list, in IDs
+ newobj_len 32-bit Length of the new object list.
The object list is a special segment that contains object IDs
rather than arbitrary data. Each object ID will be translated
regardless of the pointer size. The first object in the list
is the object to receive the message.
- num_segments 4 Number of data segments
- segment.ptr 5+n*4 Pointer to data segment
- segment.len 6+n*4 Length of data segment in bytes
- segment.flags 7+n*4 Attributes of data segment
- reserved 8+n*4 Reserved for future use, and for
- power-of-two indexing
+ Objects which live in this address space have the high bit
+ clear; remote objects have the high bit set. When sending
+ an object reference that has not been exposed to the kernel
+ before, its interface hash should exist in the newobj list.
+
+
+
+ num_segments 32-bit Number of data segments
+
+ segment.ptr pointer Pointer to data segment
+ segment.len 32-bit Length of data segment in bytes
+ segment.flags 32-bit Attributes of data segment
+ reserved Reserved for future use, and for
+ power-of-two indexing -- pad to
+ 32 bytes.
Each segment describes data being transmitted to and/or from the
callee. For out segments, the caller may designate a buffer to hold