|
@@ -1320,21 +1320,76 @@ begin
|
|
add(' KEEP (*(.fini))');
|
|
add(' KEEP (*(.fini))');
|
|
add(' } =0x90909090');
|
|
add(' } =0x90909090');
|
|
add(' PROVIDE (_etext = .);');
|
|
add(' PROVIDE (_etext = .);');
|
|
- add(' .rodata :');
|
|
|
|
- add(' {');
|
|
|
|
- add(' *(.rodata .rodata.* .gnu.linkonce.r.*)');
|
|
|
|
- add(' }');
|
|
|
|
|
|
+ add(' .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }');
|
|
add(' .rodata1 : { *(.rodata1) }');
|
|
add(' .rodata1 : { *(.rodata1) }');
|
|
add(' .eh_frame_hdr : { *(.eh_frame_hdr) }');
|
|
add(' .eh_frame_hdr : { *(.eh_frame_hdr) }');
|
|
add(' .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }');
|
|
add(' .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }');
|
|
- add(' .gcc_except_table : { KEEP (*(.gcc_except_table .gcc_except_table.*)) }');
|
|
|
|
-
|
|
|
|
- {Adjust the address for the data segment. We want to adjust up to
|
|
|
|
- the same address within the page on the next page up.}
|
|
|
|
- add(' . = ALIGN (0x1000) - ((0x1000 - .) & (0x1000 - 1));');
|
|
|
|
|
|
+ add(' .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table');
|
|
|
|
+ add(' .gcc_except_table.*) }');
|
|
|
|
+ add(' /* These sections are generated by the Sun/Oracle C++ compiler. */');
|
|
|
|
+ add(' .exception_ranges : ONLY_IF_RO { *(.exception_ranges');
|
|
|
|
+ add(' .exception_ranges*) }');
|
|
|
|
+ add(' /* Adjust the address for the data segment. We want to adjust up to');
|
|
|
|
+ add(' the same address within the page on the next page up. */');
|
|
|
|
+ add(' . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));');
|
|
add(' /* Exception handling */');
|
|
add(' /* Exception handling */');
|
|
add(' .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }');
|
|
add(' .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }');
|
|
add(' .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }');
|
|
add(' .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }');
|
|
|
|
+ add(' .exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }');
|
|
|
|
+ add(' /* Thread Local Storage sections */');
|
|
|
|
+ add(' .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }');
|
|
|
|
+ add(' .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }');
|
|
|
|
+ add(' .preinit_array :');
|
|
|
|
+ add(' {');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__preinit_array_start = .);');
|
|
|
|
+ add(' KEEP (*(.preinit_array))');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__preinit_array_end = .);');
|
|
|
|
+ add(' }');
|
|
|
|
+ add(' .init_array :');
|
|
|
|
+ add(' {');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__init_array_start = .);');
|
|
|
|
+ add(' KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))');
|
|
|
|
+ add(' KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__init_array_end = .);');
|
|
|
|
+ add(' }');
|
|
|
|
+ add(' .fini_array :');
|
|
|
|
+ add(' {');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__fini_array_start = .);');
|
|
|
|
+ add(' KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))');
|
|
|
|
+ add(' KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))');
|
|
|
|
+ add(' PROVIDE_HIDDEN (__fini_array_end = .);');
|
|
|
|
+ add(' }');
|
|
|
|
+ add(' .ctors :');
|
|
|
|
+ add(' {');
|
|
|
|
+ add(' /* gcc uses crtbegin.o to find the start of');
|
|
|
|
+ add(' the constructors, so we make sure it is');
|
|
|
|
+ add(' first. Because this is a wildcard, it');
|
|
|
|
+ add(' doesn''t matter if the user does not');
|
|
|
|
+ add(' actually link against crtbegin.o; the');
|
|
|
|
+ add(' linker won''t look for a file to match a');
|
|
|
|
+ add(' wildcard. The wildcard also means that it');
|
|
|
|
+ add(' doesn''t matter which directory crtbegin.o');
|
|
|
|
+ add(' is in. */');
|
|
|
|
+ add(' KEEP (*crtbegin.o(.ctors))');
|
|
|
|
+ add(' KEEP (*crtbegin?.o(.ctors))');
|
|
|
|
+ add(' /* We don''t want to include the .ctor section from');
|
|
|
|
+ add(' the crtend.o file until after the sorted ctors.');
|
|
|
|
+ add(' The .ctor section from the crtend file contains the');
|
|
|
|
+ add(' end of ctors marker and it must be last */');
|
|
|
|
+ add(' KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))');
|
|
|
|
+ add(' KEEP (*(SORT(.ctors.*)))');
|
|
|
|
+ add(' KEEP (*(.ctors))');
|
|
|
|
+ add(' }');
|
|
|
|
+ add(' .dtors :');
|
|
|
|
+ add(' {');
|
|
|
|
+ add(' KEEP (*crtbegin.o(.dtors))');
|
|
|
|
+ add(' KEEP (*crtbegin?.o(.dtors))');
|
|
|
|
+ add(' KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))');
|
|
|
|
+ add(' KEEP (*(SORT(.dtors.*)))');
|
|
|
|
+ add(' KEEP (*(.dtors))');
|
|
|
|
+ add(' }');
|
|
|
|
+ add(' .jcr : { KEEP (*(.jcr)) }');
|
|
|
|
+ add(' .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }');
|
|
add(' .dynamic : { *(.dynamic) }');
|
|
add(' .dynamic : { *(.dynamic) }');
|
|
add(' .got : { *(.got) }');
|
|
add(' .got : { *(.got) }');
|
|
add(' .got.plt : { *(.got.plt) }');
|
|
add(' .got.plt : { *(.got.plt) }');
|