summaryrefslogtreecommitdiff
path: root/src/user
diff options
context:
space:
mode:
Diffstat (limited to 'src/user')
-rw-r--r--src/user/app/shell/shell.c10
-rw-r--r--src/user/bootstrap/main.c3
-rw-r--r--src/user/lib/syscall.c4
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);
}