X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Fmmix-elfnmmo.em;h=7cb4087a935f200d0ad2f05ad4fd96aaa5ce2a63;hb=618265039f697eab9e72bb58b95fc2d32925df58;hp=c6c7691abb31c1f3a6dd7f3ae4c425fa8481f281;hpb=8017dbcb39aa6a23a2efb5c9a0ec9c1acafdba70;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/mmix-elfnmmo.em b/ld/emultempl/mmix-elfnmmo.em index c6c7691abb..7cb4087a93 100644 --- a/ld/emultempl/mmix-elfnmmo.em +++ b/ld/emultempl/mmix-elfnmmo.em @@ -1,11 +1,11 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2001, 2002 Free Software Foundation, Inc. +# Copyright (C) 2001-2019 Free Software Foundation, Inc. # -# This file is part of GLD, the Gnu Linker. +# This file is part of the GNU Binutils. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -15,22 +15,29 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. # -# This file is sourced from elf32.em and mmo.em, used to define +# This file is sourced from elf.em and mmo.em, used to define # MMIX-specific things common to ELF and MMO. -cat >>e${EMULATION_NAME}.c <_raw_size - 8; + regvma = 256 * 8 - sec->size - 8; - /* If we start on a local register, we have too many global registers. */ + /* If we start on a local register, we have too many global registers. + We treat this error as nonfatal (meaning processing will continue in + search for other errors), because it's a link error in the same way + as an undefined symbol. */ if (regvma < 32 * 8) - einfo ("%X%P: Too many global registers: %u, max 223\n", - (unsigned) sec->_raw_size / 8); - - /* Set vma to correspond to first such register number * 8. */ - bfd_set_section_vma (output_bfd, sec, (bfd_vma) regvma); - - /* ??? Why isn't the section size (_cooked_size) set? Doesn't it get - set regardless of presence of relocations? */ - if (sec->_cooked_size == 0 - && ! bfd_set_section_size (output_bfd, sec, sec->_raw_size)) { - einfo ("%X%P: Can't set section %s size to %u\n", - MMIX_REG_CONTENTS_SECTION_NAME, (unsigned) sec->_raw_size); - return; + einfo (_("%X%P: too many global registers: %u, max 223\n"), + (unsigned) sec->size / 8); + regvma = 32 * 8; } + /* Set vma to correspond to first such register number * 8. */ + bfd_set_section_vma (sec, (bfd_vma) regvma); + /* Simplify symbol output for the register section (without contents; created for register symbols) by setting the output offset to 0. This section is only present when there are register symbols. */ - sec = bfd_get_section_by_name (output_bfd, MMIX_REG_SECTION_NAME); + sec = bfd_get_section_by_name (link_info.output_bfd, MMIX_REG_SECTION_NAME); if (sec != NULL) - bfd_set_section_vma (abfd, sec, 0); + bfd_set_section_vma (sec, 0); - if (!_bfd_mmix_finalize_linker_allocated_gregs (output_bfd, &link_info)) + if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info)) { - einfo ("%X%P: Can't finalize linker-allocated global registers\n"); - /* In case stuff is added after this conditional. */ - return; + /* This is a fatal error; make einfo call not return. */ + einfo (_("%F%P: can't finalize linker-allocated global registers\n")); } } EOF +LDEMUL_BEFORE_PARSE=mmix_before_parse LDEMUL_AFTER_ALLOCATION=mmix_after_allocation LDEMUL_BEFORE_ALLOCATION=mmix_before_allocation