<< Back to Codezero API Reference
int l4_exchange_registers(void *exregs_struct, l4id_t tid);
/* Values for the flags fields */ #define EXREGS_SET_PAGER 1 #define EXREGS_SET_UTCB 2 /* Generic structure passed by userspace pagers for exchanging registers */ struct exregs_data { exregs_context_t context; u32 valid_vect; u32 flags; l4id_t pagerid; unsigned long utcb_address; }; /* Exchange registers context structure for ARM */ typedef struct arm_exregs_context { u32 r0; /* 0x4 */ u32 r1; /* 0x8 */ u32 r2; /* 0xC */ u32 r3; /* 0x10 */ u32 r4; /* 0x14 */ u32 r5; /* 0x18 */ u32 r6; /* 0x1C */ u32 r7; /* 0x20 */ u32 r8; /* 0x24 */ u32 r9; /* 0x28 */ u32 r10; /* 0x2C */ u32 r11; /* 0x30 */ u32 r12; /* 0x34 */ u32 sp; /* 0x38 */ u32 lr; /* 0x3C */ u32 pc; /* 0x40 */ } __attribute__((__packed__)) exregs_context_t;
/* * Exchange register library calls to modify program counter, * stack, pager id, utcb address and any hardware register. */ void exregs_set_stack(struct exregs_data *s, unsigned long sp); void exregs_set_mr(struct exregs_data *s, int offset, unsigned long val); void exregs_set_pc(struct exregs_data *s, unsigned long pc); void exregs_set_pager(struct exregs_data *s, l4id_t pagerid); void exregs_set_utcb(struct exregs_data *s, unsigned long virt);