该文件是rt_linux

源代码在线查看: sys32.s

软件大小: 37457 K
上传用户: jianmingcao
关键词: rt_linux
下载地址: 免注册下载 普通下载 VIP

相关代码

				/* 				 * sys32.S: I-cache tricks for 32-bit compatability layer simple				 *          conversions.				 *				 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)				 * Copyright (C) 1998 Jakub Jelinek   (jj@ultra.linux.cz)				 * Copyright (C) 2000 Ken Aaker (kdaaker@rchland.vnet.ibm.com)				 * For PPC ABI convention is parms in Regs 3-10.				 * The router in entry.S clears the high 32 bits in the first				 * 4 arguments (R3-R6).				 *				 *      This program is free software; you can redistribute it and/or				 *      modify it under the terms of the GNU General Public License				 *      as published by the Free Software Foundation; either version				 *      2 of the License, or (at your option) any later version.				 */								#include "ppc_asm.h"				#include 				#include 								/* NOTE: call as jump breaks return stack, we have to avoid that */									.text								_GLOBAL(sys32_mmap)					clrldi		r7, r7, 32	/* int fd parm */					clrldi		r8, r8, 32	/* off_t offset parm */					b		.sys_mmap								_GLOBAL(sys32_lseek)					extsw		r4,r4		/* sign extend off_t offset parm */					b		.sys_lseek								_GLOBAL(sys32_chmod)				/* Ken Aaker.. hmmm maybe I don't need to do anything here */					b		.sys_chmod								_GLOBAL(sys32_mknod)				/* Ken Aaker.. hmmm maybe I don't need to do anything here */					b		.sys_mknod								_GLOBAL(sys32_sendto)					clrldi		r7, r7, 32	/* struct sockaddr *addr parm */					clrldi		r8, r8, 32	/* int addr_len parm */					b		.sys_sendto								_GLOBAL(sys32_recvfrom)					clrldi		r7, r7, 32	/* struct sockaddr *addr parm */					clrldi		r8, r8, 32	/* int *addr_len parm */					b		.sys_recvfrom								_GLOBAL(sys32_getsockopt)					clrldi		r7, r7, 32	/* int *optlen parm */					b		.sys_getsockopt								_GLOBAL(sys32_bdflush)					extsw		r4,r4		/* sign extend long data parm */					b		.sys_bdflush								_GLOBAL(sys32_mmap2)					clrldi		r7, r7, 32	/* unsigned long fd parm */					extsw		r8, r8		/* off_t offset */					b		.sys_mmap								_GLOBAL(sys32_socketcall)	/* r3=call, r4=args */					cmpwi		r3, 1					blt-		.do_einval					cmpwi		r3, 17					bgt-		.do_einval					subi		r3, r3, 1	/* index into socketcall_table vectors and jmp */					sldi		r3, r3, 3	/* each entry is 8 bytes */					LOADADDR(r10,.socketcall_table_begin)					ldx		r10, r10, r3					mtctr		r10					bctr								/* Socket function vectored fix ups for 32 bit */				_STATIC(do_sys_socket) /* sys_socket(int, int, int) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					lwa		r5,8(r10)					b		.sys_socket								_STATIC(do_sys_bind) /* sys_bind(int fd, struct sockaddr *, int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwa		r5,8(r10)					b		.sys_bind								_STATIC(do_sys_connect) /* sys_connect(int, struct sockaddr *, int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwa		r5,8(r10)					b		.sys_connect								_STATIC(do_sys_listen) /* sys_listen(int, int) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					b		.sys_listen								_STATIC(do_sys_accept) /* sys_accept(int, struct sockaddr *, int *) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					b		.sys_accept								_STATIC(do_sys_getsockname) /* sys_getsockname(int, struct sockaddr *, int *) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					b		.sys_getsockname								_STATIC(do_sys_getpeername) /* sys_getpeername(int, struct sockaddr *, int *) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					b		.sys_getpeername								_STATIC(do_sys_socketpair) /* sys_socketpair(int, int, int, int *) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					lwa		r5,8(r10)					lwz		r6,12(r10)					b		.sys_socketpair								_STATIC(do_sys_send) /* sys_send(int, void *, size_t, unsigned int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					lwz		r6,12(r10)					b		.sys_send								_STATIC(do_sys_recv) /* sys_recv(int, void *, size_t, unsigned int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					lwz		r6,12(r10)					b		.sys_recv								_STATIC(do_sys_sendto) /* sys32_sendto(int, u32, __kernel_size_t32, unsigned int, u32, int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					lwz		r6,12(r10)					lwz		r7,16(r10)					lwa		r8,20(r10)					b		.sys32_sendto								_STATIC(do_sys_recvfrom) /* sys32_recvfrom(int, u32, __kernel_size_t32, unsigned int, u32, u32) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwz		r5,8(r10)					lwz		r6,12(r10)					lwz		r7,16(r10)					lwz		r8,20(r10)					b		.sys32_recvfrom								_STATIC(do_sys_shutdown) /* sys_shutdown(int, int) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					b		.sys_shutdown								_STATIC(do_sys_setsockopt) /* sys32_setsockopt(int, int, int, char *, int) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					lwa		r5,8(r10)					lwz		r6,12(r10)					lwa		r7,16(r10)					b		.sys32_setsockopt								_STATIC(do_sys_getsockopt) /* sys32_getsockopt(int, int, int, u32, u32) */					mr		r10,r4					lwa		r3,0(r10)					lwa		r4,4(r10)					lwa		r5,8(r10)					lwz		r6,12(r10)					lwz		r7,16(r10)					b		.sys32_getsockopt								_STATIC(do_sys_sendmsg) /* sys32_sendmsg(int, struct msghdr32 *, unsigned int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwa		r5,8(r10)					b		.sys32_sendmsg								_STATIC(do_sys_recvmsg) /* sys32_recvmsg(int, struct msghdr32 *, unsigned int) */					mr		r10,r4					lwa		r3,0(r10)					lwz		r4,4(r10)					lwa		r5,8(r10)					b		.sys32_recvmsg								_STATIC(do_einval)					li	r3,-EINVAL					b	.ret_from_syscall_1				_STATIC(do_efault)					li	r3,-EFAULT					b	.ret_from_syscall_1									.data					.align	8				_GLOBAL(socketcall_table_begin)					.llong		.do_sys_socket					.llong		.do_sys_bind					.llong		.do_sys_connect					.llong		.do_sys_listen					.llong		.do_sys_accept					.llong		.do_sys_getsockname					.llong		.do_sys_getpeername					.llong		.do_sys_socketpair					.llong		.do_sys_send					.llong		.do_sys_recv					.llong		.do_sys_sendto					.llong		.do_sys_recvfrom					.llong		.do_sys_shutdown					.llong		.do_sys_setsockopt					.llong		.do_sys_getsockopt					.llong		.do_sys_sendmsg					.llong		.do_sys_recvmsg				_GLOBAL(socketcall_table_end)					.section	__ex_table,"a"					.align		3					.llong		.socketcall_table_begin					.llong		0					.llong		.socketcall_table_end					.llong		.do_efault					.previous							

相关资源