diff options
Diffstat (limited to 'arch/mips/kernel')
| -rw-r--r-- | arch/mips/kernel/scall64-o32.S | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 13b964fddc4a..25bb8400156d 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
| @@ -113,15 +113,19 @@ trace_a_syscall: | |||
| 113 | move s0, t2 # Save syscall pointer | 113 | move s0, t2 # Save syscall pointer |
| 114 | move a0, sp | 114 | move a0, sp |
| 115 | /* | 115 | /* |
| 116 | * syscall number is in v0 unless we called syscall(__NR_###) | 116 | * absolute syscall number is in v0 unless we called syscall(__NR_###) |
| 117 | * where the real syscall number is in a0 | 117 | * where the real syscall number is in a0 |
| 118 | * note: NR_syscall is the first O32 syscall but the macro is | 118 | * note: NR_syscall is the first O32 syscall but the macro is |
| 119 | * only defined when compiling with -mabi=32 (CONFIG_32BIT) | 119 | * only defined when compiling with -mabi=32 (CONFIG_32BIT) |
| 120 | * therefore __NR_O32_Linux is used (4000) | 120 | * therefore __NR_O32_Linux is used (4000) |
| 121 | */ | 121 | */ |
| 122 | addiu a1, v0, __NR_O32_Linux | 122 | .set push |
| 123 | bnez v0, 1f /* __NR_syscall at offset 0 */ | 123 | .set reorder |
| 124 | lw a1, PT_R4(sp) | 124 | subu t1, v0, __NR_O32_Linux |
| 125 | move a1, v0 | ||
| 126 | bnez t1, 1f /* __NR_syscall at offset 0 */ | ||
| 127 | lw a1, PT_R4(sp) /* Arg1 for __NR_syscall case */ | ||
| 128 | .set pop | ||
| 125 | 129 | ||
| 126 | 1: jal syscall_trace_enter | 130 | 1: jal syscall_trace_enter |
| 127 | 131 | ||
