notejmp.c 401 B

1234567891011121314151617181920212223
  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 r7 in noted
  11. */
  12. r->r8 = ret;
  13. if(ret == 0)
  14. r->r8 = 1;
  15. r->r9 = j[JMPBUFPC] - JMPBUFDPC;
  16. r->pc = (ulong)__noterestore;
  17. r->npc = (ulong)__noterestore + 4;
  18. r->sp = j[JMPBUFSP];
  19. noted(NCONT);
  20. }