OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.18.50/] [ld/] [emultempl/] [lnk960.em] - Diff between revs 38 and 156

Only display areas with differences | Details | Blame | View Log

Rev 38 Rev 156
# 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 <
/* intel coff loader emulation specific stuff
/* intel coff loader emulation specific stuff
   Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
   Copyright 1991, 1992, 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2003,
   2005, 2007, 2008 Free Software Foundation, Inc.
   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.  */
#include "sysdep.h"
#include "sysdep.h"
#include "libiberty.h"
#include "libiberty.h"
#include "bfd.h"
#include "bfd.h"
#include "bfdlink.h"
#include "bfdlink.h"
/*#include "archures.h"*/
/*#include "archures.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"
typedef struct lib_list {
typedef struct lib_list {
  char *name;
  char *name;
  struct lib_list *next;
  struct lib_list *next;
} lib_list_type;
} lib_list_type;
static lib_list_type *hll_list;
static lib_list_type *hll_list;
static lib_list_type **hll_list_tail = &hll_list;
static lib_list_type **hll_list_tail = &hll_list;
static lib_list_type *syslib_list;
static lib_list_type *syslib_list;
static lib_list_type **syslib_list_tail = &syslib_list;
static lib_list_type **syslib_list_tail = &syslib_list;
static void
static void
append (lib_list_type ***list, char *name)
append (lib_list_type ***list, char *name)
{
{
  lib_list_type *element = (lib_list_type *) xmalloc (sizeof (lib_list_type));
  lib_list_type *element = (lib_list_type *) xmalloc (sizeof (lib_list_type));
  element->name = name;
  element->name = name;
  element->next = (lib_list_type *) NULL;
  element->next = (lib_list_type *) NULL;
  **list = element;
  **list = element;
  *list = &element->next;
  *list = &element->next;
}
}
static bfd_boolean had_hll = FALSE;
static bfd_boolean had_hll = FALSE;
static bfd_boolean had_hll_name = FALSE;
static bfd_boolean had_hll_name = FALSE;
static void
static void
lnk960_hll (char *name)
lnk960_hll (char *name)
{
{
  had_hll = TRUE;
  had_hll = TRUE;
  if (name != (char *) NULL)
  if (name != (char *) NULL)
    {
    {
      had_hll_name = TRUE;
      had_hll_name = TRUE;
      append (&hll_list_tail, name);
      append (&hll_list_tail, name);
    }
    }
}
}
static void
static void
lnk960_syslib (char *name)
lnk960_syslib (char *name)
{
{
  append (&syslib_list_tail, name);
  append (&syslib_list_tail, name);
}
}
static void
static void
lnk960_before_parse (void)
lnk960_before_parse (void)
{
{
  char *name = getenv ("I960BASE");
  char *name = getenv ("I960BASE");
  if (name == (char *) NULL)
  if (name == (char *) NULL)
    {
    {
      name = getenv("G960BASE");
      name = getenv("G960BASE");
      if (name == (char *) NULL)
      if (name == (char *) NULL)
        einfo ("%P%F I960BASE and G960BASE not set\n");
        einfo ("%P%F I960BASE and G960BASE not set\n");
    }
    }
  ldfile_add_library_path (concat (name, "/lib", (const char *) NULL), FALSE);
  ldfile_add_library_path (concat (name, "/lib", (const char *) NULL), FALSE);
  ldfile_output_architecture = bfd_arch_i960;
  ldfile_output_architecture = bfd_arch_i960;
  ldfile_output_machine = bfd_mach_i960_core;
  ldfile_output_machine = bfd_mach_i960_core;
}
}
static void
static void
add_on (lib_list_type *list, lang_input_file_enum_type search)
add_on (lib_list_type *list, lang_input_file_enum_type search)
{
{
  while (list)
  while (list)
    {
    {
      lang_add_input_file (list->name, search, (char *) NULL);
      lang_add_input_file (list->name, search, (char *) NULL);
      list = list->next;
      list = list->next;
    }
    }
}
}
static void
static void
lnk960_after_parse (void)
lnk960_after_parse (void)
{
{
  /* If there has been no arch, default to -KB */
  /* If there has been no arch, default to -KB */
  if (ldfile_output_machine_name[0] == 0)
  if (ldfile_output_machine_name[0] == 0)
    ldfile_add_arch ("KB");
    ldfile_add_arch ("KB");
  /* if there has been no hll list then add our own */
  /* if there has been no hll list then add our own */
  if (had_hll && !had_hll_name)
  if (had_hll && !had_hll_name)
    {
    {
      append (&hll_list_tail, "cg");
      append (&hll_list_tail, "cg");
      if (ldfile_output_machine == bfd_mach_i960_ka_sa
      if (ldfile_output_machine == bfd_mach_i960_ka_sa
          || ldfile_output_machine == bfd_mach_i960_ca)
          || ldfile_output_machine == bfd_mach_i960_ca)
        append (&hll_list_tail, "fpg");
        append (&hll_list_tail, "fpg");
    }
    }
  add_on (hll_list, lang_input_file_is_l_enum);
  add_on (hll_list, lang_input_file_is_l_enum);
  add_on (syslib_list, lang_input_file_is_search_file_enum);
  add_on (syslib_list, lang_input_file_is_search_file_enum);
}
}
static void
static void
lnk960_after_allocation (void)
lnk960_after_allocation (void)
{
{
  if (!link_info.relocatable)
  if (!link_info.relocatable)
    {
    {
      lang_abs_symbol_at_end_of (".text", "_etext");
      lang_abs_symbol_at_end_of (".text", "_etext");
      lang_abs_symbol_at_end_of (".data", "_edata");
      lang_abs_symbol_at_end_of (".data", "_edata");
      lang_abs_symbol_at_beginning_of (".bss", "_bss_start");
      lang_abs_symbol_at_beginning_of (".bss", "_bss_start");
      lang_abs_symbol_at_end_of (".bss", "_end");
      lang_abs_symbol_at_end_of (".bss", "_end");
    }
    }
}
}
static struct
static struct
 {
 {
   unsigned  long number;
   unsigned  long number;
   char *name;
   char *name;
 }
 }
