aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl/mmix-elfnmmo.em
diff options
context:
space:
mode:
Diffstat (limited to 'ld/emultempl/mmix-elfnmmo.em')
-rw-r--r--ld/emultempl/mmix-elfnmmo.em15
1 files changed, 14 insertions, 1 deletions
diff --git a/ld/emultempl/mmix-elfnmmo.em b/ld/emultempl/mmix-elfnmmo.em
index 3357d36..44223a8 100644
--- a/ld/emultempl/mmix-elfnmmo.em
+++ b/ld/emultempl/mmix-elfnmmo.em
@@ -61,7 +61,20 @@ mmix_after_allocation ()
= bfd_get_section_by_name (output_bfd, MMIX_REG_CONTENTS_SECTION_NAME);
bfd_signed_vma regvma;
- /* If there's no register section, we don't need to do anything. */
+ /* If there's no register section, we don't need to do anything. On the
+ other hand, if a non-standard linker-script without a mapping from
+ MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME 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. */
+ if (sec == NULL)
+ sec
+ = bfd_get_section_by_name (output_bfd,
+ MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
if (sec == NULL)
return;