ftp.nice.ch/pub/next/developer/objc/mach/dis.N.bs.tar.gz#/relocation.c

This is relocation.c in view mode; [Download] [Up]

#include "dis.h"
/*
 * relocation information storage and preparation routines.
 *
 * $Log:	relocation.c,v $
 * Revision 1.4  94/08/22  23:59:08  ediger
 * corrected a goof in set_sections()
 * 
 * Revision 1.2  94/08/22  22:31:26  ediger
 * ditch movmem macro, change a global variable name
 * 
 * Revision 1.1  94/05/30  23:07:43  ediger
 * Initial revision
 * 
 */

static char rcsident[] = "$Id: relocation.c,v 1.4 94/08/22 23:59:08 ediger Exp Locker: ediger $";

struct section *sectiontable[50];	/* note that index of 1 is location 0! */

void
sortreltables(char *map)
{
	int                     sectn;
	struct section         *q;
	struct relocation_info *r, temp;
	int                     i, j;

	for (sectn = 0; q = sectiontable[sectn]; sectn++)
	{
		/* sort into descending order: */
		 r = (struct relocation_info *)(map + q->reloff);

		for (i = 0; i < q->nreloc; i++)
		{
			for (j = i - 1; j >= 0 && r[j].r_address < r[i].r_address; j--)
				;

			j++;

			if (j < i)
			{
				temp = r[i];
				memmove(
					r + j + 1,
					r + j,
					(i - j) * sizeof(struct relocation_info)
				);
				r[j] = temp;
			}
		}
	}
}

/* has to be global, as set_sections gets called several times */
int giTotalSections = 0;

int
set_sections(struct segment_command *spSegCmd)
{
	int             i;
	struct section *spSection;

	spSection = (struct section *) (spSegCmd + 1);

	for (i = 0; i < spSegCmd->nsects; spSection++, i++)
		sectiontable[giTotalSections++] = spSection;

	return giTotalSections;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.