Programs think they are named after their symlink
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 17 Aug 2010 06:39:24 +0000 (23:39 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:51 +0000 (17:35 -0700)
Instead of being named after their file_name(), they get their name from
the path (or whatever is in argv[0]).  Really only applicable to the
manager-spawned processes, but something userspace needs to keep in
mind.

kern/src/monitor.c
tests/hello.c
tests/spawn.c

index f116501..5c23668 100644 (file)
@@ -289,7 +289,7 @@ int mon_bin_run(int argc, char *NTS *NT COUNT(argc) argv, trapframe_t *tf)
        }
        char *p_argv[] = {0, 0, 0};
        char *p_envp[] = {"LD_LIBRARY_PATH=/lib", 0};
-       p_argv[0] = file_name(program);
+       p_argv[0] = argv[1];
        struct proc *p = proc_create(program, p_argv, p_envp);
 
        spin_lock(&p->proc_lock);
index c012457..148367e 100644 (file)
@@ -3,6 +3,6 @@
 
 int main(int argc, char** argv)
 {
-       printf("Hello world from newlib!!\n");
+       printf("Hello world from program %s!!\n", argv[0]);
        return 0;
 }
index f46d4e0..a16a677 100644 (file)
@@ -1,10 +1,15 @@
 
 #include <rstdio.h>
 #include <parlib.h>
+#include <unistd.h>
 
 int main(int argc, char **argv, char **envp)
 {
-       #define FILENAME "/bin/hello"
+       char *p_argv[] = {0, 0, 0};
+       char *p_envp[] = {"LD_LIBRARY_PATH=/lib", 0};
+       //#define FILENAME "/bin/hello"
+       #define FILENAME "/bin/hello-sym"
+       char filename[] = FILENAME;
        #if 0
        /* try some bad combos */
        int pid = sys_proc_create("garbagexxx");
@@ -30,12 +35,15 @@ int main(int argc, char **argv, char **envp)
        }
        #endif
        printf("U: attempting to create and run hello\n");
-       child_pid[0] = sys_proc_create(FILENAME, strlen(FILENAME), 0, 0);
+       p_argv[0] = filename;
+       printf("SPAWN, pid %d, filename %08p\n", getpid(), filename);
+       child_pid[0] = sys_proc_create(FILENAME, strlen(FILENAME), p_argv, p_envp);
        if (child_pid[0] <= 0)
-               perror("");
+               printf("Failed to create the child\n");
        else
                if (sys_proc_run(child_pid[0]) < 0)
-                       perror("");
+                       printf("Failed to run the child\n");
+
        #if 0
        printf("U: attempting to create and run another hello\n");
        child_pid[1] = sys_proc_create(FILENAME, strlen(FILENAME), 0, 0);