123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # This shell script emits C code -*- C -*-
- # to keep track of the machine type of Z80 object files
- # It does some substitutions.
- # Copyright (C) 2005-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.
- 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;
- after_open_default ();
- 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
|