]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/5e/dat.h
5e: push ERRMAX for note message on stack avoiding unaligned stack pointer
[plan9front.git] / sys / src / cmd / 5e / dat.h
1 typedef struct Process Process;
2 typedef struct Segment Segment;
3 typedef struct Fdtable Fdtable;
4 typedef struct Fd Fd;
5
6 enum {
7         STACKSIZE = 0x100000,
8         NAMEMAX = 27,
9         NNOTE = 5,
10         SEGNUM = 8,
11         Nfpregs = 16,
12
13         flN = 1<<31,
14         flZ = 1<<30,
15         flC = 1<<29,
16         flV = 1<<28,
17         FLAGS = flN | flZ | flC | flV,
18 };
19
20 enum {
21         SEGTEXT,
22         SEGDATA,
23         SEGBSS,
24         SEGSTACK,
25 };
26
27 struct Process {
28         Process *prev, *next;   /* linked list (for fs) */
29         int pid;
30         char name[NAMEMAX+1];   /* name for status file */
31         Ref *path;              /* Ref + string data */
32
33         Segment *S[SEGNUM];     /* memory */
34         u32int R[16];           /* general purpose registers / PC (R15) */
35         u32int CPSR;            /* status register */
36         
37         u32int FPSR;
38         long double F[Nfpregs];
39
40         char errbuf[ERRMAX];
41         Fd *fd;                 /* bitmap of OCEXEC files */
42         
43         /* note handling */
44         u32int notehandler;
45         int innote;
46         jmp_buf notejmp;
47         char notes[ERRMAX][NNOTE];
48         long notein, noteout;
49 };
50
51 int vfp;
52
53 extern void **_privates;
54 extern int _nprivates;
55 #define P (*(Process**)_privates)
56 extern Ref nproc;
57 extern Process plist;
58 extern Lock plistlock;
59
60 enum {
61         SEGFLLOCK = 1,
62 };
63
64 struct Segment {
65         Ref;
66         int flags;
67         RWLock rw; /* lock for SEGFLLOCK segments */
68         Lock lock; /* atomic accesses */
69         u32int start, size;
70         void *data;
71         Ref *dref;
72 };
73
74 struct Fd {
75         RWLock;
76         Ref;
77         u8int *fds;
78         int nfds;
79 };
80
81 #define fulltrace 0
82 #define havesymbols 0
83 #define ultraverbose 0
84 #define systrace 0