Parameter Info Block (PIB), all offsets in pointer-length words
- Name Offset Meaning
- buffer_size 0 Size of the destination buffer
+ Name Offset Meaning
+ buffer_size 0 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
(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.
+
+ 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.
+
+ This is like buffer_size, but for Copy segments. The pages
- objlist_ptr 1 Pointer to the object list
- objlist_len 2 Length of the object list, in IDs
+ objlist_ptr 2 Pointer to the object list
+ objlist_len 3 Length of the object list, in IDs
The object list is a special segment that contains object IDs
rather than arbitrary data. Each object ID will be translated
into the destination ID-space, allocating new IDs when
necessary. The IDs themselves are 32 bits each, unsigned,
- regardless of the pointer size.
+ regardless of the pointer size. The first object in the list
+ is the object to receive the message.
- num_segments 3 Number of data segments
- segment.ptr 4+n*4 Pointer to data segment
- segment.len 5+n*4 Length of data segment in bytes
- segment.flags 6+n*4 Attributes of data segment
- reserved 7+n*4 Reserved for future use, and for
- power-of-two indexing
+ 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
Each segment describes data being transmitted to and/or from the
callee. For out segments, the caller may designate a buffer to hold
Segment Flags (see doc/orb/memory-management for more details):
In 0x01 Data is copied/mapped from caller to callee.
Out 0x02 Data is copied/mapped from callee to caller.
- Shared 0x04 A permanent shared mapping is created.
- Push 0x08 The region is unmapped from the source and
- transferred to the destination.
- Inline 0x10 The callee cannot change the length of an
- Out segment. Ignored for In segments.
- Immutable 0x20 The segment is to be mapped read-only in
- the destination. Ignored unless Shared is
- set.
- Copy 0x8000 The segment is permanently copied into the
+ The data is unmapped from the callee unless
+ Copy is set.
+ Inline 0x04 The callee cannot change the length of an
+ Out segment, and the caller must provide the
+ buffer. Ignored for In segments.
+ Copy 0x08 The segment is permanently copied into the
destination address space, with read/write
access.