annotate dmd/backend/glue.d @ 178:e3afd1303184

Many small bugs fixed Made all classes derive from TObject to detect memory leaks (functionality is disabled for now) Began work on overriding backend memory allocations (to avoid memory leaks)
author korDen
date Sun, 17 Oct 2010 07:42:00 +0400
parents 1475fd394c9e
children cd48cb899aee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
1 module dmd.backend.glue;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
2
114
e28b18c23469 added a module dmd.common for commonly used stuff
Trass3r
parents: 79
diff changeset
3 import dmd.common;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
4 import dmd.Array;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
5 import dmd.Dsymbol;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
6 import dmd.File;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
7 import dmd.FileName;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
8 import dmd.Library;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
9 import dmd.OutBuffer;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
10 import dmd.Module;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
11 import dmd.Identifier;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
12 import dmd.AssertExp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
13 import dmd.TOK;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
14 import dmd.Global;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
15 import dmd.Param;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
16 import dmd.backend.Config;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
17 import dmd.backend.Configv;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
18 import dmd.backend.StringTab;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
19
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
20 import core.stdc.string;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
21
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
22 version (Windows)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
23 {
25
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
24 extern (C++) extern
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
25 {
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
26 int go_flag(char* cp);
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
27 void util_set64();
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
28 void util_set386();
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
29 }
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
30 }
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
31 else version (linux)
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
32 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
33 extern (C++)
25
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
34 {
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
35 int go_flag(char* cp);
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
36 void util_set64();
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
37 void util_set386();
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
38 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
39 }
79
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
40 else
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
41 {
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
42 static assert(false, "fix this");
43073c7c7769 updated to 2.035
Trass3r
parents: 74
diff changeset
43 }
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
44
34
544b922227c7 update to work with dmd 2.048
korDen
parents: 25
diff changeset
45 import std.exception;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
46 import std.string;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
47
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
48 struct Outbuffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
49 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
50 ubyte* buf; // the buffer itself
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
51 ubyte* pend; // pointer past the end of the buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
52 ubyte* p; // current position in buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
53 uint len; // size of buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
54 uint inc; // default increment size
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
55
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
56 this(uint inc)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
57 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
58 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
59 }
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
60
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
61 ~this()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
62 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
63 }
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
64
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
65 void reset()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
66 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
67 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
68 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
69
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
70 // Reserve nbytes in buffer
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
71 void reserve(uint nbytes)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
72 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
73 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
74 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
75
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
76 // Write n zeros; return pointer to start of zeros
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
77 void* writezeros(uint n)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
78 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
79 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
80 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
81
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
82 // Position buffer to accept the specified number of bytes at offset
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
83 int position(uint offset, uint nbytes);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
84
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
85 // Write an array to the buffer, no reserve check
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
86 void writen(const(void)* b, int len)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
87 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
88 memcpy(p,b,len);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
89 p += len;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
90 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
91
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
92 // Clear bytes, no reserve check
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
93 void clearn(int len)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
94 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
95 int i;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
96 for (i=0; i< len; i++)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
97 *p++ = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
98 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
99
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
100 // Write an array to the buffer.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
101 void write(const void *b, int len)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
102 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
103 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
104 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
105
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
106 void write(Outbuffer* b)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
107 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
108 write(b.buf, b.p - b.buf);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
109 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
110
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
111 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
112 * Flushes the stream. This will write any buffered
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
113 * output bytes.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
114 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
115 void flush() { }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
116
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
117 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
118 * Writes an 8 bit byte, no reserve check.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
119 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
120 void writeByten(char v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
121 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
122 *p++ = v;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
123 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
124
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
125 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
126 * Writes an 8 bit byte.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
127 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
128 void writeByte(int v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
129 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
130 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
131 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
132
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
133 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
134 * Writes a 16 bit little-end short, no reserve check.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
135 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
136 void writeWordn(int v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
137 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
138 version (_WIN32) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
139 *cast(ushort*)p = cast(short)v;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
140 } else {
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
141 assert(0, "Check this");
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
142 p[0] = cast(ubyte)v;
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
143 p[1] = cast(ubyte)(v >> 8);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
144 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
145 p += 2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
146 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
147
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
148 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
149 * Writes a 16 bit little-end short.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
150 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
151 void writeWord(int v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
152 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
153 reserve(2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
154 writeWordn(v);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
155 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
156
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
157 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
158 * Writes a 16 bit big-end short.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
159 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
160 void writeShort(int v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
161 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
162 if (pend - p < 2)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
163 reserve(2);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
164
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
165 static if (false) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
166 p[0] = (cast(ubyte*)&v)[1];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
167 p[1] = v;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
168 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
169 ubyte* q = p;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
170 q[0] = cast(ubyte)(v >> 8);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
171 q[1] = cast(ubyte)v;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
172 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
173 p += 2;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
174 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
175
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
176 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
177 * Writes a 16 bit char.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
178 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
179 void writeChar(int v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
180 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
181 writeShort(v);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
182 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
183
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
184 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
185 * Writes a 32 bit int.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
186 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
187 void write32(long v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
188 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
189 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
190 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
191
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
192 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
193 * Writes a 64 bit long.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
194 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
195 ///#if __INTSIZE == 4
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
196 void write64(long v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
197 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
198 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
199 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
200 ///#endif
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
201
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
202 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
203 * Writes a 32 bit float.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
204 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
205 void writeFloat(float v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
206 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
207 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
208 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
209
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
210 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
211 * Writes a 64 bit double.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
212 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
213 void writeDouble(double v)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
214 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
215 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
216 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
217
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
218 void write(const(char)* s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
219 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
220 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
221 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
222
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
223 void write(const(ubyte)* s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
224 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
225 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
226 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
227
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
228 void writeString(const(char)* s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
229 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
230 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
231 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
232
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
233 void prependBytes(const(char)* s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
234 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
235 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
236 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
237
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
238 void bracket(char c1, char c2)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
239 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
240 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
241 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
242
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
243 /**
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
244 * Returns the number of bytes written.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
245 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
246 int size()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
247 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
248 return p - buf;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
249 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
250
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
251 char* toString()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
252 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
253 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
254 }
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
255
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
256 void setsize(uint size)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
257 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
258 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
259 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
260
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
261 void writesLEB128(long value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
262 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
263 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
264 }
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
265
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
266 void writeuLEB128(uint value)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
267 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
268 assert(false);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
269 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
270 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
271
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
272 /**************************************
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
273 * Append s to list of object files to generate later.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
274 */
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
275
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
276 void obj_append(Dsymbol s)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
277 {
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
278 global.obj_symbols_towrite.push(cast(void*)s);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
279 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
280
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
281 version (Bug4059)
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
282 {
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
283 private extern (C) void _Z8obj_initP9OutbufferPKcS2_(Outbuffer* objbuf, const(char)* filename, const(char)* csegname);
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
284 void obj_init(Outbuffer* objbuf, const(char)* filename, const(char)* csegname) { return _Z8obj_initP9OutbufferPKcS2_(objbuf, filename, csegname); }
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
285 }
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
286 else
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
287 {
25
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
288 extern (C++) {
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
289 void obj_init(Outbuffer* objbuf, const(char)* filename, const(char)* csegname);
25
3f834bed4f13 FWindows linking issues fixed
korDen
parents: 16
diff changeset
290 }
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
291 }
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
292
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
293 extern (C++) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
294 void backend_init();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
295 void backend_term();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
296 void obj_term();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
297 void rtlsym_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
298 void slist_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
299 void el_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
300 void cg87_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
301 void out_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
302 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
303
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
304 void clearStringTab()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
305 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
306 //printf("clearStringTab()\n");
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
307 memset(global.stringTab.ptr, 0, global.stringTab.sizeof);
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
308 global.stidx = 0;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
309
165
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 140
diff changeset
310 // assertexp_sfilename = null;
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 140
diff changeset
311 // assertexp_name = null;
25ede4f66bda Temporarily disabled GC (again) because phobos fails to compile with it (looks like some ObjSymbols are being falsely collected, see Library.d:666)
korDen
parents: 140
diff changeset
312 // assertexp_mn = null;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
313 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
314
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
315 void obj_start(char *srcfile)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
316 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
317 //printf("obj_start()\n");
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
318
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
319 out_config_init();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
320
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
321 rtlsym_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
322 slist_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
323 clearStringTab();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
324
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
325 obj_init(&global.objbuf, srcfile, null);
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
326
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
327 el_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
328 cg87_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
329 out_reset();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
330 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
331
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
332 void obj_end(Library library, File objfile)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
333 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
334 obj_term();
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
335
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
336 auto objbuf = &global.objbuf;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
337
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
338 if (library)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
339 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
340 // Transfer image to library
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
341 library.addObject(objfile.name.toChars(), objbuf.buf, objbuf.p - objbuf.buf);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
342 objbuf.buf = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
343 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
344 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
345 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
346 // Transfer image to file
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
347 objfile.setbuffer(objbuf.buf, objbuf.p - objbuf.buf);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
348 objbuf.buf = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
349
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
350 string p = FileName.path(objfile.name.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
351 FileName.ensurePathExists(p);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
352 //mem.free(p);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
353
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
354 //printf("write obj %s\n", objfile.name.toChars());
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
355 objfile.writev();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
356 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
357
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
358 objbuf.pend = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
359 objbuf.p = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
360 objbuf.len = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
361 objbuf.inc = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
362 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
363
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
364 void obj_write_deferred(Library library)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
365 {
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
366 auto obj_symbols_towrite = global.obj_symbols_towrite;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
367 for (int i = 0; i < obj_symbols_towrite.dim; i++)
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
368 {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
369 Dsymbol s = cast(Dsymbol)obj_symbols_towrite.data[i];
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
370 Module m = s.getModule();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
371
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
372 string mname;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
373 if (m)
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
374 {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
375 mname = m.srcfile.toChars();
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
376 global.lastmname = mname;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
377 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
378 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
379 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
380 //mname = s->ident->toChars();
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
381 mname = global.lastmname;
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
382 assert(mname.length != 0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
383 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
384
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
385 obj_start(cast(char*)toStringz(mname));
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
386
176
fa9a71a9f5a8 Moved all the mutable globals to Global
korDen
parents: 175
diff changeset
387 int count = ++global.count; // sequence for generating names
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
388
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
389 /* Create a module that's a doppelganger of m, with just
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
390 * enough to be able to create the moduleinfo.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
391 */
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 34
diff changeset
392 auto idbuf = new OutBuffer();
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
393 idbuf.printf("%s.%d", m ? m.ident.toChars() : mname, count);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
394 string idstr = idbuf.extractString();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
395 idbuf.data = null;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
396 Identifier id = new Identifier(idstr, TOK.TOKidentifier);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
397
74
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 34
diff changeset
398 auto md = new Module(mname, id, 0, 0);
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 34
diff changeset
399 md.members = new Dsymbols();
7e0d548de9e6 Switch Arrays of Dsymbols to the new templated Vector type
Eldar Insafutdinov <e.insafutdinov@gmail.com>
parents: 34
diff changeset
400 md.members.push(s); // its only 'member' is s
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
401 if (m)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
402 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
403 md.doppelganger = 1; // identify this module as doppelganger
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
404 md.md = m.md;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
405 md.aimports.push(cast(void*)m); // it only 'imports' m
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
406 md.massert = m.massert;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
407 md.marray = m.marray;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
408 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
409
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
410 md.genobjfile(0);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
411
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
412 /* Set object file name to be source name with sequence number,
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
413 * as mangled symbol names get way too long.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
414 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
415 string fname = FileName.removeExt(mname);
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
416
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
417 OutBuffer namebuf = new OutBuffer();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
418 uint hash = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
419 foreach (char c; s.toChars())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
420 hash += c;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
421
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
422 namebuf.printf("%s_%x_%x.%s", fname, count, hash, global.obj_ext);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
423 fname = namebuf.extractString();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
424
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
425 //printf("writing '%s'\n", fname);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
426 File objfile = new File(fname);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
427 obj_end(library, objfile);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
428 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
429
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
430 obj_symbols_towrite.dim = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
431 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
432
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
433 /**************************************
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
434 * Initialize config variables.
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
435 */
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
436
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
437 void out_config_init()
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
438 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
439 Param* params = &global.params;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
440
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
441 if (!config.target_cpu)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
442 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
443 config.target_cpu = TARGET_PentiumPro;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
444 config.target_scheduler = config.target_cpu;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
445 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
446 config.fulltypes = CVNONE;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
447 config.inline8087 = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
448 config.memmodel = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
449 config.flags |= CFGuchar; // make sure TYchar is unsigned
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
450 version (TARGET_WINDOS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
451 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
452 config.exe = EX_WIN64;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
453 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
454 config.exe = EX_NT;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
455
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
456 // Win32 eh
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
457 config.flags2 |= CFG2seh;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
458
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
459 if (params.run)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
460 config.wflags |= WFexe; // EXE file only optimizations
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
461 else if (params.link && !global.params.deffile)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
462 config.wflags |= WFexe; // EXE file only optimizations
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
463 else if (params.exefile) // if writing out EXE file
178
e3afd1303184 Many small bugs fixed
korDen
parents: 177
diff changeset
464 {
0
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
465 size_t len = params.exefile.length;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
466 if (len >= 4 && icmp(params.exefile[len-3..len], "exe") == 0)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
467 config.wflags |= WFexe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
468 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
469 config.flags4 |= CFG4underscore;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
470 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
471 version (TARGET_LINUX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
472 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
473 config.exe = EX_LINUX64;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
474 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
475 config.exe = EX_LINUX;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
476 config.flags |= CFGnoebp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
477 config.flags |= CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
478 if (params.pic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
479 config.flags3 |= CFG3pic;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
480 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
481 version (TARGET_OSX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
482 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
483 config.exe = EX_OSX64;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
484 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
485 config.exe = EX_OSX;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
486 config.flags |= CFGnoebp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
487 config.flags |= CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
488 if (params.pic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
489 config.flags3 |= CFG3pic;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
490 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
491 version (TARGET_FREEBSD) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
492 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
493 config.exe = EX_FREEBSD64;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
494 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
495 config.exe = EX_FREEBSD;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
496 config.flags |= CFGnoebp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
497 config.flags |= CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
498 if (params.pic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
499 config.flags3 |= CFG3pic;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
500 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
501 version (TARGET_SOLARIS) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
502 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
503 config.exe = EX_SOLARIS64;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
504 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
505 config.exe = EX_SOLARIS;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
506 config.flags |= CFGnoebp;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
507 config.flags |= CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
508 if (params.pic)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
509 config.flags3 |= CFG3pic;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
510 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
511 config.flags2 |= CFG2nodeflib; // no default library
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
512 config.flags3 |= CFG3eseqds;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
513 static if (false) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
514 if (env.getEEcontext().EEcompile != 2)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
515 config.flags4 |= CFG4allcomdat;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
516 if (env.nochecks())
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
517 config.flags4 |= CFG4nochecks; // no runtime checking
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
518 } else version (TARGET_OSX) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
519 } else {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
520 config.flags4 |= CFG4allcomdat;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
521 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
522 if (params.trace)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
523 config.flags |= CFGtrace; // turn on profiler
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
524 if (params.nofloat)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
525 config.flags3 |= CFG3wkfloat;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
526
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
527 configv.verbose = params.verbose;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
528
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
529 if (params.optimize)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
530 go_flag(cast(char*)"-o".ptr);
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
531
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
532 if (params.symdebug)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
533 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
534 version (ELFOBJ_OR_MACHOBJ) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
535 configv.addlinenumbers = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
536 config.fulltypes = (params.symdebug == 1) ? CVDWARF_D : CVDWARF_C;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
537 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
538 version (OMFOBJ) {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
539 configv.addlinenumbers = 1;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
540 config.fulltypes = CV4;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
541 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
542 if (!params.optimize)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
543 config.flags |= CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
544 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
545 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
546 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
547 configv.addlinenumbers = 0;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
548 config.fulltypes = CVNONE;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
549 //config.flags &= ~CFGalwaysframe;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
550 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
551
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
552 if (params.isX86_64)
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
553 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
554 util_set64();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
555 cod3_set64();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
556 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
557 else
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
558 {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
559 util_set386();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
560 cod3_set386();
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
561 }
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
562
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
563 debug {
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
564 debugb = params.debugb;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
565 debugc = params.debugc;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
566 debugf = params.debugf;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
567 debugr = params.debugr;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
568 debugw = params.debugw;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
569 debugx = params.debugx;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
570 debugy = params.debugy;
10317f0c89a5 Initial commit
korDen
parents:
diff changeset
571 }
14
2cc604139636 Implemented Linux support for ddmd. Some parts are a bit hacky to just "get it working", that said, druntime and phobos compile, and unittests pass.
Robert Clipsham <robert@octarineparrot.com>
parents: 0
diff changeset
572 }