registers.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * Copyright (C) 2004 PathScale, Inc
  3. * Licensed under the GPL
  4. */
  5. #include <errno.h>
  6. #include <string.h>
  7. #include <sys/ptrace.h>
  8. #include "user.h"
  9. #include "sysdep/ptrace.h"
  10. /* This is set once at boot time and not changed thereafter */
  11. static unsigned long exec_regs[MAX_REG_NR];
  12. void init_thread_registers(union uml_pt_regs *to)
  13. {
  14. memcpy(to->skas.regs, exec_regs, sizeof(to->skas.regs));
  15. }
  16. void save_registers(int pid, union uml_pt_regs *regs)
  17. {
  18. int err;
  19. err = ptrace(PTRACE_GETREGS, pid, 0, regs->skas.regs);
  20. if(err < 0)
  21. panic("save_registers - saving registers failed, errno = %d\n",
  22. errno);
  23. }
  24. void restore_registers(int pid, union uml_pt_regs *regs)
  25. {
  26. int err;
  27. err = ptrace(PTRACE_SETREGS, pid, 0, regs->skas.regs);
  28. if(err < 0)
  29. panic("restore_registers - saving registers failed, "
  30. "errno = %d\n", errno);
  31. }
  32. void init_registers(int pid)
  33. {
  34. int err;
  35. err = ptrace(PTRACE_GETREGS, pid, 0, exec_regs);
  36. if(err)
  37. panic("check_ptrace : PTRACE_GETREGS failed, errno = %d",
  38. errno);
  39. }
  40. void get_safe_registers(unsigned long *regs)
  41. {
  42. memcpy(regs, exec_regs, sizeof(exec_regs));
  43. }