/arch/um/sys-x86_64/util/mk_sc.c

https://bitbucket.org/evzijst/gittest · C · 58 lines · 50 code · 5 blank · 3 comment · 0 complexity · cefd965322d46549fea8362d09c9142c MD5 · raw file

  1. /* Copyright (C) 2003 - 2004 PathScale, Inc
  2. * Released under the GPL
  3. */
  4. #include <stdio.h>
  5. #include <signal.h>
  6. #include <linux/stddef.h>
  7. #define SC_OFFSET(name, field) \
  8. printf("#define " name \
  9. "(sc) *((unsigned long *) &(((char *) (sc))[%ld]))\n",\
  10. offsetof(struct sigcontext, field))
  11. #define SC_FP_OFFSET(name, field) \
  12. printf("#define " name \
  13. "(sc) *((unsigned long *) &(((char *) (SC_FPSTATE(sc)))[%ld]))\n",\
  14. offsetof(struct _fpstate, field))
  15. #define SC_FP_OFFSET_PTR(name, field, type) \
  16. printf("#define " name \
  17. "(sc) ((" type " *) &(((char *) (SC_FPSTATE(sc)))[%d]))\n",\
  18. offsetof(struct _fpstate, field))
  19. int main(int argc, char **argv)
  20. {
  21. SC_OFFSET("SC_RBX", rbx);
  22. SC_OFFSET("SC_RCX", rcx);
  23. SC_OFFSET("SC_RDX", rdx);
  24. SC_OFFSET("SC_RSI", rsi);
  25. SC_OFFSET("SC_RDI", rdi);
  26. SC_OFFSET("SC_RBP", rbp);
  27. SC_OFFSET("SC_RAX", rax);
  28. SC_OFFSET("SC_R8", r8);
  29. SC_OFFSET("SC_R9", r9);
  30. SC_OFFSET("SC_R10", r10);
  31. SC_OFFSET("SC_R11", r11);
  32. SC_OFFSET("SC_R12", r12);
  33. SC_OFFSET("SC_R13", r13);
  34. SC_OFFSET("SC_R14", r14);
  35. SC_OFFSET("SC_R15", r15);
  36. SC_OFFSET("SC_IP", rip);
  37. SC_OFFSET("SC_SP", rsp);
  38. SC_OFFSET("SC_CR2", cr2);
  39. SC_OFFSET("SC_ERR", err);
  40. SC_OFFSET("SC_TRAPNO", trapno);
  41. SC_OFFSET("SC_CS", cs);
  42. SC_OFFSET("SC_FS", fs);
  43. SC_OFFSET("SC_GS", gs);
  44. SC_OFFSET("SC_EFLAGS", eflags);
  45. SC_OFFSET("SC_SIGMASK", oldmask);
  46. #if 0
  47. SC_OFFSET("SC_ORIG_RAX", orig_rax);
  48. SC_OFFSET("SC_DS", ds);
  49. SC_OFFSET("SC_ES", es);
  50. SC_OFFSET("SC_SS", ss);
  51. #endif
  52. return(0);
  53. }