Mercurial > hg-old > index.cgi
comparison lwasm/section.c @ 387:a741d2e4869f
Various bugfixes; fixed lwobjdump to display symbols with unprintable characters more sensibly; start of a (nonfunctional for now) testing framework
author | lost@l-w.ca |
---|---|
date | Wed, 14 Jul 2010 20:15:23 -0600 |
parents | cf8c92d70eb1 |
children | 35a0b086bf4a |
comparison
equal
deleted
inserted
replaced
386:af5f2c51db76 | 387:a741d2e4869f |
---|---|
46 { | 46 { |
47 lwasm_register_error(as, l, "Need section name"); | 47 lwasm_register_error(as, l, "Need section name"); |
48 return; | 48 return; |
49 } | 49 } |
50 | 50 |
51 l -> len = 0; | |
52 | |
51 if (as -> csect) | 53 if (as -> csect) |
52 { | 54 { |
53 lw_expr_destroy(as -> csect -> offset); | 55 lw_expr_destroy(as -> csect -> offset); |
54 as -> csect -> offset = l -> addr; | 56 as -> csect -> offset = l -> addr; |
55 as -> csect = NULL; | 57 as -> csect = NULL; |
84 } | 86 } |
85 if (!s) | 87 if (!s) |
86 { | 88 { |
87 // create section data structure | 89 // create section data structure |
88 s = lw_alloc(sizeof(sectiontab_t)); | 90 s = lw_alloc(sizeof(sectiontab_t)); |
91 s -> oblen = 0; | |
92 s -> obsize = 0; | |
93 s -> obytes = NULL; | |
89 s -> name = lw_strdup(sn); | 94 s -> name = lw_strdup(sn); |
90 s -> offset = lw_expr_build(lw_expr_type_special, lwasm_expr_secbase, s); | 95 s -> offset = lw_expr_build(lw_expr_type_special, lwasm_expr_secbase, s); |
91 s -> flags = section_flag_none; | 96 s -> flags = section_flag_none; |
97 s -> reloctab = NULL; | |
92 if (!strcasecmp(sn, "bss") || !strcasecmp(sn, ".bss")) | 98 if (!strcasecmp(sn, "bss") || !strcasecmp(sn, ".bss")) |
93 { | 99 { |
94 s -> flags |= section_flag_bss; | 100 s -> flags |= section_flag_bss; |
95 } | 101 } |
96 // parse options | 102 // parse options |
138 { | 144 { |
139 lwasm_register_error(as, l, "Cannot use sections unless using the object target"); | 145 lwasm_register_error(as, l, "Cannot use sections unless using the object target"); |
140 return; | 146 return; |
141 } | 147 } |
142 | 148 |
149 l -> len = 0; | |
150 | |
143 if (!(as -> csect)) | 151 if (!(as -> csect)) |
144 { | 152 { |
145 lwasm_register_error(as, l, "ENDSECTION without SECTION"); | 153 lwasm_register_error(as, l, "ENDSECTION without SECTION"); |
146 return; | 154 return; |
147 } | 155 } |
169 if (as -> output_format != OUTPUT_OBJ) | 177 if (as -> output_format != OUTPUT_OBJ) |
170 { | 178 { |
171 lwasm_register_error(as, l, "EXPORT only supported for object target"); | 179 lwasm_register_error(as, l, "EXPORT only supported for object target"); |
172 return; | 180 return; |
173 } | 181 } |
182 | |
183 l -> len = 0; | |
174 | 184 |
175 if (l -> sym) | 185 if (l -> sym) |
176 { | 186 { |
177 sym = lw_strdup(l -> sym); | 187 sym = lw_strdup(l -> sym); |
178 l -> symset = 1; | 188 l -> symset = 1; |
230 { | 240 { |
231 lwasm_register_error(as, l, "IMPORT only supported for object target"); | 241 lwasm_register_error(as, l, "IMPORT only supported for object target"); |
232 return; | 242 return; |
233 } | 243 } |
234 | 244 |
245 l -> len = 0; | |
246 | |
235 if (l -> sym) | 247 if (l -> sym) |
236 { | 248 { |
237 sym = lw_strdup(l -> sym); | 249 sym = lw_strdup(l -> sym); |
238 l -> symset = 1; | 250 l -> symset = 1; |
239 } | 251 } |
294 { | 306 { |
295 lwasm_register_error(as, l, "EXTDEP must be within a section"); | 307 lwasm_register_error(as, l, "EXTDEP must be within a section"); |
296 return; | 308 return; |
297 } | 309 } |
298 | 310 |
311 l -> len = 0; | |
312 | |
299 if (l -> sym) | 313 if (l -> sym) |
300 sym = lw_strdup(l -> sym); | 314 sym = lw_strdup(l -> sym); |
301 | 315 |
302 if (l -> sym) | 316 if (l -> sym) |
303 { | 317 { |