Use ${CONSTRUCTING...} to enclose constructors and destructors.
This commit is contained in:
parent
36b0c0e021
commit
40a633d5ca
12 changed files with 399 additions and 279 deletions
15
ld/ChangeLog
15
ld/ChangeLog
|
@ -1,3 +1,18 @@
|
|||
2000-11-03 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* scripttempl/h8300.sc: Use ${CONSTRUCTING...} to enclose
|
||||
constructors and destructors.
|
||||
* scripttempl/h8300h.sc: Ditto.
|
||||
* scripttempl/h8300s.sc: Ditto.
|
||||
* scripttempl/h8500.sc: Ditto.
|
||||
* scripttempl/h8500b.sc: Ditto.
|
||||
* scripttempl/h8500c.sc: Ditto.
|
||||
* scripttempl/h8500m.sc: Ditto.
|
||||
* scripttempl/h8500s.sc: Ditto.
|
||||
* scripttempl/v850.sc: Ditto.
|
||||
* scripttempl/w65.sc: Ditto.
|
||||
* scripttempl/z8000.sc: Ditto.
|
||||
|
||||
2000-11-02 Per Lundberg <plundis@chaosdev.org>
|
||||
|
||||
* Makefile.in (e_i386_chaos.c): New rule.
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
TORS=".tors :
|
||||
{
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} > ram"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -18,52 +28,60 @@ MEMORY
|
|||
|
||||
SECTIONS
|
||||
{
|
||||
.vectors : {
|
||||
/* Use something like this to place a specific function's address
|
||||
into the vector table.
|
||||
.vectors :
|
||||
{
|
||||
/* Use something like this to place a specific
|
||||
function's address into the vector table.
|
||||
|
||||
SHORT(ABSOLUTE(_foobar)) */
|
||||
SHORT (ABSOLUTE (_foobar)). */
|
||||
|
||||
*(.vectors)
|
||||
*(.vectors)
|
||||
} ${RELOCATING+ > vectors}
|
||||
|
||||
.text : {
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
.text :
|
||||
{
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.tors : {
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
*(.tiny)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.data : {
|
||||
*(.data)
|
||||
*(.tiny)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.bss : {
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
|
||||
.bss :
|
||||
{
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
} ${RELOCATING+ >ram}
|
||||
.stack : {
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
|
||||
.stack :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
} ${RELOCATING+ > topram}
|
||||
.eight : {
|
||||
*(.eight)
|
||||
|
||||
.eight :
|
||||
{
|
||||
*(.eight)
|
||||
} ${RELOCATING+ > eight}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stab ]
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stabstr ]
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
TORS=".tors :
|
||||
{
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} > ram"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(h8300h)
|
||||
|
@ -24,53 +34,64 @@ MEMORY
|
|||
|
||||
SECTIONS
|
||||
{
|
||||
.vectors : {
|
||||
/* Use something like this to place a specific function's address
|
||||
into the vector table.
|
||||
.vectors :
|
||||
{
|
||||
/* Use something like this to place a specific
|
||||
function's address into the vector table.
|
||||
|
||||
LONG(ABSOLUTE(_foobar)) */
|
||||
LONG (ABSOLUTE (_foobar)). */
|
||||
|
||||
*(.vectors)
|
||||
*(.vectors)
|
||||
} ${RELOCATING+ > vectors}
|
||||
.text : {
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
|
||||
.text :
|
||||
{
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.tors : {
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.data : {
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.bss : {
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
|
||||
.bss :
|
||||
{
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
} ${RELOCATING+ >ram}
|
||||
.stack : {
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
|
||||
.stack :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
} ${RELOCATING+ > topram}
|
||||
.tiny : {
|
||||
*(.tiny)
|
||||
|
||||
.tiny :
|
||||
{
|
||||
*(.tiny)
|
||||
} ${RELOCATING+ > tiny}
|
||||
.eight : {
|
||||
*(.eight)
|
||||
|
||||
.eight :
|
||||
{
|
||||
*(.eight)
|
||||
} ${RELOCATING+ > eight}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stab ]
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stabstr ]
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
|
|
@ -1,3 +1,13 @@
|
|||
TORS=".tors :
|
||||
{
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} > ram"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(h8300s)
|
||||
|
@ -24,53 +34,64 @@ MEMORY
|
|||
|
||||
SECTIONS
|
||||
{
|
||||
.vectors : {
|
||||
/* Use something like this to place a specific function's address
|
||||
into the vector table.
|
||||
.vectors :
|
||||
{
|
||||
/* Use something like this to place a specific function's address
|
||||
into the vector table.
|
||||
|
||||
LONG(ABSOLUTE(_foobar)) */
|
||||
LONG (ABSOLUTE (_foobar)). */
|
||||
|
||||
*(.vectors)
|
||||
*(.vectors)
|
||||
} ${RELOCATING+ > vectors}
|
||||
.text : {
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
|
||||
.text :
|
||||
{
|
||||
*(.rodata)
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.tors : {
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.data : {
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
.bss : {
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
|
||||
.bss :
|
||||
{
|
||||
${RELOCATING+ _bss_start = . ;}
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
} ${RELOCATING+ >ram}
|
||||
.stack : {
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
|
||||
.stack :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
} ${RELOCATING+ > topram}
|
||||
.tiny : {
|
||||
*(.tiny)
|
||||
|
||||
.tiny :
|
||||
{
|
||||
*(.tiny)
|
||||
} ${RELOCATING+ > tiny}
|
||||
.eight : {
|
||||
*(.eight)
|
||||
|
||||
.eight :
|
||||
{
|
||||
*(.eight)
|
||||
} ${RELOCATING+ > eight}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stab ]
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} : {
|
||||
[ .stabstr ]
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
TORS="
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -8,52 +16,47 @@ SECTIONS
|
|||
{
|
||||
.text ${RELOCATING+ 0x0000 } :
|
||||
{
|
||||
*(.text)
|
||||
|
||||
${RELOCATING+ _etext = . ; }
|
||||
*(.text)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
}
|
||||
|
||||
|
||||
.data ${RELOCATING+ . } :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
}
|
||||
|
||||
.rdata ${RELOCATING+ . } :
|
||||
{
|
||||
*(.rdata);
|
||||
*(.rdata);
|
||||
*(.strings)
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
}
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
}
|
||||
|
||||
.bss ${RELOCATING+ . } :
|
||||
{
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
}
|
||||
|
||||
.stack ${RELOCATING+ 0xfff0} :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
}
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
TORS="
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -24,13 +32,9 @@ SECTIONS
|
|||
{
|
||||
*(.rdata);
|
||||
*(.strings)
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
}
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
}
|
||||
|
||||
.bss ${RELOCATING+ 0x40000} :
|
||||
{
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
TORS="
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -20,15 +28,12 @@ SECTIONS
|
|||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
|
||||
.rdata 0x30000 : {
|
||||
.rdata 0x30000 :
|
||||
{
|
||||
*(.rdata);
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} ${RELOCATING+ > ram}
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
} ${RELOCATING+ > ram}
|
||||
|
||||
.bss 0x40000 :
|
||||
{
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
TORS="
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -9,50 +17,46 @@ SECTIONS
|
|||
.text ${RELOCATING+ 0x10000} :
|
||||
{
|
||||
*(.text)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
${RELOCATING+ _etext = . ; }
|
||||
}
|
||||
|
||||
|
||||
.data ${RELOCATING+ 0x20000} :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
}
|
||||
|
||||
.rdata ${RELOCATING+ . } :
|
||||
{
|
||||
*(.rdata);
|
||||
*(.rdata);
|
||||
*(.strings)
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
}
|
||||
|
||||
.bss ${RELOCATING+ . } :
|
||||
{
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
}
|
||||
|
||||
.stack ${RELOCATING+ 0x2fff0} :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
}
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
TORS="
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
@ -8,50 +16,47 @@ SECTIONS
|
|||
{
|
||||
.text ${RELOCATING+ 0x10000 } :
|
||||
{
|
||||
*(.text)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
*(.text)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
}
|
||||
|
||||
.rdata ${RELOCATING+ 0x20000 } :
|
||||
{
|
||||
*(.rdata);
|
||||
*(.strings)
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
*(.rdata);
|
||||
*(.strings)
|
||||
|
||||
${CONSTRUCTING+${TORS}}
|
||||
}
|
||||
|
||||
.data ${RELOCATING+ . } :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
}
|
||||
|
||||
.bss ${RELOCATING+ .} :
|
||||
{
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
}
|
||||
|
||||
.stack ${RELOCATING+ 0x2fff0} :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
}
|
||||
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
.stab 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
|
||||
.stabstr 0 ${RELOCATING+(NOLOAD)} :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
|
|
|
@ -4,13 +4,13 @@ OUTPUT_FORMAT("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 ${ZDATA_START_ADDR} :
|
||||
{
|
||||
*(.zdata)
|
||||
*(.zbss)
|
||||
*(reszdata)
|
||||
|
@ -23,13 +23,14 @@ SECTIONS
|
|||
section. Specifically it prevents the zdata
|
||||
section from being marked READONLY. */
|
||||
|
||||
.rozdata ${ROZDATA_START_ADDR} : {
|
||||
.rozdata ${ROZDATA_START_ADDR} :
|
||||
{
|
||||
*(.rozdata)
|
||||
*(romzdata)
|
||||
*(romzbss)
|
||||
}
|
||||
|
||||
/* Read-only sections, merged into text segment: */
|
||||
/* Read-only sections, merged into text segment. */
|
||||
. = ${TEXT_START_ADDR};
|
||||
.interp : { *(.interp) }
|
||||
.hash : { *(.hash) }
|
||||
|
@ -58,9 +59,11 @@ SECTIONS
|
|||
.init : { KEEP (*(.init)) } =0
|
||||
.plt : { *(.plt) }
|
||||
|
||||
.text : {
|
||||
.text :
|
||||
{
|
||||
*(.text)
|
||||
${RELOCATING+*(.text.*)}
|
||||
|
||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||
*(.gnu.warning)
|
||||
*(.gnu.linkonce.t*)
|
||||
|
@ -73,45 +76,51 @@ SECTIONS
|
|||
It contains a small lookup table at the start followed by the
|
||||
code pointed to by entries in the lookup table. */
|
||||
|
||||
.call_table_data ${CALL_TABLE_START_ADDR} : {
|
||||
.call_table_data ${CALL_TABLE_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE(__ctbp = .);}
|
||||
*(.call_table_data)
|
||||
} = 0xff /* fill gaps with 0xff */
|
||||
.call_table_text : {
|
||||
} = 0xff /* Fill gaps with 0xff. */
|
||||
|
||||
.call_table_text :
|
||||
{
|
||||
*(.call_table_text)
|
||||
}
|
||||
|
||||
.fini : { KEEP (*(.fini)) } =0
|
||||
.fini : { KEEP (*(.fini)) } =0
|
||||
.rodata : { *(.rodata) ${RELOCATING+*(.rodata.*)} *(.gnu.linkonce.r*) }
|
||||
.rodata1 : { *(.rodata1) }
|
||||
|
||||
.data : {
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+*(.data.*)}
|
||||
*(.gnu.linkonce.d*)
|
||||
CONSTRUCTORS
|
||||
}
|
||||
.data1 : { *(.data1) }
|
||||
.ctors : {
|
||||
${RELOCATING+___ctors = .;}
|
||||
.ctors :
|
||||
{
|
||||
${CONSTRUCTING+___ctors = .;}
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*crtend(.ctors))
|
||||
${RELOCATING+___ctors_end = .;}
|
||||
${CONSTRUCTING+___ctors_end = .;}
|
||||
}
|
||||
|
||||
.dtors : {
|
||||
${RELOCATING+___dtors = .;}
|
||||
.dtors :
|
||||
{
|
||||
${CONSTRUCTING+___dtors = .;}
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*crtend.o(.dtors))
|
||||
${RELOCATING+___dtors_end = .;}
|
||||
${CONSTRUCTING+___dtors_end = .;}
|
||||
}
|
||||
|
||||
.got : { *(.got.plt) *(.got) }
|
||||
.dynamic : { *(.dynamic) }
|
||||
|
||||
.tdata ${TDATA_START_ADDR} : {
|
||||
.tdata ${TDATA_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE (__ep = .);}
|
||||
*(.tbyte)
|
||||
*(.tcommon_byte)
|
||||
|
@ -123,21 +132,26 @@ SECTIONS
|
|||
/* 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} : {
|
||||
|
||||
.sdata ${SDATA_START_ADDR} :
|
||||
{
|
||||
${RELOCATING+PROVIDE (__gp = . + 0x8000);}
|
||||
*(.sdata)
|
||||
}
|
||||
|
||||
/* See comment about .rozdata. */
|
||||
.rosdata ${ROSDATA_START_ADDR} : {
|
||||
.rosdata ${ROSDATA_START_ADDR} :
|
||||
{
|
||||
*(.rosdata)
|
||||
}
|
||||
|
||||
/* We place the .sbss data section AFTER the .rosdata section, so that
|
||||
it can directly preceed the .bss section. This allows runtime startup
|
||||
code to initialise all the zero-data sections by simply taking the
|
||||
value of '_edata' and zeroing until it reaches '_end' */
|
||||
.sbss : {
|
||||
value of '_edata' and zeroing until it reaches '_end'. */
|
||||
|
||||
.sbss :
|
||||
{
|
||||
${RELOCATING+__sbss_start = .;}
|
||||
*(.sbss)
|
||||
*(.scommon)
|
||||
|
@ -192,17 +206,17 @@ SECTIONS
|
|||
.debug_loc 0 : { *(.debug_loc) }
|
||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||
|
||||
/* SGI/MIPS DWARF 2 extensions */
|
||||
/* 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 : {
|
||||
/* User stack. */
|
||||
.stack 0x200000 :
|
||||
{
|
||||
${RELOCATING+__stack = .;}
|
||||
*(.stack)
|
||||
}
|
||||
/* These must appear regardless of . */
|
||||
}
|
||||
EOF
|
||||
|
|
|
@ -1,10 +1,21 @@
|
|||
TORS=".tors :
|
||||
{
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} > ram"
|
||||
|
||||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
|
||||
MEMORY {
|
||||
MEMORY
|
||||
{
|
||||
ram : o = 0x1000, l = 512k
|
||||
}
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
|
@ -12,44 +23,40 @@ SECTIONS
|
|||
{
|
||||
*(.text)
|
||||
*(.strings)
|
||||
${RELOCATING+ _etext = . ; }
|
||||
${RELOCATING+ _etext = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
|
||||
|
||||
.tors : {
|
||||
___ctors = . ;
|
||||
*(.ctors)
|
||||
___ctors_end = . ;
|
||||
___dtors = . ;
|
||||
*(.dtors)
|
||||
___dtors_end = . ;
|
||||
} ${RELOCATING+ > ram}
|
||||
${CONSTRUCTING+${TORS}}
|
||||
|
||||
.data :
|
||||
{
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
*(.data)
|
||||
${RELOCATING+ _edata = . ; }
|
||||
} ${RELOCATING+ > ram}
|
||||
|
||||
.bss :
|
||||
{
|
||||
${RELOCATING+ _bss_start = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
${RELOCATING+ _bss_start = . ; }
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
${RELOCATING+ _end = . ; }
|
||||
} ${RELOCATING+ >ram}
|
||||
.stack ${RELOCATING+ 0x30000 } :
|
||||
|
||||
.stack ${RELOCATING+ 0x30000 } :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
} ${RELOCATING+ > ram}
|
||||
.stab . (NOLOAD) :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
.stabstr . (NOLOAD) :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
|
||||
.stab . (NOLOAD) :
|
||||
{
|
||||
[ .stab ]
|
||||
}
|
||||
|
||||
.stabstr . (NOLOAD) :
|
||||
{
|
||||
[ .stabstr ]
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
|
|
|
@ -5,7 +5,8 @@ ENTRY(_start)
|
|||
|
||||
SECTIONS
|
||||
{
|
||||
.text ${BIG+ ${RELOCATING+ 0x0000000}} : {
|
||||
.text ${BIG+ ${RELOCATING+ 0x0000000}} :
|
||||
{
|
||||
*(.text)
|
||||
*(.strings)
|
||||
*(.rdata)
|
||||
|
@ -13,38 +14,40 @@ SECTIONS
|
|||
|
||||
.ctors ${BIG+ ${RELOCATING+ 0x2000000}} :
|
||||
{
|
||||
${RELOCATING+ ___ctors = . ; }
|
||||
${CONSTRUCTING+ ___ctors = . ; }
|
||||
*(.ctors);
|
||||
${RELOCATING+ ___ctors_end = . ; }
|
||||
${CONSTRUCTING+ ___ctors_end = . ; }
|
||||
___dtors = . ;
|
||||
*(.dtors);
|
||||
${RELOCATING+ ___dtors_end = . ; }
|
||||
${CONSTRUCTING+ ___dtors_end = . ; }
|
||||
}
|
||||
|
||||
.data ${BIG+ ${RELOCATING+ 0x3000000}} : {
|
||||
*(.data)
|
||||
.data ${BIG+ ${RELOCATING+ 0x3000000}} :
|
||||
{
|
||||
*(.data)
|
||||
}
|
||||
|
||||
.bss ${BIG+ ${RELOCATING+ 0x4000000}} :
|
||||
{
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss);
|
||||
*(COMMON);
|
||||
${RELOCATING+ __end_bss = . ; }
|
||||
}
|
||||
{
|
||||
${RELOCATING+ __start_bss = . ; }
|
||||
*(.bss);
|
||||
*(COMMON);
|
||||
${RELOCATING+ __end_bss = . ; }
|
||||
}
|
||||
|
||||
.heap ${BIG+ ${RELOCATING+ 0x5000000}} : {
|
||||
${RELOCATING+ __start_heap = . ; }
|
||||
${RELOCATING+ . = . + 20k ; }
|
||||
${RELOCATING+ __end_heap = . ; }
|
||||
.heap ${BIG+ ${RELOCATING+ 0x5000000}} :
|
||||
{
|
||||
${RELOCATING+ __start_heap = . ; }
|
||||
${RELOCATING+ . = . + 20k ; }
|
||||
${RELOCATING+ __end_heap = . ; }
|
||||
}
|
||||
|
||||
.stack ${RELOCATING+ 0xf000 } :
|
||||
{
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ __stack_top = . ; }
|
||||
}
|
||||
${RELOCATING+ _stack = . ; }
|
||||
*(.stack)
|
||||
${RELOCATING+ __stack_top = . ; }
|
||||
}
|
||||
|
||||
}
|
||||
EOF
|
||||
|
|
Loading…
Reference in a new issue