bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bug in ld 2.11.90.0.29


From: Alan Modra
Subject: Re: Bug in ld 2.11.90.0.29
Date: Sat, 8 Sep 2001 15:16:07 +0930
User-agent: Mutt/1.3.17i

Fixes an error in my 2001-06-27 change to avoid COPY relocs.  The bug
manifests itself as an abort in relocate_section when linking oracle.

        * elf32-i386.c (elf_i386_relocate_section): Check !DEF_REGULAR
        as well as DEF_DYNAMIC in test for avoided copy relocs.
        (allocate_plt_and_got_and_discard_relocs): Likewise.
        * elf32-i386.c (elf_i386_relocate_section): Likewise.
        (allocate_plt_and_got_and_discard_relocs): Likewise.

-- 
Alan Modra

Index: bfd/elf32-i386.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-i386.c,v
retrieving revision 1.41
diff -u -p -r1.41 elf32-i386.c
--- elf32-i386.c        2001/08/27 18:04:37     1.41
+++ elf32-i386.c        2001/09/08 05:20:59
@@ -1213,7 +1213,8 @@ allocate_plt_and_got_and_discard_relocs 
 
   if (!info->shared
       && (h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
-      && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+      && (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+          && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
          || (htab->root.dynamic_sections_created
              && (h->root.type == bfd_link_hash_undefweak
                  || h->root.type == bfd_link_hash_undefined))))
@@ -1707,8 +1708,10 @@ elf_i386_relocate_section (output_bfd, i
                  && h != NULL
                  && h->dynindx != -1
                  && (h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
-                 && ((h->elf_link_hash_flags
-                      & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+                 && (((h->elf_link_hash_flags
+                       & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+                      && (h->elf_link_hash_flags
+                          & ELF_LINK_HASH_DEF_REGULAR) == 0)
                      || h->root.type == bfd_link_hash_undefweak
                      || h->root.type == bfd_link_hash_undefined)))
            {
Index: bfd/elf32-hppa.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-hppa.c,v
retrieving revision 1.42
diff -u -p -r1.42 elf32-hppa.c
--- elf32-hppa.c        2001/08/03 05:10:39     1.42
+++ elf32-hppa.c        2001/09/08 05:21:02
@@ -2140,7 +2140,8 @@ allocate_plt_and_got_and_discard_relocs 
   /* First handle the non-shared case.  */
   if (!info->shared
       && (h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
-      && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+      && (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+          && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
          || (hplink->root.dynamic_sections_created
              && (h->root.type == bfd_link_hash_undefweak
                  || h->root.type == bfd_link_hash_undefined))))
@@ -3899,11 +3900,11 @@ elf32_hppa_relocate_section (output_bfd,
             (dynindx test in this case) to cater for relocs removed
             by hppa_discard_copies.  If you squint, the non-shared
             test here does indeed match the one in check_relocs, the
-            difference being that here we test DEF_DYNAMIC rather
-            than a maybe-DEF_DYNAMIC via !DEF_REGULAR.  Common syms
-            end up with !DEF_REGULAR, which is why we can't use that
-            here.  Conversely, DEF_DYNAMIC can't be used in
-            check_relocs as there all files have not been loaded.  */
+            difference being that here we test DEF_DYNAMIC as well as
+            !DEF_REGULAR.  All common syms end up with !DEF_REGULAR,
+            which is why we can't use just that test here.
+            Conversely, DEF_DYNAMIC can't be used in check_relocs as
+            there all files have not been loaded.  */
          if ((info->shared
               && (input_section->flags & SEC_ALLOC) != 0
               && (IS_ABSOLUTE_RELOC (r_type)
@@ -3917,8 +3918,10 @@ elf32_hppa_relocate_section (output_bfd,
                  && h != NULL
                  && h->elf.dynindx != -1
                  && (h->elf.elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
-                 && ((h->elf.elf_link_hash_flags
-                      & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+                 && (((h->elf.elf_link_hash_flags
+                       & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+                      && (h->elf.elf_link_hash_flags
+                          & ELF_LINK_HASH_DEF_REGULAR) == 0)
                      || h->elf.root.type == bfd_link_hash_undefweak
                      || h->elf.root.type == bfd_link_hash_undefined)))
            {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]