aboutsummaryrefslogtreecommitdiff
path: root/ld/scripttempl
diff options
context:
space:
mode:
Diffstat (limited to 'ld/scripttempl')
-rw-r--r--ld/scripttempl/crisaout.sc122
1 files changed, 122 insertions, 0 deletions
diff --git a/ld/scripttempl/crisaout.sc b/ld/scripttempl/crisaout.sc
new file mode 100644
index 0000000..6777482
--- /dev/null
+++ b/ld/scripttempl/crisaout.sc
@@ -0,0 +1,122 @@
+cat <<EOF
+OUTPUT_FORMAT("a.out-cris")
+OUTPUT_ARCH(cris)
+ENTRY(_start)
+SECTIONS
+{
+ .text ${RELOCATING+ ${TEXT_START_ADDR}}:
+ {
+ CREATE_OBJECT_SYMBOLS;
+ ${RELOCATING+ __Stext = .;}
+ ${RELOCATING+*(.startup)}
+ *(.text)
+ ${RELOCATING+*(.text.*)}
+ ${RELOCATING+*(.gnu.linkonce.t*)}
+ ${RELOCATING+*(.rodata)}
+ ${RELOCATING+*(.rodata.*)}
+ ${RELOCATING+*(.gnu.linkonce.r*)}
+
+ /* Do not "provide" init-start and fini-start symbols; they might be
+ referred to weakly, so the linker would not override the zero
+ default.
+ FIXME: It's somewhat unexpected to have code emitted by the linker
+ script. Some other mechanism could probably do better. */
+ ${RELOCATING+. = ALIGN (2);}
+ ${RELOCATING+ ___init__start = .;}
+ ${RELOCATING+PROVIDE (___do_global_ctors = .);}
+ ${RELOCATING+SHORT (0xe1fc); /* push srp */}
+ ${RELOCATING+SHORT (0xbe7e);}
+ ${RELOCATING+*(.init)}
+ ${RELOCATING+SHORT (0x0d3e); /* jump [sp+] */}
+ ${RELOCATING+PROVIDE (__init__end = .);}
+ ${RELOCATING+PROVIDE (___init__end = .);}
+
+ ${RELOCATING+. = ALIGN (2);}
+ ${RELOCATING+ ___fini__start = .;}
+ ${RELOCATING+PROVIDE (___do_global_dtors = .);}
+ ${RELOCATING+SHORT (0xe1fc); /* push srp */}
+ ${RELOCATING+SHORT (0xbe7e);}
+ ${RELOCATING+*(.fini)}
+ ${RELOCATING+SHORT (0x0d3e); /* jump [sp+] */}
+ ${RELOCATING+PROVIDE (__fini__end = .);}
+ ${RELOCATING+ ___fini__end = .;}
+
+ /* Putting constructors in constant store is sane as long as
+ there's no need for dynamic fixups. */
+ /* The constructors and destructors set symbols are unused now that
+ collect2 has its wicked way. */
+ ${CONSTRUCTING+ ___aout_ctors_dtors_begin = .;}
+ ${CONSTRUCTING+ SORT(CONSTRUCTORS);}
+ ${CONSTRUCTING+ ___aout_ctors_dtors_end = .;}
+
+ /* Cater to linking from ELF. */
+ ${CONSTRUCTING+ PROVIDE(___ctors = .);}
+ ${CONSTRUCTING+ ___elf_ctors_dtors_begin = .;}
+ ${CONSTRUCTING+ KEEP (*crtbegin.o(.ctors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))}
+ ${CONSTRUCTING+ KEEP (*(SORT(.ctors.*)))}
+ ${CONSTRUCTING+ KEEP (*(.ctors))}
+ ${CONSTRUCTING+ PROVIDE(___ctors_end = .);}
+
+ ${CONSTRUCTING+ PROVIDE(___dtors = .);}
+ ${CONSTRUCTING+ KEEP (*crtbegin.o(.dtors))}
+ ${CONSTRUCTING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))}
+ ${CONSTRUCTING+ KEEP (*(SORT(.dtors.*)))}
+ ${CONSTRUCTING+ KEEP (*(.dtors))}
+ ${CONSTRUCTING+ PROVIDE(___dtors_end = .);}
+ ${CONSTRUCTING+ ___elf_ctors_dtors_end = .;}
+
+ ${RELOCATING+ __Etext = .;}
+
+ /* Deprecated, use __Etext. */
+ ${RELOCATING+ PROVIDE(_etext = .);}
+ }
+
+ /* Any dot-relative start-expression (such as "ALIGN(2)", also including
+ the "default" .data alignment expression) will use the initial, raw
+ size of .text and will be incorrect if the alignment used is less
+ than the alignment for .text (which might depend on input and obj
+ format). FIXME: Seems like a bug in ld. Seems hard to fix. Seems
+ unimportant. */
+ .data :
+ {
+ ${RELOCATING+ __Sdata = .;}
+ *(.data);
+ ${RELOCATING+*(.data.*)}
+ ${RELOCATING+*(.gnu.linkonce.d*)}
+ ${RELOCATING+*(.eh_frame) /* FIXME: Make .text */}
+ ${RELOCATING+*(.gcc_except_table)}
+ ${RELOCATING+ __Edata = .;}
+
+ /* Deprecated, use __Edata. */
+ ${RELOCATING+ PROVIDE(_edata = .);}
+ }
+
+ .bss :
+ {
+ /* Deprecated, use __Sbss. */
+ ${RELOCATING+ PROVIDE(_bss_start = .);}
+
+ ${RELOCATING+ __Sbss = .;}
+ *(.bss)
+ ${RELOCATING+*(.bss.*)}
+ *(COMMON)
+ ${RELOCATING+ __Ebss = .;}
+
+ /* Deprecated, use __Ebss or __Eall as appropriate. */
+ ${RELOCATING+ PROVIDE(_end = .);}
+ ${RELOCATING+ PROVIDE(__end = .);}
+ }
+ ${RELOCATING+ __Eall = .;}
+
+ /* Unfortunately, stabs are not mappable from ELF to a.out.
+ It can probably be fixed with some amount of work. */
+ /DISCARD/ : { *(.stab) *(.stab*) *(.debug) *(.debug*) *(.comment) }
+
+ /* For the rsim and xsim simulators. */
+ ${RELOCATING+ PROVIDE(__Endmem = 0x10000000);}
+
+ /* For elinux. */
+ ${RELOCATING+ PROVIDE(__Stacksize = 0);}
+}
+EOF