OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [ld/] [emultempl/] [armcoff.em] - Diff between revs 156 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 156 Rev 816
# This shell script emits a C file. -*- C -*-
# This shell script emits a C file. -*- C -*-
# It does some substitutions.
# It does some substitutions.
fragment <
fragment <
/* This file is is generated by a shell script.  DO NOT EDIT! */
/* This file is is generated by a shell script.  DO NOT EDIT! */
/* emulate the original gld for the given ${EMULATION_NAME}
/* emulate the original gld for the given ${EMULATION_NAME}
   Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
   Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
   2004, 2005, 2007, 2008 Free Software Foundation, Inc.
   2004, 2005, 2007, 2008 Free Software Foundation, Inc.
   Written by Steve Chamberlain steve@cygnus.com
   Written by Steve Chamberlain steve@cygnus.com
   This file is part of the GNU Binutils.
   This file is part of the GNU Binutils.
   This program is free software; you can redistribute it and/or modify
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */
   MA 02110-1301, USA.  */
#define TARGET_IS_${EMULATION_NAME}
#define TARGET_IS_${EMULATION_NAME}
#include "sysdep.h"
#include "sysdep.h"
#include "bfd.h"
#include "bfd.h"
#include "bfdlink.h"
#include "bfdlink.h"
#include "getopt.h"
#include "getopt.h"
#include "ld.h"
#include "ld.h"
#include "ldmain.h"
#include "ldmain.h"
#include "ldmisc.h"
#include "ldmisc.h"
#include "ldexp.h"
#include "ldexp.h"
#include "ldlang.h"
#include "ldlang.h"
#include "ldfile.h"
#include "ldfile.h"
#include "ldemul.h"
#include "ldemul.h"
/* If TRUE, then interworking stubs which support calls to old,
/* If TRUE, then interworking stubs which support calls to old,
   non-interworking aware ARM code should be generated.  */
   non-interworking aware ARM code should be generated.  */
