OSDN Git Service

* elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_32_DTPREL>:
authorhp <hp>
Mon, 19 Oct 2009 16:33:49 +0000 (16:33 +0000)
committerhp <hp>
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 f6b03d9..bc8fc7c 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 2037b10..ceea1b9 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: