notejmp.c 365 B

12345678910111213141516171819202122
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <ureg.h>
  4. int __noterestore(void);
  5. void
  6. notejmp(void *vr, jmp_buf j, int ret)
  7. {
  8. struct Ureg *r = vr;
  9. /*
  10. * song and dance to get around the kernel smashing r3 in noted
  11. */
  12. r->r4 = ret;
  13. if(ret == 0)
  14. r->r4 = 1;
  15. r->r5 = j[JMPBUFPC] - JMPBUFDPC;
  16. r->pc = (ulong)__noterestore;
  17. r->sp = j[JMPBUFSP];
  18. noted(NCONT);
  19. }