ovni/doc/dev/extend.md

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 */