mapseg.c - scc - simple c99 compiler
(HTM) git clone git://git.simple-cc.org/scc
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) 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 }