123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- # Linker Script for National Semiconductor's CR16-ELF32.
- #
- # Copyright (C) 2014-2022 Free Software Foundation, Inc.
- #
- # Copying and distribution of this file, with or without modification,
- # are permitted in any medium without royalty provided the copyright
- # notice and this notice are preserved.
- # Using an empty script for ld -r is better than mashing together
- # sections. This hack likely leaves ld -Ur broken.
- test -n "${RELOCATING}" || exit 0
- # 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 CR16 elf32 files.
- Copyright (C) 2014-2022 Free Software Foundation, Inc.
- Copying and distribution of this script, with or without modification,
- are permitted in any medium without royalty provided the copyright
- notice and this notice are preserved. */
- OUTPUT_FORMAT("${OUTPUT_FORMAT}")
- OUTPUT_ARCH(${ARCH})
- EOF
- test -n "${RELOCATING}" && cat <<EOF
- ENTRY(${ENTRY})
- /* Define memory regions. */
- MEMORY
- {
- rom : ORIGIN = 0x2, LENGTH = 3M
- ram : ORIGIN = 4M, LENGTH = 10M
- }
- EOF
- cat <<EOF
- /* 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 */
- SECTIONS
- {
- .init :
- {
- __INIT_START = .;
- KEEP (*(SORT_NONE(.init)))
- __INIT_END = .;
- }${RELOCATING+ > rom}
- .fini :
- {
- __FINI_START = .;
- KEEP (*(SORT_NONE(.fini)))
- __FINI_END = .;
- }${RELOCATING+ > rom}
- .jcr :
- {
- KEEP (*(.jcr))
- }${RELOCATING+ > rom}
- .text :
- {
- __TEXT_START = .;
- *(.text) *(.text.*) *(.gnu.linkonce.t.*)
- __TEXT_END = .;
- }${RELOCATING+ > rom}
- .rdata :
- {
- __RDATA_START = .;
- *(.rdata_4) *(.rdata_2) *(.rdata_1) *(.rdata.*) *(.gnu.linkonce.r.*) *(.rodata*)
- __RDATA_END = .;
- }${RELOCATING+ > 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. */
- KEEP (*crtbegin*.o(.ctors))
- /* 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 */
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- __CTOR_END = .;
- }${RELOCATING+ > rom}
- .dtor ALIGN(4) :
- {
- __DTOR_START = .;
- KEEP (*crtbegin*.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend*.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- __DTOR_END = .;
- }${RELOCATING+ > rom}
- .data :
- {
- __DATA_START = .;
- *(.data_4) *(.data_2) *(.data_1) *(.data) *(.data.*) *(.gnu.linkonce.d.*)
- __DATA_END = .;
- }${RELOCATING+ > ram AT > rom}
- .bss (NOLOAD) :
- {
- __BSS_START = .;
- *(.bss_4) *(.bss_2) *(.bss_1) *(.bss) *(COMMON) *(.bss.*) *(.gnu.linkonce.b.*)
- __BSS_END = .;
- }${RELOCATING+ > ram}
- /* 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. */
- .heap (NOLOAD) :
- {
- . = ALIGN(4);
- __HEAP_START = .;
- . += 0x2000; __HEAP_MAX = .;
- }${RELOCATING+ > ram}
- .stack (NOLOAD) :
- {
- . = ALIGN(4);
- . += 0x6000;
- __STACK_START = .;
- }${RELOCATING+ > ram}
- .istack (NOLOAD) :
- {
- . = ALIGN(4);
- . += 0x100;
- __ISTACK_START = .;
- }${RELOCATING+ > ram}
- .comment 0 : { *(.comment) }
- EOF
- . $srcdir/scripttempl/DWARF.sc
- cat <<EOF
- }
- ${RELOCATING+__DATA_IMAGE_START = LOADADDR(.data);}
- EOF
|