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 a84cbb2a 2004-04-19 devnull
10 a84cbb2a 2004-04-19 devnull struct Lreg
11 a84cbb2a 2004-04-19 devnull {
12 a84cbb2a 2004-04-19 devnull u32int ebx;
13 a84cbb2a 2004-04-19 devnull u32int ecx;
14 a84cbb2a 2004-04-19 devnull u32int edx;
15 a84cbb2a 2004-04-19 devnull u32int esi;
16 a84cbb2a 2004-04-19 devnull u32int edi;
17 a84cbb2a 2004-04-19 devnull u32int ebp;
18 a84cbb2a 2004-04-19 devnull u32int eax;
19 a84cbb2a 2004-04-19 devnull u32int ds;
20 a84cbb2a 2004-04-19 devnull u32int es;
21 a84cbb2a 2004-04-19 devnull u32int fs;
22 a84cbb2a 2004-04-19 devnull u32int gs;
23 a84cbb2a 2004-04-19 devnull u32int origeax;
24 a84cbb2a 2004-04-19 devnull u32int eip;
25 a84cbb2a 2004-04-19 devnull u32int cs;
26 a84cbb2a 2004-04-19 devnull u32int eflags;
27 a84cbb2a 2004-04-19 devnull u32int esp;
28 a84cbb2a 2004-04-19 devnull u32int ss;
29 a84cbb2a 2004-04-19 devnull };
30 a84cbb2a 2004-04-19 devnull
31 a84cbb2a 2004-04-19 devnull /*
32 a84cbb2a 2004-04-19 devnull * Lreg is 64-bit aligned within status, so we shouldn't
33 a84cbb2a 2004-04-19 devnull * have any packing problems.
34 a84cbb2a 2004-04-19 devnull */
35 a84cbb2a 2004-04-19 devnull struct Status
36 a84cbb2a 2004-04-19 devnull {
37 a84cbb2a 2004-04-19 devnull u32int signo;
38 a84cbb2a 2004-04-19 devnull u32int code;
39 a84cbb2a 2004-04-19 devnull u32int errno;
40 a84cbb2a 2004-04-19 devnull u32int cursig;
41 a84cbb2a 2004-04-19 devnull u32int sigpend;
42 a84cbb2a 2004-04-19 devnull u32int sighold;
43 a84cbb2a 2004-04-19 devnull u32int pid;
44 a84cbb2a 2004-04-19 devnull u32int ppid;
45 a84cbb2a 2004-04-19 devnull u32int pgrp;
46 a84cbb2a 2004-04-19 devnull u32int sid;
47 a84cbb2a 2004-04-19 devnull u32int utime[2];
48 a84cbb2a 2004-04-19 devnull u32int stime[2];
49 a84cbb2a 2004-04-19 devnull u32int cutime[2];
50 a84cbb2a 2004-04-19 devnull u32int cstime[2];
51 a84cbb2a 2004-04-19 devnull Lreg reg;
52 a84cbb2a 2004-04-19 devnull u32int fpvalid;
53 a84cbb2a 2004-04-19 devnull };
54 a84cbb2a 2004-04-19 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 a84cbb2a 2004-04-19 devnull Lreg *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 a84cbb2a 2004-04-19 devnull u = malloc(sizeof(Ureg));
69 a84cbb2a 2004-04-19 devnull if(u == nil)
70 a84cbb2a 2004-04-19 devnull return -1;
71 a84cbb2a 2004-04-19 devnull
72 a84cbb2a 2004-04-19 devnull /* no byte order problems - just copying and rearranging */
73 a84cbb2a 2004-04-19 devnull u->di = l->edi;
74 a84cbb2a 2004-04-19 devnull u->si = l->esi;
75 a84cbb2a 2004-04-19 devnull u->bp = l->ebp;
76 a84cbb2a 2004-04-19 devnull u->nsp = l->esp;
77 a84cbb2a 2004-04-19 devnull u->bx = l->ebx;
78 a84cbb2a 2004-04-19 devnull u->dx = l->edx;
79 a84cbb2a 2004-04-19 devnull u->cx = l->ecx;
80 a84cbb2a 2004-04-19 devnull u->ax = l->eax;
81 a84cbb2a 2004-04-19 devnull u->gs = l->gs;
82 a84cbb2a 2004-04-19 devnull u->fs = l->fs;
83 a84cbb2a 2004-04-19 devnull u->es = l->es;
84 a84cbb2a 2004-04-19 devnull u->ds = l->ds;
85 a84cbb2a 2004-04-19 devnull u->trap = ~0; // l->trapno;
86 a84cbb2a 2004-04-19 devnull u->ecode = ~0; // l->err;
87 a84cbb2a 2004-04-19 devnull u->pc = l->eip;
88 a84cbb2a 2004-04-19 devnull u->cs = l->cs;
89 a84cbb2a 2004-04-19 devnull u->flags = l->eflags;
90 a84cbb2a 2004-04-19 devnull u->sp = l->esp;
91 a84cbb2a 2004-04-19 devnull u->ss = l->ss;
92 a84cbb2a 2004-04-19 devnull *up = (uchar*)u;
93 a84cbb2a 2004-04-19 devnull return sizeof(Ureg);
94 a84cbb2a 2004-04-19 devnull }
95 a84cbb2a 2004-04-19 devnull