scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

mapseg.c (615B)


      1 #include <stdio.h>
      2 #include <string.h>
      3 
      4 #include <scc/mach.h>
      5 
      6 #include "libmach.h"
      7 
      8 int
      9 mapseg(Map *map, Section *seg, FILE *fp, long fsiz)
     10 {
     11 	int n;
     12 	char *s;
     13 	Mapsec *mseg, *mp;
     14 
     15 	mp = NULL;
     16 	n = map->nseg;
     17 	for (mseg = map->seg; n--; mseg++) {
     18 		s = mseg->sec.name;
     19 		if (mseg->used && s && !strcmp(s, seg->name))
     20 			goto found;
     21 		if (!mp && !mseg->used)
     22 			mp = mseg;
     23 	}
     24 
     25 	if (mp) {
     26 		mseg = mp;
     27 		goto found;
     28 	}
     29 
     30 	if ((map = remap(map, map->nsec+1, map->nseg)) == NULL)
     31 		return -1;
     32 	mseg = &map->sec[map->nsec-1];
     33 
     34 found:
     35 	mseg->sec = *seg;
     36 	mseg->used = 1;
     37 	mseg->fp = fp,
     38 	mseg->fsiz = fsiz;
     39 
     40 	return 0;
     41 }