]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * $Source$ | |
3 | * $Author$ | |
4 | * $Header$ | |
5 | * | |
6 | * Copyright (C) 1987 by the Massachusetts Institute of Technology | |
7 | * | |
8 | * This code is a reverse-engineered version of | |
9 | * ~rtingres/lib/compatlib(meinitlst.o) with a better malloc and | |
10 | * free. | |
11 | * $Log$ | |
12 | * Revision 1.1 1987-08-22 17:29:33 wesommer | |
13 | * Initial revision | |
14 | * | |
15 | */ | |
16 | ||
17 | #ifndef lint | |
18 | static char *rcsid_meinitlst_c = "$Header$"; | |
19 | #endif lint | |
20 | ||
21 | #include <sys/errno.h> | |
22 | #include <sys/types.h> | |
23 | ||
24 | /* | |
25 | * entry points: | |
26 | * MEinitLists() | |
27 | * calloc() | |
28 | * free() | |
29 | * malloc() | |
30 | * memalign() | |
31 | * realloc() | |
32 | * valloc() | |
33 | */ | |
34 | ||
35 | struct cons { | |
36 | char *car; | |
37 | char *cdr; | |
38 | }; | |
39 | extern int Status; | |
40 | extern char MEsetup; | |
41 | extern struct cons MElist, MEfreelist; | |
42 | extern short ME_pid; | |
43 | extern char *MElistHead, *MEfreeHead; | |
44 | ||
45 | MEinitLists() | |
46 | { | |
47 | Status = 0; | |
48 | MEsetup = 1; | |
49 | MElist.car = 0; | |
50 | MElist.cdr = MElistHead; | |
51 | MEfreelist.car = 0; | |
52 | MEfreelist.cdr = MEfreeHead; | |
53 | ME_pid = getpid() & 0x7fff; | |
54 | return 0; | |
55 | } | |
56 | #ifdef notdef | |
57 | free(addr) | |
58 | { | |
59 | return MEfree(addr); | |
60 | } | |
61 | ||
62 | caddr_t malloc(size) | |
63 | u_int size; | |
64 | { | |
65 | char *temp; | |
66 | if(MEalloc(1, size, &temp)) return 0; | |
67 | else return temp; | |
68 | } | |
69 | ||
70 | caddr_t calloc(a1, a2) | |
71 | int a1, a2; | |
72 | { | |
73 | char *temp; | |
74 | if (MEcalloc(a1, a2, &temp)) return 0; | |
75 | else return temp; | |
76 | } | |
77 | ||
78 | caddr_t realloc(adr, nsize) | |
79 | char *adr; | |
80 | u_int nsize; | |
81 | { | |
82 | char *new_addr; | |
83 | u_int cur_size; | |
84 | if (MEsize(adr, &cur_size)) return 0; | |
85 | if (cur_size >= nsize) return adr; | |
86 | if ( (new_addr = malloc(nsize)) == 0) return 0; | |
87 | (void) MEcopy(adr, cur_size, new_addr); | |
88 | (void) free(adr); | |
89 | return new_addr; | |
90 | } | |
91 | #endif notdef | |
92 | #ifdef notdef | |
93 | valloc(size) | |
94 | int size; | |
95 | { | |
96 | static int pagesize; | |
97 | if (pagesize == 0) pagesize = getpagesize(); | |
98 | return memalign(pagesize, size); | |
99 | } | |
100 | ||
101 | memalign(alignment, size) | |
102 | { | |
103 | int temp1; | |
104 | int temp2; | |
105 | int temp3; | |
106 | int temp4; | |
107 | if (!size || alignment & 1) { | |
108 | errno = EINVAL; | |
109 | return 0; | |
110 | } | |
111 | if (alignment < 4) alignment = 4; | |
112 | ||
113 | /* | |
114 | _memalign: fc0 | |
115 | _memalign+2: subl2 $10,sp | |
116 | _memalign+5: tstl 8(ap) | |
117 | _memalign+8: beql _memalign+e | |
118 | _memalign+a: blbc 4(ap),_memalign+18 | |
119 | >_memalign+e: movl $16,_errno | |
120 | >_memalign+15: clrf r0 | |
121 | _memalign+17: ret | |
122 | >_memalign+18: cmpl 4(ap),$4 | |
123 | _memalign+1c: bgequ _memalign+22 | |
124 | _memalign+1e: movl $4,4(ap) | |
125 | >_memalign+22: pushl $4 | |
126 | _memalign+24: addl3 $3,8(ap),-(sp) | |
127 | _memalign+29: calls $2,udiv | |
128 | _memalign+30: ashl $2,r0,8(ap) | |
129 | _memalign+35: addl3 4(ap),8(ap),r0 | |
130 | _memalign+3b: addl3 $20,r0,-4(fp) | |
131 | _memalign+40: pushl -4(fp) | |
132 | _memalign+43: calls $1,_malloc | |
133 | _memalign+4a: movl r0,r11 | |
134 | _memalign+4d: beql _memalign+15 | |
135 | _memalign+4f: subl3 $10,r11,r10 | |
136 | _memalign+53: ashl $0,4(r10),r8 | |
137 | _memalign+58: pushl 4(ap) | |
138 | _memalign+5b: subl3 $1,4(ap),r0 | |
139 | _memalign+60: addl3 r11,r0,-(sp) | |
140 | _memalign+64: calls $2,udiv | |
141 | _memalign+6b: mull3 4(ap),r0,-c(fp) | |
142 | _memalign+71: movl -c(fp),r7 | |
143 | _memalign+75: subl3 $10,r7,r6 | |
144 | _memalign+79: subl3 r10,r6,-8(fp) | |
145 | _memalign+7e: subl2 -8(fp),r8 | |
146 | _memalign+82: cmpl -8(fp),$10 | |
147 | _memalign+86: bgequ _memalign+a7 | |
148 | _memalign+88: pushl 8(ap) | |
149 | _memalign+8b: pushl 4(ap) | |
150 | _memalign+8e: calls $2,_memalign | |
151 | _memalign+95: movl r0,-10(fp) | |
152 | _memalign+99: pushl r11 | |
153 | _memalign+9b: calls $1,_free | |
154 | _memalign+a2: movl -10(fp),r0 | |
155 | _memalign+a6: ret | |
156 | >_memalign+a7: movl -8(fp),r0 | |
157 | _memalign+ab: extzv $0,$20,r0,4(r10) | |
158 | _memalign+b1: extzv $0,$20,r8,4(r6) | |
159 | _memalign+b7: movl (r10),(r6) | |
160 | _memalign+ba: movw 8(r10),8(r6) | |
161 | _memalign+bf: movl r6,_MElist | |
162 | _memalign+c6: cmpl _MElist+4,r10 | |
163 | _memalign+cd: bneq _memalign+d6 | |
164 | _memalign+cf: movl r6,_MElist+4 | |
165 | >_memalign+d6: pushl r10 | |
166 | _memalign+d8: calls $1,_MEf_add | |
167 | _memalign+df: addl3 $10,r6,r0 | |
168 | _memalign+e3: ret | |
169 | */ | |
170 | #endif notdef |