f13a99db51
* bfdlink.h (struct bfd_link_hash_table): Delete creator field. (struct bfd_link_info): Add output_bfd. bfd/ * elflink.c: Replace all accesses to hash->creator field with output_bfd->xvec. * cofflink.c: Likewise. * coff-h8300.c: Likewise. * ecoff.c: Likewise. * elf32-m68hc1x.c: Likewise. * elf32-ppc.c: Likewise. * elf64-alpha.c: Likewise. * elf64-ppc.c: Likewise. * elf64-sparc.c: Likewise. * elfxx-mips.c: Likewise. * i386linux.c: Likewise. * m68klinux.c: Likewise. * sparclinux.c: Likewise. * sunos.c: Likewise. * xcofflink.c: Likewise. * linker.c: Likewise. (_bfd_link_hash_table_init): Don't store creator. ld/ * ldmain.h (output_bfd): Delete. * ldmain.c (output_bfd): Delete. Replace all occurrences of output_bfd with link_info.output_bfd. * ldcref.c: Likewise. * ldctor.c: Likewise. * ldemul.c: Likewise. * ldexp.c: Likewise. * ldfile.c: Likewise. * ldlang.c: Likewise. * ldmisc.c: Likewise. * ldwrite.c: Likewise. * pe-dll.c: Likewise. * emultempl/aix.em: Likewise. * emultempl/alphaelf.em: Likewise. * emultempl/armcoff.em: Likewise. * emultempl/armelf.em: Likewise. * emultempl/avrelf.em: Likewise. * emultempl/beos.em: Likewise. * emultempl/elf-generic.em: Likewise. * emultempl/elf32.em: Likewise. * emultempl/gld960.em: Likewise. * emultempl/hppaelf.em: Likewise. * emultempl/irix.em: Likewise. * emultempl/linux.em: Likewise. * emultempl/lnk960.em: Likewise. * emultempl/m68hc1xelf.em: Likewise. * emultempl/mmix-elfnmmo.em: Likewise. * emultempl/mmo.em: Likewise. * emultempl/pe.em: Likewise. * emultempl/pep.em: Likewise. * emultempl/ppc32elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/scoreelf.em: Likewise. * emultempl/sh64elf.em: Likewise. * emultempl/spuelf.em: Likewise. * emultempl/sunos.em: Likewise. * emultempl/vanilla.em: Likewise. * emultempl/vxworks.em: Likewise. * emultempl/xtensaelf.em: Likewise. * emultempl/z80.em: Likewise. * ldlang.c (open_output): Don't return output, instead write link_info_output_bfd directly. * emultempl/alphaelf.em: Replace occurrences of link_info.hash->creator with link_info.output_bfd->xvec. * emultempl/hppaelf.em: Likewise. * emultempl/ppc32elf.em: Likewise. * emultempl/ppc64elf.em: Likewise. * emultempl/spuelf.em: Likewise.
102 lines
2.7 KiB
Text
102 lines
2.7 KiB
Text
# This shell script emits C code -*- C -*-
|
|
# to keep track of the machine type of Z80 object files
|
|
# It does some substitutions.
|
|
# Copyright 2007, 2008 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.
|
|
|
|
LDEMUL_BEFORE_PARSE=gldz80_before_parse
|
|
LDEMUL_RECOGNIZED_FILE=gldz80_recognized_file
|
|
LDEMUL_AFTER_OPEN=gldz80_after_open
|
|
|
|
fragment <<EOF
|
|
/* --- \begin{z80.em} */
|
|
/* Codes for machine types, bitwise or gives the code to use for the
|
|
output. */
|
|
#define M_Z80STRICT 1
|
|
#define M_Z80 3
|
|
#define M_Z80FULL 7
|
|
#define M_R800 11
|
|
#define M_Z80ANY 15
|
|
|
|
/* Bitwise or of the machine types seen so far. */
|
|
static int result_mach_type;
|
|
|
|
static void
|
|
${LDEMUL_BEFORE_PARSE} (void)
|
|
{
|
|
#ifndef TARGET_ /* I.e., if not generic. */
|
|
ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
|
|
#endif /* not TARGET_ */
|
|
result_mach_type = M_Z80STRICT;
|
|
}
|
|
|
|
|
|
/* Update result_mach_type. */
|
|
static bfd_boolean
|
|
${LDEMUL_RECOGNIZED_FILE} (lang_input_statement_type *entry)
|
|
{
|
|
unsigned long mach_type;
|
|
|
|
mach_type = bfd_get_mach (entry->the_bfd);
|
|
switch (mach_type)
|
|
{
|
|
case bfd_mach_z80strict:
|
|
result_mach_type |= M_Z80STRICT;
|
|
break;
|
|
case bfd_mach_z80:
|
|
result_mach_type |= M_Z80;
|
|
break;
|
|
case bfd_mach_z80full:
|
|
result_mach_type |= M_Z80FULL;
|
|
break;
|
|
case bfd_mach_r800:
|
|
result_mach_type |= M_R800;
|
|
break;
|
|
default:
|
|
result_mach_type |= M_Z80ANY;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* Set the machine type of the output file based on result_mach_type. */
|
|
static void
|
|
gldz80_after_open (void)
|
|
{
|
|
unsigned long mach_type;
|
|
|
|
switch (result_mach_type)
|
|
{
|
|
case M_Z80STRICT:
|
|
mach_type = bfd_mach_z80strict;
|
|
break;
|
|
case M_Z80:
|
|
mach_type = bfd_mach_z80;
|
|
break;
|
|
case M_Z80FULL:
|
|
mach_type = bfd_mach_z80full;
|
|
break;
|
|
case M_R800:
|
|
mach_type = bfd_mach_r800;
|
|
break;
|
|
default:
|
|
mach_type = 0;
|
|
}
|
|
bfd_set_arch_mach (link_info.output_bfd, bfd_arch_z80, mach_type);
|
|
}
|
|
/* --- \end{z80.em} */
|
|
EOF
|