This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] SH: Remove unnecessary dynamic TLS relocations


Hi,

The appended patch is mainly for updating SHcompact TLS handling.
The current SH ld makes many unnecessary dynamic TLS relocations
which are suppressed by ld for the other architectures.
This patch removes almost of them, though there remains things in
my TODO list which are done in x86 and other ports. The tests for
SHcompact TLS are adjusted.
All changes except WILL_CALL_FINISH_DYNAMIC_SYMBOL change which is
taken from x86 are SHcompact TLS specific.
There are no new regressions on sh[45]-unknown-linux-gnu with it.
Committed.

Regards,
	kaz
--
2003-04-23  Kaz Kojima  <kkojima at rr dot iij4u dot or dot jp>
[bfd/ChangeLog]
	* 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.

[ld/testsuite/ChangeLog]
	* 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.

diff -u3prN ORIG/src/bfd/elf32-sh.c LOCAL/src/bfd/elf32-sh.c
--- ORIG/src/bfd/elf32-sh.c	Thu Apr 24 11:05:45 2003
+++ LOCAL/src/bfd/elf32-sh.c	Thu Apr 24 12:00:08 2003
@@ -90,6 +90,8 @@ static bfd_boolean sh_elf_create_dynamic
   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, inf
 		       || 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, inf
 	      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, inf
 	      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, inf
 	    {
 	      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, inf
 		  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, inf
 	      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, inf
 	      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, inf
 
 	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, inf
 	    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, inf
 		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, re
 	    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, re
 		  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, re
 	      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:
diff -u3prN ORIG/src/ld/testsuite/ld-sh/tlsbin-1.d LOCAL/src/ld/testsuite/ld-sh/tlsbin-1.d
--- ORIG/src/ld/testsuite/ld-sh/tlsbin-1.d	Sun Nov  3 08:00:45 2002
+++ LOCAL/src/ld/testsuite/ld-sh/tlsbin-1.d	Thu Apr 24 12:00:08 2003
@@ -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       	.*[ 	]*.*
 	\.\.\.
diff -u3prN ORIG/src/ld/testsuite/ld-sh/tlsbin-2.d LOCAL/src/ld/testsuite/ld-sh/tlsbin-2.d
--- ORIG/src/ld/testsuite/ld-sh/tlsbin-2.d	Sun Nov  3 08:00:45 2002
+++ LOCAL/src/ld/testsuite/ld-sh/tlsbin-2.d	Thu Apr 24 12:00:08 2003
@@ -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]+ 
  +[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
diff -u3prN ORIG/src/ld/testsuite/ld-sh/tlsbin-3.d LOCAL/src/ld/testsuite/ld-sh/tlsbin-3.d
--- ORIG/src/ld/testsuite/ld-sh/tlsbin-3.d	Fri Oct 11 22:01:49 2002
+++ LOCAL/src/ld/testsuite/ld-sh/tlsbin-3.d	Thu Apr 24 12:00:08 2003
@@ -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  .*
diff -u3prN ORIG/src/ld/testsuite/ld-sh/tlstpoff-1.d LOCAL/src/ld/testsuite/ld-sh/tlstpoff-1.d
--- ORIG/src/ld/testsuite/ld-sh/tlstpoff-1.d	Tue Feb 11 06:53:15 2003
+++ LOCAL/src/ld/testsuite/ld-sh/tlstpoff-1.d	Thu Apr 24 12:00:08 2003
@@ -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	
diff -u3prN ORIG/src/ld/testsuite/ld-sh/tlstpoff-2.d LOCAL/src/ld/testsuite/ld-sh/tlstpoff-2.d
--- ORIG/src/ld/testsuite/ld-sh/tlstpoff-2.d	Tue Feb 11 06:53:15 2003
+++ LOCAL/src/ld/testsuite/ld-sh/tlstpoff-2.d	Thu Apr 24 12:00:08 2003
@@ -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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]