2004-07-08 01:28:53 +08:00
|
|
|
# Linker Script for National Semiconductor's CRX-ELF32.
|
|
|
|
|
|
|
|
# The next line should be uncommented if it is desired to link
|
|
|
|
# without libstart.o and directly enter main.
|
|
|
|
|
|
|
|
# ENTRY=_main
|
|
|
|
|
|
|
|
test -z "$ENTRY" && ENTRY=_start
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
/* Example Linker Script for linking NS CRX elf32 files. */
|
|
|
|
|
|
|
|
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
|
|
|
OUTPUT_ARCH(${ARCH})
|
2009-10-10 12:34:39 +08:00
|
|
|
${RELOCATING+ENTRY(${ENTRY})}
|
2004-07-08 01:28:53 +08:00
|
|
|
|
|
|
|
/* Define memory regions. */
|
|
|
|
MEMORY
|
|
|
|
{
|
|
|
|
rom : ORIGIN = 0x2, LENGTH = 3M
|
|
|
|
ram : ORIGIN = 4M, LENGTH = 10M
|
|
|
|
}
|
|
|
|
|
2004-09-03 22:31:41 +08:00
|
|
|
/* Many sections come in three flavours. There is the 'real' section,
|
|
|
|
like ".data". Then there are the per-procedure or per-variable
|
|
|
|
sections, generated by -ffunction-sections and -fdata-sections in GCC,
|
|
|
|
and useful for --gc-sections, which for a variable "foo" might be
|
|
|
|
".data.foo". Then there are the linkonce sections, for which the linker
|
|
|
|
eliminates duplicates, which are named like ".gnu.linkonce.d.foo".
|
|
|
|
The exact correspondences are:
|
|
|
|
|
|
|
|
Section Linkonce section
|
|
|
|
.text .gnu.linkonce.t.foo
|
|
|
|
.rdata .gnu.linkonce.r.foo
|
|
|
|
.data .gnu.linkonce.d.foo
|
|
|
|
.bss .gnu.linkonce.b.foo
|
|
|
|
.debug_info .gnu.linkonce.wi.foo */
|
|
|
|
|
2004-07-08 01:28:53 +08:00
|
|
|
SECTIONS
|
|
|
|
{
|
2004-09-03 22:31:41 +08:00
|
|
|
.init :
|
|
|
|
{
|
|
|
|
__INIT_START = .;
|
2004-09-17 00:27:00 +08:00
|
|
|
KEEP (*(.init))
|
2004-09-03 22:31:41 +08:00
|
|
|
__INIT_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.fini :
|
|
|
|
{
|
|
|
|
__FINI_START = .;
|
2004-09-17 00:27:00 +08:00
|
|
|
KEEP (*(.fini))
|
2004-09-03 22:31:41 +08:00
|
|
|
__FINI_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.jcr :
|
|
|
|
{
|
2004-09-17 00:27:00 +08:00
|
|
|
KEEP (*(.jcr))
|
2004-09-03 22:31:41 +08:00
|
|
|
} > rom
|
|
|
|
|
|
|
|
.text :
|
|
|
|
{
|
|
|
|
__TEXT_START = .;
|
|
|
|
*(.text) *(.text.*) *(.gnu.linkonce.t.*)
|
|
|
|
__TEXT_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.rdata :
|
|
|
|
{
|
|
|
|
__RDATA_START = .;
|
2006-05-22 16:49:33 +08:00
|
|
|
*(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata.*)
|
2004-09-03 22:31:41 +08:00
|
|
|
__RDATA_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.ctor ALIGN(4) :
|
|
|
|
{
|
|
|
|
__CTOR_START = .;
|
|
|
|
/* The compiler uses crtbegin.o to find the start
|
|
|
|
of the constructors, so we make sure it is
|
|
|
|
first. Because this is a wildcard, it
|
|
|
|
doesn't matter if the user does not
|
|
|
|
actually link against crtbegin.o; the
|
|
|
|
linker won't look for a file to match a
|
|
|
|
wildcard. The wildcard also means that it
|
|
|
|
doesn't matter which directory crtbegin.o
|
|
|
|
is in. */
|
|
|
|
|
2006-08-28 09:52:56 +08:00
|
|
|
KEEP (*crtbegin.o(.ctors))
|
|
|
|
KEEP (*crtbegin?.o(.ctors))
|
|
|
|
|
2004-09-03 22:31:41 +08:00
|
|
|
/* We don't want to include the .ctor section from
|
|
|
|
the crtend.o file until after the sorted ctors.
|
|
|
|
The .ctor section from the crtend file contains the
|
|
|
|
end of ctors marker and it must be last */
|
|
|
|
|
2006-08-28 09:52:56 +08:00
|
|
|
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))
|
2004-09-03 22:31:41 +08:00
|
|
|
KEEP (*(SORT(.ctors.*)))
|
|
|
|
KEEP (*(.ctors))
|
|
|
|
__CTOR_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.dtor ALIGN(4) :
|
|
|
|
{
|
|
|
|
__DTOR_START = .;
|
2006-08-28 09:52:56 +08:00
|
|
|
KEEP (*crtbegin.o(.dtors))
|
|
|
|
KEEP (*crtbegin?.o(.dtors))
|
|
|
|
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))
|
2004-09-03 22:31:41 +08:00
|
|
|
KEEP (*(SORT(.dtors.*)))
|
|
|
|
KEEP (*(.dtors))
|
|
|
|
__DTOR_END = .;
|
|
|
|
} > rom
|
|
|
|
|
|
|
|
.data :
|
|
|
|
{
|
|
|
|
__DATA_START = .;
|
|
|
|
*(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
|
|
|
|
__DATA_END = .;
|
|
|
|
} > ram AT > rom
|
|
|
|
|
|
|
|
.bss (NOLOAD) :
|
|
|
|
{
|
|
|
|
__BSS_START = .;
|
|
|
|
*(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
|
|
|
|
__BSS_END = .;
|
|
|
|
} > ram
|
2004-07-08 01:28:53 +08:00
|
|
|
|
|
|
|
/* You may change the sizes of the following sections to fit the actual
|
|
|
|
size your program requires.
|
|
|
|
|
|
|
|
The heap and stack are aligned to the bus width, as a speed optimization
|
|
|
|
for accessing data located there. */
|
|
|
|
|
Add support for Xilinx MicroBlaze processor.
* bfd/Makefile.am: Add cpu-microblaze.{lo,c}, elf32-microblaze.{lo,c}.
* bfd/Makefile.in: Same.
* bfd/archures.c: Add bfd_arch_microblaze.
* bfd/bfd-in2.h: Regenerate.
* bfd/config.bfd: Add microblaze target.
* bfd/configure: Add bfd_elf32_microblaze_vec target.
* bfd/configure.in: Same.
* bfd/cpu-microblaze.c: New.
* bfd/elf32-microblaze.c: New.
* bfd/libbfd-in.h: Add prototype _bfd_dwarf2_fixup_section_debug_loc().
* bfd/libbfd.h: Regenerate.
* bfd/reloc.c: Add MICROBLAZE relocations.
* bfd/section.c: Add struct relax_table and relax_count to section.
* bfd/targets.c: Add bfd_elf32_microblaze_vec.
* binutils/MAINTAINERS: Add self as maintainer.
* binutils/readelf.c: Include elf/microblaze.h, add EM_MICROBLAZE &
EM_MICROBLAZE_OLD to guess_is_rela(), dump_relocations(),
get_machine_name().
* config.sub: Add microblaze target.
* configure: Same.
* configure.ac: Same.
* gas/Makefile.am: add microblaze to CPU_TYPES, config/tc-microblaze.c to
TARGET_CPU_CFILES, config/tc-microblaze.h to TARGET_CPU_HFILES, add
DEP_microblaze_elf target.
* gas/Makefile.in: Same.
* gas/config/tc-microblaze.c: Add MicroBlaze assembler.
* gas/config/tc-microblaze.h: Add header for tc-microblaze.c.
* gas/configure: Add microblaze target.
* gas/configure.in: Same.
* gas/configure.tgt: Same.
* gas/doc/Makefile.am: Add c-microblaze.texi to CPU_DOCS.
* gas/doc/Makefile.in: Same.
* gas/doc/all.texi: Set MICROBLAZE.
* gas/doc/as.texinfo: Add MicroBlaze doc links.
* gas/doc/c-microblaze.texi: New MicroBlaze docs.
* include/dis-asm.h: Decl print_insn_microblaze().
* include/elf/common.h: Define EM_MICROBLAZE & EM_MICROBLAZE_OLD.
* include/elf/microblaze.h: New reloc definitions.
* ld/Makefile.am: Add eelf32mb_linux.o, eelf32microblaze.o to
ALL_EMULATIONS, targets.
* ld/Makefile.in: Same.
* ld/configure.tgt: Add microblaze*-linux*, microblaze* targets.
* ld/emulparams/elf32mb_linux.sh: New.
* ld/emulparams/elf32microblaze.sh. New.
* ld/scripttempl/elfmicroblaze.sc: New.
* opcodes/Makefile.am: Add microblaze-opc.h to HFILES, microblaze-dis.c to
CFILES, microblaze-dis.lo to ALL_MACHINES, targets.
* opcodes/Makefile.in: Same.
* opcodes/configure: Add bfd_microblaze_arch target.
* opcodes/configure.in: Same.
* opcodes/disassemble.c: Define ARCH_microblaze, return
print_insn_microblaze().
* opcodes/microblaze-dis.c: New MicroBlaze disassembler.
* opcodes/microblaze-opc.h: New MicroBlaze opcode definitions.
* opcodes/microblaze-opcm.h: New MicroBlaze opcode types.
2009-08-07 01:38:04 +08:00
|
|
|
.heap (NOLOAD) :
|
2004-09-03 22:31:41 +08:00
|
|
|
{
|
|
|
|
. = ALIGN(4);
|
|
|
|
__HEAP_START = .;
|
|
|
|
. += 0x2000; __HEAP_MAX = .;
|
|
|
|
} > ram
|
|
|
|
|
Add support for Xilinx MicroBlaze processor.
* bfd/Makefile.am: Add cpu-microblaze.{lo,c}, elf32-microblaze.{lo,c}.
* bfd/Makefile.in: Same.
* bfd/archures.c: Add bfd_arch_microblaze.
* bfd/bfd-in2.h: Regenerate.
* bfd/config.bfd: Add microblaze target.
* bfd/configure: Add bfd_elf32_microblaze_vec target.
* bfd/configure.in: Same.
* bfd/cpu-microblaze.c: New.
* bfd/elf32-microblaze.c: New.
* bfd/libbfd-in.h: Add prototype _bfd_dwarf2_fixup_section_debug_loc().
* bfd/libbfd.h: Regenerate.
* bfd/reloc.c: Add MICROBLAZE relocations.
* bfd/section.c: Add struct relax_table and relax_count to section.
* bfd/targets.c: Add bfd_elf32_microblaze_vec.
* binutils/MAINTAINERS: Add self as maintainer.
* binutils/readelf.c: Include elf/microblaze.h, add EM_MICROBLAZE &
EM_MICROBLAZE_OLD to guess_is_rela(), dump_relocations(),
get_machine_name().
* config.sub: Add microblaze target.
* configure: Same.
* configure.ac: Same.
* gas/Makefile.am: add microblaze to CPU_TYPES, config/tc-microblaze.c to
TARGET_CPU_CFILES, config/tc-microblaze.h to TARGET_CPU_HFILES, add
DEP_microblaze_elf target.
* gas/Makefile.in: Same.
* gas/config/tc-microblaze.c: Add MicroBlaze assembler.
* gas/config/tc-microblaze.h: Add header for tc-microblaze.c.
* gas/configure: Add microblaze target.
* gas/configure.in: Same.
* gas/configure.tgt: Same.
* gas/doc/Makefile.am: Add c-microblaze.texi to CPU_DOCS.
* gas/doc/Makefile.in: Same.
* gas/doc/all.texi: Set MICROBLAZE.
* gas/doc/as.texinfo: Add MicroBlaze doc links.
* gas/doc/c-microblaze.texi: New MicroBlaze docs.
* include/dis-asm.h: Decl print_insn_microblaze().
* include/elf/common.h: Define EM_MICROBLAZE & EM_MICROBLAZE_OLD.
* include/elf/microblaze.h: New reloc definitions.
* ld/Makefile.am: Add eelf32mb_linux.o, eelf32microblaze.o to
ALL_EMULATIONS, targets.
* ld/Makefile.in: Same.
* ld/configure.tgt: Add microblaze*-linux*, microblaze* targets.
* ld/emulparams/elf32mb_linux.sh: New.
* ld/emulparams/elf32microblaze.sh. New.
* ld/scripttempl/elfmicroblaze.sc: New.
* opcodes/Makefile.am: Add microblaze-opc.h to HFILES, microblaze-dis.c to
CFILES, microblaze-dis.lo to ALL_MACHINES, targets.
* opcodes/Makefile.in: Same.
* opcodes/configure: Add bfd_microblaze_arch target.
* opcodes/configure.in: Same.
* opcodes/disassemble.c: Define ARCH_microblaze, return
print_insn_microblaze().
* opcodes/microblaze-dis.c: New MicroBlaze disassembler.
* opcodes/microblaze-opc.h: New MicroBlaze opcode definitions.
* opcodes/microblaze-opcm.h: New MicroBlaze opcode types.
2009-08-07 01:38:04 +08:00
|
|
|
.stack (NOLOAD) :
|
2004-09-03 22:31:41 +08:00
|
|
|
{
|
|
|
|
. = ALIGN(4);
|
|
|
|
. += 0x6000;
|
|
|
|
__STACK_START = .;
|
|
|
|
} > ram
|
|
|
|
|
Add support for Xilinx MicroBlaze processor.
* bfd/Makefile.am: Add cpu-microblaze.{lo,c}, elf32-microblaze.{lo,c}.
* bfd/Makefile.in: Same.
* bfd/archures.c: Add bfd_arch_microblaze.
* bfd/bfd-in2.h: Regenerate.
* bfd/config.bfd: Add microblaze target.
* bfd/configure: Add bfd_elf32_microblaze_vec target.
* bfd/configure.in: Same.
* bfd/cpu-microblaze.c: New.
* bfd/elf32-microblaze.c: New.
* bfd/libbfd-in.h: Add prototype _bfd_dwarf2_fixup_section_debug_loc().
* bfd/libbfd.h: Regenerate.
* bfd/reloc.c: Add MICROBLAZE relocations.
* bfd/section.c: Add struct relax_table and relax_count to section.
* bfd/targets.c: Add bfd_elf32_microblaze_vec.
* binutils/MAINTAINERS: Add self as maintainer.
* binutils/readelf.c: Include elf/microblaze.h, add EM_MICROBLAZE &
EM_MICROBLAZE_OLD to guess_is_rela(), dump_relocations(),
get_machine_name().
* config.sub: Add microblaze target.
* configure: Same.
* configure.ac: Same.
* gas/Makefile.am: add microblaze to CPU_TYPES, config/tc-microblaze.c to
TARGET_CPU_CFILES, config/tc-microblaze.h to TARGET_CPU_HFILES, add
DEP_microblaze_elf target.
* gas/Makefile.in: Same.
* gas/config/tc-microblaze.c: Add MicroBlaze assembler.
* gas/config/tc-microblaze.h: Add header for tc-microblaze.c.
* gas/configure: Add microblaze target.
* gas/configure.in: Same.
* gas/configure.tgt: Same.
* gas/doc/Makefile.am: Add c-microblaze.texi to CPU_DOCS.
* gas/doc/Makefile.in: Same.
* gas/doc/all.texi: Set MICROBLAZE.
* gas/doc/as.texinfo: Add MicroBlaze doc links.
* gas/doc/c-microblaze.texi: New MicroBlaze docs.
* include/dis-asm.h: Decl print_insn_microblaze().
* include/elf/common.h: Define EM_MICROBLAZE & EM_MICROBLAZE_OLD.
* include/elf/microblaze.h: New reloc definitions.
* ld/Makefile.am: Add eelf32mb_linux.o, eelf32microblaze.o to
ALL_EMULATIONS, targets.
* ld/Makefile.in: Same.
* ld/configure.tgt: Add microblaze*-linux*, microblaze* targets.
* ld/emulparams/elf32mb_linux.sh: New.
* ld/emulparams/elf32microblaze.sh. New.
* ld/scripttempl/elfmicroblaze.sc: New.
* opcodes/Makefile.am: Add microblaze-opc.h to HFILES, microblaze-dis.c to
CFILES, microblaze-dis.lo to ALL_MACHINES, targets.
* opcodes/Makefile.in: Same.
* opcodes/configure: Add bfd_microblaze_arch target.
* opcodes/configure.in: Same.
* opcodes/disassemble.c: Define ARCH_microblaze, return
print_insn_microblaze().
* opcodes/microblaze-dis.c: New MicroBlaze disassembler.
* opcodes/microblaze-opc.h: New MicroBlaze opcode definitions.
* opcodes/microblaze-opcm.h: New MicroBlaze opcode types.
2009-08-07 01:38:04 +08:00
|
|
|
.istack (NOLOAD) :
|
2004-09-03 22:31:41 +08:00
|
|
|
{
|
|
|
|
. = ALIGN(4);
|
|
|
|
. += 0x100;
|
|
|
|
__ISTACK_START = .;
|
|
|
|
} > ram
|
|
|
|
|
|
|
|
.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. */
|
|
|
|
|
|
|
|
.debug_aranges 0 : { *(.debug_aranges) }
|
|
|
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
|
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
|
|
|
.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) }
|
2004-07-08 01:28:53 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
__DATA_IMAGE_START = LOADADDR(.data);
|
|
|
|
EOF
|