* elf32-sh.c (tpoff): New.
authorKaz Kojima <kkojima@rr.iij4u.or.jp>
Thu, 24 Apr 2003 05:19:09 +0000 (05:19 +0000)
committerKaz Kojima <kkojima@rr.iij4u.or.jp>
Thu, 24 Apr 2003 05:19:09 +0000 (05:19 +0000)
(struct elf_sh_dyn_relocs): Remove tls_tpoff32.
(WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
        (allocate_dynrelocs): Don't make unnecessary dynamic TLS
relocations.  Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses.
        (sh_elf_relocate_section): Likewise. Remove unnecessary tests.
(dtpoff_base): Fix wrong indentation.
(sh_elf_check_relocs): Don't set DF_STATIC_TLS flag with non-TLS
relocations.  Don't set tls_tpoff32 flag.  Don't make unnecessary
R_SH_TLS_TPOFF32 relocations.

* ld-sh/tlsbin-1.d, ld-sh/tlsbin-2.d, ld-sh/tlsbin-3.d,
ld-sh/tlstpoff-1.d, ld-sh/tlstpoff-2.d: Update for removing
unnecessary TLS relocs.

bfd/ChangeLog
bfd/elf32-sh.c
ld/testsuite/ChangeLog
ld/testsuite/ld-sh/tlsbin-1.d
ld/testsuite/ld-sh/tlsbin-2.d
ld/testsuite/ld-sh/tlsbin-3.d
ld/testsuite/ld-sh/tlstpoff-1.d
ld/testsuite/ld-sh/tlstpoff-2.d

index e701854..6b83979 100644 (file)
@@ -1,3 +1,16 @@
+2003-04-23  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * elf32-sh.c (tpoff): New.
+       (struct elf_sh_dyn_relocs): Remove tls_tpoff32.
+       (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
+        (allocate_dynrelocs): Don't make unnecessary dynamic TLS
+       relocations.  Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses.
+        (sh_elf_relocate_section): Likewise. Remove unnecessary tests.
+       (dtpoff_base): Fix wrong indentation.
+       (sh_elf_check_relocs): Don't set DF_STATIC_TLS flag with non-TLS
+       relocations.  Don't set tls_tpoff32 flag.  Don't make unnecessary
+       R_SH_TLS_TPOFF32 relocations.
+
 2003-04-23  J"orn Rennecke <joern.rennecke@superh.com>
 
        * archures.c (enum bfd_architecture): Amend comment to refer to SuperH.
index 789ee78..35a4dda 100644 (file)
@@ -90,6 +90,8 @@ static bfd_boolean sh_elf_create_dynamic_sections
   PARAMS ((bfd *, struct bfd_link_info *));
 static bfd_vma dtpoff_base
   PARAMS ((struct bfd_link_info *));
+static bfd_vma tpoff
+  PARAMS ((struct bfd_link_info *, bfd_vma));
 static asection * sh_elf_gc_mark_hook
   PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
           struct elf_link_hash_entry *, Elf_Internal_Sym *));
@@ -3525,9 +3527,6 @@ struct elf_sh_dyn_relocs
 
   /* Number of pc-relative relocs copied for the input section.  */
   bfd_size_type pc_count;
-
-  /* If TRUE, R_SH_TLS_TPOFF32 relocation is generated.  */
-  bfd_boolean tls_tpoff32;
 };
 
 /* sh ELF linker hash entry.  */
@@ -4039,9 +4038,9 @@ sh_elf_adjust_dynamic_symbol (info, h)
    will be called from elflink.h.  If elflink.h doesn't call our
    finish_dynamic_symbol routine, we'll need to do something about
    initializing any .plt and .got entries in sh_elf_relocate_section.  */
-#define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, INFO, H) \
+#define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, SHARED, H) \
   ((DYN)                                                               \
-   && ((INFO)->shared                                                  \
+   && ((SHARED)                                                                \
        || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)     \
    && ((H)->dynindx != -1                                              \
        || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0))
@@ -4095,7 +4094,8 @@ allocate_dynrelocs (h, inf)
            return FALSE;
        }
 
