]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/snap/snap.c
realemu: implement IDIV, mark 0xE0000 writeable, fix DIV overfow trap
[plan9front.git] / sys / src / cmd / snap / snap.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include "snap.h"
5
6 void
7 usage(void)
8 {
9         fprint(2, "usage: %s [-o snapfile] pid...\n", argv0);
10         exits("usage");
11 }
12
13 void
14 main(int argc, char **argv)
15 {
16         char *user, *sys, *arch, *term, *ofile;
17         int i;
18         long pid, me;
19         Biobuf *b;
20         Dir *d;
21         Proc *p;
22
23         ofile = "/fd/1";
24         ARGBEGIN{
25         case 'o':
26                 ofile = ARGF();
27                 break;
28         default:
29                 usage();
30         }ARGEND;
31
32         if(argc < 1)
33                 usage();
34
35         /* get kernel compilation time */
36         if((d = dirstat("#/")) == nil) {
37                 fprint(2, "cannot stat #/ ???\n");
38                 exits("stat");
39         }
40
41         if((b = Bopen(ofile, OWRITE)) == nil) {
42                 fprint(2, "cannot write to \"%s\"\n", ofile);
43                 exits("Bopen");
44         }
45
46         if((user = getuser()) == nil)
47                 user = "gre";
48         if((sys = sysname()) == nil)
49                 sys = "gnot";
50         if((arch = getenv("cputype")) == nil)
51                 arch = "unknown";
52         if((term = getenv("terminal")) == nil)
53                 term = "unknown terminal type";
54
55         Bprint(b, "process snapshot %ld %s@%s %s %ld \"%s\"\n",
56                 time(0), user, sys, arch, d->mtime, term);
57         me = getpid();
58         for(i=0; i<argc; i++) {
59                 if((pid = atol(argv[i])) == me)
60                         fprint(2, "warning: will not snapshot self\n");
61                 else if(p = snap(pid, 1))
62                         writesnap(b, p);
63         }
64         exits(0);
65 }