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