summaryrefslogtreecommitdiff
path: root/gnu/dist/ld/scripttempl
diff options
context:
space:
mode:
authortv <tv@NetBSD.org>1999-02-02 19:51:16 +0000
committertv <tv@NetBSD.org>1999-02-02 19:51:16 +0000
commit2e8b57510c512922b01977bf9c07cb986ddbaa67 (patch)
tree99f0ff2ba55134ad127492d887b5b6567773ef25 /gnu/dist/ld/scripttempl
parent269cb58003ce63bbb1763517287a25b909583ae4 (diff)
By popular demand, import binutils 2.9.1.
Diffstat (limited to 'gnu/dist/ld/scripttempl')
-rw-r--r--gnu/dist/ld/scripttempl/aix.sc1
-rw-r--r--gnu/dist/ld/scripttempl/armcoff.sc10
-rw-r--r--gnu/dist/ld/scripttempl/elfd10v.sc2
-rw-r--r--gnu/dist/ld/scripttempl/elfppc.sc12
-rw-r--r--gnu/dist/ld/scripttempl/h8300h.sc2
-rw-r--r--gnu/dist/ld/scripttempl/h8300s.sc2
-rw-r--r--gnu/dist/ld/scripttempl/i386go32.sc53
-rw-r--r--gnu/dist/ld/scripttempl/i960.sc4
-rw-r--r--gnu/dist/ld/scripttempl/pe.sc123
-rw-r--r--gnu/dist/ld/scripttempl/tic30aout.sc34
-rw-r--r--gnu/dist/ld/scripttempl/tic30coff.sc58
-rw-r--r--gnu/dist/ld/scripttempl/v850.sc183
12 files changed, 398 insertions, 86 deletions
diff --git a/gnu/dist/ld/scripttempl/aix.sc b/gnu/dist/ld/scripttempl/aix.sc
index 29fc3547260..3f4b6175906 100644
--- a/gnu/dist/ld/scripttempl/aix.sc
+++ b/gnu/dist/ld/scripttempl/aix.sc
@@ -37,6 +37,7 @@ SECTIONS
${RELOCATING+PROVIDE (_edata = .);}
}
.bss : {
+ *(.tocbss)
*(.bss)
*(.bs)
*(.uc)
diff --git a/gnu/dist/ld/scripttempl/armcoff.sc b/gnu/dist/ld/scripttempl/armcoff.sc
index 6ca26859b67..8e07169d560 100644
--- a/gnu/dist/ld/scripttempl/armcoff.sc
+++ b/gnu/dist/ld/scripttempl/armcoff.sc
@@ -21,18 +21,22 @@ SECTIONS
.text ${RELOCATING+ 0x8000} : {
*(.init)
*(.text)
+ *(.glue_7t)
+ *(.glue_7)
+ *(.rdata)
${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
LONG (-1); *(.ctors); *(.ctor); LONG (0); }
${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
LONG (-1); *(.dtors); *(.dtor); LONG (0); }
*(.fini)
- ${RELOCATING+ etext = .};
+ ${RELOCATING+ etext = .;}
}
.data ${RELOCATING+${DATA_ADDR-0x40000 + (. & 0xfffc0fff)}} : {
${RELOCATING+ __data_start__ = . ;}
*(.data)
${RELOCATING+ __data_end__ = . ;}
- ${RELOCATING+ edata = .};
+ ${RELOCATING+ edata = .;}
+ ${RELOCATING+ _edata = .;}
}
.bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
{
@@ -42,6 +46,8 @@ SECTIONS
${RELOCATING+ __bss_end__ = . ;}
}
+ ${RELOCATING+ end = .;}
+ ${RELOCATING+ _end = .;}
${RELOCATING+ __end__ = .;}
.stab 0 ${RELOCATING+(NOLOAD)} :
diff --git a/gnu/dist/ld/scripttempl/elfd10v.sc b/gnu/dist/ld/scripttempl/elfd10v.sc
index 37b6ce0ceb7..7728f689445 100644
--- a/gnu/dist/ld/scripttempl/elfd10v.sc
+++ b/gnu/dist/ld/scripttempl/elfd10v.sc
@@ -178,7 +178,7 @@ SECTIONS
/* Hmmm, there's got to be a better way. This sets the stack to the
top of the simulator memory (i.e. top of 64K data space). */
- .stack 0x2007FFE : { _stack = .; *(.stack) }
+ .stack 0x00007FFE : { _stack = .; *(.stack) }
.text ${RELOCATING+${TEXT_START_ADDR}} :
{
diff --git a/gnu/dist/ld/scripttempl/elfppc.sc b/gnu/dist/ld/scripttempl/elfppc.sc
index b6c542a4a9e..33763bf0ea0 100644
--- a/gnu/dist/ld/scripttempl/elfppc.sc
+++ b/gnu/dist/ld/scripttempl/elfppc.sc
@@ -15,7 +15,6 @@
# .data section.
# OTHER_BSS_SYMBOLS - symbols that appear at the start of the
# .bss section besides __bss_start.
-# DATA_PLT - .plt should be in data segment, not text segment.
#
# When adding sections, do note that the names of some sections are used
# when specifying the start address of the next.
@@ -53,6 +52,9 @@ SECTIONS
.hash ${RELOCATING-0} : { *(.hash) }
.dynsym ${RELOCATING-0} : { *(.dynsym) }
.dynstr ${RELOCATING-0} : { *(.dynstr) }
+ .gnu.version ${RELOCATING-0} : { *(.gnu.version) }
+ .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) }
+ .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) }
.rela.text ${RELOCATING-0} :
{ *(.rela.text) *(.rela.gnu.linkonce.t*) }
.rela.data ${RELOCATING-0} :
@@ -68,11 +70,10 @@ SECTIONS
.rela.fini ${RELOCATING-0} : { *(.rela.fini) }
.rela.bss ${RELOCATING-0} : { *(.rela.bss) }
.rela.plt ${RELOCATING-0} : { *(.rela.plt) }
- .rela.sdata ${RELOCATING-0} : { *(.rela.sdata2) }
- .rela.sbss ${RELOCATING-0} : { *(.rela.sbss2) }
+ .rela.sdata ${RELOCATING-0} : { *(.rela.sdata) }
+ .rela.sbss ${RELOCATING-0} : { *(.rela.sbss) }
.rela.sdata2 ${RELOCATING-0} : { *(.rela.sdata2) }
.rela.sbss2 ${RELOCATING-0} : { *(.rela.sbss2) }
- ${DATA_PLT-${PLT}}
.text ${RELOCATING-0} :
{
${RELOCATING+${TEXT_START_SYMBOLS}}
@@ -147,7 +148,6 @@ SECTIONS
${CREATE_SHLIB+${SBSS2}}
${RELOCATING+PROVIDE (_GOT_END_ = .);}
- ${DATA_PLT+${PLT}}
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
@@ -159,8 +159,10 @@ SECTIONS
${RELOCATING+PROVIDE (__sbss_start = .);}
*(.sbss)
*(.scommon)
+ *(.dynsbss)
${RELOCATING+PROVIDE (__sbss_end = .);}
}
+ ${PLT}
.bss ${RELOCATING-0} :
{
${RELOCATING+${OTHER_BSS_SYMBOLS}}
diff --git a/gnu/dist/ld/scripttempl/h8300h.sc b/gnu/dist/ld/scripttempl/h8300h.sc
index d433d682761..d1cfd860b65 100644
--- a/gnu/dist/ld/scripttempl/h8300h.sc
+++ b/gnu/dist/ld/scripttempl/h8300h.sc
@@ -17,7 +17,7 @@ MEMORY
/* The stack starts at the top of main ram. */
topram : o = 0x3fffc, l = 0x4
/* This holds variables in the "tiny" sections. */
- tiny : o = 0xff8000, l = 7f00
+ tiny : o = 0xff8000, l = 0x7f00
/* At the very top of the address space is the 8-bit area. */
eight : o = 0xffff00, l = 0x100
}
diff --git a/gnu/dist/ld/scripttempl/h8300s.sc b/gnu/dist/ld/scripttempl/h8300s.sc
index b43abdf55d9..45474fc51ce 100644
--- a/gnu/dist/ld/scripttempl/h8300s.sc
+++ b/gnu/dist/ld/scripttempl/h8300s.sc
@@ -17,7 +17,7 @@ MEMORY
/* The stack starts at the top of main ram. */
topram : o = 0x3fffc, l = 0x4
/* This holds variables in the "tiny" sections. */
- tiny : o = 0xff8000, l = 7f00
+ tiny : o = 0xff8000, l = 0x7f00
/* At the very top of the address space is the 8-bit area. */
eight : o = 0xffff00, l = 0x100
}
diff --git a/gnu/dist/ld/scripttempl/i386go32.sc b/gnu/dist/ld/scripttempl/i386go32.sc
index 827198bc931..8102205bb9f 100644
--- a/gnu/dist/ld/scripttempl/i386go32.sc
+++ b/gnu/dist/ld/scripttempl/i386go32.sc
@@ -1,45 +1,40 @@
-# Linker script for i386 go32 COFF.
-# stolen from ian
-test -z "$ENTRY" && ENTRY=_start
-# These are substituted in as variables in order to get '}' in a shell
-# conditional expansion.
-INIT='.init : { *(.init) }'
-FINI='.fini : { *(.fini) }'
+# Linker script for i386 go32 (DJGPP)
+
+test -z "$ENTRY" && ENTRY=start
+EXE=${CONSTRUCTING+${RELOCATING+-exe}}
cat <<EOF
-OUTPUT_FORMAT("${OUTPUT_FORMAT}")
-${LIB_SEARCH_DIRS}
+OUTPUT_FORMAT("${OUTPUT_FORMAT}${EXE}")
ENTRY(${ENTRY})
SECTIONS
{
- .text ${RELOCATING+ 0x10a8} : {
- ${RELOCATING+ *(.init)}
+ .text ${RELOCATING+ ${TARGET_PAGE_SIZE}+SIZEOF_HEADERS} : {
*(.text)
- ${RELOCATING+ *(.fini)}
- ${RELOCATING+ etext = .};
+ *(.const*)
+ *(.ro*)
+ ${RELOCATING+etext = . ; _etext = .};
+ ${RELOCATING+. = ALIGN(${SEGMENT_SIZE});}
}
- .data ALIGN (0x1000) : {
- *(.data .data2)
- *(.ctor)
- *(.dtor)
- ${RELOCATING+ _edata = .};
+ .data ${RELOCATING+ ${DATA_ALIGNMENT}} : {
+ ${RELOCATING+djgpp_first_ctor = . ;
+ *(.ctor)
+ djgpp_last_ctor = . ;}
+ ${RELOCATING+djgpp_first_dtor = . ;
+ *(.dtor)
+ djgpp_last_dtor = . ;}
+ *(.data)
+ ${RELOCATING+ edata = . ; _edata = .};
+ ${RELOCATING+ . = ALIGN(${SEGMENT_SIZE});}
}
+ ${CONSTRUCTING+${RELOCATING-.ctor : { *(.ctor) }}}
+ ${CONSTRUCTING+${RELOCATING-.dtor : { *(.dtor) }}}
.bss ${RELOCATING+ SIZEOF(.data) + ADDR(.data)} :
{
*(.bss)
*(COMMON)
- ${RELOCATING+ end = .};
- }
- ${RELOCATING- ${INIT}}
- ${RELOCATING- ${FINI}}
- .stab 0 ${RELOCATING+(NOLOAD)} :
- {
- [ .stab ]
- }
- .stabstr 0 ${RELOCATING+(NOLOAD)} :
- {
- [ .stabstr ]
+ ${RELOCATING+ end = . ; _end = .};
+ ${RELOCATING+ . = ALIGN(${SEGMENT_SIZE});}
}
}
EOF
diff --git a/gnu/dist/ld/scripttempl/i960.sc b/gnu/dist/ld/scripttempl/i960.sc
index 039e1af947f..dc335555d7d 100644
--- a/gnu/dist/ld/scripttempl/i960.sc
+++ b/gnu/dist/ld/scripttempl/i960.sc
@@ -8,13 +8,13 @@ SECTIONS
${RELOCATING+ _etext = .};
${CONSTRUCTING+${COFF_CTORS}}
}
- .data SIZEOF(.text) + ADDR(.text):
+ .data :
{
*(.data)
${CONSTRUCTING+CONSTRUCTORS}
${RELOCATING+ _edata = .};
}
- .bss SIZEOF(.data) + ADDR(.data):
+ .bss :
{
${RELOCATING+ _bss_start = .};
*(.bss)
diff --git a/gnu/dist/ld/scripttempl/pe.sc b/gnu/dist/ld/scripttempl/pe.sc
index 2adc3db9e53..f5cfc70492b 100644
--- a/gnu/dist/ld/scripttempl/pe.sc
+++ b/gnu/dist/ld/scripttempl/pe.sc
@@ -1,7 +1,39 @@
# Linker script for PE.
+if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
+ RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
+fi
+
+# We can't easily and portably get an unquoted $ in a shell
+# substitution, so we do this instead.
+if test "${RELOCATING}"; then
+ R_TEXT='*(.text$*)'
+ R_DATA='*(.data$*)'
+ R_RDATA='*(.rdata$*)'
+ R_IDATA='
+ *(.idata$2)
+ *(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ *(.idata$4)
+ *(.idata$5)
+ *(.idata$6)
+ *(.idata$7)'
+ R_CRT='*(.CRT$*)'
+ R_RSRC='*(.rsrc$*)'
+else
+ R_TEXT=
+ R_DATA=
+ R_RDATA=
+ R_IDATA=
+ R_CRT=
+ R_RSRC=
+fi
+
cat <<EOF
-OUTPUT_FORMAT(${OUTPUT_FORMAT})
+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
+
${LIB_SEARCH_DIRS}
ENTRY(_mainCRTStartup)
@@ -12,6 +44,9 @@ SECTIONS
{
${RELOCATING+ *(.init)}
*(.text)
+ ${R_TEXT}
+ *(.glue_7t)
+ *(.glue_7)
${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
LONG (-1); *(.ctors); *(.ctor); LONG (0); }
${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
@@ -20,44 +55,46 @@ SECTIONS
/* ??? Why is .gcc_exc here? */
${RELOCATING+ *(.gcc_exc)}
${RELOCATING+ etext = .;}
- /* Grouped section support currently must be explicitly provided for
- in the linker script. */
- *(.text\$)
*(.gcc_except_table)
}
- .bss BLOCK(__section_alignment__) :
- {
- __bss_start__ = . ;
- *(.bss)
- *(COMMON)
- __bss_end__ = . ;
- }
- .data BLOCK(__section_alignment__) :
+ /* The Cygwin32 library uses a section to avoid copying certain data
+ on fork. This used to be named ".data$nocopy". The linker used
+ to include this between __data_start__ and __data_end__, but that
+ breaks building the cygwin32 dll. Instead, we name the section
+ ".data_cygwin_nocopy" and explictly include it after __data_end__. */
+
+ .data ${RELOCATING+BLOCK(__section_alignment__)} :
{
- __data_start__ = . ;
+ ${RELOCATING+__data_start__ = . ;}
*(.data)
*(.data2)
- __data_end__ = . ;
- /* Grouped section support currently must be explicitly provided for
- in the linker script. */
- *(.data\$)
+ ${R_DATA}
+ ${RELOCATING+__data_end__ = . ;}
+ ${RELOCATING+*(.data_cygwin_nocopy)}
+ }
+
+ .bss ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ ${RELOCATING+__bss_start__ = . ;}
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+__bss_end__ = . ;}
}
- .rdata BLOCK(__section_alignment__) :
+ .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
{
*(.rdata)
- /* Grouped section support currently must be explicitly provided for
- in the linker script. */
- *(.rdata\$)
+ ${R_RDATA}
+ *(.eh_frame)
}
- .edata BLOCK(__section_alignment__) :
+ .edata ${RELOCATING+BLOCK(__section_alignment__)} :
{
*(.edata)
}
- /DISCARD/ BLOCK(__section_alignment__) :
+ /DISCARD/ :
{
*(.debug\$S)
*(.debug\$T)
@@ -65,48 +102,44 @@ SECTIONS
*(.drectve)
}
- .idata BLOCK(__section_alignment__) :
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
{
/* This cannot currently be handled with grouped sections.
See pe.em:sort_sections. */
- *(.idata\$2)
- *(.idata\$3)
- *(.idata\$4)
- *(.idata\$5)
- *(.idata\$6)
- *(.idata\$7)
+ ${R_IDATA}
}
- .CRT BLOCK(__section_alignment__) :
+ .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
{
- /* Grouped sections are used to handle .CRT\$foo. */
- *(.CRT\$)
- }
- .rsrc BLOCK(__section_alignment__) :
- {
- /* Grouped sections are used to handle .rsrc\$0[12]. */
- *(.rsrc\$)
+ ${R_CRT}
}
- .endjunk BLOCK(__section_alignment__) :
+ .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
{
/* end is deprecated, don't use it */
${RELOCATING+ end = .;}
${RELOCATING+ __end__ = .;}
}
- .stab BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
+ .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.reloc)
+ }
+
+ .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ *(.rsrc)
+ ${R_RSRC}
+ }
+
+ .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
{
[ .stab ]
}
- .stabstr BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} :
+ .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
{
[ .stabstr ]
}
- .reloc BLOCK(__section_alignment__) :
- {
- *(.reloc)
- }
}
EOF
diff --git a/gnu/dist/ld/scripttempl/tic30aout.sc b/gnu/dist/ld/scripttempl/tic30aout.sc
new file mode 100644
index 00000000000..28baed37e61
--- /dev/null
+++ b/gnu/dist/ld/scripttempl/tic30aout.sc
@@ -0,0 +1,34 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH(${ARCH})
+
+${STACKZERO+${RELOCATING+${STACKZERO}}}
+${RELOCATING+PROVIDE (__stack = 0);}
+SECTIONS
+{
+ ${RELOCATING+. = ${TEXT_START_ADDR};}
+ .text :
+ {
+ CREATE_OBJECT_SYMBOLS
+ *(.text)
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+__etext = .;}
+ ${PAD_TEXT+${RELOCATING+. = ${DATA_ALIGNMENT};}}
+ }
+ ${RELOCATING+. = ${DATA_ALIGNMENT};}
+ .data :
+ {
+ *(.data)
+ ${RELOCATING+_edata = .;}
+ ${RELOCATING+__edata = .;}
+ }
+ .bss :
+ {
+ ${RELOCATING+ __bss_start = .};
+ *(.bss)
+ *(COMMON)
+ ${RELOCATING+_end = ALIGN(4) };
+ ${RELOCATING+__end = ALIGN(4) };
+ }
+}
+EOF
diff --git a/gnu/dist/ld/scripttempl/tic30coff.sc b/gnu/dist/ld/scripttempl/tic30coff.sc
new file mode 100644
index 00000000000..df2d4f737cd
--- /dev/null
+++ b/gnu/dist/ld/scripttempl/tic30coff.sc
@@ -0,0 +1,58 @@
+cat <<EOF
+OUTPUT_FORMAT("${OUTPUT_FORMAT}")
+OUTPUT_ARCH("${OUTPUT_ARCH}")
+
+MEMORY
+{
+ rom : ORIGIN = 0x00000300, LENGTH = 16k
+ ram : ORIGIN = 0x00000300 + 16k, LENGTH = 16k
+ ramblk0 : ORIGIN = 0x02026000, LENGTH = 0x1000
+ ramblk1 : ORIGIN = 0x02027000, LENGTH = 0x1000
+}
+
+SECTIONS
+{
+.vectors 0x00000000 :
+{
+ *(vectors)
+}
+
+.text :
+{
+ *(.text)
+} > rom
+
+.const :
+{
+ *(.const)
+ __etext = . ;
+} > rom
+
+.mdata : AT( ADDR(.const) + SIZEOF(.const) )
+{
+ __data = . ;
+ *(.data);
+ __edata = . ;
+} > ram
+
+.bss :
+{
+ __bss = . ;
+ *(.bss);
+ *(COMMON);
+ __ebss = . ;
+} > ram
+
+.ram0 :
+{
+ *(ram0)
+} > ramblk0
+
+.ram1 :
+{
+ *(ram1)
+} > ramblk1
+
+}
+
+EOF
diff --git a/gnu/dist/ld/scripttempl/v850.sc b/gnu/dist/ld/scripttempl/v850.sc
new file mode 100644
index 00000000000..6f3844ee43e
--- /dev/null
+++ b/gnu/dist/ld/scripttempl/v850.sc
@@ -0,0 +1,183 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-v850", "elf32-v850",
+ "elf32-v850")
+OUTPUT_ARCH(v850)
+ENTRY(_start)
+SEARCH_DIR(.);
+/*/critters/slug/grossman/install/sun4/v850-elf/lib*/
+SECTIONS
+{
+ /* This saves a little space in the ELF file, since the zda starts
+ at a higher location that the ELF headers take up. */
+
+ .zdata ${ZDATA_START_ADDR} : {
+ *(.zdata)
+ *(.zbss)
+ *(reszdata)
+ *(.zcommon)
+ }
+
+ /* This is the read only part of the zero data area.
+ Having it as a seperate section prevents its
+ attributes from being inherited by the zdata
+ section. Specifically it prevents the zdata
+ section from being marked READONLY. */
+
+ .rozdata ${ROZDATA_START_ADDR} : {
+ *(.rozdata)
+ *(romzdata)
+ *(romzbss)
+ }
+
+ /* Read-only sections, merged into text segment: */
+ . = ${TEXT_START_ADDR};
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .rel.text : { *(.rel.text) }
+ .rela.text : { *(.rela.text) }
+ .rel.data : { *(.rel.data) }
+ .rela.data : { *(.rela.data) }
+ .rel.rodata : { *(.rel.rodata) }
+ .rela.rodata : { *(.rela.rodata) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .init : { *(.init) } =0
+ .plt : { *(.plt) }
+
+ .text : {
+ *(.text)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ } =0
+
+ ${RELOCATING+_etext = .;}
+ ${RELOCATING+PROVIDE (etext = .);}
+
+
+ .fini : { *(.fini) } =0
+ .rodata : { *(.rodata) *(.gnu.linkonce.r*) }
+ .rodata1 : { *(.rodata1) }
+
+ .data : {
+ *(.data)
+ *(.gnu.linkonce.d*)
+ CONSTRUCTORS
+ }
+ .data1 : { *(.data1) }
+ .ctors : {
+ ${RELOCATING+___ctors = .;}
+ *(.ctors)
+ ${RELOCATING+___ctors_end = .;}
+ }
+
+ .dtors : {
+ ${RELOCATING+___dtors = .;}
+ *(.dtors)
+ ${RELOCATING+___dtors_end = .;}
+ }
+
+ .got : { *(.got.plt) *(.got) }
+ .dynamic : { *(.dynamic) }
+
+ .tdata ${TDATA_START_ADDR} : {
+ ${RELOCATING+PROVIDE (__ep = .);}
+ *(.tbyte)
+ *(.tcommon_byte)
+ *(.tdata)
+ *(.tbss)
+ *(.tcommon)
+ }
+
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata ${SDATA_START_ADDR} : {
+ ${RELOCATING+PROVIDE (__gp = . + 0x8000);}
+ *(.sdata)
+ ${RELOCATING+__sbss_start = .;}
+ *(.sbss)
+ *(.scommon)
+ }
+
+ /* See comment about .rozdata */
+ .rosdata ${ROSDATA_START_ADDR} : {
+ *(.rosdata)
+ }
+
+ ${RELOCATING+_edata = DEFINED (__sbss_start) ? __sbss_start : . ;}
+ ${RELOCATING+PROVIDE (edata = _edata);}
+
+ .bss :
+ {
+ ${RELOCATING+__bss_start = DEFINED (__sbss_start) ? __sbss_start : . ;}
+ *(.dynbss)
+ *(.bss)
+ *(COMMON)
+ }
+
+ ${RELOCATING+_end = . ;}
+ ${RELOCATING+PROVIDE (end = .);}
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+
+ /* User stack */
+ .stack 0x200000 : {
+ ${RELOCATING+__stack = .;}
+ *(.stack)
+ }
+ /* These must appear regardless of . */
+}
+EOF