diff options
author | Alan Modra <amodra@gmail.com> | 2018-04-16 15:29:39 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2018-04-16 15:29:39 +0930 |
commit | 211dc24b8744ed14ee5c293e7ac164d02e1fa1fe (patch) | |
tree | fcddbd29b4505638de6f018301a674816da8e025 /ld/emultempl | |
parent | 4db9937a27496d2f62ac1dde76565809acd4ecde (diff) | |
download | gdb-211dc24b8744ed14ee5c293e7ac164d02e1fa1fe.zip gdb-211dc24b8744ed14ee5c293e7ac164d02e1fa1fe.tar.gz gdb-211dc24b8744ed14ee5c293e7ac164d02e1fa1fe.tar.bz2 |
Remove sh5 and sh64 support
include/
* dis-asm.h: Remove sh5 and sh64 support.
bfd/
* Makefile.am: Remove sh5 and sh64 support.
* archures.c: Likewise.
* config.bfd: Likewise.
* configure.ac: Likewise.
* cpu-sh.c: Likewise.
* elf32-sh-relocs.h: Likewise.
* elf32-sh.c: Likewise.
* targets.c: Likewise.
* elf32-sh64-com.c: Delete.
* elf32-sh64.c: Delete.
* elf32-sh64.h: Delete.
* elf64-sh64.c: Delete.
* Makefile.in: Regenerate.
* bfd-in2.h: Regenerate.
* configure: Regenerate.
* po/SRC-POTFILES.in: Regenerate.
opcodes/
* Makefile.am: Remove sh5 and sh64 support.
* configure.ac: Likewise.
* disassemble.c: Likewise.
* disassemble.h: Likewise.
* sh-dis.c: Likewise.
* sh64-dis.c: Delete.
* sh64-opc.c: Delete.
* sh64-opc.h: Delete.
* Makefile.in: Regenerate.
* configure: Regenerate.
* po/POTFILES.in: Regenerate.
bintuils/
* testsuite/binutils-all/objcopy.exp: Remove sh5 and sh64 support.
gas/
* Makefile.am: Remove sh5 and sh64 support.
* config/tc-sh.c: Likewise.
* configure.tgt: Likewise.
* doc/Makefile.am: Likewise.
* doc/as.texinfo: Likewise.
* testsuite/gas/cfi/cfi.exp: Likewise.
* testsuite/gas/sh/basic.exp: Likewise.
* config/tc-sh64.c: Delete.
* config/tc-sh64.h: Delete.
* doc/c-sh64.texi: Delete.
* testsuite/gas/sh/sh64/abi-32.d: Delete.
* testsuite/gas/sh/sh64/abi-32.s: Delete.
* testsuite/gas/sh/sh64/abi-64.d: Delete.
* testsuite/gas/sh/sh64/abi-64.s: Delete.
* testsuite/gas/sh/sh64/basic-1.d: Delete.
* testsuite/gas/sh/sh64/basic-1.s: Delete.
* testsuite/gas/sh/sh64/case-1.d: Delete.
* testsuite/gas/sh/sh64/case-1.s: Delete.
* testsuite/gas/sh/sh64/case-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/crange1-1.d: Delete.
* testsuite/gas/sh/sh64/crange1-2.d: Delete.
* testsuite/gas/sh/sh64/crange1.s: Delete.
* testsuite/gas/sh/sh64/crange2-1.d: Delete.
* testsuite/gas/sh/sh64/crange2-2.d: Delete.
* testsuite/gas/sh/sh64/crange2-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/crange2.s: Delete.
* testsuite/gas/sh/sh64/crange3-1.d: Delete.
* testsuite/gas/sh/sh64/crange3.s: Delete.
* testsuite/gas/sh/sh64/crange4-1.d: Delete.
* testsuite/gas/sh/sh64/crange4.s: Delete.
* testsuite/gas/sh/sh64/crange5-1.d: Delete.
* testsuite/gas/sh/sh64/crange5.s: Delete.
* testsuite/gas/sh/sh64/creg-1.d: Delete.
* testsuite/gas/sh/sh64/creg-1.s: Delete.
* testsuite/gas/sh/sh64/creg-2.d: Delete.
* testsuite/gas/sh/sh64/creg-2.s: Delete.
* testsuite/gas/sh/sh64/datal-1.s: Delete.
* testsuite/gas/sh/sh64/datal-2.d: Delete.
* testsuite/gas/sh/sh64/datal-2.s: Delete.
* testsuite/gas/sh/sh64/datal-3.s: Delete.
* testsuite/gas/sh/sh64/datal32-1.d: Delete.
* testsuite/gas/sh/sh64/datal32-3.d: Delete.
* testsuite/gas/sh/sh64/datal64-1.d: Delete.
* testsuite/gas/sh/sh64/datal64-3.d: Delete.
* testsuite/gas/sh/sh64/eh-1.d: Delete.
* testsuite/gas/sh/sh64/eh-1.s: Delete.
* testsuite/gas/sh/sh64/endian-1.d: Delete.
* testsuite/gas/sh/sh64/endian-1.s: Delete.
* testsuite/gas/sh/sh64/endian-2.d: Delete.
* testsuite/gas/sh/sh64/endian-2.s: Delete.
* testsuite/gas/sh/sh64/err-1.s: Delete.
* testsuite/gas/sh/sh64/err-2.s: Delete.
* testsuite/gas/sh/sh64/err-3.s: Delete.
* testsuite/gas/sh/sh64/err-4.s: Delete.
* testsuite/gas/sh/sh64/err-abi-32.s: Delete.
* testsuite/gas/sh/sh64/err-abi-64.s: Delete.
* testsuite/gas/sh/sh64/err-dsp.s: Delete.
* testsuite/gas/sh/sh64/err-movi-noexp-1.s: Delete.
* testsuite/gas/sh/sh64/err-noexp-cmd1.s: Delete.
* testsuite/gas/sh/sh64/err-pt-1.s: Delete.
* testsuite/gas/sh/sh64/err-pt32-cmd1.s: Delete.
* testsuite/gas/sh/sh64/err-pt32-cmd2.s: Delete.
* testsuite/gas/sh/sh64/err-pt32-cmd3.s: Delete.
* testsuite/gas/sh/sh64/err-ptb-1.s: Delete.
* testsuite/gas/sh/sh64/err-ptb-2.s: Delete.
* testsuite/gas/sh/sh64/err.exp: Delete.
* testsuite/gas/sh/sh64/immexpr1.s: Delete.
* testsuite/gas/sh/sh64/immexpr2.s: Delete.
* testsuite/gas/sh/sh64/immexpr32-1.d: Delete.
* testsuite/gas/sh/sh64/immexpr32-2.d: Delete.
* testsuite/gas/sh/sh64/immexpr64-1.d: Delete.
* testsuite/gas/sh/sh64/immexpr64-2.d: Delete.
* testsuite/gas/sh/sh64/lineno.d: Delete.
* testsuite/gas/sh/sh64/lineno.s: Delete.
* testsuite/gas/sh/sh64/localcom-1.d: Delete.
* testsuite/gas/sh/sh64/localcom-1.s: Delete.
* testsuite/gas/sh/sh64/mix-1.d: Delete.
* testsuite/gas/sh/sh64/mix-1.s: Delete.
* testsuite/gas/sh/sh64/mix-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/movi-1.s: Delete.
* testsuite/gas/sh/sh64/movi-2.s: Delete.
* testsuite/gas/sh/sh64/movi-3.d: Delete.
* testsuite/gas/sh/sh64/movi-3.s: Delete.
* testsuite/gas/sh/sh64/movi32-1.d: Delete.
* testsuite/gas/sh/sh64/movi32-2.d: Delete.
* testsuite/gas/sh/sh64/movi32-noexp-2.d: Delete.
* testsuite/gas/sh/sh64/movi64-1.d: Delete.
* testsuite/gas/sh/sh64/movi64-2.d: Delete.
* testsuite/gas/sh/sh64/movi64-2.s: Delete.
* testsuite/gas/sh/sh64/movi64-3.d: Delete.
* testsuite/gas/sh/sh64/movi64-noexp-2.d: Delete.
* testsuite/gas/sh/sh64/pt-1.d: Delete.
* testsuite/gas/sh/sh64/pt-1.s: Delete.
* testsuite/gas/sh/sh64/pt-2.s: Delete.
* testsuite/gas/sh/sh64/pt-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/pt32-1.d: Delete.
* testsuite/gas/sh/sh64/pt32-noexp-2.d: Delete.
* testsuite/gas/sh/sh64/pt64-1.d: Delete.
* testsuite/gas/sh/sh64/pt64-32-1.d: Delete.
* testsuite/gas/sh/sh64/pt64-32-2.d: Delete.
* testsuite/gas/sh/sh64/pt64-noexp-2.d: Delete.
* testsuite/gas/sh/sh64/ptc-1.s: Delete.
* testsuite/gas/sh/sh64/ptc32-1.d: Delete.
* testsuite/gas/sh/sh64/ptc32-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/ptc64-1.d: Delete.
* testsuite/gas/sh/sh64/ptc64-32-1.d: Delete.
* testsuite/gas/sh/sh64/ptc64-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/ptext-1.s: Delete.
* testsuite/gas/sh/sh64/ptext32-1.d: Delete.
* testsuite/gas/sh/sh64/ptext32-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/ptext64-1.d: Delete.
* testsuite/gas/sh/sh64/ptext64-32-1.d: Delete.
* testsuite/gas/sh/sh64/ptext64-noexp-1.d: Delete.
* testsuite/gas/sh/sh64/rel-1.s: Delete.
* testsuite/gas/sh/sh64/rel-2.s: Delete.
* testsuite/gas/sh/sh64/rel-3.s: Delete.
* testsuite/gas/sh/sh64/rel-4.s: Delete.
* testsuite/gas/sh/sh64/rel-5.s: Delete.
* testsuite/gas/sh/sh64/rel32-1.d: Delete.
* testsuite/gas/sh/sh64/rel32-2.d: Delete.
* testsuite/gas/sh/sh64/rel32-3.d: Delete.
* testsuite/gas/sh/sh64/rel32-4.d: Delete.
* testsuite/gas/sh/sh64/rel32-5.d: Delete.
* testsuite/gas/sh/sh64/rel64-1.d: Delete.
* testsuite/gas/sh/sh64/rel64-2.d: Delete.
* testsuite/gas/sh/sh64/rel64-3.d: Delete.
* testsuite/gas/sh/sh64/rel64-4.d: Delete.
* testsuite/gas/sh/sh64/rel64-5.d: Delete.
* testsuite/gas/sh/sh64/relax-1.d: Delete.
* testsuite/gas/sh/sh64/relax-1.s: Delete.
* testsuite/gas/sh/sh64/relax-2.d: Delete.
* testsuite/gas/sh/sh64/relax-2.s: Delete.
* testsuite/gas/sh/sh64/relax-3.d: Delete.
* testsuite/gas/sh/sh64/relax-3.s: Delete.
* testsuite/gas/sh/sh64/sh64.exp: Delete.
* testsuite/gas/sh/sh64/shift-1.s: Delete.
* testsuite/gas/sh/sh64/shift-2.s: Delete.
* testsuite/gas/sh/sh64/shift-3.s: Delete.
* testsuite/gas/sh/sh64/shift32-1.d: Delete.
* testsuite/gas/sh/sh64/shift32-3.d: Delete.
* testsuite/gas/sh/sh64/shift32-noexp-3.d: Delete.
* testsuite/gas/sh/sh64/shift64-1.d: Delete.
* testsuite/gas/sh/sh64/shift64-2.d: Delete.
* testsuite/gas/sh/sh64/shift64-3.d: Delete.
* testsuite/gas/sh/sh64/shift64-noexp-3.d: Delete.
* testsuite/gas/sh/sh64/syntax-1.d: Delete.
* testsuite/gas/sh/sh64/syntax-1.s: Delete.
* testsuite/gas/sh/sh64/syntax-2.d: Delete.
* testsuite/gas/sh/sh64/syntax-2.s: Delete.
* testsuite/gas/sh/sh64/ua-1.s: Delete.
* testsuite/gas/sh/sh64/ua32-1.d: Delete.
* testsuite/gas/sh/sh64/ua64-1.d: Delete.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.
* po/POTFILES.in: Regenerate.
ld/
* Makefile.am: Remove sh5 and sh64 support.
* configure.tgt: Likewise.
* ldlang.c: Likewise.
* testsuite/ld-elfcomm/elfcomm.exp: Likewise.
* testsuite/ld-gc/gc.exp: Likewise.
* testsuite/ld-gc/pr13683.d: Likewise.
* testsuite/ld-scripts/crossref.exp: Likewise.
* testsuite/ld-selective/selective.exp: Likewise.
* testsuite/ld-sh/ld-r-1.d: Likewise.
* testsuite/ld-sh/rd-sh.exp: Likewise.
* testsuite/ld-sh/sh.exp: Likewise.
* testsuite/ld-srec/srec.exp: Likewise.
* testsuite/ld-undefined/undefined.exp: Likewise.
* emulparams/shelf32.sh: Delete.
* emulparams/shelf32_linux.sh: Delete.
* emulparams/shelf32_nbsd.sh: Delete.
* emulparams/shelf64.sh: Delete.
* emulparams/shelf64_nbsd.sh: Delete.
* emulparams/shlelf32.sh: Delete.
* emulparams/shlelf32_linux.sh: Delete.
* emulparams/shlelf32_nbsd.sh: Delete.
* emulparams/shlelf64.sh: Delete.
* emulparams/shlelf64_nbsd.sh: Delete.
* emultempl/sh64elf.em: Delete.
* testsuite/ld-sh/sh64/abi32.sd: Delete.
* testsuite/ld-sh/sh64/abi32.xd: Delete.
* testsuite/ld-sh/sh64/abi64.sd: Delete.
* testsuite/ld-sh/sh64/abi64.xd: Delete.
* testsuite/ld-sh/sh64/abixx-noexp.sd: Delete.
* testsuite/ld-sh/sh64/cmpct1.sd: Delete.
* testsuite/ld-sh/sh64/cmpct1.xd: Delete.
* testsuite/ld-sh/sh64/crange-1.s: Delete.
* testsuite/ld-sh/sh64/crange-2a.s: Delete.
* testsuite/ld-sh/sh64/crange-2b.s: Delete.
* testsuite/ld-sh/sh64/crange-2c.s: Delete.
* testsuite/ld-sh/sh64/crange-2d.s: Delete.
* testsuite/ld-sh/sh64/crange-2e.s: Delete.
* testsuite/ld-sh/sh64/crange-2f.s: Delete.
* testsuite/ld-sh/sh64/crange-2g.s: Delete.
* testsuite/ld-sh/sh64/crange-2h.s: Delete.
* testsuite/ld-sh/sh64/crange-2i.s: Delete.
* testsuite/ld-sh/sh64/crange1.rd: Delete.
* testsuite/ld-sh/sh64/crange2.rd: Delete.
* testsuite/ld-sh/sh64/crange3-cmpct.rd: Delete.
* testsuite/ld-sh/sh64/crange3-media.rd: Delete.
* testsuite/ld-sh/sh64/crange3.dd: Delete.
* testsuite/ld-sh/sh64/crange3.rd: Delete.
* testsuite/ld-sh/sh64/crangerel1.rd: Delete.
* testsuite/ld-sh/sh64/crangerel2.rd: Delete.
* testsuite/ld-sh/sh64/dlsection-1.s: Delete.
* testsuite/ld-sh/sh64/dlsection.sd: Delete.
* testsuite/ld-sh/sh64/endian.dbd: Delete.
* testsuite/ld-sh/sh64/endian.dld: Delete.
* testsuite/ld-sh/sh64/endian.ld: Delete.
* testsuite/ld-sh/sh64/endian.s: Delete.
* testsuite/ld-sh/sh64/endian.sbd: Delete.
* testsuite/ld-sh/sh64/endian.sld: Delete.
* testsuite/ld-sh/sh64/gotplt.d: Delete.
* testsuite/ld-sh/sh64/gotplt.map: Delete.
* testsuite/ld-sh/sh64/gotplt.s: Delete.
* testsuite/ld-sh/sh64/init-cmpct.d: Delete.
* testsuite/ld-sh/sh64/init-media.d: Delete.
* testsuite/ld-sh/sh64/init.s: Delete.
* testsuite/ld-sh/sh64/init64.d: Delete.
* testsuite/ld-sh/sh64/mix1-noexp.sd: Delete.
* testsuite/ld-sh/sh64/mix1.sd: Delete.
* testsuite/ld-sh/sh64/mix1.xd: Delete.
* testsuite/ld-sh/sh64/mix2-noexp.sd: Delete.
* testsuite/ld-sh/sh64/mix2.sd: Delete.
* testsuite/ld-sh/sh64/mix2.xd: Delete.
* testsuite/ld-sh/sh64/rd-sh64.exp: Delete.
* testsuite/ld-sh/sh64/rel-1.s: Delete.
* testsuite/ld-sh/sh64/rel-2.s: Delete.
* testsuite/ld-sh/sh64/rel32.xd: Delete.
* testsuite/ld-sh/sh64/rel64.xd: Delete.
* testsuite/ld-sh/sh64/relax.exp: Delete.
* testsuite/ld-sh/sh64/relax1.s: Delete.
* testsuite/ld-sh/sh64/relax2.s: Delete.
* testsuite/ld-sh/sh64/relax3.s: Delete.
* testsuite/ld-sh/sh64/relax4.s: Delete.
* testsuite/ld-sh/sh64/reldl-1.s: Delete.
* testsuite/ld-sh/sh64/reldl-2.s: Delete.
* testsuite/ld-sh/sh64/reldl32.rd: Delete.
* testsuite/ld-sh/sh64/reldl64.rd: Delete.
* testsuite/ld-sh/sh64/relfail.exp: Delete.
* testsuite/ld-sh/sh64/relfail.s: Delete.
* testsuite/ld-sh/sh64/sh64-1.s: Delete.
* testsuite/ld-sh/sh64/sh64-2.s: Delete.
* testsuite/ld-sh/sh64/sh64.exp: Delete.
* testsuite/ld-sh/sh64/shcmp-1.s: Delete.
* testsuite/ld-sh/sh64/shdl-1.s: Delete.
* testsuite/ld-sh/sh64/shdl-2.s: Delete.
* testsuite/ld-sh/sh64/shdl32.xd: Delete.
* testsuite/ld-sh/sh64/shdl64.sd: Delete.
* testsuite/ld-sh/sh64/shdl64.xd: Delete.
* testsuite/ld-sh/sh64/shmix-1.s: Delete.
* testsuite/ld-sh/sh64/shmix-2.s: Delete.
* testsuite/ld-sh/sh64/shmix-3.s: Delete.
* testsuite/ld-sh/sh64/stobin-0-dso.d: Delete.
* testsuite/ld-sh/sh64/stobin-1.d: Delete.
* testsuite/ld-sh/sh64/stobin.s: Delete.
* testsuite/ld-sh/sh64/stolib.s: Delete.
* Makefile.in: Regenerate.
* po/BLD-POTFILES.in: Regenerate.
Diffstat (limited to 'ld/emultempl')
-rw-r--r-- | ld/emultempl/sh64elf.em | 563 |
1 files changed, 0 insertions, 563 deletions
diff --git a/ld/emultempl/sh64elf.em b/ld/emultempl/sh64elf.em deleted file mode 100644 index 1fe94da..0000000 --- a/ld/emultempl/sh64elf.em +++ /dev/null @@ -1,563 +0,0 @@ -# This shell script emits a C file. -*- C -*- -# Copyright (C) 2000-2018 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 defines extra sh64 -# specific routines. -# - -LDEMUL_AFTER_ALLOCATION=sh64_elf_${EMULATION_NAME}_after_allocation -LDEMUL_BEFORE_ALLOCATION=sh64_elf_${EMULATION_NAME}_before_allocation - -fragment <<EOF - -#include "libiberty.h" -#include "elf-bfd.h" -#include "elf/sh.h" -#include "elf32-sh64.h" - -/* Check if we need a .cranges section and create it if it's not in any - input file. It might seem better to always create it and if unneeded, - discard it, but I don't find a simple way to discard it totally from - the output. - - Putting it here instead of as a elf_backend_always_size_sections hook - in elf32-sh64.c, means that we have access to linker command line - options here, and we can access input sections in the order in which - they will be linked. */ - -static void -sh64_elf_${EMULATION_NAME}_before_allocation (void) -{ - asection *cranges; - asection *osec; - - /* Call main function; we're just extending it. */ - gld${EMULATION_NAME}_before_allocation (); - - cranges = bfd_get_section_by_name (link_info.output_bfd, - SH64_CRANGES_SECTION_NAME); - - if (cranges != NULL) - { - if (RELAXATION_ENABLED) - { - /* FIXME: Look through incoming sections with .cranges - descriptors, build up some kind of descriptors that the - relaxing function will pick up and adjust, or perhaps make it - find and adjust an associated .cranges descriptor. We could - also look through incoming relocs and kill the ones marking - relaxation areas, but that wouldn't be TRT. */ - einfo - (_("%P: sorry, turning off relaxing: .cranges section in input\n")); - einfo (_(" A .cranges section is present in:\n")); - - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *input_cranges - = bfd_get_section_by_name (f->the_bfd, - SH64_CRANGES_SECTION_NAME); - if (input_cranges != NULL) - einfo (" %pI\n", f); - } - } - - DISABLE_RELAXATION; - } - - /* We wouldn't need to do anything when there's already a .cranges - section (and have a return here), except that we need to set the - section flags right for output sections that *don't* need a - .cranges section. */ - } - - if (RELAXATION_ENABLED) - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - if (bfd_get_flavour (f->the_bfd) == bfd_target_elf_flavour) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)) - { - einfo (_("%P: sorry, turning off relaxing: SHmedia sections present\n")); - einfo (" %pI\n", f); - DISABLE_RELAXATION; - goto done_scanning_shmedia_sections; - } - } - } - } - } - done_scanning_shmedia_sections: - - /* For each non-empty input section in each output section, check if it - has the same SH64-specific flags. If some input section differs, we - need a .cranges section. */ - for (osec = link_info.output_bfd->sections; - osec != NULL; - osec = osec->next) - { - struct sh64_section_data *sh64_sec_data; - bfd_vma oflags_isa = 0; - bfd_vma iflags_isa = 0; - - if (bfd_get_flavour (link_info.output_bfd) != bfd_target_elf_flavour) - einfo (_("%F%P: error: non-ELF output formats are not supported by this target's linker\n")); - - sh64_sec_data = sh64_elf_section_data (osec)->sh64_info; - - /* Omit excluded or garbage-collected sections. */ - if (bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE) - continue; - - /* Make sure we have the target section data initialized. */ - if (sh64_sec_data == NULL) - { - sh64_sec_data = xcalloc (1, sizeof (struct sh64_section_data)); - sh64_elf_section_data (osec)->sh64_info = sh64_sec_data; - } - - /* First find an input section so we have flags to compare with; the - flags in the output section are not valid. */ - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0) - { - oflags_isa - = (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)); - goto break_1; - } - } - } - } - - break_1: - - /* Check that all input sections have the same contents-type flags - as the first input section. */ - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0) - { - iflags_isa - = (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)); - - /* If flags don't agree, we need a .cranges section. - Create it here if it did not exist through input - sections. */ - if (iflags_isa != oflags_isa) - { - if (cranges == NULL) - { - /* This section will be *appended* to - sections, so the outer iteration will reach - it in due time and set - sh64_elf_section_data; no need to set it - specifically here. */ - cranges - = bfd_make_section_with_flags (link_info.output_bfd, - SH64_CRANGES_SECTION_NAME, - SEC_LINKER_CREATED - | SEC_KEEP - | SEC_HAS_CONTENTS - | SEC_DEBUGGING); - if (cranges == NULL) - einfo - (_("%F%P: can't make .cranges section: %E\n")); - } - - /* We don't need to look at more input sections, - and we know this section will have mixed - contents. */ - goto break_2; - } - } - } - } - } - - /* If we got here, then all input sections in this output section - have the same contents flag. Put that where we expect to see - contents flags. We don't need to do this for sections that will - need additional, linker-generated .cranges entries. */ - sh64_sec_data->contents_flags = iflags_isa; - - break_2: - ; - } -} - -/* Size up and extend the .cranges section, merging generated entries. */ - -static void -sh64_elf_${EMULATION_NAME}_after_allocation (void) -{ - bfd_vma new_cranges = 0; - bfd_vma cranges_growth = 0; - asection *osec; - bfd_byte *crangesp; - asection *cranges; - - gld${EMULATION_NAME}_after_allocation (); - - /* Needed, since we create link_orders here. */ - lang_clear_os_map (); - - cranges = bfd_get_section_by_name (link_info.output_bfd, - SH64_CRANGES_SECTION_NAME); - - /* If there is no .cranges section, it is because it was seen earlier on - that none was needed. Otherwise it must have been created then, or - be present in input. */ - if (cranges == NULL) - return; - - /* First, we set the ISA flags for each output section according to the - first non-discarded section. For each input section in osec, we - check if it has the same flags. If it does not, we set flags to mark - a mixed section (and exit the loop early). */ - for (osec = link_info.output_bfd->sections; - osec != NULL; - osec = osec->next) - { - bfd_vma oflags_isa = 0; - bfd_boolean need_check_cranges = FALSE; - - /* Omit excluded or garbage-collected sections. */ - if (bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE) - continue; - - /* First find an input section so we have flags to compare with; the - flags in the output section are not valid. */ - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0) - { - oflags_isa - = (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)); - goto break_1; - } - } - } - } - - break_1: - - /* Check that all input sections have the same contents-type flags - as the first input section. */ - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0) - { - bfd_vma iflags_isa - = (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)); - - /* If flags don't agree, set the target-specific data - of the section to mark that this section needs to - be have .cranges section entries added. Don't - bother setting ELF section flags in output section; - they will be cleared later and will have to be - re-initialized before the linked file is written. */ - if (iflags_isa != oflags_isa) - { - oflags_isa = SHF_SH5_ISA32_MIXED; - - ASSERT (sh64_elf_section_data (osec)->sh64_info); - - sh64_elf_section_data (osec)->sh64_info->contents_flags - = SHF_SH5_ISA32_MIXED; - need_check_cranges = TRUE; - goto break_2; - } - } - } - } - } - - break_2: - - /* If there were no new ranges for this output section, we don't - need to iterate over the input sections to check how many are - needed. */ - if (! need_check_cranges) - continue; - - /* If we found a section with differing contents type, we need more - ranges to mark the sections that are not mixed (and already have - .cranges descriptors). Calculate the maximum number of new - entries here. We may merge some of them, so that number is not - final; it can shrink. */ - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0 - && ((elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)) - != SHF_SH5_ISA32_MIXED)) - new_cranges++; - } - } - } - } - - if (cranges->contents != NULL) - free (cranges->contents); - - ASSERT (sh64_elf_section_data (cranges)->sh64_info != NULL); - - /* Make sure we have .cranges in memory even if there were only - assembler-generated .cranges. */ - cranges_growth = new_cranges * SH64_CRANGE_SIZE; - cranges->contents = xcalloc (cranges->size + cranges_growth, 1); - bfd_set_section_flags (cranges->owner, cranges, - bfd_get_section_flags (cranges->owner, cranges) - | SEC_IN_MEMORY); - - /* If we don't need to grow the .cranges section beyond what was in the - input sections, we have nothing more to do here. We then only got - here because there was a .cranges section coming from input. Zero - out the number of generated .cranges. */ - if (new_cranges == 0) - { - sh64_elf_section_data (cranges)->sh64_info->cranges_growth = 0; - return; - } - - crangesp = cranges->contents + cranges->size; - - /* Now pass over the sections again, and make reloc orders for the new - .cranges entries. Constants are set as we go. */ - for (osec = link_info.output_bfd->sections; - osec != NULL; - osec = osec->next) - { - struct bfd_link_order *cr_addr_order = NULL; - enum sh64_elf_cr_type last_cr_type = CRT_NONE; - bfd_vma last_cr_size = 0; - bfd_vma continuation_vma = 0; - - /* Omit excluded or garbage-collected sections, and output sections - which were not marked as needing further processing. */ - if ((bfd_get_section_flags (link_info.output_bfd, osec) & SEC_EXCLUDE) != 0 - || (sh64_elf_section_data (osec)->sh64_info->contents_flags - != SHF_SH5_ISA32_MIXED)) - continue; - - { - LANG_FOR_EACH_INPUT_STATEMENT (f) - { - asection *isec; - - for (isec = f->the_bfd->sections; - isec != NULL; - isec = isec->next) - { - /* Allow only sections that have (at least initially) a - non-zero size, and are not excluded, and are not marked - as containing mixed data, thus already having .cranges - entries. */ - if (isec->output_section == osec - && isec->size != 0 - && (bfd_get_section_flags (isec->owner, isec) - & SEC_EXCLUDE) == 0 - && ((elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)) - != SHF_SH5_ISA32_MIXED)) - { - enum sh64_elf_cr_type cr_type; - bfd_vma cr_size; - bfd_vma isa_flags - = (elf_section_data (isec)->this_hdr.sh_flags - & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)); - - if (isa_flags == SHF_SH5_ISA32) - cr_type = CRT_SH5_ISA32; - else if ((bfd_get_section_flags (isec->owner, isec) - & SEC_CODE) == 0) - cr_type = CRT_DATA; - else - cr_type = CRT_SH5_ISA16; - - cr_size = isec->size; - - /* Sections can be empty, like .text in a file that - only contains other sections. Ranges shouldn't be - emitted for them. This can presumably happen after - relaxing and is not be caught at the "raw size" - test above. */ - if (cr_size == 0) - continue; - - /* See if this is a continuation of the previous range - for the same output section. If so, just change - the size of the last range and continue. */ - if (cr_type == last_cr_type - && (continuation_vma - == osec->vma + isec->output_offset)) - { - last_cr_size += cr_size; - bfd_put_32 (link_info.output_bfd, last_cr_size, - crangesp - SH64_CRANGE_SIZE - + SH64_CRANGE_CR_SIZE_OFFSET); - - continuation_vma += cr_size; - continue; - } - - /* If we emit relocatable contents, we need a - relocation for the start address. */ - if (bfd_link_relocatable (&link_info) - || link_info.emitrelocations) - { - /* FIXME: We could perhaps use lang_add_reloc and - friends here, but I'm not really sure that - would leave us free to do some optimizations - later. */ - cr_addr_order - = bfd_new_link_order (link_info.output_bfd, cranges); - - if (cr_addr_order == NULL) - { - einfo (_("%F%P: bfd_new_link_order failed\n")); - return; - } - - cr_addr_order->type = bfd_section_reloc_link_order; - cr_addr_order->offset - = (cranges->output_offset - + crangesp + SH64_CRANGE_CR_ADDR_OFFSET - - cranges->contents); - cr_addr_order->size = 4; - cr_addr_order->u.reloc.p - = xmalloc (sizeof (struct bfd_link_order_reloc)); - - cr_addr_order->u.reloc.p->reloc = BFD_RELOC_32; - cr_addr_order->u.reloc.p->u.section = osec; - - /* Since SH, unlike normal RELA-targets, uses a - "partial inplace" REL-like relocation for this, - we put the addend in the contents and specify 0 - for the reloc. */ - bfd_put_32 (link_info.output_bfd, isec->output_offset, - crangesp + SH64_CRANGE_CR_ADDR_OFFSET); - cr_addr_order->u.reloc.p->addend = 0; - } - else - bfd_put_32 (link_info.output_bfd, - osec->vma + isec->output_offset, - crangesp + SH64_CRANGE_CR_ADDR_OFFSET); - - /* If we could make a reloc for cr_size we would do - it, but we would have to have a symbol for the size - of the _input_ section and there's no way to - generate that. */ - bfd_put_32 (link_info.output_bfd, cr_size, - crangesp + SH64_CRANGE_CR_SIZE_OFFSET); - - bfd_put_16 (link_info.output_bfd, cr_type, - crangesp + SH64_CRANGE_CR_TYPE_OFFSET); - - last_cr_type = cr_type; - last_cr_size = cr_size; - continuation_vma - = osec->vma + isec->output_offset + cr_size; - crangesp += SH64_CRANGE_SIZE; - } - } - } - } - } - - /* The .cranges section will have this size, no larger or smaller. - Since relocs (if relocatable linking) will be emitted into the - "extended" size, we must set the raw size to the total. We have to - keep track of the number of new .cranges entries. - - Sorting before writing is done by sh64_elf_final_write_processing. */ - - sh64_elf_section_data (cranges)->sh64_info->cranges_growth - = crangesp - cranges->contents - cranges->size; - cranges->size = crangesp - cranges->contents; - cranges->rawsize = cranges->size; -} -EOF - - |