bfd/
[deliverable/binutils-gdb.git] / bfd / elfcode.h
index 0c7be886d32f60990aade00bf40bd3a8438abadc..0e22c33c47ab9a16f56a2c7c4352265e78fb30c1 100644 (file)
@@ -1,6 +1,6 @@
 /* ELF executable support for BFD.
    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003 Free Software Foundation, Inc.
+   2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -742,6 +742,10 @@ elf_object_p (bfd *abfd)
          if (shindex == SHN_LORESERVE - 1)
            shindex += SHN_HIRESERVE + 1 - SHN_LORESERVE;
        }
+
+      /* Set up group pointers.  */
+      if (! _bfd_elf_setup_group_pointers (abfd))
+       goto got_wrong_format_error;
     }
 
   /* Let the backend double check the format and override global
@@ -1022,7 +1026,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
          || (elf_tdata (abfd)->dynverref_section != 0
              && elf_tdata (abfd)->verref == NULL))
        {
-         if (! _bfd_elf_slurp_version_tables (abfd))
+         if (!_bfd_elf_slurp_version_tables (abfd, FALSE))
            return -1;
        }
     }
@@ -1082,9 +1086,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
          memcpy (&sym->internal_elf_sym, isym, sizeof (Elf_Internal_Sym));
          sym->symbol.the_bfd = abfd;
 
-         sym->symbol.name = bfd_elf_string_from_elf_section (abfd,
-                                                             hdr->sh_link,
-                                                             isym->st_name);
+         sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym);
 
          sym->symbol.value = isym->st_value;
 
@@ -1154,6 +1156,9 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic)
            case STT_OBJECT:
              sym->symbol.flags |= BSF_OBJECT;
              break;
+           case STT_TLS:
+             sym->symbol.flags |= BSF_THREAD_LOCAL;
+             break;
            }
 
          if (dynamic)
@@ -1210,7 +1215,7 @@ error_return:
   return -1;
 }
 
-/* Read  relocations for ASECT from REL_HDR.  There are RELOC_COUNT of
+/* Read relocations for ASECT from REL_HDR.  There are RELOC_COUNT of
    them.  */
 
 static bfd_boolean
@@ -1286,11 +1291,7 @@ elf_slurp_reloc_table_from_section (bfd *abfd,
          ps = symbols + ELF_R_SYM (rela.r_info) - 1;
          s = *ps;
 
-         /* Canonicalize ELF section symbols.  FIXME: Why?  */
-         if ((s->flags & BSF_SECTION_SYM) == 0)
-           relent->sym_ptr_ptr = ps;
-         else
-           relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
+         relent->sym_ptr_ptr = ps;
        }
 
       relent->addend = rela.r_addend;
@@ -1355,7 +1356,7 @@ elf_slurp_reloc_table (bfd *abfd,
         case because relocations against this section may use the
         dynamic symbol table, and in that case bfd_section_from_shdr
         in elf.c does not update the RELOC_COUNT.  */
-      if (asect->_raw_size == 0)
+      if (asect->size == 0)
        return TRUE;
 
       rel_hdr = &d->this_hdr;
This page took 0.024378 seconds and 4 git commands to generate.