X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Flinux.em;h=bbc5946df3c7704291727fb6cf549a848881ffdc;hb=74fffc39827629fb48c9e24a7d12ebbd5693df4b;hp=29f5bd1b55925a4dc7a23c586f3c5d36707863b7;hpb=49bdcdba9f24a9710c7eb2839f09e0c94f08c7be;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em index 29f5bd1b55..bbc5946df3 100644 --- a/ld/emultempl/linux.em +++ b/ld/emultempl/linux.em @@ -1,74 +1,68 @@ # This shell script emits a C file. -*- C -*- # It does some substitutions. -cat >e${EMULATION_NAME}.c < Linux support by Eric Youngdale -This file is part of GLD, the Gnu Linker. + 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 2 of the License, or -(at your option) any later version. + 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. + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + 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. */ #define TARGET_IS_${EMULATION_NAME} -#include "bfd.h" #include "sysdep.h" +#include "bfd.h" #include "bfdlink.h" #include "ld.h" #include "ldmain.h" -#include "ldemul.h" -#include "ldfile.h" #include "ldmisc.h" #include "ldexp.h" #include "ldlang.h" - -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static boolean gld${EMULATION_NAME}_open_dynamic_archive - PARAMS ((const char *, search_dirs_type *, lang_input_statement_type *)); -static void gld${EMULATION_NAME}_find_address_statement - PARAMS ((lang_statement_union_type *)); -static void gld${EMULATION_NAME}_create_output_section_statements - PARAMS ((void)); -static void gld${EMULATION_NAME}_before_allocation PARAMS ((void)); -static char *gld${EMULATION_NAME}_get_script PARAMS ((int *isfile)); +#include "ldfile.h" +#include "ldemul.h" static void -gld${EMULATION_NAME}_before_parse() +gld${EMULATION_NAME}_before_parse (void) { - ldfile_output_architecture = bfd_arch_${ARCH}; - config.dynamic_link = true; - config.has_shared = true; + ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); + input_flags.dynamic = TRUE; + config.has_shared = TRUE; } /* Try to open a dynamic archive. This is where we know that Linux dynamic libraries have an extension of .sa. */ -static boolean -gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) - const char *arch; - search_dirs_type *search; - lang_input_statement_type *entry; +static bfd_boolean +gld${EMULATION_NAME}_open_dynamic_archive + (const char *arch, search_dirs_type *search, lang_input_statement_type *entry) { char *string; - if (! entry->is_archive) - return false; + if (! entry->flags.maybe_archive || entry->flags.full_name_provided) + return FALSE; string = (char *) xmalloc (strlen (search->name) + strlen (entry->filename) @@ -80,12 +74,12 @@ gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) if (! ldfile_try_open_bfd (string, entry)) { free (string); - return false; + return FALSE; } entry->filename = string; - return true; + return TRUE; } /* This is called by the create_output_section_statements routine via @@ -96,8 +90,7 @@ gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) Linux tools. */ static void -gld${EMULATION_NAME}_find_address_statement (s) - lang_statement_union_type *s; +gld${EMULATION_NAME}_find_address_statement (lang_statement_union_type *s) { if (s->header.type == lang_address_statement_enum && strcmp (s->address_statement.section_name, ".text") == 0) @@ -110,7 +103,7 @@ gld${EMULATION_NAME}_find_address_statement (s) /* This is called before opening the input BFD's. */ static void -gld${EMULATION_NAME}_create_output_section_statements () +gld${EMULATION_NAME}_create_output_section_statements (void) { lang_for_each_statement (gld${EMULATION_NAME}_find_address_statement); } @@ -119,60 +112,59 @@ gld${EMULATION_NAME}_create_output_section_statements () sections, but before any sizes or addresses have been set. */ static void -gld${EMULATION_NAME}_before_allocation () +gld${EMULATION_NAME}_before_allocation (void) { - if (link_info.relocateable) + if (link_info.relocatable) return; /* Let the backend work out the sizes of any sections required by dynamic linking. */ - if (! bfd_${EMULATION_NAME}_size_dynamic_sections (output_bfd, &link_info)) + if (! bfd_${EMULATION_NAME}_size_dynamic_sections (link_info.output_bfd, + &link_info)) einfo ("%P%F: failed to set dynamic section sizes: %E\n"); + + before_allocation_default (); } static char * -gld${EMULATION_NAME}_get_script(isfile) - int *isfile; +gld${EMULATION_NAME}_get_script (int *isfile) EOF -if test -n "$COMPILE_IN" +if test x"$COMPILE_IN" = xyes then # Scripts compiled in. # sed commands to quote an ld script as a C string. -sc='s/["\\]/\\&/g -s/$/\\n\\/ -1s/^/"/ -$s/$/n"/ -' - -cat >>e${EMULATION_NAME}.c <> 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 +echo ' ; else if (!config.text_read_only) return' >> 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 +sed $sc ldscripts/${EMULATION_NAME}.xn >> e${EMULATION_NAME}.c +echo ' ; else return' >> e${EMULATION_NAME}.c +sed $sc ldscripts/${EMULATION_NAME}.x >> e${EMULATION_NAME}.c +echo '; }' >> e${EMULATION_NAME}.c else # Scripts read from the filesystem. -cat >>e${EMULATION_NAME}.c <>e${EMULATION_NAME}.c <