1#include <stdlib.h>2#include <stdio.h>3#include <limits.h>45#include <scc/mach.h>67#include "ld.h"89static void10mksecs(void)11{12 int i;13 Obj *obj;14 Section sec, *sp;1516 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 }2324 if (sp->type != sec.type || sp->flags != sec.flags) {25 error("incompatible definitions of section '%s'",26 sp->name);27 }2829 sp->size = sp->size+sp->align-1 & sp->align-1;30 sp->size += sec.size;31 }32 }33}3435static void36mksegs(void)37{38 merge(&text);39 merge(&rodata);40 merge(&data);41 merge(&bss);42}4344void45pass2(int argc, char *argv[])46{47 unsigned long long n;48 char *end;4950 mksecs();51 mksegs();52}