-      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
+      if (info->shared
+         || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
        {
          asection *s = htab->splt;
 
@@ -4162,14 +4162,15 @@ allocate_dynrelocs (h, inf)
       if (tls_type == GOT_TLS_GD)
        s->_raw_size += 4;
       dyn = htab->root.dynamic_sections_created;
-      /* R_SH_TLS_IE_32 needs one dynamic relocation,
+      /* R_SH_TLS_IE_32 needs one dynamic relocation if dynamic,
         R_SH_TLS_GD needs one if local symbol and two if global.  */
       if ((tls_type == GOT_TLS_GD && h->dynindx == -1)
-         || tls_type == GOT_TLS_IE)
+         || (tls_type == GOT_TLS_IE && dyn))
        htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
       else if (tls_type == GOT_TLS_GD)
        htab->srelgot->_raw_size += 2 * sizeof (Elf32_External_Rela);
-      else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
+      else if (info->shared ||
+              WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
        htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
     }
   else
@@ -4194,7 +4195,7 @@ allocate_dynrelocs (h, inf)
       eh->datalabel_got.offset = s->_raw_size;
       s->_raw_size += 4;
       dyn = htab->root.dynamic_sections_created;
-      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
+      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h))
        htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
     }
   else
@@ -4231,10 +4232,6 @@ allocate_dynrelocs (h, inf)
     }
   else
     {
-      for (p = eh->dyn_relocs; p; p = p->next)
-       if (p->tls_tpoff32)
-         goto keep;
-
       /* For the non-shared case, discard space for relocs against
         symbols which turn out to need copy relocs or are not
         dynamic.  */
@@ -4752,7 +4749,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                       || r_type == R_SH_GOT_MEDLOW16
                       || r_type == R_SH_GOT_MEDHI16
                       || r_type == R_SH_GOT_HI16)
