comparison lwlink/readfiles.c @ 204:048ebb85f6ef

Added 8 bit external references for base page addressing mode
author lost
date Sun, 29 Mar 2009 14:52:28 +0000
parents 6ebb93b409ba
children 42df94f30d82
comparison
equal deleted inserted replaced
203:2c1afbdb2de0 204:048ebb85f6ef
264 rp = lw_malloc(sizeof(reloc_t)); 264 rp = lw_malloc(sizeof(reloc_t));
265 rp -> next = s -> incompletes; 265 rp -> next = s -> incompletes;
266 s -> incompletes = rp; 266 s -> incompletes = rp;
267 rp -> offset = 0; 267 rp -> offset = 0;
268 rp -> expr = lw_expr_stack_create(); 268 rp -> expr = lw_expr_stack_create();
269 rp -> flags = RELOC_NORM;
269 270
270 // parse the expression 271 // parse the expression
271 while (CURBYTE()) 272 while (CURBYTE())
272 { 273 {
273 int tt = CURBYTE(); 274 int tt = CURBYTE();
274 NEXTBYTE(); 275 NEXTBYTE();
275 switch (tt) 276 switch (tt)
276 { 277 {
278 case 0xFF:
279 // a flag specifier
280 tt = CURBYTE();
281 rp -> flags = tt;
282 term = NULL;
283
277 case 0x01: 284 case 0x01:
278 // 16 bit integer 285 // 16 bit integer
279 tt = CURBYTE() << 8; 286 tt = CURBYTE() << 8;
280 NEXTBYTE(); 287 NEXTBYTE();
281 tt |= CURBYTE(); 288 tt |= CURBYTE();
310 317
311 default: 318 default:
312 fprintf(stderr, "%s (%s): bad relocation expression\n", fn -> filename, s -> name); 319 fprintf(stderr, "%s (%s): bad relocation expression\n", fn -> filename, s -> name);
313 exit(1); 320 exit(1);
314 } 321 }
315 lw_expr_stack_push(rp -> expr, term); 322 if (term)
316 lw_expr_term_free(term); 323 {
324 lw_expr_stack_push(rp -> expr, term);
325 lw_expr_term_free(term);
326 }
317 } 327 }
318 // skip the NUL 328 // skip the NUL
319 NEXTBYTE(); 329 NEXTBYTE();
320 330
321 // fetch the offset 331 // fetch the offset