static int support_old_code = 0;
static int support_old_code = 0;
static char * thumb_entry_symbol = NULL;
static char * thumb_entry_symbol = NULL;
#define OPTION_SUPPORT_OLD_CODE         300
#define OPTION_SUPPORT_OLD_CODE         300
#define OPTION_THUMB_ENTRY              301
#define OPTION_THUMB_ENTRY              301
static void
static void
gld${EMULATION_NAME}_add_options
gld${EMULATION_NAME}_add_options
  (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
  (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
   struct option **longopts, int nrl ATTRIBUTE_UNUSED,
   struct option **longopts, int nrl ATTRIBUTE_UNUSED,
   struct option **really_longopts ATTRIBUTE_UNUSED)
   struct option **really_longopts ATTRIBUTE_UNUSED)
{
{
  static const struct option xtra_long[] = {
  static const struct option xtra_long[] = {
    {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
    {"support-old-code", no_argument, NULL, OPTION_SUPPORT_OLD_CODE},
    {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
    {"thumb-entry", required_argument, NULL, OPTION_THUMB_ENTRY},
    {NULL, no_argument, NULL, 0}
    {NULL, no_argument, NULL, 0}
  };
  };
  *longopts = xrealloc (*longopts,
  *longopts = xrealloc (*longopts,
                        nl * sizeof (struct option) + sizeof (xtra_long));
                        nl * sizeof (struct option) + sizeof (xtra_long));
  memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
  memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
}
}
static void
static void
gld${EMULATION_NAME}_list_options (FILE *file)
gld${EMULATION_NAME}_list_options (FILE *file)
{
{
  fprintf (file, _("  --support-old-code          Support interworking with old code\n"));
  fprintf (file, _("  --support-old-code          Support interworking with old code\n"));
  fprintf (file, _("  --thumb-entry=         Set the entry point to be Thumb symbol \n"));
  fprintf (file, _("  --thumb-entry=         Set the entry point to be Thumb symbol \n"));
}
}
static bfd_boolean
static bfd_boolean
gld${EMULATION_NAME}_handle_option (int optc)
gld${EMULATION_NAME}_handle_option (int optc)
{
{
  switch (optc)
  switch (optc)
    {
    {
    default:
    default:
      return FALSE;
      return FALSE;
    case OPTION_SUPPORT_OLD_CODE:
    case OPTION_SUPPORT_OLD_CODE:
      support_old_code = 1;
      support_old_code = 1;
      break;
      break;
    case OPTION_THUMB_ENTRY:
    case OPTION_THUMB_ENTRY:
      thumb_entry_symbol = optarg;
      thumb_entry_symbol = optarg;
      break;
      break;
    }
    }
  return TRUE;
  return TRUE;
}
}


static void
static void
gld${EMULATION_NAME}_before_parse (void)
gld${EMULATION_NAME}_before_parse (void)
{
{
#ifndef TARGET_                 /* I.e., if not generic.  */
#ifndef TARGET_                 /* I.e., if not generic.  */
  ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
  ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
#endif /* not TARGET_ */
#endif /* not TARGET_ */
}
}
/* This is called after the sections have been attached to output
/* This is called after the sections have been attached to output
   sections, but before any sizes or addresses have been set.  */
   sections, but before any sizes or addresses have been set.  */
static void
static void
gld${EMULATION_NAME}_before_allocation (void)
gld${EMULATION_NAME}_before_allocation (void)
{
{
  /* we should be able to set the size of the interworking stub section */
  /* we should be able to set the size of the interworking stub section */
  /* Here we rummage through the found bfds to collect glue information */
  /* Here we rummage through the found bfds to collect glue information */
  /* FIXME: should this be based on a command line option? krk@cygnus.com */
  /* FIXME: should this be based on a command line option? krk@cygnus.com */
  {
  {
    LANG_FOR_EACH_INPUT_STATEMENT (is)
    LANG_FOR_EACH_INPUT_STATEMENT (is)
      {
      {
        if (! bfd_arm_process_before_allocation
        if (! bfd_arm_process_before_allocation
            (is->the_bfd, & link_info, support_old_code))
            (is->the_bfd, & link_info, support_old_code))
          {
          {
            /* xgettext:c-format */
            /* xgettext:c-format */
            einfo (_("Errors encountered processing file %s"), is->filename);
            einfo (_("Errors encountered processing file %s"), is->filename);
          }
          }
      }
      }
  }
  }
  /* We have seen it all. Allocate it, and carry on */
  /* We have seen it all. Allocate it, and carry on */
  bfd_arm_allocate_interworking_sections (& link_info);
  bfd_arm_allocate_interworking_sections (& link_info);
  before_allocation_default ();
  before_allocation_default ();
}
}
static void
static void
gld${EMULATION_NAME}_after_open (void)
gld${EMULATION_NAME}_after_open (void)
{
{
  if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
  if (strstr (bfd_get_target (link_info.output_bfd), "arm") == NULL)
    {
    {
      /* The arm backend needs special fields in the output hash structure.
      /* The arm backend needs special fields in the output hash structure.
         These will only be created if the output format is an arm format,
         These will only be created if the output format is an arm format,
         hence we do not support linking and changing output formats at the
         hence we do not support linking and changing output formats at the
         same time.  Use a link followed by objcopy to change output formats.  */
         same time.  Use a link followed by objcopy to change output formats.  */
      einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
      einfo ("%F%X%P: error: cannot change output format whilst linking ARM binaries\n");
      return;
      return;
    }
    }
  {
  {
    LANG_FOR_EACH_INPUT_STATEMENT (is)
    LANG_FOR_EACH_INPUT_STATEMENT (is)
      {
      {
        if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
        if (bfd_arm_get_bfd_for_interworking (is->the_bfd, & link_info))
          break;
          break;
      }
      }
  }
  }
}
}
static void
static void
gld${EMULATION_NAME}_finish (void)
gld${EMULATION_NAME}_finish (void)
{
{
  if (thumb_entry_symbol != NULL)
  if (thumb_entry_symbol != NULL)
    {
    {
      struct bfd_link_hash_entry * h;
      struct bfd_link_hash_entry * h;
      h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
      h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
                                FALSE, FALSE, TRUE);
                                FALSE, FALSE, TRUE);
      if (h != (struct bfd_link_hash_entry *) NULL
      if (h != (struct bfd_link_hash_entry *) NULL
          && (h->type == bfd_link_hash_defined
          && (h->type == bfd_link_hash_defined
              || h->type == bfd_link_hash_defweak)
              || h->type == bfd_link_hash_defweak)
          && h->u.def.section->output_section != NULL)
          && h->u.def.section->output_section != NULL)
        {
        {
          static char buffer[32];
          static char buffer[32];
          bfd_vma val;
          bfd_vma val;
          /* Special procesing is required for a Thumb entry symbol.  The
          /* Special procesing is required for a Thumb entry symbol.  The
             bottom bit of its address must be set.  */
             bottom bit of its address must be set.  */
          val = (h->u.def.value
          val = (h->u.def.value
                 + bfd_get_section_vma (link_info.output_bfd,
                 + bfd_get_section_vma (link_info.output_bfd,
                                        h->u.def.section->output_section)
                                        h->u.def.section->output_section)
                 + h->u.def.section->output_offset);
                 + h->u.def.section->output_offset);
          val |= 1;
          val |= 1;
          /* Now convert this value into a string and store it in entry_symbol
          /* Now convert this value into a string and store it in entry_symbol
             where the lang_finish() function will pick it up.  */
             where the lang_finish() function will pick it up.  */
          buffer[0] = '0';
          buffer[0] = '0';
          buffer[1] = 'x';
          buffer[1] = 'x';
          sprintf_vma (buffer + 2, val);
          sprintf_vma (buffer + 2, val);
          if (entry_symbol.name != NULL && entry_from_cmdline)
          if (entry_symbol.name != NULL && entry_from_cmdline)
            einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
            einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
                   thumb_entry_symbol, entry_symbol.name);
                   thumb_entry_symbol, entry_symbol.name);
          entry_symbol.name = buffer;
          entry_symbol.name = buffer;
        }
        }
      else
      else
        einfo (_("%P: warning: cannot find thumb start symbol %s\n"),
        einfo (_("%P: warning: cannot find thumb start symbol %s\n"),
               thumb_entry_symbol);
               thumb_entry_symbol);
    }
    }
  finish_default ();
  finish_default ();
}
}
static char *
static char *
gld${EMULATION_NAME}_get_script (int *isfile)
gld${EMULATION_NAME}_get_script (int *isfile)
EOF
EOF
if test -n "$COMPILE_IN"
if test -n "$COMPILE_IN"
then
then
# Scripts compiled in.
# Scripts compiled in.
# sed commands to quote an ld script as a C string.
# sed commands to quote an ld script as a C string.
sc="-f stringify.sed"
sc="-f stringify.sed"
fragment <
fragment <
{
{
  *isfile = 0;
  *isfile = 0;
  if (link_info.relocatable && config.build_constructors)
  if (link_info.relocatable && config.build_constructors)
    return
    return
EOF
EOF
sed $sc ldscripts/${EMULATION_NAME}.xu                 >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xu                 >> e${EMULATION_NAME}.c
echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
echo '  ; else if (link_info.relocatable) return'     >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xr                 >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xr                 >> e${EMULATION_NAME}.c
echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
echo '  ; else if (!config.text_read_only) return'     >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xbn                >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xbn                >> e${EMULATION_NAME}.c
echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
echo '  ; else if (!config.magic_demand_paged) return' >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xn                 >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.xn                 >> e${EMULATION_NAME}.c
echo '  ; else return'                                 >> e${EMULATION_NAME}.c
echo '  ; else return'                                 >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.x                  >> e${EMULATION_NAME}.c
sed $sc ldscripts/${EMULATION_NAME}.x                  >> e${EMULATION_NAME}.c
echo '; }'                                             >> e${EMULATION_NAME}.c
echo '; }'                                             >> e${EMULATION_NAME}.c
else
else
# Scripts read from the filesystem.
# Scripts read from the filesystem.
fragment <
fragment <
{
{
  *isfile = 1;
  *isfile = 1;
  if (link_info.relocatable && config.build_constructors)
  if (link_info.relocatable && config.build_constructors)
    return "ldscripts/${EMULATION_NAME}.xu";
    return "ldscripts/${EMULATION_NAME}.xu";
  else if (link_info.relocatable)
  else if (link_info.relocatable)
    return "ldscripts/${EMULATION_NAME}.xr";
    return "ldscripts/${EMULATION_NAME}.xr";
  else if (!config.text_read_only)
  else if (!config.text_read_only)
    return "ldscripts/${EMULATION_NAME}.xbn";
    return "ldscripts/${EMULATION_NAME}.xbn";
  else if (!config.magic_demand_paged)
  else if (!config.magic_demand_paged)
    return "ldscripts/${EMULATION_NAME}.xn";
    return "ldscripts/${EMULATION_NAME}.xn";
  else
  else
    return "ldscripts/${EMULATION_NAME}.x";
    return "ldscripts/${EMULATION_NAME}.x";
}
}
EOF
EOF
fi
fi
fragment <
fragment <
struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
{
{
  gld${EMULATION_NAME}_before_parse,
  gld${EMULATION_NAME}_before_parse,
  syslib_default,
  syslib_default,
  hll_default,
  hll_default,
  after_parse_default,
  after_parse_default,
  gld${EMULATION_NAME}_after_open,
  gld${EMULATION_NAME}_after_open,
  after_allocation_default,
  after_allocation_default,
  set_output_arch_default,
  set_output_arch_default,
  ldemul_default_target,
  ldemul_default_target,
  gld${EMULATION_NAME}_before_allocation,
  gld${EMULATION_NAME}_before_allocation,
  gld${EMULATION_NAME}_get_script,
  gld${EMULATION_NAME}_get_script,
  "${EMULATION_NAME}",
  "${EMULATION_NAME}",
  "${OUTPUT_FORMAT}",
  "${OUTPUT_FORMAT}",
  gld${EMULATION_NAME}_finish,
  gld${EMULATION_NAME}_finish,
  NULL, /* create output section statements */
  NULL, /* create output section statements */
  NULL, /* open dynamic archive */
  NULL, /* open dynamic archive */
  NULL, /* place orphan */
  NULL, /* place orphan */
  NULL, /* set symbols */
  NULL, /* set symbols */
  NULL, /* parse_args */
  NULL, /* parse_args */
  gld${EMULATION_NAME}_add_options,
  gld${EMULATION_NAME}_add_options,
  gld${EMULATION_NAME}_handle_option,
  gld${EMULATION_NAME}_handle_option,
  NULL, /* unrecognised file */
  NULL, /* unrecognised file */
  gld${EMULATION_NAME}_list_options,
  gld${EMULATION_NAME}_list_options,
  NULL, /* recognized file */
  NULL, /* recognized file */
  NULL, /* find_potential_libraries */
  NULL, /* find_potential_libraries */
  NULL  /* new_vers_pattern */
  NULL  /* new_vers_pattern */
};
};
EOF
EOF
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.