diff options
Diffstat (limited to 'src/user')
-rw-r--r-- | src/user/app/shell/shell.c | 10 | ||||
-rw-r--r-- | src/user/bootstrap/main.c | 3 | ||||
-rw-r--r-- | src/user/lib/syscall.c | 4 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/user/app/shell/shell.c b/src/user/app/shell/shell.c index 8aa640b..3dad1bd 100644 --- a/src/user/app/shell/shell.c +++ b/src/user/app/shell/shell.c @@ -52,6 +52,16 @@ void run_args(int argc, char **argv, struct redir *redir) { } else { _syscall_mount(HANDLE_NULLFS, argv[1], strlen(argv[1])); } + } else if (!strcmp(argv[0], "procmnt")) { + if (argc < 2) { + fprintf(stderr, "procmnt: missing mountpoint\n"); + return; + } + _syscall_mount(HANDLE_PROCFS, argv[1], strlen(argv[1])); + if (!fork2_n_mount("/")) { + fs_dir_inject(argv[1]); + exit(1); + } return; } else if (!strcmp(argv[0], "cd")) { if (chdir(argc > 1 ? argv[1] : "/") < 0) diff --git a/src/user/bootstrap/main.c b/src/user/bootstrap/main.c index 97b980b..f145e74 100644 --- a/src/user/bootstrap/main.c +++ b/src/user/bootstrap/main.c @@ -20,6 +20,9 @@ _Noreturn void main(void) { fs_whitelist(l); } + _syscall_mount(HANDLE_PROCFS, "/proc/", strlen("/proc/")); + MOUNT_AT("/") { fs_dir_inject("/proc/"); } + MOUNT_AT("/init/") { tar_driver(&_initrd); } const char *initpath = "bin/amd64/init"; diff --git a/src/user/lib/syscall.c b/src/user/lib/syscall.c index 50c71a8..09b8e49 100644 --- a/src/user/lib/syscall.c +++ b/src/user/lib/syscall.c @@ -70,6 +70,10 @@ void _syscall_sleep(long ms) { return (void)_syscall(_SYSCALL_SLEEP, ms, 0, 0, 0, 0); } +handle_t _syscall_procfs(void) { + return (handle_t)_syscall(_SYSCALL_PROCFS, 0, 0, 0, 0, 0); +} + long _syscall_execbuf(void __user *buf, size_t len) { return _syscall(_SYSCALL_EXECBUF, (long)buf, (long)len, 0, 0, 0); } |