Mercurial > hg-old > index.cgi
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 |