summaryrefslogtreecommitdiff
path: root/Unix/i686-elf/lib/cygmon.ld
diff options
context:
space:
mode:
Diffstat (limited to 'Unix/i686-elf/lib/cygmon.ld')
-rw-r--r--Unix/i686-elf/lib/cygmon.ld101
1 files changed, 101 insertions, 0 deletions
diff --git a/Unix/i686-elf/lib/cygmon.ld b/Unix/i686-elf/lib/cygmon.ld
new file mode 100644
index 0000000..ae0d908
--- /dev/null
+++ b/Unix/i686-elf/lib/cygmon.ld
@@ -0,0 +1,101 @@
+STARTUP(cygmon-crt0.o)
+ENTRY(__start)
+GROUP(-lcygmon -lc -lcygmon -lgcc)
+SEARCH_DIR(.)
+__DYNAMIC = 0;
+
+/*
+ * Allocate the stack to be at the top of memory, since the stack
+ * grows down
+ */
+PROVIDE (__stack = 0x500000);
+
+/*
+ * Initalize some symbols to be zero so we can reference them in the
+ * crt0 without core dumping. These functions are all optional, but
+ * we do this so we can have our crt0 always use them if they exist.
+ * This is so BSPs work better when using the crt0 installed with gcc.
+ * We have to initalize them twice, so we multiple object file
+ * formats, as some prepend an underscore.
+ */
+PROVIDE (hardware_init_hook = 0);
+PROVIDE (software_init_hook = 0);
+PROVIDE (__mem_start = 0x100000);
+PROVIDE (___mem_start = 0x100000);
+SECTIONS
+{
+ . = 0x100000;
+ .text : {
+ _ftext = . ;
+ *(.init)
+ eprol = .;
+ *(.text)
+ PROVIDE (__runtime_reloc_start = .);
+ *(.rel.sdata)
+ PROVIDE (__runtime_reloc_stop = .);
+ *(.fini)
+ . = ALIGN(4);
+ __CTOR_LIST__ = .;
+ CONSTRUCTORS
+ LONG(-1)
+ *(.ctors)
+ LONG(0)
+ __CTOR_END__ = .;
+ __DTOR_LIST__ = .;
+ LONG(-1)
+ *(.dtors)
+ LONG(0)
+ __DTOR_END__ = .;
+ PROVIDE(_etext = .);
+ PROVIDE(__etext = .);
+ }
+ . = .;
+ .rdata : {
+ *(.rdata)
+ }
+ .rodata : {
+ *(.rodata)
+ *(.rodata.*)
+ }
+ .eh_frame :
+ {
+ PROVIDE (__EH_FRAME_BEGIN__ = .);
+ *(.eh_frame)
+ PROVIDE (__EH_FRAME_END__ = .);
+ }
+ _fdata = ALIGN(16);
+ .data : {
+ *(.data)
+ *(.gcc_except_table)
+ *(.gcc_exc)
+ }
+ . = ALIGN(8);
+ _gp = . + 0x8000;
+ __global = . + 0x8000;
+ .lit8 : {
+ *(.lit8)
+ }
+ .lit4 : {
+ *(.lit4)
+ }
+ .sdata : {
+ *(.sdata)
+ }
+ . = ALIGN(4);
+ PROVIDE(_edata = .);
+ PROVIDE(__edata = .);
+ fbss = .;
+ _fbss = .;
+ .sbss : {
+ PROVIDE(__bss_start = .);
+ *(.sbss)
+ *(.scommon)
+ }
+ .bss : {
+ *(.bss)
+ *(COMMON)
+ PROVIDE(__bss_end = .);
+ }
+ PROVIDE(_end = .);
+ PROVIDE(__end = .);
+}