123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- # This shell script emits a C file. -*- C -*-
- # Copyright (C) 2001-2015 Free Software Foundation, Inc.
- #
- # 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 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # 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., 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.
- fragment <<EOF
- #include "elf/mmix.h"
- static void
- mmix_before_allocation (void)
- {
-
- gld${EMULATION_NAME}_before_allocation ();
-
-
- ENABLE_RELAXATION;
- if (!_bfd_mmix_before_linker_allocation (link_info.output_bfd, &link_info))
- einfo ("%X%P: Internal problems setting up section %s",
- MMIX_LD_ALLOCATED_REG_CONTENTS_SECTION_NAME);
- }
- static void
- mmix_after_allocation (void)
- {
- asection *sec;
- bfd_signed_vma regvma;
- gld${EMULATION_NAME}_after_allocation ();
-
- 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);
- if (sec == NULL)
- return;
- regvma = 256 * 8 - sec->size - 8;
-
- if (regvma < 32 * 8)
- {
- einfo ("%X%P: Too many global registers: %u, max 223\n",
- (unsigned) sec->size / 8);
- regvma = 32 * 8;
- }
-
- bfd_set_section_vma (link_info.output_bfd, sec, (bfd_vma) regvma);
-
- sec = bfd_get_section_by_name (link_info.output_bfd, MMIX_REG_SECTION_NAME);
- if (sec != NULL)
- bfd_set_section_vma (sec->owner, sec, 0);
- if (!_bfd_mmix_after_linker_allocation (link_info.output_bfd, &link_info))
- {
-
- einfo ("%F%P: Can't finalize linker-allocated global registers\n");
- }
- }
- EOF
- LDEMUL_AFTER_ALLOCATION=mmix_after_allocation
- LDEMUL_BEFORE_ALLOCATION=mmix_before_allocation
|