- asection *sec
- = bfd_get_section_by_name (output_bfd, MMIX_REG_CONTENTS_SECTION_NAME);
- bfd_vma regvma;
-
- /* If there's no register section, we don't need to do anything. */
+ asection *sec;
+ bfd_signed_vma regvma;
+
+ gld${EMULATION_NAME}_after_allocation ();
+
+ /* If there's no register section, we don't need to do anything. On the
+ other hand, if there's a non-standard linker-script without a mapping
+ from MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME when that section is
+ present (as in the ld test "NOCROSSREFS 2"), that section (1) will be
+ orphaned; not inserted in MMIX_REG_CONTENTS_SECTION_NAME and (2) we
+ will not do the necessary preparations for those relocations that
+ caused it to be created. We'll SEGV from the latter error. The
+ former error in separation will result in a non-working binary, but
+ that's expected when you play tricks with linker scripts. The
+ "NOCROSSREFS 2" test does not run the output so it does not matter
+ there. */
+ sec = bfd_get_section_by_name (link_info.output_bfd,
+ MMIX_REG_CONTENTS_SECTION_NAME);
+ if (sec == NULL)
+ sec
+ = bfd_get_section_by_name (link_info.output_bfd,
+ MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);