m68kcoff.em

来自「基于4个mips核的noc设计」· EM 代码 · 共 246 行

EM
246
字号
# This shell script emits a C file. -*- C -*-# It does some substitutions.cat >e${EMULATION_NAME}.c <<EOF/* This file is is generated by a shell script.  DO NOT EDIT! *//* Handle embedded relocs for m68k.   Copyright 2000 Free Software Foundation, Inc.   Written by Michael Sokolov <msokolov@ivan.Harhan.ORG>, based on generic.em   by Steve Chamberlain <steve@cygnus.com>, embedded relocs code based on   mipsecoff.em by Ian Lance Taylor <ian@cygnus.com>.This file is part of GLD, the Gnu Linker.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */#define TARGET_IS_${EMULATION_NAME}#include "bfd.h"#include "sysdep.h"#include "bfdlink.h"#include "ld.h"#include "ldmain.h"#include "ldfile.h"#include "ldemul.h"#include "ldmisc.h"static void gld${EMULATION_NAME}_before_parse PARAMS ((void));static void gld${EMULATION_NAME}_after_open PARAMS ((void));static void check_sections PARAMS ((bfd *, asection *, PTR));static void gld${EMULATION_NAME}_after_allocation PARAMS ((void));static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile));static voidgld${EMULATION_NAME}_before_parse (){#ifndef TARGET_			/* I.e., if not generic.  */  ldfile_set_output_arch ("`echo ${ARCH}`");#endif /* not TARGET_ */}/* This function is run after all the input files have been opened.   We create a .emreloc section for each input file with a non zero   .data section.  The BFD backend will fill in these sections with   magic numbers which can be used to relocate the data section at run   time.  */static voidgld${EMULATION_NAME}_after_open (){  bfd *abfd;  if (! command_line.embedded_relocs      || link_info.relocateable)    return;  for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)    {      asection *datasec;      /* As first-order business, make sure that each input BFD is COFF. It         better be, as we are directly calling a COFF backend function.  */      if (bfd_get_flavour (abfd) != bfd_target_coff_flavour)	einfo ("%F%B: all input objects must be COFF for --embedded-relocs\n");      datasec = bfd_get_section_by_name (abfd, ".data");      /* Note that we assume that the reloc_count field has already         been set up.  We could call bfd_get_reloc_upper_bound, but         that returns the size of a memory buffer rather than a reloc         count.  We do not want to call bfd_canonicalize_reloc,         because although it would always work it would force us to         read in the relocs into BFD canonical form, which would waste         a significant amount of time and memory.  */      if (datasec != NULL && datasec->reloc_count > 0)	{	  asection *relsec;	  relsec = bfd_make_section (abfd, ".emreloc");	  if (relsec == NULL	      || ! bfd_set_section_flags (abfd, relsec,					  (SEC_ALLOC					   | SEC_LOAD					   | SEC_HAS_CONTENTS					   | SEC_IN_MEMORY))	      || ! bfd_set_section_alignment (abfd, relsec, 2)	      || ! bfd_set_section_size (abfd, relsec,					 datasec->reloc_count * 12))	    einfo ("%F%B: can not create .emreloc section: %E\n");	}      /* Double check that all other data sections are empty, as is         required for embedded PIC code.  */      bfd_map_over_sections (abfd, check_sections, (PTR) datasec);    }}/* Check that of the data sections, only the .data section has   relocs.  This is called via bfd_map_over_sections.  */static voidcheck_sections (abfd, sec, datasec)     bfd *abfd;     asection *sec;     PTR datasec;{  if ((bfd_get_section_flags (abfd, sec) & SEC_DATA)      && sec != (asection *) datasec      && sec->reloc_count != 0)    einfo ("%B%X: section %s has relocs; can not use --embedded-relocs\n",	   abfd, bfd_get_section_name (abfd, sec));}/* This function is called after the section sizes and offsets have   been set.  If we are generating embedded relocs, it calls a special   BFD backend routine to do the work.  */static voidgld${EMULATION_NAME}_after_allocation (){  bfd *abfd;  if (! command_line.embedded_relocs      || link_info.relocateable)    return;  for (abfd = link_info.input_bfds; abfd != NULL; abfd = abfd->link_next)    {      asection *datasec, *relsec;      char *errmsg;      datasec = bfd_get_section_by_name (abfd, ".data");      if (datasec == NULL || datasec->reloc_count == 0)	continue;      relsec = bfd_get_section_by_name (abfd, ".emreloc");      ASSERT (relsec != NULL);      if (! bfd_m68k_coff_create_embedded_relocs (abfd, &link_info,						   datasec, relsec,						   &errmsg))	{	  if (errmsg == NULL)	    einfo ("%B%X: can not create runtime reloc information: %E\n",		   abfd);	  else	    einfo ("%X%B: can not create runtime reloc information: %s\n",		   abfd, errmsg);	}    }}static char *gld${EMULATION_NAME}_get_script(isfile)     int *isfile;EOFif test -n "$COMPILE_IN"then# Scripts compiled in.# sed commands to quote an ld script as a C string.sc="-f stringify.sed"cat >>e${EMULATION_NAME}.c <<EOF{			       *isfile = 0;  if (link_info.relocateable == true && config.build_constructors == true)    returnEOFsed $sc ldscripts/${EMULATION_NAME}.xu                     >> e${EMULATION_NAME}.cecho '  ; else if (link_info.relocateable == true) return' >> e${EMULATION_NAME}.csed $sc ldscripts/${EMULATION_NAME}.xr                     >> e${EMULATION_NAME}.cecho '  ; else if (!config.text_read_only) return'         >> e${EMULATION_NAME}.csed $sc ldscripts/${EMULATION_NAME}.xbn                    >> e${EMULATION_NAME}.cecho '  ; else if (!config.magic_demand_paged) return'     >> e${EMULATION_NAME}.csed $sc ldscripts/${EMULATION_NAME}.xn                     >> e${EMULATION_NAME}.cecho '  ; else return'                                     >> e${EMULATION_NAME}.csed $sc ldscripts/${EMULATION_NAME}.x                      >> e${EMULATION_NAME}.cecho '; }'                                                 >> e${EMULATION_NAME}.celse# Scripts read from the filesystem.cat >>e${EMULATION_NAME}.c <<EOF{			       *isfile = 1;  if (link_info.relocateable == true && config.build_constructors == true)    return "ldscripts/${EMULATION_NAME}.xu";  else if (link_info.relocateable == true)    return "ldscripts/${EMULATION_NAME}.xr";  else if (!config.text_read_only)    return "ldscripts/${EMULATION_NAME}.xbn";  else if (!config.magic_demand_paged)    return "ldscripts/${EMULATION_NAME}.xn";  else    return "ldscripts/${EMULATION_NAME}.x";}EOFficat >>e${EMULATION_NAME}.c <<EOFstruct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = {  gld${EMULATION_NAME}_before_parse,  syslib_default,  hll_default,  after_parse_default,  gld${EMULATION_NAME}_after_open,  gld${EMULATION_NAME}_after_allocation,  set_output_arch_default,  ldemul_default_target,  before_allocation_default,  gld${EMULATION_NAME}_get_script,  "${EMULATION_NAME}",  "${OUTPUT_FORMAT}",  NULL,	/* finish */  NULL,	/* create output section statements */  NULL,	/* open dynamic archive */  NULL,	/* place orphan */  NULL,	/* set symbols */  NULL,	/* parse args */  NULL,	/* unrecognized file */  NULL,	/* list options */  NULL,	/* recognized file */  NULL 	/* find_potential_libraries */};EOF

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?