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