shithub: scc

ref: dccebc26a1d24f28a40b96d428e6409999ae01f8
dir: /src/cmd/ld/pass4.c/

View raw version
#include <stdio.h>
#include <stdlib.h>

#include <scc/mach.h>

#include "ld.h"

void
pass4(int argc, char *argv[])
{
	Objlst *lp;
	Objsect *sp;
	Section *sec;
	unsigned long i;
	FILE *fp;

	for (lp = objhead; lp; lp = lp->next) {
		fp = lp->obj->fp;
		for (sp = lp->obj->secs; sp; sp = sp->next) {
			if (!objpos(lp->obj, lp->obj->fp, sp->seek))
				error("seeking for section content");

			sec = section(sp->name);
			if (!sec->fp) {
				sec->fp = tmpfile();
				if (!sec->fp) {
					error("out of memory");
					exit(EXIT_FAILURE);
				}
			}

			/* TODO: add symbol alignment */

			for (i = 0; i < sp->size; i++)
				putc(getc(fp), sec->fp);

			/* TODO: Apply relocations */
		}
	}
}