PR 423
authorAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2004 02:40:47 +0000 (02:40 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2004 02:40:47 +0000 (02:40 +0000)
* ldfile.c (ldfile_try_open_bfd): Ensure dynamic objects are
rejected when linking statically.

ld/ChangeLog
ld/ldfile.c

index ce025828ce69554c443b7e241d99f6175368c14a..1f805b3d771ea25acb5905796b4a21e2a49d24dc 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-11  Alan Modra  <amodra@bigpond.net.au>
+
+       PR 423
+       * ldfile.c (ldfile_try_open_bfd): Ensure dynamic objects are
+       rejected when linking statically.
+
 2004-10-08  Daniel Jacobowitz  <dan@debian.org>
 
        * configure.tgt: Include elf_x86_64 for i[3-7]86-*-solaris2*.
@@ -24,7 +30,7 @@
        * Makefile.in: Regenerate.
 
 2004-10-07  Jeff Baker  <jbaker@qnx.com>
-       
+
        * lexsup.c: Handle --warn-shared-textrel option.
        (ld_options): Restore alpha sorting of options.
        * ldmain.c (main): Initialise warn_shared_info field to FALSE.
@@ -32,9 +38,9 @@
        * NEWS: Added mention of --warn-shared-textrel option.
 
 2004-10-05  Tomer Levi  <Tomer.Levi@nsc.com>
+
        * emultempl/crxelf.em (disable_relaxation): Add.
-       (crxelf_before_allocation): Enable --relax option by default.
+       (crxelf_before_allocation): Enable --relax option by default.
        (PARSE_AND_LIST_PROLOGUE): Add OPTION_NO_RELAX.
        (PARSE_AND_LIST_LONGOPTS, PARSE_AND_LIST_OPTIONS): Add --no-relax.
        (PARSE_AND_LIST_ARGS_CASES): Handle OPTION_NO_RELAX.
index e7a7d8cec053c67db18ce5557705a9683dc6161c..25d53e0358bcb76f059ab3d123ffd4ffee41583a 100644 (file)
@@ -151,9 +151,10 @@ ldfile_try_open_bfd (const char *attempt,
   /* If we are searching for this file, see if the architecture is
      compatible with the output file.  If it isn't, keep searching.
      If we can't open the file as an object file, stop the search
-     here.  */
+     here.  If we are statically linking, ensure that we don't link
+     a dynamic object.  */
 
-  if (entry->search_dirs_flag)
+  if (entry->search_dirs_flag || !entry->dynamic)
     {
       bfd *check;
 
@@ -167,6 +168,7 @@ ldfile_try_open_bfd (const char *attempt,
          if (! bfd_check_format (check, bfd_object))
            {
              if (check == entry->the_bfd
+                 && entry->search_dirs_flag
                  && bfd_get_error () == bfd_error_file_not_recognized
                  && ! ldemul_unrecognized_file (entry))
                {
@@ -260,8 +262,18 @@ ldfile_try_open_bfd (const char *attempt,
              return TRUE;
            }
 
-         if ((bfd_arch_get_compatible (check, output_bfd,
-                                       command_line.accept_unknown_input_arch) == NULL)
+         if (!entry->dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
+           {
+             einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
+                    attempt);
+             bfd_close (entry->the_bfd);
+             entry->the_bfd = NULL;
+             return FALSE;
+           }
+
+         if (entry->search_dirs_flag
+             && !bfd_arch_get_compatible (check, output_bfd,
+                                          command_line.accept_unknown_input_arch)
              /* XCOFF archives can have 32 and 64 bit objects.  */
              && ! (bfd_get_flavour (check) == bfd_target_xcoff_flavour
                    && bfd_get_flavour (output_bfd) == bfd_target_xcoff_flavour