942 B
942 B
Extend
The extend mechanism allows a structure to be extended by a model. It works by
placing an array of pointers indexed by the model identifier (char) inside the
structure. Most of the structures of the emulator have a ext
member, allowing
them to be extended.
Models are forbidden to access information from other models than their own.
The function void extend_set(struct extend *ext, int id, void *ctx)
stores the
ctx pointer inside the extend structure for the model with the given id.
Use void *extend_get(struct extend *ext, int id)
to retrieve its value.
A helper macro EXT(st, m)
directly attempts to find the member ext
in the
structure st, and return the pointer of the model m
.
Here is an example where Nanos6 stores its own CPU information:
struct cpu *syscpu;
struct nanos6_cpu *cpu;
extend_set(&syscpu->ext, '6', cpu);
cpu = extend_get(&syscpu->ext, '6');
cpu = EXT(syscpu, '6'); /* same */