Blame


1 a84cbb2a 2004-04-19 devnull #include <u.h>
2 a84cbb2a 2004-04-19 devnull #include <libc.h>
3 a84cbb2a 2004-04-19 devnull #include <mach.h>
4 a84cbb2a 2004-04-19 devnull #include "elf.h"
5 a84cbb2a 2004-04-19 devnull #include "ureg386.h"
6 a84cbb2a 2004-04-19 devnull
7 a84cbb2a 2004-04-19 devnull typedef struct Lreg Lreg;
8 a84cbb2a 2004-04-19 devnull typedef struct Status Status;
9 1cc215aa 2004-12-25 devnull typedef struct Psinfo Psinfo;
10 a84cbb2a 2004-04-19 devnull
11 a84cbb2a 2004-04-19 devnull /*
12 1cc215aa 2004-12-25 devnull * UregLinux386 is 64-bit aligned within status, so we shouldn't
13 a84cbb2a 2004-04-19 devnull * have any packing problems.
14 a84cbb2a 2004-04-19 devnull */
15 a84cbb2a 2004-04-19 devnull struct Status
16 a84cbb2a 2004-04-19 devnull {
17 a84cbb2a 2004-04-19 devnull u32int signo;
18 a84cbb2a 2004-04-19 devnull u32int code;
19 a84cbb2a 2004-04-19 devnull u32int errno;
20 a84cbb2a 2004-04-19 devnull u32int cursig;
21 a84cbb2a 2004-04-19 devnull u32int sigpend;
22 a84cbb2a 2004-04-19 devnull u32int sighold;
23 a84cbb2a 2004-04-19 devnull u32int pid;
24 a84cbb2a 2004-04-19 devnull u32int ppid;
25 a84cbb2a 2004-04-19 devnull u32int pgrp;
26 a84cbb2a 2004-04-19 devnull u32int sid;
27 a84cbb2a 2004-04-19 devnull u32int utime[2];
28 a84cbb2a 2004-04-19 devnull u32int stime[2];
29 a84cbb2a 2004-04-19 devnull u32int cutime[2];
30 a84cbb2a 2004-04-19 devnull u32int cstime[2];
31 1cc215aa 2004-12-25 devnull UregLinux386 reg;
32 a84cbb2a 2004-04-19 devnull u32int fpvalid;
33 a84cbb2a 2004-04-19 devnull };
34 a84cbb2a 2004-04-19 devnull
35 1cc215aa 2004-12-25 devnull struct Psinfo
36 1cc215aa 2004-12-25 devnull {
37 1cc215aa 2004-12-25 devnull char state;
38 1cc215aa 2004-12-25 devnull char sname;
39 1cc215aa 2004-12-25 devnull char zomb;
40 1cc215aa 2004-12-25 devnull char nice;
41 1cc215aa 2004-12-25 devnull u32int flag;
42 1cc215aa 2004-12-25 devnull u16int uid;
43 1cc215aa 2004-12-25 devnull u16int gid;
44 1cc215aa 2004-12-25 devnull u32int pid;
45 1cc215aa 2004-12-25 devnull u32int ppid;
46 1cc215aa 2004-12-25 devnull u32int pgrp;
47 1cc215aa 2004-12-25 devnull u32int sid;
48 1cc215aa 2004-12-25 devnull char fname[16];
49 1cc215aa 2004-12-25 devnull char psargs[80];
50 1cc215aa 2004-12-25 devnull };
51 1cc215aa 2004-12-25 devnull
52 a84cbb2a 2004-04-19 devnull int
53 a84cbb2a 2004-04-19 devnull coreregslinux386(Elf *elf, ElfNote *note, uchar **up)
54 a84cbb2a 2004-04-19 devnull {
55 a84cbb2a 2004-04-19 devnull Status *s;
56 1cc215aa 2004-12-25 devnull UregLinux386 *l;
57 a84cbb2a 2004-04-19 devnull Ureg *u;
58 a84cbb2a 2004-04-19 devnull
59 a84cbb2a 2004-04-19 devnull if(note->descsz < sizeof(Status)){
60 a84cbb2a 2004-04-19 devnull werrstr("elf status note too small");
61 a84cbb2a 2004-04-19 devnull return -1;
62 a84cbb2a 2004-04-19 devnull }
63 a84cbb2a 2004-04-19 devnull s = (Status*)note->desc;
64 a84cbb2a 2004-04-19 devnull l = &s->reg;
65 1cc215aa 2004-12-25 devnull if((u = _linux2ureg386(l)) == nil)
66 a84cbb2a 2004-04-19 devnull return -1;
67 a84cbb2a 2004-04-19 devnull *up = (uchar*)u;
68 a84cbb2a 2004-04-19 devnull return sizeof(Ureg);
69 a84cbb2a 2004-04-19 devnull }
70 a84cbb2a 2004-04-19 devnull
71 1cc215aa 2004-12-25 devnull int
72 1cc215aa 2004-12-25 devnull corecmdlinux386(Elf *elf, ElfNote *note, char **pp)
73 1cc215aa 2004-12-25 devnull {
74 1cc215aa 2004-12-25 devnull char *t;
75 1cc215aa 2004-12-25 devnull Psinfo *p;
76 1cc215aa 2004-12-25 devnull
77 1cc215aa 2004-12-25 devnull *pp = nil;
78 1cc215aa 2004-12-25 devnull if(note->descsz < sizeof(Psinfo)){
79 1cc215aa 2004-12-25 devnull werrstr("elf psinfo note too small");
80 1cc215aa 2004-12-25 devnull return -1;
81 1cc215aa 2004-12-25 devnull }
82 1cc215aa 2004-12-25 devnull p = (Psinfo*)note->desc;
83 1cc215aa 2004-12-25 devnull print("elf name %s\nelf args %s\n", p->fname, p->psargs);
84 1cc215aa 2004-12-25 devnull t = malloc(80+1);
85 1cc215aa 2004-12-25 devnull if(t == nil)
86 1cc215aa 2004-12-25 devnull return -1;
87 1cc215aa 2004-12-25 devnull memmove(t, p->psargs, 80);
88 1cc215aa 2004-12-25 devnull t[80] = 0;
89 1cc215aa 2004-12-25 devnull *pp = t;
90 1cc215aa 2004-12-25 devnull return 0;
91 1cc215aa 2004-12-25 devnull }
92 1cc215aa 2004-12-25 devnull