Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

setjmp.S 625B

1234567891011121314151617181920212223242526272829303132
  1. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )
  2. .text
  3. .arm
  4. /*
  5. * Save stack context for non-local goto
  6. */
  7. .globl setjmp
  8. .type setjmp, %function
  9. setjmp:
  10. /* Store registers */
  11. stmia r0, { r4, r5, r6, r7, r8, r9, r10, fp, sp, lr }
  12. /* Return 0 when returning as setjmp() */
  13. mov r0, #0
  14. bx lr
  15. .size setjmp, . - setjmp
  16. /*
  17. * Non-local jump to a saved stack context
  18. */
  19. .globl longjmp
  20. .type longjmp, %function
  21. longjmp:
  22. /* Restore registers */
  23. ldmia r0, { r4, r5, r6, r7, r8, r9, r10, fp, sp, lr }
  24. /* Force result to non-zero */
  25. movs r0, r1
  26. moveq r0, #1
  27. /* Return to setjmp() caller */
  28. bx lr
  29. .size longjmp, . - longjmp