| /* |
| * arch/arm/syscall.S |
| * |
| * System call common handling |
| */ |
| |
| .type __syscall_common,#function |
| .globl __syscall_common |
| #ifndef __thumb__ |
| /* ARM version - this is executed after the swi */ |
| |
| .align 4 |
| __syscall_common: |
| cmn r0, #4096 |
| rsbcs r2, r0, #0 |
| ldrcs r3, 1f |
| mvncs r0, #0 |
| strcs r2, [r3] |
| ldmfd sp!,{r4,r5,pc} |
| |
| .align 4 |
| 1: |
| .word errno |
| |
| #else |
| /* Thumb version - must still load r4 and r5 and run swi */ |
| |
| .thumb_func |
| .align 2 |
| __syscall_common: |
| ldr r4, [sp #12] |
| ldr r5, [sp #16] |
| swi 0 |
| ldr r1, 2f |
| cmp r0, r1 |
| bcc 1f |
| ldr r1, 3f |
| neg r2, r0 |
| mvn r0, #0 |
| str r2, [r1] |
| 1: |
| pop {r4,r5,r7,pc} |
| |
| .align 4 |
| 2: |
| .word #-4095 |
| 3: |
| .word errno |
| |
| #endif |