X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=ld%2Femultempl%2Fmmix-elfnmmo.em;h=beb6f09ff31d89f8d24d3c419bbb15ca280971c3;hb=8b8c7c9f49992750f66f81b4601d593a3858d98c;hp=1b72a643baf98873f598544ce7f7714844c1ad6c;hpb=48fa4a5def1116273c2c2a236939e96eb9b6231a;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/mmix-elfnmmo.em b/ld/emultempl/mmix-elfnmmo.em index 1b72a643ba..beb6f09ff3 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-2016 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,20 @@ # # 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 # 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, 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 (link_info.output_bfd, 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->owner, 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