blob: 0955e0e907476f11d021e0c685d485309cda65e0 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
|
// This is the privileged code, that gets placed somewhere in
// unprivileged process' address space. It's compiled as relocatable,
// so it can be loaded at different address for different processes.
void call_unprivileged(void (*address) (void)) {
// switch to PL0
asm("cps #0b10000\n\r"
"isb" ::: "memory");
// jump to that unprivileged code
address();
}
|