sigtramp.s 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. .global __sigtramp
  2. __sigtramp:
  3. dec 0x10, %sp
  4. st %g1, [%sp+0x44]
  5. std %l0, [%sp+0x48]
  6. save %sp, %g4, %sp
  7. st %g0, [%sp + 64]
  8. clr %l1
  9. mov %fp, %l0
  10. ld [%fp + 0x58], %o2
  11. set 0x1000, %l3
  12. ld [%o2 + 0x14], %o0
  13. rd %y, %l4
  14. andcc %o0, %l3, %g0
  15. be 1f
  16. st %l4, [%sp + 0xe4]
  17. std %f0, [%sp + 0x60]
  18. std %f2, [%sp + 0x68]
  19. std %f4, [%sp + 0x70]
  20. std %f6, [%sp + 0x78]
  21. std %f8, [%sp + 0x80]
  22. std %f10, [%sp + 0x88]
  23. std %f12, [%sp + 0x90]
  24. std %f14, [%sp + 0x98]
  25. std %f16, [%sp + 0xa0]
  26. std %f18, [%sp + 0xa8]
  27. std %f20, [%sp + 0xb0]
  28. std %f22, [%sp + 0xb8]
  29. std %f24, [%sp + 0xc0]
  30. std %f26, [%sp + 0xc8]
  31. std %f28, [%sp + 0xd0]
  32. std %f30, [%sp + 0xd8]
  33. st %fsr, [%sp + 0xe0]
  34. 1:
  35. std %g2, [%sp + 0xe8]
  36. std %g4, [%sp + 0xf0]
  37. std %g6, [%sp + 0xf8]
  38. ld [%fp + 0x50], %o0
  39. dec 4, %l0
  40. st %o0, [%l0]
  41. set __sigfunc, %g1
  42. sll %o0, 2, %g2
  43. add %g1, %g2, %g3
  44. ld [%g3], %g2
  45. call %g2
  46. nop
  47. add %fp, %g4, %sp ! cannot trust %sp after call
  48. ld [%fp + 0x5c], %o3
  49. ld [%fp + 0x58], %i0
  50. ld [%sp + 0xe4], %l1
  51. ld [%i0 + 0x14], %o0
  52. mov %l1, %y
  53. andcc %o0, %l3, %g0
  54. be 2f
  55. ldd [%sp + 0xe8], %g2
  56. ldd [%sp + 0x60], %f0
  57. ldd [%sp + 0x68], %f2
  58. ldd [%sp + 0x70], %f4
  59. ldd [%sp + 0x78], %f6
  60. ldd [%sp + 0x80], %f8
  61. ldd [%sp + 0x88], %f10
  62. ldd [%sp + 0x90], %f12
  63. ldd [%sp + 0x98], %f14
  64. ldd [%sp + 0xa0], %f16
  65. ldd [%sp + 0xa8], %f18
  66. ldd [%sp + 0xb0], %f20
  67. ldd [%sp + 0xb8], %f22
  68. ldd [%sp + 0xc0], %f24
  69. ldd [%sp + 0xc8], %f26
  70. ldd [%sp + 0xd0], %f28
  71. ldd [%sp + 0xd8], %f30
  72. ld [%sp + 0xe0], %fsr
  73. 2:
  74. ldd [%sp + 0xf0], %g4
  75. ldd [%sp + 0xf8], %g6
  76. restore %g0, 0x8b, %g1
  77. ldd [%sp+0x48], %l0
  78. inc 0x10, %sp
  79. ta %g0
  80. nop