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