RISCV中ecall指令的执行过程(附系统调用对应的系统调用号)

RISCV中,ecall指令的执行过程

ecall指令是在RISCV中被定义为环境调用指令,用于向系统发起一次系统调用。实际的RISCV中把ecall指令定义为异常指令,系统读取mcause寄存器(这个CSR是用于记录进入异常的原因的寄存器),发现是ecall指令后,根据a7寄存器的值来确定系统调用的类型,由操作系统执行对应的系统调用,然后返回继续执行用户程序,不同的编号对应的系统调用类型如下:

代码选自riscv-pk源码中的pk/pk/syscall.h,供参考。

// See LICENSE for license details.

#ifndef _PK_SYSCALL_H
#define _PK_SYSCALL_H

#define SYS_exit 93
#define SYS_exit_group 94
#define SYS_getpid 172
#define SYS_kill 129
#define SYS_tgkill 131
#define SYS_read 63
#define SYS_write 64
#define SYS_openat 56
#define SYS_close 57
#define SYS_lseek 62
#define SYS_brk 214
#define SYS_linkat 37
#define SYS_unlinkat 35
#define SYS_mkdirat 34
#define SYS_renameat 38
#define SYS_chdir 49
#define SYS_getcwd 17
#define SYS_fstat 80
#define SYS_fstatat 79
#define SYS_faccessat 48
#define SYS_pread 67
#define SYS_pwrite 68
#define SYS_uname 160
#define SYS_getuid 174
#define SYS_geteuid 175
#define SYS_getgid 176
#define SYS_getegid 177
#define SYS_gettid 178
#define SYS_sysinfo 179
#define SYS_mmap 222
#define SYS_munmap 215
#define SYS_mremap 216
#define SYS_mprotect 226
#define SYS_prlimit64 261
#define SYS_getmainvars 2011
#define SYS_rt_sigaction 134
#define SYS_writev 66
#define SYS_gettimeofday 169
#define SYS_times 153
#define SYS_fcntl 25
#define SYS_ftruncate 46
#define SYS_getdents 61
#define SYS_dup 23
#define SYS_dup3 24
#define SYS_readlinkat 78
#define SYS_rt_sigprocmask 135
#define SYS_ioctl 29
#define SYS_getrlimit 163
#define SYS_setrlimit 164
#define SYS_getrusage 165
#define SYS_clock_gettime 113
#define SYS_set_tid_address 96
#define SYS_set_robust_list 99
#define SYS_madvise 233
#define SYS_statx 291

#define OLD_SYSCALL_THRESHOLD 1024
#define SYS_open 1024
#define SYS_link 1025
#define SYS_unlink 1026
#define SYS_mkdir 1030
#define SYS_access 1033
#define SYS_stat 1038
#define SYS_lstat 1039
#define SYS_time 1062

#define IS_ERR_VALUE(x) ((unsigned long)(x) >= (unsigned long)-4096)
#define ERR_PTR(x) ((void*)(long)(x))
#define PTR_ERR(x) ((long)(x))

#undef AT_FDCWD
#define AT_FDCWD -100

long do_syscall(long a0, long a1, long a2, long a3, long a4, long a5, unsigned long n);

#endif

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
高清RISC-V指令集手册,RISC-V开发须备. RISC-V(英文读作“risk-five”),是一种全新的指令集架构。“V”包含两层意思,一是这是Berkeley从RISC I开始设计的第五代指令集架构;二是它代表了变化(Variation)和向量(Vectors)。 2016年,RISC-V基金会(Foundation)正式成立开始运作。RISC-V基金会是一个非营利性的组织,负责维护标准的RISC-V指令集手册与架构文档,并推动RISC-V架构的发展。RISC-V架构的目标如下。 成为一种完全开放的指令集,可以被任何学术机构或商业组织所自由使用。 成为一种真正适合硬件实现且稳定的标准指令集。 RISC-V基金会负责维护标准的RISC-V架构文档和编译器等CPU所需的软件工具链,任何组织和个人可以随时在RISC-V基金会网站上免费下载(http://www.riscv.org)。 RISC-V的推出以及基金会的成立,受到了学术界与工业界的巨大欢迎。著名的科技行业分析公司Linley Group 将RISC-V评为“2016年最佳技术”。 开放而免费的RISC-V架构诞生,不仅对于高校与研究机构是个好消息;为前期资金缺乏的创业公司、成本极其敏感的产品、对现有软件生态依赖不大的领域,都提供了另外一种选择,而且得到了业界主要科技公司的拥戴。众多的芯片公司已经开始使用(譬如,三星、英伟达等)或者计划使用RISC-V用于其产品。 以RISC-V架构为基础的英文教材、文教材都相继推出了。随着越来越多的公司和项目开始采用RISC-V架构的处理器,相信RISC-V的软件生态也会逐步壮大起来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flyeagle237

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值