X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=ld%2Femultempl%2Flinux.em;h=c96574194cae7955144a69d24f6e9876df788025;hb=8fd04a4255376036e85c4e80d430b44ec4b06c64;hp=ce7f3b6f250996c79394e3539d6f4b0040633dae;hpb=1049f94e8e1a9eae86a694d2dca94a6194f763b1;p=deliverable%2Fbinutils-gdb.git diff --git a/ld/emultempl/linux.em b/ld/emultempl/linux.em index ce7f3b6f25..c96574194c 100644 --- a/ld/emultempl/linux.em +++ b/ld/emultempl/linux.em @@ -5,35 +5,35 @@ if [ -z "$MACHINE" ]; then else OUTPUT_ARCH=${ARCH}:${MACHINE} fi -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" @@ -44,44 +44,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "ldfile.h" #include "ldemul.h" -static void gld${EMULATION_NAME}_before_parse PARAMS ((void)); -static bfd_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)); - static void -gld${EMULATION_NAME}_before_parse() +gld${EMULATION_NAME}_before_parse (void) { - const bfd_arch_info_type *arch = bfd_scan_arch ("${OUTPUT_ARCH}"); - if (arch) - { - ldfile_output_architecture = arch->arch; - ldfile_output_machine = arch->mach; - ldfile_output_machine_name = arch->printable_name; - } - else - ldfile_output_architecture = bfd_arch_${ARCH}; - config.dynamic_link = TRUE; + ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); + input_flags.dynamic = TRUE; config.has_shared = TRUE; + link_info.check_relocs_after_open_input = TRUE; + link_info.relro = DEFAULT_LD_Z_RELRO; } /* Try to open a dynamic archive. This is where we know that Linux dynamic libraries have an extension of .sa. */ static bfd_boolean -gld${EMULATION_NAME}_open_dynamic_archive (arch, search, entry) - const char *arch; - search_dirs_type *search; - lang_input_statement_type *entry; +gld${EMULATION_NAME}_open_dynamic_archive + (const char *arch, search_dirs_type *search, lang_input_statement_type *entry) { char *string; - if (! entry->is_archive) + if (! entry->flags.maybe_archive || entry->flags.full_name_provided) return FALSE; string = (char *) xmalloc (strlen (search->name) @@ -110,8 +92,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) @@ -124,7 +105,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); } @@ -133,38 +114,40 @@ 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.relocatable) + if (bfd_link_relocatable (&link_info)) 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)) - einfo ("%P%F: failed to set dynamic section sizes: %E\n"); + if (! bfd_${EMULATION_NAME}_size_dynamic_sections (link_info.output_bfd, + &link_info)) + einfo (_("%F%P: 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="-f stringify.sed" -cat >>e${EMULATION_NAME}.c <> e${EMULATION_NAME}.c -echo ' ; else if (link_info.relocatable) return' >> e${EMULATION_NAME}.c +echo ' ; else if (bfd_link_relocatable (&link_info)) 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 @@ -177,13 +160,13 @@ echo '; }' >> e${EMULATION_NAME}.c else # Scripts read from the filesystem. -cat >>e${EMULATION_NAME}.c <>e${EMULATION_NAME}.c <