setjmp.S 879 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. .global setjmp
  2. .type setjmp, STT_FUNC
  3. setjmp:
  4. pushl %ebp
  5. movl %esp,%ebp
  6. pushl %edi
  7. movl 8(%ebp),%edi
  8. movl %eax,0 (%edi)
  9. movl %ebx,4 (%edi)
  10. movl %ecx,8 (%edi)
  11. movl %edx,12 (%edi)
  12. movl %esi,16 (%edi)
  13. movl -4 (%ebp),%eax
  14. movl %eax,20 (%edi)
  15. movl 0 (%ebp),%eax
  16. movl %eax,24 (%edi)
  17. movl %esp,%eax
  18. addl $12,%eax
  19. movl %eax,28 (%edi)
  20. movl 4 (%ebp),%eax
  21. movl %eax,32 (%edi)
  22. popl %edi
  23. movl $0,%eax
  24. leave
  25. ret
  26. .global longjmp
  27. .type longjmp, STT_FUNC
  28. longjmp:
  29. pushl %ebp
  30. movl %esp,%ebp
  31. movl 8(%ebp),%edi /* get jmp_buf */
  32. movl 12(%ebp),%eax /* store retval in j->eax */
  33. testl %eax,%eax
  34. jne 0f
  35. incl %eax
  36. 0:
  37. movl %eax,0(%edi)
  38. movl 24(%edi),%ebp
  39. /*__CLI */
  40. movl 28(%edi),%esp
  41. pushl 32(%edi)
  42. movl 0 (%edi),%eax
  43. movl 4 (%edi),%ebx
  44. movl 8 (%edi),%ecx
  45. movl 12(%edi),%edx
  46. movl 16(%edi),%esi
  47. movl 20(%edi),%edi
  48. /*__STI */
  49. ret