| Line 1967... | Line 1967... | 
      
        |  
 |  
 | 
      
        | /* Allocate space in .plt, .got and associated reloc sections for
 | /* Allocate space in .plt, .got and associated reloc sections for
 | 
      
        |    dynamic relocs.  */
 |    dynamic relocs.  */
 | 
      
        |  
 |  
 | 
      
        | static bfd_boolean
 | static bfd_boolean
 | 
      
        | allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
 | allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 | 
      
        | {
 | {
 | 
      
        |   struct bfd_link_info *info;
 |   struct bfd_link_info *info;
 | 
      
        |   struct tilepro_elf_link_hash_table *htab;
 |   struct tilepro_elf_link_hash_table *htab;
 | 
      
        |   struct tilepro_elf_link_hash_entry *eh;
 |   struct tilepro_elf_link_hash_entry *eh;
 | 
      
        |   struct tilepro_elf_dyn_relocs *p;
 |   struct tilepro_elf_dyn_relocs *p;
 | 
      
        |  
 |  
 | 
      
        |   if (h->root.type == bfd_link_hash_indirect)
 |   if (h->root.type == bfd_link_hash_indirect)
 | 
      
        |     return TRUE;
 |     return TRUE;
 | 
      
        |  
 |  
 | 
      
        |   if (h->root.type == bfd_link_hash_warning)
 |   | 
      
        |     /* When warning symbols are created, they **replace** the "real"
 |   | 
      
        |        entry in the hash table, thus we never get to see the real
 |   | 
      
        |        symbol in a hash traversal.  So look at it now.  */
 |   | 
      
        |     h = (struct elf_link_hash_entry *) h->root.u.i.link;
 |   | 
      
        |  
 |   | 
      
        |   info = (struct bfd_link_info *) inf;
 |   info = (struct bfd_link_info *) inf;
 | 
      
        |   htab = tilepro_elf_hash_table (info);
 |   htab = tilepro_elf_hash_table (info);
 | 
      
        |   BFD_ASSERT (htab != NULL);
 |   BFD_ASSERT (htab != NULL);
 | 
      
        |  
 |  
 | 
      
        |   if (htab->elf.dynamic_sections_created
 |   if (htab->elf.dynamic_sections_created
 | 
      
        | Line 2168... | Line 2162... | 
      
        | }
 | }
 | 
      
        |  
 |  
 | 
      
        | /* Find any dynamic relocs that apply to read-only sections.  */
 | /* Find any dynamic relocs that apply to read-only sections.  */
 | 
      
        |  
 |  
 | 
      
        | static bfd_boolean
 | static bfd_boolean
 | 
      
        | readonly_dynrelocs (struct elf_link_hash_entry *h, PTR inf)
 | readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
 | 
      
        | {
 | {
 | 
      
        |   struct tilepro_elf_link_hash_entry *eh;
 |   struct tilepro_elf_link_hash_entry *eh;
 | 
      
        |   struct tilepro_elf_dyn_relocs *p;
 |   struct tilepro_elf_dyn_relocs *p;
 | 
      
        |  
 |  
 | 
      
        |   if (h->root.type == bfd_link_hash_warning)
 |   | 
      
        |     h = (struct elf_link_hash_entry *) h->root.u.i.link;
 |   | 
      
        |  
 |   | 
      
        |   eh = (struct tilepro_elf_link_hash_entry *) h;
 |   eh = (struct tilepro_elf_link_hash_entry *) h;
 | 
      
        |   for (p = eh->dyn_relocs; p != NULL; p = p->next)
 |   for (p = eh->dyn_relocs; p != NULL; p = p->next)
 | 
      
        |     {
 |     {
 | 
      
        |       asection *s = p->sec->output_section;
 |       asection *s = p->sec->output_section;
 | 
      
        |  
 |  
 | 
      
        | Line 2311... | Line 2302... | 
      
        |         }
 |         }
 | 
      
        |     }
 |     }
 | 
      
        |  
 |  
 | 
      
        |   /* Allocate global sym .plt and .got entries, and space for global
 |   /* Allocate global sym .plt and .got entries, and space for global
 | 
      
        |      sym dynamic relocs.  */
 |      sym dynamic relocs.  */
 | 
      
        |   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info);
 |   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
 | 
      
        |  
 |  
 | 
      
        |   if (elf_hash_table (info)->dynamic_sections_created)
 |   if (elf_hash_table (info)->dynamic_sections_created)
 | 
      
        |     {
 |     {
 | 
      
        |       /* If the .got section is more than 0x8000 bytes, we add
 |       /* If the .got section is more than 0x8000 bytes, we add
 | 
      
        |          0x8000 to the value of _GLOBAL_OFFSET_TABLE_, so that 16
 |          0x8000 to the value of _GLOBAL_OFFSET_TABLE_, so that 16
 | 
      
        | Line 2434... | Line 2425... | 
      
        |         return FALSE;
 |         return FALSE;
 | 
      
        |  
 |  
 | 
      
        |       /* If any dynamic relocs apply to a read-only section,
 |       /* If any dynamic relocs apply to a read-only section,
 | 
      
        |          then we need a DT_TEXTREL entry.  */
 |          then we need a DT_TEXTREL entry.  */
 | 
      
        |       if ((info->flags & DF_TEXTREL) == 0)
 |       if ((info->flags & DF_TEXTREL) == 0)
 | 
      
        |         elf_link_hash_traverse (&htab->elf, readonly_dynrelocs,
 |         elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
 | 
      
        |                                 (PTR) info);
 |   | 
      
        |  
 |  
 | 
      
        |       if (info->flags & DF_TEXTREL)
 |       if (info->flags & DF_TEXTREL)
 | 
      
        |         {
 |         {
 | 
      
        |           if (!add_dynamic_entry (DT_TEXTREL, 0))
 |           if (!add_dynamic_entry (DT_TEXTREL, 0))
 | 
      
        |             return FALSE;
 |             return FALSE;
 |