/*
 *      svr3z.ifile - for collectless G++ on i386 System V.
 *	Leaves memory unconfigured at address 0.
 *	
 *      Install this file as $prefix/gcc-lib/TARGET/VERSION/gccz.ifile
 *
 *	BLOCK to an offset that leaves room for many headers ( the value
 *	here allows for a file header, an outheader, and up to 11 section 
 *	headers on most systems.
 *	BIND to an address that excludes page 0 from being mapped. The value
 *	used for BLOCK should be or'd into this value. Here I'm setting BLOCK
 *	to 0x200 and BIND to ( 0x400000 | value_used_for(BLOCK) )
 *	If you are using shared libraries, watch that you don't overlap the
 *	address ranges assigned for shared libs.
 *
 *	GROUP BIND to a location in the next segment.  Here, the only value
 *	that you should change (I think) is that within NEXT, which I've set
 *	to my hardware segment size. You can always use a larger size, but not
 *	a smaller one.
 */
SECTIONS
{
	.text BIND(0x400200) BLOCK (0x200) :
	{
		 /* plenty for room for headers */
		*(.init)
		*(.text)
		vfork = fork; /* I got tired of editing peoples sloppy code */
		*(.fini)
	}
	.stab BIND(ADDR(.text) + SIZEOF(.text)): { }
	.stabstr BIND(ADDR(.stab) + SIZEOF(.stab)): { }
	GROUP BIND( NEXT(0x400000) +
		(ADDR(.stabstr) + (SIZEOF(.stabstr)) % 0x1000)):
	{
			.data : {
				__CTOR_LIST__ = . ; 
				. += 4 ;	/* leading NULL */
				*(.ctor) 
				. += 4 ;	/* trailing NULL */
				__DTOR_LIST__ = . ;
				. += 4 ;	/* leading NULL */
				*(.dtor) 
				. += 4 ; 	/* trailing NULL */
			 }
			.bss : { }
	}
}
