aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/svr3z.ifile
blob: 4946051235e456d95b3e029e1fa8066411abb51a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
 *      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 : { }
	}
}