* elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_32_DTPREL>:
authorHans-Peter Nilsson <hp@axis.com>
Mon, 19 Oct 2009 16:33:49 +0000 (16:33 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 19 Oct 2009 16:33:49 +0000 (16:33 +0000)
Don't subtract the size of the TLS block for non-shared objects
from the relocation.

bfd/ChangeLog
bfd/elf32-cris.c

index f6b03d95f192bcf371bfc0e7b6a964bb95dfb98f..bc8fc7c94f9ede06ffd7c8e97b7a675debef918d 100644 (file)
@@ -1,3 +1,9 @@
+2009-10-19  Hans-Peter Nilsson  <hp@axis.com>
+
+       * elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_32_DTPREL>:
+       Don't subtract the size of the TLS block for non-shared objects
+       from the relocation.
+
 2009-10-17  Arnold Metselaar  <arnold.metselaar@planet.nl>
 
        * coff-z80.c (z80coff_vec): Allow sections to be of type
index 2037b10f59ec6f82e628fe3c09532fcc45cb3f76..ceea1b92736ff4972816242a911b018ce3bd75f7 100644 (file)
@@ -1690,15 +1690,10 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                = -elf_cris_hash_table (info)->dtpmod_refcount;
            }
 
-         /* The thread-based offset to the local symbol is the
-            relocation.
-            For the executable, TLS data begins at the thread pointer plus
-            the negative size of the TLS data.  For a DSO, that's part of
-            the module TLS offset.  */
+         /* The relocation is the offset from the start of the module
+            TLS block to the (local) symbol.  */
          relocation -= elf_hash_table (info)->tls_sec == NULL
-           ? 0 : (elf_hash_table (info)->tls_sec->vma
-                  + (info->shared
-                     ? 0 : elf_hash_table (info)->tls_size));
+           ? 0 : elf_hash_table (info)->tls_sec->vma;
          break;
 
        case R_CRIS_32_GD: