OSDN Git Service

* elf32-sparc.c (elf32_sparc_relocate_section): Don't clear
authorjakub <jakub>
Fri, 23 Nov 2001 13:16:37 +0000 (13:16 +0000)
committerjakub <jakub>
Fri, 23 Nov 2001 13:16:37 +0000 (13:16 +0000)
relocations in non-alloced sections against global symbols
defined in shared library being built.
* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.

bfd/ChangeLog
bfd/elf32-sparc.c
bfd/elf64-sparc.c

index 0b3cd62..a011579 100644 (file)
@@ -1,5 +1,12 @@
 2001-11-23  Jakub Jelinek  <jakub@redhat.com>
 
+       * elf32-sparc.c (elf32_sparc_relocate_section): Don't clear
+       relocations in non-alloced sections against global symbols
+       defined in shared library being built.
+       * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
+
+2001-11-23  Jakub Jelinek  <jakub@redhat.com>
+
        * elf.c (_bfd_elf_rela_local_sym): New.
        * elflink.h (elf_link_input_bfd): Don't consider empty
        merged sections as removed in relocation tests.
index 9458061..60a4dc7 100644 (file)
@@ -1221,7 +1221,15 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section,
                          || ((r_type == R_SPARC_PC10
                               || r_type == R_SPARC_PC22)
                              && strcmp (h->root.root.string,
-                                        "_GLOBAL_OFFSET_TABLE_") != 0))))
+                                        "_GLOBAL_OFFSET_TABLE_") != 0))
+                     && ((input_section->flags & SEC_ALLOC) != 0
+                         /* DWARF will emit R_SPARC_32 relocations in its
+                            sections against symbols defined externally
+                            in shared libraries.  We can't do anything
+                            with them here.  */
+                         || ((input_section->flags & SEC_DEBUGGING) != 0
+                             && (h->elf_link_hash_flags
+                                 & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
                {
                  /* In these cases, we don't need the relocation
                      value.  We check specially because in some
index 6af2b15..9a91816 100644 (file)
@@ -2053,7 +2053,15 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                  if (info->shared
                      && ((!info->symbolic && h->dynindx != -1)
                          || !(h->elf_link_hash_flags
-                              & ELF_LINK_HASH_DEF_REGULAR)))
+                              & ELF_LINK_HASH_DEF_REGULAR))
+                     && ((input_section->flags & SEC_ALLOC) != 0
+                         /* DWARF will emit R_SPARC_{32,64} relocations in
+                            its sections against symbols defined externally
+                            in shared libraries.  We can't do anything
+                            with them here.  */
+                         || ((input_section->flags & SEC_DEBUGGING) != 0
+                             && (h->elf_link_hash_flags
+                                 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)))
                    skip_it = true;
                  break;
                }