libc: move syscall defs; consistently use SYS_ macros

This commit is contained in:
K. Lange 2018-12-10 10:09:27 +09:00
parent 9d8962c8f3
commit c9c18f70ad
32 changed files with 94 additions and 52 deletions

View File

@ -121,6 +121,7 @@ DECL_SYSCALL0(setsid);
DECL_SYSCALL2(setpgid,int,int); DECL_SYSCALL2(setpgid,int,int);
DECL_SYSCALL1(getpgid,int); DECL_SYSCALL1(getpgid,int);
DECL_SYSCALL0(geteuid); DECL_SYSCALL0(geteuid);
DECL_SYSCALL2(lstat, char *, void *);
_End_C_Header _End_C_Header

View File

@ -2,6 +2,7 @@
#include <_cheader.h> #include <_cheader.h>
#include <stddef.h> #include <stddef.h>
#include <stdint.h>
#include <sys/types.h> #include <sys/types.h>
_Begin_C_Header _Begin_C_Header
@ -89,4 +90,6 @@ extern pid_t getpgid(pid_t);
extern unsigned int alarm(unsigned int seconds); extern unsigned int alarm(unsigned int seconds);
extern void *sbrk(intptr_t increment);
_End_C_Header _End_C_Header

View File

@ -2,9 +2,12 @@
#include <fcntl.h> #include <fcntl.h>
#include <string.h> #include <string.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <errno.h> #include <errno.h>
#include <bits/dirent.h> #include <bits/dirent.h>
DEFN_SYSCALL3(readdir, SYS_READDIR, int, int, void *);
DIR * opendir (const char * dirname) { DIR * opendir (const char * dirname) {
int fd = open(dirname, O_RDONLY); int fd = open(dirname, O_RDONLY);
if (fd < 0) { if (fd < 0) {

View File

@ -1,7 +1,10 @@
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <sys/stat.h> #include <sys/stat.h>
DEFN_SYSCALL2(mkdir, SYS_MKDIR, char *, unsigned int);
int mkdir(const char *pathname, mode_t mode) { int mkdir(const char *pathname, mode_t mode) {
__sets_errno(syscall_mkdir((char *)pathname, mode)); __sets_errno(syscall_mkdir((char *)pathname, mode));
} }

View File

@ -1,7 +1,10 @@
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
DEFN_SYSCALL3(ioctl, SYS_IOCTL, int, int, void *);
int ioctl(int fd, int request, void * argp) { int ioctl(int fd, int request, void * argp) {
return syscall_ioctl(fd, request, argp); return syscall_ioctl(fd, request, argp);
} }

View File

@ -5,38 +5,9 @@
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h> #include <syscall_nums.h>
DEFN_SYSCALL1(exit, 0, int); DEFN_SYSCALL1(exit, SYS_EXT, int);
DEFN_SYSCALL1(print, 1, const char *); DEFN_SYSCALL2(system_function, SYS_SYSFUNC, int, char **);
DEFN_SYSCALL2(gettimeofday, 6, void *, void *); DEFN_SYSCALL2(sleepabs, SYS_SLEEPABS, unsigned long, unsigned long);
DEFN_SYSCALL3(execve, 7, char *, char **, char **);
DEFN_SYSCALL1(sbrk, 10, int);
DEFN_SYSCALL0(getgraphicsaddress, 11);
DEFN_SYSCALL1(setgraphicsoffset, 16, int);
DEFN_SYSCALL1(wait, 17, unsigned int);
DEFN_SYSCALL0(getgraphicswidth, 18);
DEFN_SYSCALL0(getgraphicsheight, 19);
DEFN_SYSCALL0(getgraphicsdepth, 20);
DEFN_SYSCALL0(mkpipe, 21);
DEFN_SYSCALL1(kernel_string_XXX, 25, char *);
DEFN_SYSCALL0(reboot, 26);
DEFN_SYSCALL3(readdir, 27, int, int, void *);
DEFN_SYSCALL3(clone, 30, uintptr_t, uintptr_t, void *);
DEFN_SYSCALL0(mousedevice, 33);
DEFN_SYSCALL2(mkdir, 34, char *, unsigned int);
DEFN_SYSCALL2(shm_obtain, 35, char *, size_t *);
DEFN_SYSCALL1(shm_release, 36, char *);
DEFN_SYSCALL2(share_fd, 39, int, int);
DEFN_SYSCALL1(get_fd, 40, int);
DEFN_SYSCALL0(gettid, 41);
DEFN_SYSCALL2(system_function, 43, int, char **);
DEFN_SYSCALL1(open_serial, 44, int);
DEFN_SYSCALL2(sleepabs, 45, unsigned long, unsigned long);
DEFN_SYSCALL3(ioctl, 47, int, int, void *);
DEFN_SYSCALL2(access, 48, char *, int);
DEFN_SYSCALL2(stat, 49, char *, void *);
DEFN_SYSCALL3(waitpid, 53, int, int *, int);
DEFN_SYSCALL5(mount, SYS_MOUNT, char *, char *, char *, unsigned long, void *);
DEFN_SYSCALL2(lstat, SYS_LSTAT, char *, void *);
extern void _init(); extern void _init();
extern void _fini(); extern void _fini();

View File

@ -5,10 +5,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <signal.h> #include <signal.h>
#include <pthread.h> #include <pthread.h>
#include <errno.h> #include <errno.h>
DEFN_SYSCALL3(clone, SYS_CLONE, uintptr_t, uintptr_t, void *);
DEFN_SYSCALL0(gettid, SYS_GETTID);
#define PTHREAD_STACK_SIZE 0x100000 #define PTHREAD_STACK_SIZE 0x100000
int clone(uintptr_t a,uintptr_t b,void* c) { int clone(uintptr_t a,uintptr_t b,void* c) {

View File

@ -1,8 +1,9 @@
#include <signal.h> #include <signal.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <errno.h> #include <errno.h>
DEFN_SYSCALL2(send_signal, 37, uint32_t, uint32_t); DEFN_SYSCALL2(send_signal, SYS_KILL, uint32_t, uint32_t);
int kill(int pid, int sig) { int kill(int pid, int sig) {
__sets_errno(syscall_send_signal(pid, sig)); __sets_errno(syscall_send_signal(pid, sig));

View File

@ -1,8 +1,10 @@
#include <signal.h> #include <signal.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(signal, 38, uint32_t, void *); DEFN_SYSCALL2(signal, SYS_SIGNAL, uint32_t, void *);
/* XXX This syscall interface is screwy, doesn't allow for good errno handling */
sighandler_t signal(int signum, sighandler_t handler) { sighandler_t signal(int signum, sighandler_t handler) {
return (sighandler_t)syscall_signal(signum, (void *)handler); return (sighandler_t)syscall_signal(signum, (void *)handler);
} }

View File

@ -1,6 +1,9 @@
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <errno.h> #include <errno.h>
DEFN_SYSCALL5(mount, SYS_MOUNT, char *, char *, char *, unsigned long, void *);
int mount(char * source, char * target, char * type, unsigned long flags, void * data) { int mount(char * source, char * target, char * type, unsigned long flags, void * data) {
__sets_errno(syscall_mount(source, target, type, flags, data)); __sets_errno(syscall_mount(source, target, type, flags, data));
} }

7
libc/sys/reboot.c Normal file
View File

@ -0,0 +1,7 @@
#include <unistd.h>
#include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL0(reboot, SYS_REBOOT);
/* TODO: define reboot() */

5
libc/sys/shm.c Normal file
View File

@ -0,0 +1,5 @@
#include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(shm_obtain, SYS_SHM_OBTAIN, char *, size_t *);
DEFN_SYSCALL1(shm_release, SYS_SHM_RELEASE, char *);

View File

@ -1,7 +1,8 @@
#include <sys/utsname.h> #include <sys/utsname.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL1(uname, 12, void *); DEFN_SYSCALL1(uname, SYS_UNAME, void *);
int uname(struct utsname *__name) { int uname(struct utsname *__name) {
return syscall_uname((void *)__name); return syscall_uname((void *)__name);

View File

@ -1,6 +1,9 @@
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <errno.h> #include <errno.h>
DEFN_SYSCALL3(waitpid, SYS_WAITPID, int, int *, int);
int waitpid(int pid, int *status, int options) { int waitpid(int pid, int *status, int options) {
/* XXX: status, options? */ /* XXX: status, options? */
__sets_errno(syscall_waitpid(pid, status, options)); __sets_errno(syscall_waitpid(pid, status, options));

View File

@ -1,5 +1,8 @@
#include <sys/time.h> #include <sys/time.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(gettimeofday, SYS_GETTIMEOFDAY, void *, void *);
int gettimeofday(struct timeval *p, void *z){ int gettimeofday(struct timeval *p, void *z){
return syscall_gettimeofday(p,z); return syscall_gettimeofday(p,z);

View File

@ -1,6 +1,9 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(access, SYS_ACCESS, char *, int);
int access(const char *pathname, int mode) { int access(const char *pathname, int mode) {
int result = syscall_access((char *)pathname, mode); int result = syscall_access((char *)pathname, mode);

View File

@ -1,8 +1,9 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <errno.h> #include <errno.h>
DEFN_SYSCALL1(chdir, 28, char *); DEFN_SYSCALL1(chdir, SYS_CHDIR, char *);
int chdir(const char *path) { int chdir(const char *path) {
__sets_errno(syscall_chdir((char*)path)); __sets_errno(syscall_chdir((char*)path));

View File

@ -1,8 +1,9 @@
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <sys/stat.h> #include <sys/stat.h>
DEFN_SYSCALL2(chmod, 50, char *, int); DEFN_SYSCALL2(chmod, SYS_CHMOD, char *, int);
int chmod(const char *path, mode_t mode) { int chmod(const char *path, mode_t mode) {
__sets_errno(syscall_chmod((char *)path, mode)); __sets_errno(syscall_chmod((char *)path, mode));

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL1(close, 5, int); DEFN_SYSCALL1(close, SYS_CLOSE, int);
int close(int file) { int close(int file) {
return syscall_close(file); return syscall_close(file);

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(dup2, 22, int, int); DEFN_SYSCALL2(dup2, SYS_DUP2, int, int);
int dup2(int oldfd, int newfd) { int dup2(int oldfd, int newfd) {
return syscall_dup2(oldfd, newfd); return syscall_dup2(oldfd, newfd);

View File

@ -1,10 +1,13 @@
#include <stdio.h> #include <stdio.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <sys/stat.h> #include <sys/stat.h>
DEFN_SYSCALL3(execve, SYS_EXECVE, char *, char **, char **);
extern char ** environ; extern char ** environ;
extern char * _argv_0; extern char * _argv_0;
extern int __libc_debug; extern int __libc_debug;

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL0(fork, 8); DEFN_SYSCALL0(fork, SYS_FORK);
pid_t fork(void) { pid_t fork(void) {
return syscall_fork(); return syscall_fork();

View File

@ -1,8 +1,9 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(getcwd, 29, char *, size_t); DEFN_SYSCALL2(getcwd, SYS_GETCWD, char *, size_t);
char *getcwd(char *buf, size_t size) { char *getcwd(char *buf, size_t size) {
if (!buf) buf = malloc(size); if (!buf) buf = malloc(size);

View File

@ -1,9 +1,11 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL3(lseek, 14, int, int, int); DEFN_SYSCALL3(lseek, SYS_SEEK, int, int, int);
off_t lseek(int file, off_t ptr, int dir) { off_t lseek(int file, off_t ptr, int dir) {
return syscall_lseek(file,ptr,dir); __sets_errno(syscall_lseek(file,ptr,dir));
} }

View File

@ -4,8 +4,9 @@
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL3(open, 2, const char *, int, int); DEFN_SYSCALL3(open, SYS_OPEN, const char *, int, int);
int open(const char *name, int flags, ...) { int open(const char *name, int flags, ...) {
va_list argp; va_list argp;

View File

@ -1,8 +1,9 @@
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL1(pipe, 54, int *); DEFN_SYSCALL1(pipe, SYS_PIPE, int *);
int pipe(int fildes[2]) { int pipe(int fildes[2]) {
__sets_errno(syscall_pipe((int *)fildes)); __sets_errno(syscall_pipe((int *)fildes));

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL3(read, 3, int, char *, int); DEFN_SYSCALL3(read, SYS_READ, int, char *, int);
int read(int file, void *ptr, size_t len) { int read(int file, void *ptr, size_t len) {
return syscall_read(file,ptr,len); return syscall_read(file,ptr,len);

9
libc/unistd/sbrk.c Normal file
View File

@ -0,0 +1,9 @@
#include <unistd.h>
#include <syscall_nums.h>
#include <syscall.h>
DEFN_SYSCALL1(sbrk, SYS_SBRK, int);
void *sbrk(intptr_t increment) {
return (void *)syscall_sbrk(increment);
}

View File

@ -1,7 +1,8 @@
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <sys/types.h> #include <sys/types.h>
DEFN_SYSCALL1(setuid, 24, unsigned int); DEFN_SYSCALL1(setuid, SYS_SETUID, unsigned int);
int setuid(uid_t uid) { int setuid(uid_t uid) {
return syscall_setuid(uid); return syscall_setuid(uid);

View File

@ -1,11 +1,11 @@
#include <errno.h> #include <errno.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <string.h> #include <string.h>
#ifndef syscall_lstat DEFN_SYSCALL2(stat, SYS_STATF, char *, void *);
DECL_SYSCALL2(lstat, char *, void *); DEFN_SYSCALL2(lstat, SYS_LSTAT, char *, void *);
#endif
int stat(const char *file, struct stat *st){ int stat(const char *file, struct stat *st){
int ret = syscall_stat((char *)file, (void *)st); int ret = syscall_stat((char *)file, (void *)st);

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL2(nanosleep, 46, unsigned long, unsigned long); DEFN_SYSCALL2(nanosleep, SYS_SLEEP, unsigned long, unsigned long);
int usleep(useconds_t usec) { int usleep(useconds_t usec) {
syscall_nanosleep((usec / 10000) / 1000, (usec / 10000) % 1000); syscall_nanosleep((usec / 10000) / 1000, (usec / 10000) % 1000);

View File

@ -1,7 +1,8 @@
#include <unistd.h> #include <unistd.h>
#include <syscall.h> #include <syscall.h>
#include <syscall_nums.h>
DEFN_SYSCALL3(write, 4, int, char *, int); DEFN_SYSCALL3(write, SYS_WRITE, int, char *, int);
ssize_t write(int file, const void *ptr, size_t len) { ssize_t write(int file, const void *ptr, size_t len) {
return syscall_write(file,(char *)ptr,len); return syscall_write(file,(char *)ptr,len);