|
|
1.1 root 1: #include "mint.h"
2:
3: #include <stdio.h>
4:
5: #include <stdlib.h>
6:
7: #include <stddef.h>
8:
9:
10:
11: static void usage P_((void));
12:
13:
14:
15: static void
16:
17: usage()
18:
19: {
20:
21: fprintf(stderr, "Usage: genmagic outputfile\n");
22:
23: exit(2);
24:
25: }
26:
27:
28:
29: /* conventions:
30:
31: * C_XXX is offset of XXX in CONTEXT struct
32:
33: * P_XXX is offset of XXX in PROC struct
34:
35: */
36:
37:
38:
39: struct magics {
40:
41: const char *name;
42:
43: long value;
44:
45: } magics[] = {
46:
47: { "C_PTRACE", offsetof(CONTEXT, ptrace)},
48:
49: { "C_SFMT", offsetof(CONTEXT, sfmt)},
50:
51: { "C_INTERNAL", offsetof(CONTEXT, internal)},
52:
53: { "C_SR", offsetof(CONTEXT, sr)},
54:
55: { "C_PC", offsetof(CONTEXT, pc)},
56:
57: { "C_FSTATE", offsetof(CONTEXT, fstate)},
58:
59: { "C_FREGS", offsetof(CONTEXT, fregs)},
60:
61: { "C_FCTRL", offsetof(CONTEXT, fctrl)},
62:
63: { "C_USP", offsetof(CONTEXT, usp)},
64:
65: { "C_SSP", offsetof(CONTEXT, ssp)},
66:
67: { "C_TERM", offsetof(CONTEXT, term_vec)},
68:
69: { "C_D0", offsetof(CONTEXT, regs)},
70:
71: { "C_A0", offsetof(CONTEXT, regs)+32},
72:
73: { "P_SYSTIME", offsetof(PROC, systime)},
74:
75: { "P_USRTIME", offsetof(PROC, usrtime)},
76:
77: { "P_PTRACER", offsetof(PROC, ptracer)},
78:
79: { "P_SYSCTXT", offsetof(PROC, ctxt)},
80:
81: { (char *)0, 0 }
82:
83: };
84:
85:
86:
87: int
88:
89: main(argc, argv)
90:
91: int argc;
92:
93: char **argv;
94:
95: {
96:
97: FILE *f;
98:
99: int i;
100:
101:
102:
103: if (argc != 2)
104:
105: usage();
106:
107: f = fopen(argv[1], "w");
108:
109: if (!f) {
110:
111: perror(argv[1]);
112:
113: exit(1);
114:
115: }
116:
117:
118:
119: for (i = 0; magics[i].name; i++) {
120:
121: fprintf(f, "%%define %s %ld\n", magics[i].name,
122:
123: magics[i].value);
124:
125: }
126:
127: fclose(f);
128:
129: return 0;
130:
131: }
132:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.