+# MMO is not a relocateable format, and we don't want to require an
+# explicit (e.g.) "-m elf64mmix" when -r is used.
+test -z $RELOCATEABLE_OUTPUT_FORMAT && RELOCATEABLE_OUTPUT_FORMAT=$OUTPUT_FORMAT
+test -z ${RELOCATING+0} && OUTPUT_FORMAT=$RELOCATEABLE_OUTPUT_FORMAT
cat <<EOF
-OUTPUT_FORMAT("mmo")
+OUTPUT_FORMAT("$OUTPUT_FORMAT")
OUTPUT_ARCH(mmix)
-ENTRY(Main)
+${RELOCATING+ENTRY(Main)}
SECTIONS
{
.text ${RELOCATING+ ${TEXT_START_ADDR}}:
/* FIXME: Move .init, .fini, .ctors and .dtors to their own sections. */
${RELOCATING+ PROVIDE (_init_start = .);}
${RELOCATING+ PROVIDE (_init = .);}
- ${RELOCATING+ *(.init)}
+ ${RELOCATING+ KEEP (*(.init))}
${RELOCATING+ PROVIDE (_init_end = .);}
${RELOCATING+ PROVIDE (_fini_start = .);}
${RELOCATING+ PROVIDE (_fini = .);}
- ${RELOCATING+ *(.fini)}
+ ${RELOCATING+ KEEP (*(.fini))}
${RELOCATING+ PROVIDE (_fini_end = .);}
/* FIXME: Align ctors, dtors, ehframe. */
${RELOCATING+ PROVIDE (_ctors = .);}
${RELOCATING+ PROVIDE (__ctors = .);}
${RELOCATING+ KEEP (*crtbegin.o(.ctors))}
- ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.ctors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .ctors))}
${RELOCATING+ KEEP (*(SORT(.ctors.*)))}
${RELOCATING+ KEEP (*(.ctors))}
${RELOCATING+ PROVIDE (_ctors_end = .);}
${RELOCATING+ PROVIDE (_dtors = .);}
${RELOCATING+ PROVIDE (__dtors = .);}
${RELOCATING+ KEEP (*crtbegin.o(.dtors))}
- ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))}
+ ${RELOCATING+ KEEP (*crtbegin?.o(.dtors))}
+ ${RELOCATING+ KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o) .dtors))}
${RELOCATING+ KEEP (*(SORT(.dtors.*)))}
${RELOCATING+ KEEP (*(.dtors))}
${RELOCATING+ PROVIDE (_dtors_end = .);}
${RELOCATING+ PROVIDE(etext = .);}
${RELOCATING+ PROVIDE(_etext = .);}
${RELOCATING+ PROVIDE(__etext = .);}
+ ${RELOCATING+Main = DEFINED (Main) ? Main : (DEFINED (_start) ? _start : ADDR (.text));}
}
- ${RELOCATING+Main = DEFINED (Main) ? Main : (DEFINED (_start) ? _start : . - SIZEOF (.text));}
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
{
/* Note that this section always has a fixed VMA - that of its
first register * 8. */
+ *(.MMIX.reg_contents.linker_allocated);
*(.MMIX.reg_contents);
}
/* Unfortunately, stabs are not mappable from ELF to MMO.
It can probably be fixed with some amount of work. */
/DISCARD/ :
- { *(.gnu.warning.*); }
+ { ${RELOCATING+ *(.gnu.warning.*);} }
}
EOF