Ignore:
Timestamp:
Apr 27, 2018, 2:26:14 PM (6 years ago)
Author:
coas-nagasima
Message:

syscallが関数呼びになるよう変更
他更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asp3_tinet_ecnl_rx/trunk/ntshell/src/syscall.c

    r340 r342  
    11/*
    22 *  TOPPERS ECHONET Lite Communication Middleware
    3  * 
     3 *
    44 *  Copyright (C) 2018 Cores Co., Ltd. Japan
    5  * 
     5 *
    66 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
    77 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     
    2626 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
    2727 *      免責すること.
    28  * 
     28 *
    2929 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
    3030 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     
    3232 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    3333 *  の責任を負わない.
    34  * 
    35  *  @(#) $Id$
     34 *
     35 *  @(#) $Id: syscall.c 1530 2018-04-27 04:00:17Z coas-nagasima $
    3636 */
    3737#include "bits/syscall.h"
     
    4242void *tid_address;
    4343
    44 void no_implement(const char *text)
     44long no_implement(const char *text)
    4545{
    4646        syslog(LOG_ERROR, text);
    4747        DebugBreak();
    48 }
    49 
    50 long __syscall(long n, ...)
     48        return -ENOSYS;
     49}
     50
     51long __syscall_nr(long n, ...)
    5152{
    5253        long ret = -ENOSYS;
    5354        va_list ap;
    54         int fd;
    55 
    56         shellif_into();
    5755
    5856        va_start(ap, n);
    5957
    6058        switch (n) {
    61         case SYS__llseek:
    62                 return shell_llseek(va_arg(ap, int), va_arg(ap, off_t), va_arg(ap, off_t *), va_arg(ap, int));
    63         case SYS__newselect:
    64                 ret = shell_select(va_arg(ap, int), va_arg(ap, fd_set *), va_arg(ap, fd_set *), va_arg(ap, fd_set *), va_arg(ap, struct timeval *));
    65                 break;
    66         case SYS_accept:
    67                 ret = shell_accept(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *));
    68                 break;
    69         case SYS_access:
    70                 ret = shell_access(va_arg(ap, const char *), va_arg(ap, int));
    71                 break;
    72         case SYS_acct:
    73                 no_implement("acct\n");
    74                 break;
    75         case SYS_adjtimex:
    76                 no_implement("adjtimex\n");
    77                 break;
    78 #ifdef SYS_arch_prctl
    79         case SYS_arch_prctl:
    80                 no_implement("arch_prctl\n");
    81                 break;
     59        case __NR_setresgid:
     60                no_implement("setresgid");
     61                break;
     62        case __NR_setresuid:
     63                no_implement("setresuid");
     64                break;
     65        case __NR_setgid:
     66                no_implement("setgid");
     67                break;
     68        case __NR_setregid:
     69                no_implement("setregid");
     70                break;
     71        case __NR_setreuid:
     72                no_implement("setreuid");
     73                break;
     74        case __NR_setuid:
     75                no_implement("setuid");
     76                break;
     77        default:
     78                no_implement("syscall");
     79                break;
     80        }
     81
     82        va_end(ap);
     83
     84        return ret;
     85}
     86
     87long SYS__llseek(long a, long b, long c, long d, long e) {
     88        return shell_llseek((int)a, ((off_t)b << 32) | (off_t)c, (off_t *)d, (int)e);
     89}
     90
     91long SYS__newselect(long a, long b, long c, long d, long e) {
     92        return shell_select((int)a, (fd_set *)b, (fd_set *)c, (fd_set *)d, (struct timeval *)e);
     93}
     94
     95long SYS_accept(long a, long b, long c) {
     96        return shell_accept((int)a, (struct sockaddr *)b, (socklen_t *)c);
     97}
     98
     99long SYS_access(long a, long b) {
     100        return shell_access((const char *)a, (int)b);
     101}
     102
     103long SYS_bind(long a, long b, long c) {
     104        return shell_bind((int)a, (const struct sockaddr *)b, (socklen_t)c);
     105}
     106
     107long SYS_brk(long a) {
     108        return (long)shell_brk((void *)a);
     109}
     110
     111long SYS_chdir(long a) {
     112        return shell_chdir((const char *)a);
     113}
     114
     115long SYS_chmod(long a, long b) {
     116        return shell_chmod((const char *)a, (mode_t)b);
     117}
     118
     119long SYS_chroot(long a) {
     120        return shell_chroot((const char *)a);
     121}
     122
     123long SYS_clock_getres(long a, long b) {
     124        return shell_clock_getres((clockid_t)a, (struct timespec *)b);
     125}
     126
     127long SYS_clock_gettime(long a, long b) {
     128        return shell_clock_gettime((clockid_t)a, (struct timespec *)b);
     129}
     130
     131long SYS_clock_settime(long a, long b) {
     132        return shell_clock_settime((clockid_t)a, (const struct timespec *)b);
     133}
     134
     135long SYS_close(long a) {
     136        return shell_close((int)a);
     137}
     138
     139long SYS_connect(long a, long b, long c) {
     140        return shell_connect((int)a, (const struct sockaddr *)b, (socklen_t)c);
     141}
     142
     143long SYS_exit(long a) {
     144        shell_exit((int)a);
     145        return 0;
     146}
     147
     148long SYS_exit_group(long a) {
     149        shell_exit_group((int)a);
     150        return 0;
     151}
     152
     153long SYS_fcntl64(long a, long b, long c) {
     154        return shell_fcntl((int)a, (int)b, (void *)c);
     155}
     156
     157long SYS_fdatasync() {
     158        return no_implement("fdatasync\n");
     159}
     160
     161long SYS_fstat64(long a, long b) {
     162        return shell_fstat((int)a, (struct stat *)b);
     163}
     164
     165long SYS_fsync(long a) {
     166        return shell_fsync((int)a);
     167}
     168
     169long SYS_ftruncate64(long a, long b, long c) {
     170        return shell_ftruncate((int)a, ((off_t)b << 32) | (off_t)c);
     171}
     172
     173long SYS_futex() {
     174        int futex(int *uaddr, int op, int val, const struct timespec *timeout, int *uaddr2, int val3);
     175        return no_implement("futex\n");
     176}
     177
     178long SYS_futimesat() {
     179        return no_implement("futimesat\n");
     180}
     181
     182long SYS_getcwd(long a, long b) {
     183        return (long)shell_getcwd((char *)a, (size_t)b);
     184}
     185
     186long SYS_getdents64(long a, long b, long c) {
     187        return shell_getdents((int)a, (struct dirent *)b, (size_t)c);
     188}
     189
     190long SYS_getpeername(long a, long b, long c) {
     191        return shell_getpeername((int)a, (struct sockaddr *)b, (socklen_t *)c);
     192}
     193
     194long SYS_getsockname(long a, long b, long c) {
     195        return shell_getsockname((int)a, (struct sockaddr *)b, (socklen_t *)c);
     196}
     197
     198long SYS_getpid() {
     199        return shell_getpid();
     200}
     201
     202long SYS_getsockopt(long a, long b, long c, long d, long e) {
     203        return shell_getsockopt((int)a, (int)b, (int)c, (void *)d, (socklen_t *)e);
     204}
     205
     206long SYS_gettid() {
     207        return shell_gettid();
     208}
     209
     210long SYS_gettimeofday(long a, long b) {
     211        return shell_gettimeofday((struct timeval *)a, (void *)b);
     212}
     213
     214long SYS_getuid32() {
     215        return no_implement("getuid\n");
     216}
     217
     218long SYS_ioctl(long a, long b, long c) {
     219        return shell_ioctl((int)a, (int)b, (void *)c);
     220}
     221
     222long SYS_kill(long a, long b) {
     223        return shell_kill((int)a, (int)b);
     224}
     225
     226long SYS_link(long a, long b) {
     227        return shell_link((const char *)a, (const char *)b);
     228}
     229
     230long SYS_listen(long a, long b) {
     231        return shell_listen((int)a, (int)b);
     232}
     233
     234long SYS_lstat64(long a, long b) {
     235        return shell_lstat((const char *__restrict)a, (struct stat *__restrict)b);
     236}
     237
     238long SYS_madvise(long a, long b, long c) {
     239        return shell_madvise((void *)a, (size_t)b, (int)c);
     240}
     241
     242long SYS_mkdir(long a, long b) {
     243        return shell_mkdir((const char *)a, (mode_t)b);
     244}
     245
     246long SYS_mmap2(long a, long b, long c, long d, long e, long f, long g) {
     247        return (int)shell_mmap2((void *)a, (size_t)b, (int)c, (int)d, (int)e, ((off_t)f << 32) | (off_t)g);
     248}
     249
     250long SYS_mprotect(long a, long b, long c) {
     251        return shell_mprotect((void *)a, (size_t)b, (int)c);
     252}
     253
     254long SYS_munmap() {
     255        return no_implement("munmap\n");
     256}
     257
     258long SYS_open(long a, long b, long c) {
     259        return shell_open((const char *)a, (int)b, (void *)c);
     260}
     261
     262long SYS_poll(long a, long b, long c) {
     263        return shell_poll((struct pollfd *)a, (nfds_t)b, (int)c);
     264}
     265
     266long SYS_pread64() {
     267        return no_implement("pread64\n");
     268}
     269
     270long SYS_pwrite64() {
     271        return no_implement("pwrite64\n");
     272}
     273
     274long SYS_read(long a, long b, long c) {
     275        return shell_read((int)a, (void *)b, (size_t)c);
     276}
     277
     278long SYS_readv(long a, long b, long c) {
     279        return shell_readv((int)a, (const struct iovec *)b, (int)c);
     280}
     281
     282long SYS_recv(long a, long b, long c, long d) {
     283        return shell_recv((int)a, (void *)b, (size_t)c, (int)d);
     284}
     285
     286long SYS_recvfrom(long a, long b, long c, long d, long e, long f) {
     287        if (a == 0)
     288                return shell_recv(a, (void *)b, (size_t)c, (int)d);
     289        else
     290                return shell_recvfrom(a, (void *)b, (size_t)c, (int)d, (struct sockaddr *)e, (socklen_t *)f);
     291}
     292
     293long SYS_recvmsg(long a, long b, long c) {
     294        return shell_recvmsg((int)a, (struct msghdr *)b, (size_t)c);
     295}
     296
     297long SYS_rename(long a, long b) {
     298        return shell_rename((const char *)a, (const char *)b);
     299}
     300
     301long SYS_rmdir(long a) {
     302        return shell_rmdir((const char *)a);
     303}
     304
     305long SYS_rt_sigaction(long a, long b, long c) {
     306        return shell_sigaction((int)a, (const struct sigaction *)b, (struct sigaction *)c);
     307}
     308
     309long SYS_rt_sigprocmask(long a, long b, long c) {
     310        return shell_sigprocmask((int)a, (const sigset_t *)b, (sigset_t *)c);
     311}
     312
     313long SYS_rt_sigqueueinfo() {
     314        return no_implement("rt_sigqueueinfo\n");
     315}
     316
     317long SYS_send(long a, long b, long c, long d) {
     318        return shell_send((int)a, (const void *)b, (size_t)c, (int)d);
     319}
     320
     321long SYS_sendmsg(long a, long b, long c) {
     322        return shell_sendmsg((int)a, (const struct msghdr *)b, (size_t)c);
     323}
     324
     325long SYS_sendto(long a, long b, long c, long d, long e, long f) {
     326        if (a == 0)
     327                return shell_send(a, (const void *)b, (size_t)c, (int)d);
     328        else
     329                return shell_sendto(a, (const void *)b, (size_t)c, (int)d, (const struct sockaddr *)e, (socklen_t)f);
     330}
     331
     332long SYS_setsockopt(long a, long b, long c, long d, long e) {
     333        return shell_setsockopt((int)a, (int)b, (int)c, (const void *)d, (socklen_t)e);
     334}
     335
     336long SYS_shutdown(long a, long b) {
     337        return shell_shutdown((int)a, (int)b);
     338}
     339
     340long SYS_sched_setscheduler() {
     341        return no_implement("sched_setscheduler\n");
     342}
     343
     344long SYS_set_robust_list() {
     345        return no_implement("set_robust_list\n");
     346}
     347
     348#ifdef SYS_set_thread_area
     349long SYS_set_thread_area(long a) {
     350        thread_area = (void *)a;
     351        return 0;
     352}
    82353#endif
    83         case SYS_bind:
    84                 ret = shell_bind(va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t));
    85                 break;
    86         case SYS_brk:
    87                 ret = (long)shell_brk(va_arg(ap, void *));
    88                 break;
    89 #ifdef SYS_cachectl
    90         case SYS_cachectl:
    91                 no_implement("cachectl\n");
    92                 break;
    93 #endif
    94 #ifdef SYS_cacheflush
    95         case SYS_cacheflush:
    96                 no_implement("cacheflush\n");
    97                 break;
    98 #endif
    99         case SYS_capget:
    100                 no_implement("capget\n");
    101                 break;
    102         case SYS_capset:
    103                 no_implement("capset\n");
    104                 break;
    105         case SYS_chdir:
    106                 ret = shell_chdir(va_arg(ap, const char *));
    107                 break;
    108         case SYS_chmod:
    109                 ret = shell_chmod(va_arg(ap, const char *), va_arg(ap, mode_t));
    110                 break;
    111         case SYS_chown32:
    112                 no_implement("chown\n");
    113                 break;
    114         case SYS_chroot:
    115                 ret = shell_chroot(va_arg(ap, const char *));
    116                 break;
    117         case SYS_clock_adjtime:
    118                 no_implement("clock_adjtime\n");
    119                 break;
    120         case SYS_clock_getres:
    121                 ret = shell_clock_getres(va_arg(ap, clockid_t), va_arg(ap, struct timespec *));
    122                 break;
    123         case SYS_clock_gettime:
    124                 ret = shell_clock_gettime(va_arg(ap, clockid_t), va_arg(ap, struct timespec *));
    125                 break;
    126         case SYS_clock_nanosleep:
    127                 no_implement("clock_nanosleep\n");
    128                 break;
    129         case SYS_clock_settime:
    130                 ret = shell_clock_settime(va_arg(ap, clockid_t), va_arg(ap, const struct timespec *));
    131                 break;
    132         case SYS_clone:
    133                 no_implement("clone\n");
    134                 break;
    135         case SYS_close:
    136                 ret = shell_close(va_arg(ap, int));
    137                 break;
    138         case SYS_connect:
    139                 ret = shell_connect(va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t));
    140                 break;
    141         case SYS_delete_module:
    142                 no_implement("delete_module\n");
    143                 break;
    144         case SYS_dup:
    145                 no_implement("dup\n");
    146                 break;
    147         case SYS_dup2:
    148                 no_implement("dup2\n");
    149                 break;
    150         case SYS_dup3:
    151                 no_implement("dup3\n");
    152                 break;
    153         case SYS_epoll_create:
    154                 no_implement("epoll_create\n");
    155                 break;
    156         case SYS_epoll_create1:
    157                 no_implement("epoll_create1\n");
    158                 break;
    159         case SYS_epoll_ctl:
    160                 no_implement("epoll_ctl\n");
    161                 break;
    162         case SYS_epoll_pwait:
    163                 no_implement("epoll_pwait\n");
    164                 break;
    165         case SYS_epoll_wait:
    166                 no_implement("epoll_wait\n");
    167                 break;
    168         case SYS_eventfd:
    169                 no_implement("eventfd\n");
    170                 break;
    171         case SYS_eventfd2:
    172                 no_implement("eventfd2\n");
    173                 break;
    174         case SYS_execve:
    175                 no_implement("execve\n");
    176                 break;
    177         case SYS_exit:
    178                 shell_exit(va_arg(ap, int));
    179                 ret = 0;
    180                 break;
    181         case SYS_exit_group:
    182                 shell_exit_group(va_arg(ap, int));
    183                 ret = 0;
    184                 break;
    185         case SYS_faccessat:
    186                 no_implement("faccessat\n");
    187                 break;
    188         case SYS_fadvise64_64:
    189                 no_implement("fadvise64_64\n");
    190                 break;
    191         case SYS_fallocate:
    192                 no_implement("fallocate\n");
    193                 break;
    194         case SYS_fanotify_init:
    195                 no_implement("fanotify_init\n");
    196                 break;
    197         case SYS_fanotify_mark:
    198                 no_implement("fanotify_mark\n");
    199                 break;
    200         case SYS_fchdir:
    201                 no_implement("fchdir\n");
    202                 break;
    203         case SYS_fchmod:
    204                 no_implement("fchmod\n");
    205                 break;
    206         case SYS_fchmodat:
    207                 no_implement("fchmodat\n");
    208                 break;
    209         case SYS_fchown32:
    210                 no_implement("fchown\n");
    211                 break;
    212         case SYS_fchownat:
    213                 no_implement("fchownat\n");
    214                 break;
    215         case SYS_fcntl64:
    216                 ret = shell_fcntl(va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *));
    217                 break;
    218         case SYS_fdatasync:
    219                 no_implement("fdatasync\n");
    220                 break;
    221         case SYS_fgetxattr:
    222                 no_implement("fgetxattr\n");
    223                 break;
    224         case SYS_flistxattr:
    225                 no_implement("flistxattr\n");
    226                 break;
    227         case SYS_flock:
    228                 no_implement("flock\n");
    229                 break;
    230         case SYS_fork:
    231                 no_implement("fork\n");
    232                 break;
    233         case SYS_fremovexattr:
    234                 no_implement("fremovexattr\n");
    235                 break;
    236         case SYS_fsetxattr:
    237                 no_implement("fsetxattr\n");
    238                 break;
    239         case SYS_fstat64:
    240                 ret = shell_fstat(va_arg(ap, int), va_arg(ap, struct stat *));
    241                 break;
    242         case SYS_fstatat64:
    243                 no_implement("fstatat64\n");
    244                 break;
    245         case SYS_fstatfs:
    246                 no_implement("fstatfs\n");
    247                 break;
    248         case SYS_fstatfs64:
    249                 no_implement("fstatfs64\n");
    250                 break;
    251         case SYS_fsync:
    252                 ret = shell_fsync(va_arg(ap, int));
    253                 break;
    254         case SYS_ftruncate64:
    255                 ret = shell_ftruncate(va_arg(ap, int), va_arg(ap, off_t));
    256                 break;
    257         case SYS_futex:
    258                 no_implement("futex\n");
    259                 break;
    260         case SYS_futimesat:
    261                 no_implement("futimesat\n");
    262                 break;
    263         case SYS_getcpu:
    264                 no_implement("getcpu\n");
    265                 break;
    266         case SYS_getcwd:
    267                 ret = (long)shell_getcwd(va_arg(ap, char *), va_arg(ap, size_t));
    268                 break;
    269         case SYS_getdents64:
    270                 ret = shell_getdents(va_arg(ap, int), va_arg(ap, struct dirent *), va_arg(ap, size_t)); // TODO
    271                 break;
    272         case SYS_getegid32:
    273                 no_implement("getegid\n");
    274                 break;
    275         case SYS_geteuid32:
    276                 no_implement("geteuid\n");
    277                 break;
    278         case SYS_getgid32:
    279                 no_implement("getgid\n");
    280                 break;
    281         case SYS_getgroups32:
    282                 no_implement("getgroups\n");
    283                 break;
    284         case SYS_getitimer:
    285                 no_implement("getitimer\n");
    286                 break;
    287         case SYS_getpeername:
    288                 ret = shell_getpeername(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *));
    289                 break;
    290         case SYS_getsockname:
    291                 ret = shell_getsockname(va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *));
    292                 break;
    293         case SYS_getpgid:
    294                 no_implement("getpgid\n");
    295                 break;
    296         case SYS_getpid:
    297                 ret = shell_getpid();
    298                 break;
    299         case SYS_getppid:
    300                 no_implement("getppid\n");
    301                 break;
    302         case SYS_getpriority:
    303                 no_implement("getpriority\n");
    304                 break;
    305         case SYS_getresgid32:
    306                 no_implement("getresgid\n");
    307                 break;
    308         case SYS_getresuid32:
    309                 no_implement("getresuid\n");
    310                 break;
    311 #ifdef SYS_getrlimit
    312         case SYS_getrlimit:
    313                 no_implement("getrlimit\n");
    314                 break;
    315 #endif
    316         case SYS_getrusage:
    317                 no_implement("getrusage\n");
    318                 break;
    319         case SYS_getsid:
    320                 no_implement("getsid\n");
    321                 break;
    322         case SYS_getsockopt:
    323                 ret = shell_getsockopt(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *), va_arg(ap, socklen_t *));
    324                 break;
    325         case SYS_gettid:
    326                 ret = shell_gettid();
    327                 break;
    328         case SYS_gettimeofday:
    329                 ret = shell_gettimeofday(va_arg(ap, struct timeval *), va_arg(ap, void *));
    330                 break;
    331         case SYS_getuid32:
    332                 no_implement("getuid\n");
    333                 break;
    334         case SYS_getxattr:
    335                 no_implement("getxattr\n");
    336                 break;
    337         case SYS_init_module:
    338                 no_implement("init_module\n");
    339                 break;
    340         case SYS_inotify_add_watch:
    341                 no_implement("inotify_add_watch\n");
    342                 break;
    343         case SYS_inotify_init:
    344                 no_implement("inotify_init\n");
    345                 break;
    346         case SYS_inotify_init1:
    347                 no_implement("inotify_init1\n");
    348                 break;
    349         case SYS_inotify_rm_watch:
    350                 no_implement("inotify_rm_watch\n");
    351                 break;
    352         case SYS_ioctl:
    353                 ret = shell_ioctl(va_arg(ap, int), va_arg(ap, int), va_arg(ap, void *));
    354                 break;
    355 #ifdef SYS_ioperm
    356         case SYS_ioperm:
    357                 no_implement("ioperm\n");
    358                 break;
    359 #endif
    360 #ifdef SYS_iopl
    361         case SYS_iopl:
    362                 no_implement("iopl\n");
    363                 break;
    364 #endif
    365 #ifdef SYS_ipc
    366         case SYS_ipc:
    367                 no_implement("ipc\n");
    368                 break;
    369 #endif
    370 #ifdef SYS_ipc
    371         case SYS_ipc:
    372                 no_implement("ipc\n");
    373                 break;
    374 #endif
    375         case SYS_kill:
    376                 ret = shell_kill(va_arg(ap, int), va_arg(ap, int));
    377                 break;
    378         case SYS_lchown32:
    379                 no_implement("lchown\n");
    380                 break;
    381         case SYS_lgetxattr:
    382                 no_implement("lgetxattr\n");
    383                 break;
    384         case SYS_link:
    385                 ret = shell_link(va_arg(ap, const char *), va_arg(ap, const char *));
    386                 break;
    387         case SYS_linkat:
    388                 no_implement("linkat\n");
    389                 break;
    390         case SYS_listen:
    391                 ret = shell_listen(va_arg(ap, int), va_arg(ap, int));
    392                 break;
    393         case SYS_listxattr:
    394                 no_implement("listxattr\n");
    395                 break;
    396         case SYS_llistxattr:
    397                 no_implement("llistxattr\n");
    398                 break;
    399         case SYS_lremovexattr:
    400                 no_implement("lremovexattr\n");
    401                 break;
    402         case SYS_lsetxattr:
    403                 no_implement("lsetxattr\n");
    404                 break;
    405         case SYS_lstat64:
    406                 ret = shell_lstat(va_arg(ap, const char *__restrict), va_arg(ap, struct stat *__restrict));
    407                 break;
    408         case SYS_madvise:
    409                 ret = shell_madvise(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int));   // TODO
    410                 break;
    411         case SYS_mincore:
    412                 no_implement("mincore\n");
    413                 break;
    414         case SYS_mkdir:
    415                 ret = shell_mkdir(va_arg(ap, const char *), va_arg(ap, mode_t));
    416                 break;
    417         case SYS_mkdirat:
    418                 no_implement("mkdirat\n");
    419                 break;
    420         case SYS_mknod:
    421                 no_implement("mknod\n");
    422                 break;
    423         case SYS_mknodat:
    424                 no_implement("mknodat\n");
    425                 break;
    426         case SYS_mlock:
    427                 no_implement("mlock\n");
    428                 break;
    429         case SYS_mlockall:
    430                 no_implement("mlockall\n");
    431                 break;
    432         case SYS_mmap2:
    433                 ret = (int)shell_mmap2(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, off_t));
    434                 break;
    435         case SYS_mount:
    436                 no_implement("mount\n");
    437                 break;
    438         case SYS_mprotect:
    439                 return shell_mprotect(va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int));
    440                 break;
    441         case SYS_mq_getsetattr:
    442                 no_implement("mq_getsetattr\n");
    443                 break;
    444         case SYS_mq_notify:
    445                 no_implement("mq_notify\n");
    446                 break;
    447         case SYS_mq_open:
    448                 no_implement("mq_open\n");
    449                 break;
    450         case SYS_mq_timedreceive:
    451                 no_implement("mq_timedreceive\n");
    452                 break;
    453         case SYS_mq_timedsend:
    454                 no_implement("mq_timedsend\n");
    455                 break;
    456         case SYS_mq_unlink:
    457                 no_implement("mq_unlink\n");
    458                 break;
    459         case SYS_mremap:
    460                 no_implement("mremap\n");
    461                 break;
    462         case SYS_msgctl:
    463                 no_implement("msgctl\n");
    464                 break;
    465         case SYS_msgget:
    466                 no_implement("msgget\n");
    467                 break;
    468         case SYS_msgrcv:
    469                 no_implement("msgrcv\n");
    470                 break;
    471         case SYS_msgsnd:
    472                 no_implement("msgsnd\n");
    473                 break;
    474         case SYS_msync:
    475                 no_implement("msync\n");
    476                 break;
    477         case SYS_munlock:
    478                 no_implement("munlock\n");
    479                 break;
    480         case SYS_munlockall:
    481                 no_implement("munlockall\n");
    482                 break;
    483         case SYS_munmap:
    484                 no_implement("munmap\n");
    485                 break;
    486         case SYS_nanosleep:
    487                 no_implement("nanosleep\n");
    488                 break;
    489         case SYS_nice:
    490                 no_implement("nice\n");
    491                 break;
    492         case SYS_open:
    493                 ret = shell_open(va_arg(ap, const char *), va_arg(ap, int), va_arg(ap, void *));
    494                 break;
    495         case SYS_openat:
    496                 no_implement("openat\n");
    497                 break;
    498         case SYS_pause:
    499                 no_implement("pause\n");
    500                 break;
    501         case SYS_personality:
    502                 no_implement("personality\n");
    503                 break;
    504         case SYS_pipe:
    505                 no_implement("pipe\n");
    506                 break;
    507         case SYS_pipe2:
    508                 no_implement("pipe2\n");
    509                 break;
    510         case SYS_pivot_root:
    511                 no_implement("pivot_root\n");
    512                 break;
    513         case SYS_poll:
    514                 ret = shell_poll(va_arg(ap, struct pollfd *), va_arg(ap, nfds_t), va_arg(ap, int));
    515                 break;
    516         case SYS_ppoll:
    517                 no_implement("ppoll\n");
    518                 break;
    519         case SYS_prctl:
    520                 no_implement("prctl\n");
    521                 break;
    522         case SYS_pread64:
    523                 no_implement("pread64\n");
    524                 break;
    525         case SYS_preadv:
    526                 no_implement("preadv\n");
    527                 break;
    528         case SYS_prlimit64:
    529                 no_implement("prlimit64\n");
    530                 break;
    531         case SYS_process_vm_readv:
    532                 no_implement("process_vm_readv\n");
    533                 break;
    534         case SYS_process_vm_writev:
    535                 no_implement("process_vm_writev\n");
    536                 break;
    537         case SYS_pselect6:
    538                 no_implement("pselect6\n");
    539                 break;
    540         case SYS_ptrace:
    541                 no_implement("ptrace\n");
    542                 break;
    543         case SYS_pwrite64:
    544                 no_implement("pwrite64\n");
    545                 break;
    546         case SYS_pwritev:
    547                 no_implement("pwritev\n");
    548                 break;
    549         case SYS_quotactl:
    550                 no_implement("quotactl\n");
    551                 break;
    552         case SYS_read:
    553                 ret = shell_read(va_arg(ap, int), va_arg(ap, void *), va_arg(ap, size_t));
    554                 break;
    555         case SYS_readahead:
    556                 no_implement("readahead\n");
    557                 break;
    558         case SYS_readlink:
    559                 no_implement("readlink\n");
    560                 break;
    561         case SYS_readlinkat:
    562                 no_implement("readlinkat\n");
    563                 break;
    564         case SYS_readv:
    565                 ret = shell_readv(va_arg(ap, int), va_arg(ap, const struct iovec *), va_arg(ap, int));
    566                 break;
    567         case SYS_recv:
    568                 ret = shell_recv(va_arg(ap, int), va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int));
    569                 break;
    570         case SYS_recvfrom:
    571                 fd = va_arg(ap, int);
    572                 if (fd == 0)
    573                         ret = shell_recv(fd, va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int));
    574                 else
    575                         ret = shell_recvfrom(fd, va_arg(ap, void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, struct sockaddr *), va_arg(ap, socklen_t *));
    576                 break;
    577         case SYS_recvmsg:
    578                 ret = shell_recvmsg(va_arg(ap, int), va_arg(ap, struct msghdr *), va_arg(ap, size_t));
    579                 break;
    580         case SYS_reboot:
    581                 no_implement("reboot\n");
    582                 break;
    583         case SYS_recvmmsg:
    584                 no_implement("recvmmsg\n");
    585                 break;
    586         case SYS_remap_file_pages:
    587                 no_implement("remap_file_pages\n");
    588                 break;
    589         case SYS_removexattr:
    590                 no_implement("removexattr\n");
    591                 break;
    592         case SYS_rename:
    593                 ret = shell_rename(va_arg(ap, const char *), va_arg(ap, const char *));
    594                 break;
    595         case SYS_renameat:
    596                 no_implement("renameat\n");
    597                 break;
    598         case SYS_rmdir:
    599                 ret = shell_rmdir(va_arg(ap, const char *));
    600                 break;
    601         case SYS_rt_sigaction:
    602                 ret = shell_sigaction(va_arg(ap, int), va_arg(ap, const struct sigaction *), va_arg(ap, struct sigaction *));
    603                 break;
    604         case SYS_rt_sigpending:
    605                 no_implement("rt_sigpending\n");
    606                 break;
    607         case SYS_rt_sigprocmask:
    608                 ret = shell_sigprocmask(va_arg(ap, int), va_arg(ap, const sigset_t *), va_arg(ap, sigset_t *));
    609                 break;
    610         case SYS_rt_sigqueueinfo:
    611                 no_implement("rt_sigqueueinfo\n");
    612                 break;
    613         case SYS_rt_sigsuspend:
    614                 no_implement("rt_sigsuspend\n");
    615                 break;
    616         case SYS_rt_sigtimedwait:
    617                 no_implement("rt_sigtimedwait\n");
    618                 break;
    619         case SYS_send:
    620                 ret = shell_send(va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int));
    621                 break;
    622         case SYS_sendmsg:
    623                 ret = shell_sendmsg(va_arg(ap, int), va_arg(ap, const struct msghdr *), va_arg(ap, size_t));
    624                 break;
    625         case SYS_sendto:
    626                 fd = va_arg(ap, int);
    627                 if (fd == 0)
    628                         ret = shell_send(fd, va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int));
    629                 else
    630                         ret = shell_sendto(fd, va_arg(ap, const void *), va_arg(ap, size_t), va_arg(ap, int), va_arg(ap, const struct sockaddr *), va_arg(ap, socklen_t));
    631                 break;
    632         case SYS_setsockopt:
    633                 ret = shell_setsockopt(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, socklen_t));
    634                 break;
    635         case SYS_shutdown:
    636                 ret = shell_shutdown(va_arg(ap, int), va_arg(ap, int));
    637                 break;
    638         case SYS_sched_get_priority_max:
    639                 no_implement("sched_get_priority_max\n");
    640                 break;
    641         case SYS_sched_get_priority_min:
    642                 no_implement("sched_get_priority_min\n");
    643                 break;
    644         case SYS_sched_getaffinity:
    645                 no_implement("sched_getaffinity\n");
    646                 break;
    647         case SYS_sched_getparam:
    648                 no_implement("sched_getparam\n");
    649                 break;
    650         case SYS_sched_getscheduler:
    651                 no_implement("sched_getscheduler\n");
    652                 break;
    653         case SYS_sched_rr_get_interval:
    654                 no_implement("sched_rr_get_interval\n");
    655                 break;
    656         case SYS_sched_setaffinity:
    657                 no_implement("sched_setaffinity\n");
    658                 break;
    659         case SYS_sched_setparam:
    660                 no_implement("sched_setparam\n");
    661                 break;
    662         case SYS_sched_setscheduler:
    663                 no_implement("sched_setscheduler\n");
    664                 break;
    665         case SYS_sched_yield:
    666                 no_implement("sched_yield\n");
    667                 break;
    668         case SYS_semctl:
    669                 no_implement("semctl\n");
    670                 break;
    671         case SYS_semget:
    672                 no_implement("semget\n");
    673                 break;
    674         case SYS_semop:
    675                 no_implement("semop\n");
    676                 break;
    677         case SYS_semtimedop:
    678                 no_implement("semtimedop\n");
    679                 break;
    680         case SYS_sendfile64:
    681                 no_implement("sendfile\n");
    682                 break;
    683         case SYS_sendmmsg:
    684                 no_implement("sendmmsg\n");
    685                 break;
    686         case SYS_set_robust_list:
    687                 no_implement("set_robust_list\n");
    688                 break;
    689 #ifdef SYS_set_thread_area
    690         case SYS_set_thread_area:
    691                 thread_area = va_arg(ap, void *);
    692                 ret = 0;
    693                 break;
    694 #endif
    695         case SYS_set_tid_address:
    696                 tid_address = va_arg(ap, void *);
    697                 ret = 0;
    698                 break;
    699         case SYS_setdomainname:
    700                 no_implement("setdomainname\n");
    701                 break;
    702         case SYS_setfsgid32:
    703                 no_implement("setfsgid\n");
    704                 break;
    705         case SYS_setfsuid32:
    706                 no_implement("setfsuid\n");
    707                 break;
    708         case SYS_setgroups32:
    709                 no_implement("setgroups\n");
    710                 break;
    711         case SYS_sethostname:
    712                 no_implement("sethostname\n");
    713                 break;
    714         case SYS_setitimer:
    715                 no_implement("setitimer\n");
    716                 break;
    717         case SYS_setns:
    718                 no_implement("setns\n");
    719                 break;
    720         case SYS_setpgid:
    721                 no_implement("setpgid\n");
    722                 break;
    723         case SYS_setpriority:
    724                 no_implement("setpriority\n");
    725                 break;
    726         case SYS_setrlimit:
    727                 no_implement("setrlimit\n");
    728                 break;
    729         case SYS_setsid:
    730                 no_implement("setsid\n");
    731                 break;
    732         case SYS_settimeofday:
    733                 no_implement("settimeofday\n");
    734                 break;
    735         case SYS_setxattr:
    736                 no_implement("setxattr\n");
    737                 break;
    738         case SYS_shmat:
    739                 no_implement("shmat\n");
    740                 break;
    741         case SYS_shmctl:
    742                 no_implement("shmctl\n");
    743                 break;
    744         case SYS_shmdt:
    745                 no_implement("shmdt\n");
    746                 break;
    747         case SYS_shmget:
    748                 no_implement("shmget\n");
    749                 break;
    750         case SYS_sigaltstack:
    751                 no_implement("sigaltstack\n");
    752                 break;
    753         case SYS_signalfd:
    754                 no_implement("signalfd\n");
    755                 break;
    756         case SYS_signalfd4:
    757                 no_implement("signalfd4\n");
    758                 break;
    759         case SYS_socket:
    760                 ret = shell_socket(va_arg(ap, int), va_arg(ap, int), va_arg(ap, int));
    761                 break;
    762         case SYS_splice:
    763                 no_implement("splice\n");
    764                 break;
    765         case SYS_stat64:
    766                 ret = shell_stat(va_arg(ap, const char *), va_arg(ap, struct stat *));
    767                 break;
    768         case SYS_statfs64:
    769                 no_implement("statfs64\n");
    770                 break;
    771         case SYS_swapoff:
    772                 no_implement("swapoff\n");
    773                 break;
    774         case SYS_swapon:
    775                 no_implement("swapon\n");
    776                 break;
    777         case SYS_symlink:
    778                 no_implement("symlink\n");
    779                 break;
    780         case SYS_symlinkat:
    781                 no_implement("symlinkat\n");
    782                 break;
    783         case SYS_sync:
    784                 no_implement("sync\n");
    785                 break;
    786 #ifdef SYS_sync_file_range
    787         case SYS_sync_file_range:
    788                 no_implement("sync_file_range\n");
    789                 break;
    790 #endif
    791         case SYS_sync_file_range2:
    792                 no_implement("sync_file_range2\n");
    793                 break;
    794         case SYS_syncfs:
    795                 no_implement("syncfs\n");
    796                 break;
    797         case SYS_sysinfo:
    798                 no_implement("sysinfo\n");
    799                 break;
    800         case SYS_syslog:
    801                 no_implement("syslog\n");
    802                 break;
    803         case SYS_tee:
    804                 no_implement("tee\n");
    805                 break;
    806         case SYS_tgkill:
    807                 no_implement("tgkill\n");
    808                 break;
    809         case SYS_timer_create:
    810                 no_implement("timer_create\n");
    811                 break;
    812         case SYS_timer_delete:
    813                 no_implement("timer_delete\n");
    814                 break;
    815         case SYS_timer_getoverrun:
    816                 no_implement("timer_getoverrun\n");
    817                 break;
    818         case SYS_timer_gettime:
    819                 no_implement("timer_gettime\n");
    820                 break;
    821         case SYS_timer_settime:
    822                 no_implement("timer_settime\n");
    823                 break;
    824         case SYS_timerfd_create:
    825                 no_implement("timerfd_create\n");
    826                 break;
    827         case SYS_timerfd_gettime:
    828                 no_implement("timerfd_gettime\n");
    829                 break;
    830         case SYS_timerfd_settime:
    831                 no_implement("timerfd_settime\n");
    832                 break;
    833         case SYS_times:
    834                 no_implement("times\n");
    835                 break;
    836         case SYS_tkill:
    837                 ret = shell_tkill(va_arg(ap, int), va_arg(ap, int));
    838                 break;
    839         case SYS_truncate64:
    840                 no_implement("truncate\n");
    841                 break;
    842         case SYS_ugetrlimit:
    843                 no_implement("ugetrlimit\n");
    844                 break;
    845         case SYS_umask:
    846                 no_implement("umask\n");
    847                 break;
    848         case SYS_umount2:
    849                 no_implement("umount2\n");
    850                 break;
    851         case SYS_uname:
    852                 ret = shell_uname(va_arg(ap, struct utsname *));
    853                 break;
    854         case SYS_unlink:
    855                 ret = shell_unlink(va_arg(ap, const char *));
    856                 break;
    857         case SYS_unlinkat:
    858                 no_implement("unlinkat\n");
    859                 break;
    860         case SYS_unshare:
    861                 no_implement("unshare\n");
    862                 break;
    863         case SYS_utimensat:
    864                 no_implement("utimensat\n");
    865                 break;
    866         case SYS_utimes:
    867                 no_implement("utimes\n");
    868                 break;
    869         case SYS_vhangup:
    870                 no_implement("vhangup\n");
    871                 break;
    872         case SYS_vmsplice:
    873                 no_implement("vmsplice\n");
    874                 break;
    875         case SYS_wait4:
    876                 no_implement("wait4\n");
    877                 break;
    878         case SYS_waitid:
    879                 no_implement("waitid\n");
    880                 break;
    881         case SYS_write:
    882                 ret = shell_write(va_arg(ap, int), va_arg(ap, const void *), va_arg(ap, size_t));
    883                 break;
    884         case SYS_writev:
    885                 ret = shell_writev(va_arg(ap, int), va_arg(ap, const struct iovec *), va_arg(ap, size_t));
    886                 break;
    887         default:
    888                 DebugBreak();
    889         }
    890 
    891         va_end(ap);
    892 
    893         shellif_outof();
    894 
    895         return ret;
    896 }
     354
     355long SYS_set_tid_address(long a) {
     356        tid_address = (void *)a;
     357        return 0;
     358}
     359
     360long SYS_socket(long a, long b, long c) {
     361        return shell_socket((int)a, (int)b, (int)c);
     362}
     363
     364long SYS_stat64(long a, long b) {
     365        return shell_stat((const char *)a, (struct stat *)b);
     366}
     367
     368long SYS_tkill(long a, long b) {
     369        return shell_tkill((int)a, (int)b);
     370}
     371
     372long SYS_uname(long a) {
     373        return shell_uname((struct utsname *)a);
     374}
     375
     376long SYS_unlink(long a) {
     377        return shell_unlink((const char *)a);
     378}
     379
     380long SYS_utimensat() {
     381        return no_implement("utimensat\n");
     382}
     383
     384long SYS_utimes() {
     385        return no_implement("utimes\n");
     386}
     387
     388long SYS_write(long a, long b, long c) {
     389        return shell_write((int)a, (const void *)b, (size_t)c);
     390}
     391
     392long SYS_writev(long a, long b, long c) {
     393        return shell_writev((int)a, (const struct iovec *)b, (size_t)c);
     394}
Note: See TracChangeset for help on using the changeset viewer.