vxproc.h - vx32 - Local 9vx git repository for patches.
(HTM) git clone git://r-36.net/vx32
(DIR) Log
(DIR) Files
(DIR) Refs
---
vxproc.h (2016B)
---
1 //
2 // VX process control interface client stubs
3 // XX Should this header perhaps be private to the C library?
4 //
5 #ifndef _VXPROC_H_
6 #define _VXPROC_H_
7
8 #include <stdint.h>
9
10 #include <vx/ipc.h>
11 #include <vxipc.h>
12
13
14 // Cause proc to exit with specified status code.
15 // Usually only called by process proc itself.
16 static inline void
17 vxproc_exit(intptr_t proc, int status) {
18 intptr_t h = proc | VXPROC_EXIT |
19 VXIPC_SEND0 | VXIPC_RECV0 | VXIPC_CALL;
20 intptr_t s1 = status, s2 = 0;
21 VXCALL(h, s1, s2, 0, 0);
22 }
23
24 // Close the handle at address va in proc.
25 static inline void
26 vxproc_drop(intptr_t proc, intptr_t va) {
27 intptr_t h = proc | VXPROC_DROP |
28 VXIPC_SEND0 | VXIPC_RECV0 | VXIPC_CALL;
29 intptr_t s1 = va, s2 = 0;
30 VXCALL(h, s1, s2, 0, 0);
31 }
32
33 // Extract handle at 'va' from 'proc',
34 // and place it at 'localva' in current process.
35 static inline void
36 vxproc_get(intptr_t proc, intptr_t va, intptr_t localva) {
37 intptr_t h = proc | VXPROC_GET |
38 VXIPC_SEND0 | VXIPC_RECV1 | VXIPC_CALL;
39 intptr_t s1 = va, s2 = 0;
40 VXCALL(h, s1, s2, localva, 0);
41 }
42
43 // Insert handle from 'localva' in current process
44 // into process 'proc' at address 'va'.
45 static inline void
46 vxproc_put(intptr_t proc, intptr_t localva, intptr_t va) {
47 intptr_t h = proc | VXPROC_PUT |
48 VXIPC_SEND1 | VXIPC_RECV0 | VXIPC_CALL;
49 intptr_t s1 = localva, s2 = va;
50 VXCALL(h, s1, s2, 0, 0);
51 }
52
53 // Allocate a new chunk of memory and place it at 'va' in 'proc'.
54 static inline void
55 vxproc_alloc(intptr_t proc, intptr_t va) {
56 intptr_t h = proc | VXPROC_ALLOC |
57 VXIPC_SEND0 | VXIPC_RECV0 | VXIPC_CALL;
58 intptr_t s1 = va, s2 = 0;
59 VXCALL(h, s1, s2, 0, 0);
60 }
61
62 // Create a new CALL handle referring to 'proc'
63 // and place it in the current process at 'localva'.
64 // Associate opaque value 'id' with new handle
65 static inline void
66 vxproc_mkcall(intptr_t proc, intptr_t id, intptr_t localva) {
67 intptr_t h = proc | VXPROC_MKCALL |
68 VXIPC_SEND0 | VXIPC_RECV1 | VXIPC_CALL;
69 intptr_t s1 = id, s2 = 0;
70 VXCALL(h, s1, s2, localva, 0);
71 }
72
73
74 #endif // _VXPROC_H_