machine_table[] =
machine_table[] =
{
{
  { bfd_mach_i960_core  ,"CORE" },
  { bfd_mach_i960_core  ,"CORE" },
  { bfd_mach_i960_kb_sb ,"KB" },
  { bfd_mach_i960_kb_sb ,"KB" },
  { bfd_mach_i960_kb_sb ,"SB" },
  { bfd_mach_i960_kb_sb ,"SB" },
  { bfd_mach_i960_mc    ,"MC" },
  { bfd_mach_i960_mc    ,"MC" },
  { bfd_mach_i960_xa    ,"XA" },
  { bfd_mach_i960_xa    ,"XA" },
  { bfd_mach_i960_ca    ,"CA" },
  { bfd_mach_i960_ca    ,"CA" },
  { bfd_mach_i960_ka_sa ,"KA" },
  { bfd_mach_i960_ka_sa ,"KA" },
  { bfd_mach_i960_ka_sa ,"SA" },
  { bfd_mach_i960_ka_sa ,"SA" },
  { bfd_mach_i960_jx    ,"JX" },
  { bfd_mach_i960_jx    ,"JX" },
  { bfd_mach_i960_hx    ,"HX" },
  { bfd_mach_i960_hx    ,"HX" },
  { bfd_mach_i960_core  ,"core" },
  { bfd_mach_i960_core  ,"core" },
  { bfd_mach_i960_kb_sb ,"kb" },
  { bfd_mach_i960_kb_sb ,"kb" },
  { bfd_mach_i960_kb_sb ,"sb" },
  { bfd_mach_i960_kb_sb ,"sb" },
  { bfd_mach_i960_mc    ,"mc" },
  { bfd_mach_i960_mc    ,"mc" },
  { bfd_mach_i960_xa    ,"xa" },
  { bfd_mach_i960_xa    ,"xa" },
  { bfd_mach_i960_ca    ,"ca" },
  { bfd_mach_i960_ca    ,"ca" },
  { bfd_mach_i960_ka_sa ,"ka" },
  { bfd_mach_i960_ka_sa ,"ka" },
  { bfd_mach_i960_ka_sa ,"sa" },
  { bfd_mach_i960_ka_sa ,"sa" },
  { bfd_mach_i960_jx    ,"jx" },
  { bfd_mach_i960_jx    ,"jx" },
  { bfd_mach_i960_hx    ,"hx" },
  { bfd_mach_i960_hx    ,"hx" },
  { 0, (char *) NULL }
  { 0, (char *) NULL }
};
};
static void
static void
lnk960_set_output_arch (void)
lnk960_set_output_arch (void)
{
{
  /* Set the output architecture and machine if possible */
  /* Set the output architecture and machine if possible */
  unsigned int i;
  unsigned int i;
  ldfile_output_machine = bfd_mach_i960_core;
  ldfile_output_machine = bfd_mach_i960_core;
  for (i= 0; machine_table[i].name != (char*) NULL; i++)
  for (i= 0; machine_table[i].name != (char*) NULL; i++)
    {
    {
      if (strcmp (ldfile_output_machine_name, machine_table[i].name) == 0)
      if (strcmp (ldfile_output_machine_name, machine_table[i].name) == 0)
        {
        {
          ldfile_output_machine = machine_table[i].number;
          ldfile_output_machine = machine_table[i].number;
          break;
          break;
        }
        }
    }
    }
  bfd_set_arch_mach (link_info.output_bfd, ldfile_output_architecture,
  bfd_set_arch_mach (link_info.output_bfd, ldfile_output_architecture,
                     ldfile_output_machine);
                     ldfile_output_machine);
}
}
static char *
static char *
lnk960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
lnk960_choose_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
{
{
  char *from_outside = getenv (TARGET_ENVIRON);
  char *from_outside = getenv (TARGET_ENVIRON);
  if (from_outside != (char *) NULL)
  if (from_outside != (char *) NULL)
    return from_outside;
    return from_outside;
#ifdef LNK960_LITTLE
#ifdef LNK960_LITTLE
  return "coff-Intel-little";
  return "coff-Intel-little";
#else
#else
  return "coff-Intel-big";
  return "coff-Intel-big";
#endif
#endif
}
}
static char *
static char *
lnk960_get_script (int *isfile)
lnk960_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_lnk960_emulation =
struct ld_emulation_xfer_struct ld_lnk960_emulation =
{
{
  lnk960_before_parse,
  lnk960_before_parse,
  lnk960_syslib,
  lnk960_syslib,
  lnk960_hll,
  lnk960_hll,
  lnk960_after_parse,
  lnk960_after_parse,
  NULL,                 /* after_open */
  NULL,                 /* after_open */
  lnk960_after_allocation,
  lnk960_after_allocation,
  lnk960_set_output_arch,
  lnk960_set_output_arch,
  lnk960_choose_target,
  lnk960_choose_target,
  before_allocation_default,
  before_allocation_default,
  lnk960_get_script,
  lnk960_get_script,
  "lnk960",
  "lnk960",
  "",
  "",
  finish_default,
  finish_default,
  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 */
  NULL, /* add_options */
  NULL, /* add_options */
  NULL, /* handle_option */
  NULL, /* handle_option */
  NULL, /* unrecognized file */
  NULL, /* unrecognized file */
  NULL, /* list options */
  NULL, /* 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.