设为首页 加入收藏

TOP

对entry-common.S和call.S的部分理解1 - 摩斯电码(八)
2015-02-13 18:24:18 来源: 作者: 【 】 浏览:138
Tags:entry-common.S call.S 部分 理解 电码
m710bug? ? ? ? ? ? ? ? ? ? ? ? )
? 212: #endif
? 213:?
? 214: #elif defined(CONFIG_AEABI)
? 215:?
? 216:? ? /*
? 217:? ? ? * Pure EABI user space always put syscall number into scno (r7).
? 218:? ? ? */
? 219:? A710(? ? ldr? ? ip, [lr, #-4]? ? ? ? ? ? @ get SWI instruction? ? )
? 220:? A710(? ? and? ? ip, ip, #0x0f000000? ? ? ? @ check for SWI? ? ? ? )
? 221:? A710(? ? teq? ? ip, #0x0f000000? ? ? ? ? ? ? ? ? ? ? ? )
? 222:? A710(? ? bne? ? .Larm710bug? ? ? ? ? ? ? ? ? ? ? ? )
? 223:?
? 224: #elif defined(CONFIG_ARM_THUMB)
? 225:?
? 226:? ? /* Legacy ABI only, possibly thumb mode. */
? 227:? ? tst? ? r8, #PSR_T_BIT? ? ? ? ? ? @ this is SPSR from save_user_regs
? 228:? ? addne? ? scno, r7, #__NR_SYSCALL_BASE? ? @ put OS number in
? 229:? ? ldreq? ? scno, [lr, #-4]
? 230:?
? 231: #else
? 232:?
? 233:? ? /* Legacy ABI only. */
? 234:? ? ldr? ? scno, [lr, #-4]? ? ? ? ? ? @ get SWI instruction
? 235:? A710(? ? and? ? ip, scno, #0x0f000000? ? ? ? @ check for SWI? ? ? ? )
? 236:? A710(? ? teq? ? ip, #0x0f000000? ? ? ? ? ? ? ? ? ? ? ? )
? 237:? A710(? ? bne? ? .Larm710bug? ? ? ? ? ? ? ? ? ? ? ? )
? 238:?
? 239: #endif
? 240:?
? 241: #ifdef CONFIG_ALIGNMENT_TRAP
? 242:? ? ldr? ? ip, __cr_alignment
? 243:? ? ldr? ? ip, [ip]
? 244:? ? mcr? ? p15, 0, ip, c1, c0? ? ? ? @ update control register
? 245: #endif
? 246:? ? enable_irq
? 247:?
? 248:? ? get_thread_info tsk
? 249:? ? adr? ? tbl, sys_call_table? ? ? ? @ load syscall table pointer
? 250:? ? ldr? ? ip, [tsk, #TI_FLAGS]? ? ? ? @ check for syscall tracing
? 251:?
? 252: #if defined(CONFIG_OABI_COMPAT)
? 253:? ? /*
? 254:? ? ? * If the swi argument is zero, this is an EABI call and we do nothing.
? 255:? ? ? *
? 256:? ? ? * If this is an old ABI call, get the syscall number into scno and
? 257:? ? ? * get the old ABI syscall table address.
? 258:? ? ? */
? 259:? ? bics? ? r10, r10, #0xff000000
? 260:? ? eorne? ? scno, r10, #__NR_OABI_SYSCALL_BASE
? 261:? ? ldrne? ? tbl, =sys_oabi_call_table
? 262: #elif !defined(CONFIG_AEABI)
? 263:? ? bic? ? scno, scno, #0xff000000? ? ? ? @ mask off SWI op-code
? 264:? ? eor? ? scno, scno, #__NR_SYSCALL_BASE? ? @ check OS number
? 265: #endif
? 266:?
? 267:? ? stmdb? ? sp!, {r4, r5}? ? ? ? ? ? @ push fifth and sixth args
? 268:? ? tst? ? ip, #_TIF_SYSCALL_TRACE? ? ? ? @ are we tracing syscalls?
? 269:? ? bne? ? __sys_trace
? 270:?
? 271:? ? cmp? ? scno, #NR_syscalls? ? ? ? @ check upper syscall limit
? 272:? ? adr? ? lr, ret_fast_syscall? ? ? ? @ return address
? 273:? ? ldrcc? ? pc, [tbl, scno, lsl #2]? ? ? ? @ call sys_* routine
? 274:?
? 275:? ? add? ? r1, sp, #S_OFF
? 276: 2:? ? mov? ? why, #0? ? ? ? ? ? ? ? @ no longer a real syscall
? 277:? ? cmp? ? scno, #(__ARM_NR_BASE - __NR_SYSCALL_BASE)
? 278:? ? eor? ? r0, scno, #__NR_SYSCALL_BASE? ? @ put OS number back
? 279:? ? bcs? ? arm_syscall? ?
? 280:? ? b? ? sys_ni_syscall? ? ? ? ? ? @ not private func
? 281: ENDPROC(vector_swi)
? 282:?
? 283:? ? /*
? 284:? ? ? * This is the really slow path.? We're going to be doing
? 285:? ? ? * context switches, and waiting for our parent to respond.
? 286:? ? ? */
? 287: __sys_trace:
? 288:? ? mov? ? r2, scno
? 289:? ? add? ? r1, sp, #S_OFF
? 290:? ? mov? ? r0, #0? ? ? ? ? ? ? ? @ trace entry [IP = 0]
? 291:? ? bl? ? syscall_trace
? 292:?
? 293:? ? adr? ? lr, __sys_trace_return? ? ? ? @ return address
? 294:? ? mov? ? scno, r0? ? ? ? ? ? @ syscall number (possibly new)
? 295:? ? add? ? r1, sp, #S_R0 + S_OFF? ? ? ? @ pointer to regs
? 296:? ? cmp? ? scno, #NR_syscalls? ? ? ? @ check upper syscall limit
? 297:? ? ldmccia? ? r1, {r0 - r3}? ? ? ? ? ? @ have to reload r0 - r3
? 298:? ? ldrcc? ? pc, [tbl, scno, lsl #2]? ? ? ? @ call sys_* routine
? 299:? ? b? ? 2b
? 300:?
? 301: __sys_trace_return:
? 302:? ? str? ? r0, [sp, #S_R0 + S_OFF]!? ? @ save returned r0
? 303:? ? mov? ? r2, scno
? 304:? ? mov? ? r1, sp
? 305:? ? mov? ? r0, #1? ? ? ? ? ? ? ? @ trace exit [IP = 1]
? 306:? ? bl
首页 上一页 5 6 7 8 9 10 下一页 尾页 8/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于Linux系统如何实现fork的研究 下一篇Linux-2.6.21 pi futex关键数据结..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: