pass2.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
       ---
       pass2.c (779B)
       ---
            1 #include <stdlib.h>
            2 #include <stdio.h>
            3 #include <limits.h>
            4 
            5 #include <scc/mach.h>
            6 
            7 #include "ld.h"
            8 
            9 static void
           10 mksecs(void)
           11 {
           12         int i;
           13         Obj *obj;
           14         Section sec, *sp;
           15 
           16         for (obj = objhead; obj; obj = obj->next) {
           17                 for (i = 0; getsec(obj, &i, &sec); i++) {
           18                         sp = lookupsec(sec.name);
           19                         if (sp->type == '?') {
           20                                 sp->type = sec.type;
           21                                 sp->flags = sec.flags;
           22                         }
           23 
           24                         if (sp->type != sec.type || sp->flags != sec.flags) {
           25                                 error("incompatible definitions of section '%s'",
           26                                       sp->name);
           27                         }
           28 
           29                         sp->size = sp->size+sp->align-1 & sp->align-1;
           30                         sp->size += sec.size;
           31                 }
           32         }
           33 }
           34 
           35 static void
           36 mksegs(void)
           37 {
           38         merge(&text);
           39         merge(&rodata);
           40         merge(&data);
           41         merge(&bss);
           42 }
           43 
           44 void
           45 pass2(int argc, char *argv[])
           46 {
           47         unsigned long long n;
           48         char *end;
           49 
           50         mksecs();
           51         mksegs();
           52 }