aboutsummaryrefslogtreecommitdiff
path: root/backends/plugins/ps2/plugin.ld
blob: 45efe4db7ac6b2e69646fefc5826973fe93711f3 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* PHDRS specifies ELF Program Headers (or segments) to the plugin linker */
PHDRS {
  plugin PT_LOAD ; /* Specifies that the plugin segment should be loaded from file */
  shorts PT_LOAD ; /* Specifies that the shorts segment should be loaded from file */
}

SECTIONS {
	.text 0: {
		_ftext = . ;
		*(.text)
		*(.text.*)
		*(.gnu.linkonce.t*)
		KEEP(*(.init))
		KEEP(*(.fini))
		QUAD(0)
	} : plugin /*The ": plugin" tells the linker to assign this and
  	             the following sections to the "plugin" segment*/
	PROVIDE(_etext = .);
	PROVIDE(etext = .);

	.reginfo : { *(.reginfo) }

	/* Global/static constructors and deconstructors. */
	.ctors ALIGN(16): {
	        ___plugin_ctors = .;
		KEEP(*(SORT(.ctors.*)))
		KEEP(*(.ctors))
		___plugin_ctors_end = .;
	}
	.dtors ALIGN(16): {
		___plugin_dtors = .;
		KEEP(*(SORT(.dtors.*)))
		KEEP(*(.dtors))
		___plugin_dtors_end = .;
	}

	/* Static data.  */
	.rodata ALIGN(128): {
		*(.rodata)
		*(.rodata.*)
		*(.gnu.linkonce.r*)
	}

	.data ALIGN(128): {
		_fdata = . ;
		*(.data)
		*(.data.*)
		*(.gnu.linkonce.d*)
		SORT(CONSTRUCTORS)
	}

	.rdata ALIGN(128): { *(.rdata) }
	.gcc_except_table ALIGN(128): { *(.gcc_except_table) }

	.bss ALIGN(128) : {
		*(.bss)
		*(.bss.*)
		*(.gnu.linkonce.b*)
		*(COMMON)
	}
	_end_bss = .;

	_end = . ;
	PROVIDE(end = .);

	/* Symbols needed by crt0.s.  */
	PROVIDE(_heap_size = -1);
	PROVIDE(_stack = -1);
	PROVIDE(_stack_size = 128 * 1024);	

	/*We assign the output location counter to the plugin hole made
   	  in main_prog.ld, then assign the small data sections to the shorts segment*/
	. = __plugin_hole_start;
	.lit4 ALIGN(128): { *(.lit4) } : shorts
	.lit8 ALIGN(128): { *(.lit8) }

	.sdata ALIGN(128): {
		*(.sdata)
		*(.sdata.*)
		*(.gnu.linkonce.s*)
	}

	_edata = .;
	PROVIDE(edata = .);

	/* Uninitialized data.  */
	.sbss ALIGN(128) : {
		_fbss = . ;
		*(.sbss)
		*(.sbss.*)
		*(.gnu.linkonce.sb*)
		*(.scommon)
	}
}