ALL_TRACE? ? ? ? @ are we tracing syscalls? ? 95:? ? beq? ? ret_slow_syscall ? 96:? ? mov? ? r1, sp ? 97:? ? mov? ? r0, #1? ? ? ? ? ? ? ? @ trace exit [IP = 1] ? 98:? ? bl? ? syscall_trace ? 99:? ? b? ? ret_slow_syscall ? 100: ENDPROC(ret_from_fork) ? 101:? ? 102:? ? .equ NR_syscalls,0 ? 103: #define CALL(x) .equ NR_syscalls,NR_syscalls+1 ? 104: #include "calls.S" ? 105: #undef CALL ? 106: #define CALL(x) .long x ? 107:? ? 108: #ifdef CONFIG_FUNCTION_TRACER ? 109: #ifdef CONFIG_DYNAMIC_FTRACE ? 110: ENTRY(mcount) ? 111:? ? stmdb sp!, {r0-r3, lr} ? 112:? ? mov r0, lr ? 113:? ? sub r0, r0, #MCOUNT_INSN_SIZE ? 114:? ? 115:? ? .globl mcount_call ? 116: mcount_call: ? 117:? ? bl ftrace_stub ? 118:? ? ldr lr, [fp, #-4]? ? ? ? ? ? @ restore lr ? 119:? ? ldmia sp!, {r0-r3, pc} ? 120:? ? 121: ENTRY(ftrace_caller) ? 122:? ? stmdb sp!, {r0-r3, lr} ? 123:? ? ldr r1, [fp, #-4] ? 124:? ? mov r0, lr ? 125:? ? sub r0, r0, #MCOUNT_INSN_SIZE ? 126:? ? 127:? ? .globl ftrace_call ? 128: ftrace_call: ? 129:? ? bl ftrace_stub ? 130:? ? ldr lr, [fp, #-4]? ? ? ? ? ? @ restore lr ? 131:? ? ldmia sp!, {r0-r3, pc} ? 132:? ? 133: #else ? 134:? ? 135: ENTRY(mcount) ? 136:? ? stmdb sp!, {r0-r3, lr} ? 137:? ? ldr r0, =ftrace_trace_function ? 138:? ? ldr r2, [r0] ? 139:? ? adr r0, ftrace_stub ? 140:? ? cmp r0, r2 ? 141:? ? bne trace ? 142:? ? ldr lr, [fp, #-4]? ? ? ? ? ? @ restore lr ? 143:? ? ldmia sp!, {r0-r3, pc} ? 144:? ? 145: trace: ? 146:? ? ldr r1, [fp, #-4]? ? ? ? ? ? @ lr of instrumented routine ? 147:? ? mov r0, lr ? 148:? ? sub r0, r0, #MCOUNT_INSN_SIZE ? 149:? ? mov lr, pc ? 150:? ? mov pc, r2 ? 151:? ? mov lr, r1? ? ? ? ? ? ? ? @ restore lr ? 152:? ? ldmia sp!, {r0-r3, pc} ? 153:? ? 154: #endif /* CONFIG_DYNAMIC_FTRACE */ ? 155:? ? 156:? ? .globl ftrace_stub ? 157: ftrace_stub: ? 158:? ? mov pc, lr ? 159:? ? 160: #endif /* CONFIG_FUNCTION_TRACER */ ? 161:? ? 162: /*============================================================================= ? 163:? * SWI handler ? 164:? *----------------------------------------------------------------------------- ? 165:? */ ? 166:? ? 167:? ? /* If we're optimising for StrongARM the resulting code won't ? 168:? ? ? ? run on an ARM7 and we can save a couple of instructions.? ? 169:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --pb */ ? 170: #ifdef CONFIG_CPU_ARM710 ? 171: #define A710(code...) code ? 172: .Larm710bug: ? 173:? ? ldmia? ? sp, {r0 - lr}^? ? ? ? ? ? @ Get calling r0 - lr ? 174:? ? mov? ? r0, r0 ? 175:? ? add? ? sp, sp, #S_FRAME_SIZE ? 176:? ? subs? ? pc, lr, #4 ? 177: #else ? 178: #define A710(code...) ? 179: #endif ? 180:? ? 181:? ? .align? ? 5 ? 182: ENTRY(vector_swi) ? 183:? ? sub? ? sp, sp, #S_FRAME_SIZE ? 184:? ? stmia? ? sp, {r0 - r12}? ? ? ? ? ? @ Calling r0 - r12 ? 185:? ? add? ? r8, sp, #S_PC ? 186:? ? stmdb? ? r8, {sp, lr}^? ? ? ? ? ? @ Calling sp, lr ? 187:? ? mrs? ? r8, spsr? ? ? ? ? ? @ called from non-FIQ mode, so ok. ? 188:? ? str? ? lr, [sp, #S_PC]? ? ? ? ? ? @ Save calling PC ? 189:? ? str? ? r8, [sp, #S_PSR]? ? ? ? @ Save CPSR ? 190:? ? str? ? r0, [sp, #S_OLD_R0]? ? ? ? @ Save OLD_R0 ? 191:? ? zero_fp ? 192:? ? 193:? ? /* ? 194:? ? ? * Get the system call number. ? 195:? ? ? */ ? 196:? ? 197: #if defined(CONFIG_OABI_COMPAT) ? 198:? ? 199:? ? /* ? 200:? ? ? * If we have CONFIG_OABI_COMPAT then we need to look at the swi ? 201:? ? ? * value to determine if it is an EABI or an old ABI call. ? 202:? ? ? */ ? 203: #ifdef CONFIG_ARM_THUMB ? 204:? ? tst? ? r8, #PSR_T_BIT ? 205:? ? movne? ? r10, #0? ? ? ? ? ? ? ? @ no thumb OABI emulation ? 206:? ? ldreq? ? r10, [lr, #-4]? ? ? ? ? ? @ get SWI instruction ? 207: #else ? 208:? ? ldr? ? r10, [lr, #-4]? ? ? ? ? ? @ get SWI instruction ? 209:? A710(? ? and? ? ip, r10, #0x0f000000? ? ? ? @ check for SWI? ? ? ? ) ? 210:? A710(? ? teq? ? ip, #0x0f000000? ? ? ? ? ? ? ? ? ? ? ? ) ? 211:? A710(? ? bne? ? .Lar |