-                     && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+                     && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
                      && (! info->shared
                          || (! info->symbolic && h->dynindx != -1)
                          || (h->elf_link_hash_flags
@@ -5052,7 +5049,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              BFD_ASSERT (off != (bfd_vma) -1);
 
              dyn = htab->root.dynamic_sections_created;
-             if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+             if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
                  || (info->shared
                      && (info->symbolic || h->dynindx == -1
                          || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
@@ -5280,17 +5277,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              if (! info->shared
                  && (h->dynindx == -1
                      || (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
-               {
-                 struct elf_sh_dyn_relocs *p;
-
-                 /* If TPOFF32 relocation can be created, convert it.  */
-                 for (p = sh_elf_hash_entry (h)->dyn_relocs; p; p = p->next)
-                   if (p->sec == input_section && p->tls_tpoff32)
-                     {
-                       r_type = R_SH_TLS_LE_32;
-                       break;
-                     }
-               }
+               r_type = R_SH_TLS_LE_32;
            }
 
          if (r_type == R_SH_TLS_GD_32 && tls_type == GOT_TLS_IE)
@@ -5300,9 +5287,6 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
            {
              bfd_vma offset;
              unsigned short insn;
-             int indx;
-             Elf_Internal_Rela outrel;
-             bfd_byte *loc;
 
              if (ELF32_R_TYPE (rel->r_info) == R_SH_TLS_GD_32)
                {
@@ -5379,45 +5363,8 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                  bfd_put_16 (output_bfd, 0x0009, contents + offset + 4);
                }
 
-             if (sreloc == NULL)
-               {
-                 const char *name;
-
-                 name = (bfd_elf_string_from_elf_section
-                         (input_bfd,
-                          elf_elfheader (input_bfd)->e_shstrndx,
-                          elf_section_data (input_section)->rel_hdr.sh_name));
-                 if (name == NULL)
-                   return FALSE;
-
-                 BFD_ASSERT (strncmp (name, ".rela", 5) == 0
-                             && strcmp (bfd_get_section_name (input_bfd,
-                                                              input_section),
-                                        name + 5) == 0);
-
-                 sreloc = bfd_get_section_by_name (dynobj, name);
-                 BFD_ASSERT (sreloc != NULL);
-               }
-
-             if (h == NULL
-                 || h->dynindx == -1
-                 || (! info->shared
-                     && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
-               indx = 0;
-             else
-               indx = h->dynindx;
-             outrel.r_offset = (input_section->output_section->vma
-                                + input_section->output_offset
-                                + rel->r_offset);
-             outrel.r_info = ELF32_R_INFO (indx, R_SH_TLS_TPOFF32);
-             if (indx == 0)
-               outrel.r_addend = relocation - dtpoff_base (info);
-             else
-               outrel.r_addend = 0;
-
-             loc = sreloc->contents;
-             loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
-             bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
+             bfd_put_32 (output_bfd, tpoff (info, relocation),
+                         contents + rel->r_offset);
              continue;
            }
 
@@ -5435,6 +5382,18 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              off = local_got_offsets[r_symndx];
            }
 
+         /* Relocate R_SH_TLS_IE_32 directly when statically linking.  */
+         if (r_type == R_SH_TLS_IE_32
+             && ! htab->root.dynamic_sections_created)
+           {
+             off &= ~1;
+             bfd_put_32 (output_bfd, tpoff (info, relocation),
+                         sgot->contents + off);
+             bfd_put_32 (output_bfd, sgot->output_offset + off,
+                         contents + rel->r_offset);
+             continue;
+           }
+
          if ((off & 1) != 0)
            off &= ~1;
          else
@@ -5452,13 +5411,11 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
              outrel.r_offset = (sgot->output_section->vma
                                 + sgot->output_offset + off);
 
-             if (h == NULL
-                 || h->dynindx == -1
-                 || (! info->shared
-                     && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+             if (h == NULL || h->dynindx == -1)
                indx = 0;
              else
                indx = h->dynindx;
+
              dr_type = (r_type == R_SH_TLS_GD_32 ? R_SH_TLS_DTPMOD32 :
                         R_SH_TLS_TPOFF32);
              if (dr_type == R_SH_TLS_TPOFF32 && indx == 0)
@@ -5640,46 +5597,7 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 
        case R_SH_TLS_LDO_32:
          if (! info->shared)
-           {
-             int indx;
-             Elf_Internal_Rela outrel;
-             bfd_byte *loc;
-
-             if (sreloc == NULL)
-               {
-                 const char *name;
-
-                 name = (bfd_elf_string_from_elf_section
-                         (input_bfd,
-                          elf_elfheader (input_bfd)->e_shstrndx,
-                          elf_section_data (input_section)->rel_hdr.sh_name));
-                 if (name == NULL)
-                   return FALSE;
-
-                 BFD_ASSERT (strncmp (name, ".rela", 5) == 0
-                             && strcmp (bfd_get_section_name (input_bfd,
-                                                              input_section),
-                                        name + 5) == 0);
-
-                 sreloc = bfd_get_section_by_name (dynobj, name);
-                 BFD_ASSERT (sreloc != NULL);
-               }
-
-             indx = (h && h->dynindx != -1) ? h->dynindx : 0;
-             outrel.r_offset = (input_section->output_section->vma
-                                + input_section->output_offset
-                                + rel->r_offset);
-             outrel.r_info = ELF32_R_INFO (indx, R_SH_TLS_TPOFF32);
-             if (indx == 0)
-               outrel.r_addend = relocation - dtpoff_base (info);
-             else
-               outrel.r_addend = 0;
-
-             loc = sreloc->contents;
-             loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
-             bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
-             continue;
-           }
+           relocation = tpoff (info, relocation);
          else
            relocation -= dtpoff_base (info);
 
@@ -5692,6 +5610,13 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
            Elf_Internal_Rela outrel;
            bfd_byte *loc;
 
+           if (! info->shared)
+             {
+               relocation = tpoff (info, relocation);
+               addend = rel->r_addend;
+               goto final_link_relocate;
+             }
+
            if (sreloc == NULL)
              {
                const char *name;
@@ -5712,7 +5637,11 @@ sh_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                BFD_ASSERT (sreloc != NULL);
              }
 
-           indx = (h && h->dynindx != -1) ? h->dynindx : 0;
+           if (h == NULL || h->dynindx == -1)
+             indx = 0;
+           else
+             indx = h->dynindx;
+
            outrel.r_offset = (input_section->output_section->vma
                               + input_section->output_offset
                               + rel->r_offset);
@@ -5882,12 +5811,27 @@ static bfd_vma
 dtpoff_base (info)
      struct bfd_link_info *info;
 {
- /* If tls_segment is NULL, we should have signalled an error already.  */
- if (elf_hash_table (info)->tls_segment == NULL)
-   return 0;
 /* If tls_segment is NULL, we should have signalled an error already.  */
 if (elf_hash_table (info)->tls_segment == NULL)
+    return 0;
   return elf_hash_table (info)->tls_segment->start;
 }
 
+/* Return the relocation value for R_SH_TLS_TPOFF32..  */
+
+static bfd_vma
+tpoff (info, address)
+     struct bfd_link_info *info;
+     bfd_vma address;
+{
+  /* If tls_segment is NULL, we should have signalled an error already.  */
+  if (elf_hash_table (info)->tls_segment == NULL)
+    return 0;
+  /* SH TLS ABI is variant I and static TLS block start just after tcbhead
+     structure which has 2 pointer fields.  */
+  return (address - dtpoff_base (info) + 8);
+}
+
 static asection *
 sh_elf_gc_mark_hook (sec, info, rel, h, sym)
      asection *sec;
@@ -6349,12 +6293,12 @@ sh_elf_check_relocs (abfd, info, sec, relocs)
            return FALSE;
          break;
 
-       force_got:
        case R_SH_TLS_IE_32:
          if (info->shared)
            info->flags |= DF_STATIC_TLS;
 
          /* FALLTHROUGH */
+       force_got:
        case R_SH_TLS_GD_32:
        case R_SH_GOT32:
 #ifdef INCLUDE_SHMEDIA
@@ -6633,7 +6577,6 @@ sh_elf_check_relocs (abfd, info, sec, relocs)
                  p->sec = sec;
                  p->count = 0;
                  p->pc_count = 0;
-                 p->tls_tpoff32 = FALSE;
                }
 
              p->count += 1;
@@ -6651,92 +6594,10 @@ sh_elf_check_relocs (abfd, info, sec, relocs)
              return FALSE;
            }
 
-         if (ELF32_R_TYPE (rel->r_info) == R_SH_TLS_LD_32)
-           break;
+         break;
 
-         /* FALLTHROUGH */
        case R_SH_TLS_LDO_32:
-         /* We make a R_SH_TLS_TPOFF32 relocation. Count it as a
-            copy relocation.  */
-         if (! info->shared)
-           {
-             struct elf_sh_dyn_relocs *p;
-             struct elf_sh_dyn_relocs **head;
-
-             if (dynobj == NULL)
-               htab->root.dynobj = dynobj = abfd;
-
-             if (sreloc == NULL)
-               {
-                 const char *name;
-
-                 name = (bfd_elf_string_from_elf_section
-                         (abfd,
-                          elf_elfheader (abfd)->e_shstrndx,
-                          elf_section_data (sec)->rel_hdr.sh_name));
-                 if (name == NULL)
-                   return FALSE;
-
-                 BFD_ASSERT (strncmp (name, ".rela", 5) == 0
-                             && strcmp (bfd_get_section_name (abfd, sec),
-                                        name + 5) == 0);
-
-                 sreloc = bfd_get_section_by_name (dynobj, name);
-                 if (sreloc == NULL)
-                   {
-                     flagword flags;
-
-                     sreloc = bfd_make_section (dynobj, name);
-                     flags = (SEC_HAS_CONTENTS | SEC_READONLY
-                              | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-                     if ((sec->flags & SEC_ALLOC) != 0)
-                       flags |= SEC_ALLOC | SEC_LOAD;
-                     if (sreloc == NULL
-                         || ! bfd_set_section_flags (dynobj, sreloc, flags)
-                         || ! bfd_set_section_alignment (dynobj, sreloc, 2))
-                       return FALSE;
-                   }
-                 elf_section_data (sec)->sreloc = sreloc;
-                 if (sec->flags & SEC_READONLY)
-                   info->flags |= DF_TEXTREL;
-               }
-
-             /* If this is a global symbol, we count the number of
-                relocations we need for this symbol.  */
-             if (h != NULL)
-               head = &((struct elf_sh_link_hash_entry *) h)->dyn_relocs;
-             else
-               {
-                 asection *s;
-
-                 /* Track dynamic relocs needed for local syms too.  */
-                 s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
-                                                sec, r_symndx);
-                 if (s == NULL)
-                   return FALSE;
-
-                 head = ((struct elf_sh_dyn_relocs **)
-                         &elf_section_data (s)->local_dynrel);
-               }
-
-             p = *head;
-             if (p == NULL || p->sec != sec)
-               {
-                 bfd_size_type amt = sizeof (*p);
-                 p = ((struct elf_sh_dyn_relocs *) bfd_alloc (dynobj, amt));
-                 if (p == NULL)
-                   return FALSE;
-                 p->next = *head;
-                 *head = p;
-                 p->sec = sec;
-                 p->count = 0;
-                 p->pc_count = 0;
-                 p->tls_tpoff32 = FALSE;
-               }
-
-             p->count += 1;
-             p->tls_tpoff32 = TRUE;
-           }
+         /* Nothing to do.  */
          break;
 
        default:
index 8d2c9de..b7438ef 100644 (file)
@@ -1,3 +1,9 @@
+2003-04-23  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * ld-sh/tlsbin-1.d, ld-sh/tlsbin-2.d, ld-sh/tlsbin-3.d,
+       ld-sh/tlstpoff-1.d, ld-sh/tlstpoff-2.d: Update for removing
+       unnecessary TLS relocs.
+
 2003-04-23  J"orn Rennecke <joern.rennecke@superh.com>
 
        * ld-sh/sh64/crange3-cmpct.rd (Machine): Change to refer to SuperH.
index 58acf5c..9f6d84f 100644 (file)
@@ -54,7 +54,7 @@ Disassembly of section \.text:
   401052:      09 00           nop     
   401054:      09 00           nop     
   401056:      09 00           nop     
-  401058:      03 d4           mov\.l  401068 <fn2\+0x68>,r4   ! 0x0
+  401058:      03 d4           mov\.l  401068 <fn2\+0x68>,r4   ! 0x8
   40105a:      12 00           stc     gbr,r0
   40105c:      4c 30           add     r4,r0
   40105e:      09 00           nop     
@@ -62,7 +62,7 @@ Disassembly of section \.text:
   401062:      09 00           nop     
   401064:      04 a0           bra     401070 <fn2\+0x70>
   401066:      09 00           nop     
-  401068:      00 00           .*[     ]*.*
+  401068:      08 00           .*[     ]*.*
   40106a:      00 00           .*[     ]*.*
   40106c:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   40106e:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
@@ -70,7 +70,7 @@ Disassembly of section \.text:
   401072:      09 00           nop     
   401074:      09 00           nop     
   401076:      09 00           nop     
-  401078:      03 d4           mov\.l  401088 <fn2\+0x88>,r4   ! 0x0
+  401078:      03 d4           mov\.l  401088 <fn2\+0x88>,r4   ! 0x10
   40107a:      12 00           stc     gbr,r0
   40107c:      4c 30           add     r4,r0
   40107e:      09 00           nop     
@@ -78,7 +78,7 @@ Disassembly of section \.text:
   401082:      09 00           nop     
   401084:      04 a0           bra     401090 <fn2\+0x90>
   401086:      09 00           nop     
-  401088:      00 00           .*[     ]*.*
+  401088:      10 00           .*[     ]*.*
   40108a:      00 00           .*[     ]*.*
   40108c:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   40108e:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
@@ -86,7 +86,7 @@ Disassembly of section \.text:
   401092:      09 00           nop     
   401094:      09 00           nop     
   401096:      09 00           nop     
-  401098:      03 d4           mov\.l  4010a8 <fn2\+0xa8>,r4   ! 0x0
+  401098:      03 d4           mov\.l  4010a8 <fn2\+0xa8>,r4   ! 0x18
   40109a:      12 00           stc     gbr,r0
   40109c:      4c 30           add     r4,r0
   40109e:      09 00           nop     
@@ -94,7 +94,7 @@ Disassembly of section \.text:
   4010a2:      09 00           nop     
   4010a4:      04 a0           bra     4010b0 <fn2\+0xb0>
   4010a6:      09 00           nop     
-  4010a8:      00 00           .*[     ]*.*
+  4010a8:      18 00           .*[     ]*.*
   4010aa:      00 00           .*[     ]*.*
   4010ac:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   4010ae:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
@@ -116,11 +116,11 @@ Disassembly of section \.text:
   4010ce:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   4010d0:      09 00           nop     
   4010d2:      09 00           nop     
-  4010d4:      2c d1           mov\.l  401188 <fn2\+0x188>,r1  ! 0x0
+  4010d4:      2c d1           mov\.l  401188 <fn2\+0x188>,r1  ! 0x10
   4010d6:      0c 31           add     r0,r1
   4010d8:      09 00           nop     
   4010da:      09 00           nop     
-  4010dc:      2b d2           mov\.l  40118c <fn2\+0x18c>,r2  ! 0x0
+  4010dc:      2b d2           mov\.l  40118c <fn2\+0x18c>,r2  ! 0x14
   4010de:      0c 32           add     r0,r2
   4010e0:      09 00           nop     
   4010e2:      09 00           nop     
@@ -140,11 +140,11 @@ Disassembly of section \.text:
   4010fe:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   401100:      09 00           nop     
   401102:      09 00           nop     
-  401104:      22 d1           mov\.l  401190 <fn2\+0x190>,r1  ! 0x0
+  401104:      22 d1           mov\.l  401190 <fn2\+0x190>,r1  ! 0x18
   401106:      0c 31           add     r0,r1
   401108:      09 00           nop     
   40110a:      09 00           nop     
-  40110c:      21 d2           mov\.l  401194 <fn2\+0x194>,r2  ! 0x0
+  40110c:      21 d2           mov\.l  401194 <fn2\+0x194>,r2  ! 0x1c
   40110e:      0c 32           add     r0,r2
   401110:      09 00           nop     
   401112:      09 00           nop     
@@ -174,25 +174,25 @@ Disassembly of section \.text:
   401142:      09 00           nop     
   401144:      09 00           nop     
   401146:      09 00           nop     
-  401148:      02 d0           mov\.l  401154 <fn2\+0x154>,r0  ! 0x0
+  401148:      02 d0           mov\.l  401154 <fn2\+0x154>,r0  ! 0x8
   40114a:      12 01           stc     gbr,r1
   40114c:      09 00           nop     
   40114e:      03 a0           bra     401158 <fn2\+0x158>
   401150:      0c 31           add     r0,r1
   401152:      09 00           nop     
-  401154:      00 00           .*[     ]*.*
+  401154:      08 00           .*[     ]*.*
   401156:      00 00           .*[     ]*.*
   401158:      09 00           nop     
   40115a:      09 00           nop     
   40115c:      09 00           nop     
   40115e:      09 00           nop     
-  401160:      02 d0           mov\.l  40116c <fn2\+0x16c>,r0  ! 0x0
+  401160:      02 d0           mov\.l  40116c <fn2\+0x16c>,r0  ! 0x18
   401162:      12 01           stc     gbr,r1
   401164:      09 00           nop     
   401166:      03 a0           bra     401170 <fn2\+0x170>
   401168:      0c 31           add     r0,r1
   40116a:      09 00           nop     
-  40116c:      00 00           .*[     ]*.*
+  40116c:      18 00           .*[     ]*.*
   40116e:      00 00           .*[     ]*.*
   401170:      09 00           nop     
   401172:      09 00           nop     
@@ -206,6 +206,13 @@ Disassembly of section \.text:
   401182:      09 00           nop     
   401184:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   401186:      01 00           .*[     ]*.*
+  401188:      10 00           .*[     ]*.*
+  40118a:      00 00           .*[     ]*.*
+  40118c:      14 00           .*[     ]*.*
+  40118e:      00 00           .*[     ]*.*
+  401190:      18 00           .*[     ]*.*
+  401192:      00 00           .*[     ]*.*
+  401194:      1c 00           .*[     ]*.*
        \.\.\.
 
 00402000 <_start>:
@@ -231,58 +238,58 @@ Disassembly of section \.text:
   402026:      09 00           nop     
   402028:      09 00           nop     
   40202a:      09 00           nop     
-  40202c:      02 d0           mov\.l  402038 <_start\+0x38>,r0        ! 0x0
+  40202c:      02 d0           mov\.l  402038 <_start\+0x38>,r0        ! 0x20
   40202e:      12 01           stc     gbr,r1
   402030:      09 00           nop     
   402032:      03 a0           bra     40203c <_start\+0x3c>
   402034:      0c 31           add     r0,r1
   402036:      09 00           nop     
-  402038:      00 00           .*[     ]*.*
+  402038:      20 00           .*[     ]*.*
   40203a:      00 00           .*[     ]*.*
   40203c:      09 00           nop     
   40203e:      09 00           nop     
   402040:      09 00           nop     
   402042:      09 00           nop     
-  402044:      02 d0           mov\.l  402050 <_start\+0x50>,r0        ! 0x0
+  402044:      02 d0           mov\.l  402050 <_start\+0x50>,r0        ! 0x2c
   402046:      12 01           stc     gbr,r1
   402048:      09 00           nop     
   40204a:      03 a0           bra     402054 <_start\+0x54>
   40204c:      0c 31           add     r0,r1
   40204e:      09 00           nop     
-  402050:      00 00           .*[     ]*.*
+  402050:      2c 00           .*[     ]*.*
   402052:      00 00           .*[     ]*.*
   402054:      09 00           nop     
   402056:      09 00           nop     
   402058:      09 00           nop     
   40205a:      09 00           nop     
-  40205c:      02 d0           mov\.l  402068 <_start\+0x68>,r0        ! 0x0
+  40205c:      02 d0           mov\.l  402068 <_start\+0x68>,r0        ! 0x1c
   40205e:      12 01           stc     gbr,r1
   402060:      09 00           nop     
   402062:      03 a0           bra     40206c <_start\+0x6c>
   402064:      0c 31           add     r0,r1
   402066:      09 00           nop     
-  402068:      00 00           .*[     ]*.*
+  402068:      1c 00           .*[     ]*.*
   40206a:      00 00           .*[     ]*.*
   40206c:      09 00           nop     
   40206e:      09 00           nop     
   402070:      09 00           nop     
   402072:      09 00           nop     
   402074:      12 01           stc     gbr,r1
-  402076:      0c d0           mov\.l  4020a8 <_start\+0xa8>,r0        ! 0x0
+  402076:      0c d0           mov\.l  4020a8 <_start\+0xa8>,r0        ! 0x8
   402078:      1c 30           add     r1,r0
   40207a:      09 00           nop     
   40207c:      09 00           nop     
   40207e:      09 00           nop     
   402080:      09 00           nop     
   402082:      12 01           stc     gbr,r1
-  402084:      09 d0           mov\.l  4020ac <_start\+0xac>,r0        ! 0x0
+  402084:      09 d0           mov\.l  4020ac <_start\+0xac>,r0        ! 0x28
   402086:      1c 30           add     r1,r0
   402088:      09 00           nop     
   40208a:      09 00           nop     
   40208c:      09 00           nop     
   40208e:      09 00           nop     
   402090:      12 01           stc     gbr,r1
-  402092:      07 d0           mov\.l  4020b0 <_start\+0xb0>,r0        ! 0x0
+  402092:      07 d0           mov\.l  4020b0 <_start\+0xb0>,r0        ! 0x18
   402094:      1c 30           add     r1,r0
   402096:      09 00           nop     
   402098:      09 00           nop     
@@ -293,4 +300,9 @@ Disassembly of section \.text:
   4020a2:      f6 6e           mov\.l  @r15\+,r14
   4020a4:      [0-9a-f]+ [0-9a-f]+             .*[     ]*.*
   4020a6:      01 00           .*[     ]*.*
+  4020a8:      08 00           .*[     ]*.*
+  4020aa:      00 00           .*[     ]*.*
+  4020ac:      28 00           .*[     ]*.*
+  4020ae:      00 00           .*[     ]*.*
+  4020b0:      18 00           .*[     ]*.*
        \.\.\.
index a010ea9..d84b102 100644 (file)
@@ -23,7 +23,7 @@ Section Headers:
   \[11\] \.tbss +NOBITS +0+413018 [0-9a-f]+ 0+010 00 WAT  0   0  1
   \[12\] \.dynamic +DYNAMIC +0+413018 .*
 #...
-  \[[0-9a-f]+\] \.got +PROGBITS +0+4130c0 .*
+  \[[0-9a-f]+\] \.got +PROGBITS +0+4130b8 .*
   \[[0-9a-f]+\] \.sbss +.*
   \[[0-9a-f]+\] \.bss +.*
 #...
@@ -58,31 +58,16 @@ Program Headers:
    04 +\.tbss \.dynamic *
    05 +\.tdata \.tbss *
 
-Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 19 entries:
+Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 4 entries:
  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
-0+401068  00000097 R_SH_TLS_TPOFF32 +0+00
-0+401088  00000097 R_SH_TLS_TPOFF32 +0+08
-0+4010a8  00000097 R_SH_TLS_TPOFF32 +0+10
-0+401154  00000097 R_SH_TLS_TPOFF32 +0+00
-0+40116c  00000097 R_SH_TLS_TPOFF32 +0+10
-0+401188  00000097 R_SH_TLS_TPOFF32 +0+08
-0+40118c  00000097 R_SH_TLS_TPOFF32 +0+0c
-0+401190  00000097 R_SH_TLS_TPOFF32 +0+10
-0+401194  00000097 R_SH_TLS_TPOFF32 +0+14
-0+402038  00000097 R_SH_TLS_TPOFF32 +0+18
-0+402050  00000097 R_SH_TLS_TPOFF32 +0+24
-0+402068  00000097 R_SH_TLS_TPOFF32 +0+14
-0+4020a8  00000097 R_SH_TLS_TPOFF32 +0+00
-0+4020ac  00000097 R_SH_TLS_TPOFF32 +0+20
-0+4020b0  00000097 R_SH_TLS_TPOFF32 +0+10
-0+4130d0  00000197 R_SH_TLS_TPOFF32 +0+ +sG3 \+ 0
-0+4130d4  00000397 R_SH_TLS_TPOFF32 +0+ +sG2 \+ 0
-0+4130d8  00000497 R_SH_TLS_TPOFF32 +0+ +sG4 \+ 0
-0+4130dc  0000[0-9a-f]+97 R_SH_TLS_TPOFF32 +0+ +sG1 \+ 0
+0+4130c8  00000197 R_SH_TLS_TPOFF32 +0+ +sG3 \+ 0
+0+4130cc  00000397 R_SH_TLS_TPOFF32 +0+ +sG2 \+ 0
+0+4130d0  00000497 R_SH_TLS_TPOFF32 +0+ +sG4 \+ 0
+0+4130d4  0000[0-9a-f]+97 R_SH_TLS_TPOFF32 +0+ +sG1 \+ 0
 
 Relocation section '\.rela\.plt' at offset 0x[0-9a-f]+ contains 1 entries:
  Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
-0+4130cc  000005a4 R_SH_JMP_SLOT +[0-9a-f]+ +__tls_get_addr \+ [0-9a-f]+
+0+4130c4  000005a4 R_SH_JMP_SLOT +[0-9a-f]+ +__tls_get_addr \+ [0-9a-f]+
 
 Symbol table '\.dynsym' contains [0-9]+ entries:
  +Num: +Value +Size Type +Bind +Vis +Ndx Name
@@ -135,7 +120,7 @@ Symbol table '\.symtab' contains [0-9]+ entries:
  +[0-9]+: 00000004 +0 TLS +GLOBAL DEFAULT +10 sg2
  +[0-9]+: 0+ +0 TLS +GLOBAL DEFAULT  UND sG1
  +[0-9]+: 00000010 +0 TLS +GLOBAL HIDDEN +10 sh1
- +[0-9]+: 004130e0 +0 NOTYPE  GLOBAL DEFAULT  ABS _edata
+ +[0-9]+: 004130d8 +0 NOTYPE  GLOBAL DEFAULT  ABS _edata
  +[0-9]+: [0-9a-f]+ +0 OBJECT  GLOBAL DEFAULT  ABS _GLOBAL_OFFSET_TABLE_
  +[0-9]+: [0-9a-f]+ +0 NOTYPE  GLOBAL DEFAULT  ABS _end
  +[0-9]+: 00000014 +0 TLS +GLOBAL HIDDEN +10 sh2
index 59600d4..5a3222b 100644 (file)
@@ -8,5 +8,5 @@
 .*: +file format elf32-sh.*
 
 Contents of section \.got:
- 4130c0 [0-9a-f]+ 00000000 00000000 [0-9a-f]+  .*
- 4130d0 00000000 00000000 00000000 00000000  .*
+ 4130b8 [0-9a-f]+ 00000000 00000000 [0-9a-f]+  .*
+ 4130c8 00000000 00000000 00000000 00000000  .*
index 2364b1e..25de25b 100644 (file)
@@ -16,7 +16,7 @@ Disassembly of section \.text:
   [0-9a-f]+:   0c 3c           add     r0,r12
   [0-9a-f]+:   02 d0           mov.l   [0-9a-f]+ <foo\+0x14>,r0        ! 0xc
   [0-9a-f]+:   12 01           stc     gbr,r1
-  [0-9a-f]+:   ce 00           mov.l   @\(r0,r12\),r0
+  [0-9a-f]+:   09 00           nop     
   [0-9a-f]+:   03 a0           bra     [0-9a-f]+ <foo\+0x18>
   [0-9a-f]+:   0c 31           add     r0,r1
   [0-9a-f]+:   09 00           nop     
index ee928fd..519c6ef 100644 (file)
@@ -5,8 +5,4 @@
 #readelf: -r
 #target: sh*-*-linux* sh*-*-netbsd*
 
-Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 2 entries:
- Offset +Info +Type +Sym\.Value +Sym\. Name \+ Addend
-0+[0-9a-f]+  00000097 R_SH_TLS_TPOFF32 +0+04
-0+[0-9a-f]+  00000097 R_SH_TLS_TPOFF32 +0+04
-
+There are no relocations in this file.