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 {