⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trap.s

📁 用于嵌入式Linux系统的标准C的库函数
💻 S
字号:
#include "sys/syscall.h"#define SYSCALL(name) \	.global name	; \name:			; \	ldi	r4, SYS ## name ; \	bra	__trap0	.text	.stabs	"trap.S",100,0,0,__trap0	.stabs	"int:t(0,1)=r(0,1);-65536;65535;",128,0,0,0	.stabs	"long int:t(0,2)=r(0,1);0020000000000;0017777777777;",128,0,0,0	.stabs	"_trap0:F(0,1)",36,0,1,__trap0	.stabs	"arg1:P(0,1)",64,0,1,0	.stabs	"arg2:P(0,1)",64,0,1,1	.stabs	"arg3:P(0,1)",64,0,1,2	.stabs	"arg4:P(0,1)",64,0,1,3	.stabs	"number:P(0,1)",64,0,1,4	.global	__trap0	.type	__trap0,@function__trap0:	trap	15			/* trap 15 returns result in r0, error code in r4 */	cmpeqi	r4,0			/* is error code zero? */	brf0t	ret			/* yes, skip setting errno */#if __INT__==32	st	r4,@(errno+2,r14)	/* no, set errno */	srai	r4,15			/* sign extend high word */	st	r4,@(errno,r14)#else	st	r4,@(errno,r14)	/* no, set errno */#endifret:	jmp	r13		/* return to caller */.Ltrap0:	.size	__trap0,.Ltrap0-__trap0	.stabs	"",36,0,0,.Ltrap0-__trap0#define CONCAT(a,b) a ## b#define STRING(a) #a#define XSTRING(a) STRING(a)#define XSTRING2(a,b) XSTRING(CONCAT(a,b))#if __INT__==32#define _read _read16#define _lseek _lseek16#define _write _write16#define _close _close16#define _open _open16#define _creat _creat16#define _exit _exit16#define _stat _stat16#define _chmod _chmod16#define _chown _chown16#define _fork _fork16#define _wait _wait16#define _execve _execve16#define _execv _execv16#define _pipe _pipe16#define _kill _kill16#define _getpid _getpid16#endif/* Until the assembler allows semicolon as a statement separator, *//* we cannot use the SYSCALL macro.  So expand it manually for now. *//* #SYSCALL(_read) *//* #SYSCALL(_lseek) *//* #SYSCALL(_write) *//* #SYSCALL(_close) *//* #SYSCALL(_open) *//* #SYSCALL(_creat) *//* #SYSCALL(_exit) *//* #SYSCALL(_stat) *//* #SYSCALL(_chmod) *//* #SYSCALL(_chown) *//* #SYSCALL(_fork) *//* #SYSCALL(_wait) *//* #SYSCALL(_execve) *//* #SYSCALL(_execv) *//* #SYSCALL(_pipe) *//* #SYSCALL(_getpid) *//* #SYSCALL(_kill) */	.global	_read	.type	_read,@function	.stabs	XSTRING2(_read,:F(0,1)),36,0,2,_read	.stabs	"fd:P(0,1)",64,0,1,0	.stabs	"ptr:P(0,1)",64,0,1,1	.stabs	"len:P(0,1)",64,0,1,2_read:	ldi	r4, SYS_read	bra	__trap0.Lread:	.size	_read,.-_read	.stabs	"",36,0,0,.Lread-_read	.global	_lseek	.type	_lseek,@function	.stabs	XSTRING2(_lseek,:F(0,1)),36,0,3,_lseek	.stabs	"fd:P(0,1)",64,0,1,0	.stabs	"offset:P(0,1)",64,0,1,2	.stabs	"whence:p(0,1)",160,0,1,0_lseek:	ldi	r4, SYS_lseek	bra	__trap0.Llseek:	.size	_lseek,.Llseek-_lseek	.stabs	"",36,0,0,.Llseek-_lseek	.global	_write	.type	_write,@function	.stabs	XSTRING2(_write,:F(0,1)),36,0,4,_write	.stabs	"fd:P(0,1)",64,0,1,0	.stabs	"ptr:P(0,1)",64,0,1,1	.stabs	"len:P(0,1)",64,0,1,2_write:	ldi	r4, SYS_write	bra	__trap0.Lwrite:	.size	_write,.Lwrite-_write	.stabs	"",36,0,0,.Lwrite-_write	.global	_close	.type	_close,@function	.stabs	XSTRING2(_close,:F(0,1)),36,0,5,_close	.stabs	"fd:P(0,1)",64,0,1,0_close:	ldi	r4, SYS_close	bra	__trap0.Lclose:	.size	_close,.Lclose-_close	.stabs	"",36,0,0,.Lclose-_close	.global	_open	.type	_open,@function	.stabs	XSTRING2(_open,:F(0,1)),36,0,6,_open	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"flags:P(0,1)",64,0,1,1	.stabs	"mode:P(0,1)",64,0,1,2_open:	ldi	r4, SYS_open	bra	__trap0.Lopen:	.size	_open,.Lopen-_open	.stabs	"",36,0,0,.Lopen-_open	.global	_creat	.type	_creat,@function	.stabs	XSTRING2(_creat,:F(0,1)),36,0,7,_creat	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"mode:P(0,1)",64,0,1,1_creat:	ldi	r4, SYS_creat	bra	__trap0.Lcreat:	.size	_creat,.Lcreat-_creat	.stabs	"",36,0,0,.Lcreat-_creat	.global	_exit	.type	_exit,@function	.stabs	XSTRING2(_exit,:F(0,1)),36,0,8,_exit	.stabs	"status:P(0,1)",64,0,1,0_exit:	ldi	r4, SYS_exit	bra	__trap0.Lexit:	.size	_exit,.Lexit-_exit	.stabs	"",36,0,0,.Lexit-_exit	.global	_stat	.type	_stat,@function	.stabs	XSTRING2(_stat,:F(0,1)),36,0,9,_stat	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"packet:P(0,1)",64,0,1,1_stat:	ldi	r4, SYS_stat	bra	__trap0.Lstat:	.size	_stat,.Lstat-_stat	.stabs	"",36,0,0,.Lstat-_stat	.global	_chmod	.type	_chmod,@function	.stabs	XSTRING2(_chmod,:F(0,1)),36,0,10,_chmod	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"mode:P(0,1)",64,0,1,1_chmod:	ldi	r4, SYS_chmod	bra	__trap0.Lchmod:	.size	_chmod,.Lchmod-_chmod	.stabs	"",36,0,0,.Lchmod-_chmod	.global	_chown	.type	_chown,@function	.stabs	XSTRING2(_chown,:F(0,1)),36,0,11,_chown	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"uid:P(0,1)",64,0,1,1	.stabs	"gid:P(0,1)",64,0,1,2_chown:	ldi	r4, SYS_chown	bra	__trap0.Lchown:	.size	_chown,.Lchown-_chown	.stabs	"",36,0,0,.Lchown-_chown	.global	_fork	.type	_fork,@function	.stabs	XSTRING2(_fork,:F(0,1)),36,0,12,_fork_fork:	ldi	r4, SYS_fork	bra	__trap0.Lfork:	.size	_fork,.Lfork-_fork	.stabs	"",36,0,0,.Lfork-_fork	.global	_wait	.type	_wait,@function	.stabs	"status:P(0,1)",64,0,1,0	.stabs	XSTRING2(_wait,:F(0,1)),36,0,13,_wait_wait:	ldi	r4, SYS_wait	bra	__trap0.Lwait:	.size	_wait,.Lwait-_wait	.stabs	"",36,0,0,.Lwait-_wait	.global	_execve	.type	_execve,@function	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"argv:P(0,1)",64,0,1,1	.stabs	"envp:P(0,1)",64,0,1,2	.stabs	XSTRING2(_execve,:F(0,1)),36,0,14,_execve_execve:	ldi	r4, SYS_execve	bra	__trap0.Lexecve:	.size	_execve,.Lexecve-_execve	.stabs	"",36,0,0,.Lexecve-_execve	.global	_execv	.type	_execv,@function	.stabs	XSTRING2(_execv,:F(0,1)),36,0,15,_execv	.stabs	"name:P(0,1)",64,0,1,0	.stabs	"argv:P(0,1)",64,0,1,1_execv:	ldi	r4, SYS_execv	bra	__trap0.Lexecv:	.size	_execv,.Lexecv-_execv	.stabs	"",36,0,0,.Lexecv-_execv	.global	_pipe	.type	_pipe,@function	.stabs	XSTRING2(_pipe,:F(0,1)),36,0,16,_pipe	.stabs	"fds:P(0,1)",64,0,1,0_pipe:	ldi	r4, SYS_pipe	bra	__trap0.Lpipe:	.size	_pipe,.Lpipe-_pipe	.stabs	"",36,0,0,.Lpipe-_pipe	.global	time	.type	time,@function	.stabs	XSTRING2(time,:F(0,1)),36,0,17,time	.stabs	"ptr:P(0,1)",64,0,1,0time:	ldi	r4, SYS_time	bra	__trap0.Ltime:	.size	time,.Ltime-time	.stabs	"",36,0,0,.Ltime-time	.global	_kill	.type	_kill,@function	.stabs	XSTRING2(_kill,:F(0,1)),36,0,18,_kill	.stabs	"pid:P(0,1)",64,0,1,0	.stabs	"sig:P(0,1)",64,0,1,1_kill:	ldi	r4, SYS_kill	bra	__trap0.Lkill:	.size	_kill,.Lkill-_kill	.stabs	"",36,0,0,.Lkill-_kill	.global	_getpid	.type	_getpid,@function	.stabs	XSTRING2(_getpid,:F(0,1)),36,0,19,_getpid_getpid:	ldi	r4, SYS_getpid	bra	__trap0.Lgetpid:	.size	_getpid,.Lgetpid-_getpid	.stabs	"",36,0,0,.Lgetpid-_getpid

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -