(elf_machine_rela): Only CHECK_STATIC_TLS if sym != NULL.
authordrepper <drepper>
Mon, 17 May 2004 18:20:30 +0000 (18:20 +0000)
committerdrepper <drepper>
Mon, 17 May 2004 18:20:30 +0000 (18:20 +0000)
sysdeps/i386/dl-machine.h
sysdeps/sh/dl-machine.h
sysdeps/sparc/sparc32/dl-machine.h

index 26abbfb..65ae53a 100644 (file)
@@ -587,20 +587,24 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
             It is a positive value which will be subtracted from the
             thread pointer.  To get the variable position in the TLS
             block we subtract the offset from that of the TLS block.  */
-         CHECK_STATIC_TLS (map, sym_map);
-         *reloc_addr
-           = (sym == NULL ? 0 : sym_map->l_tls_offset - sym->st_value)
-             + reloc->r_addend;
+         if (sym != NULL)
+           {
+             CHECK_STATIC_TLS (map, sym_map);
+             *reloc_addr = sym_map->l_tls_offset - sym->st_value
+                           + reloc->r_addend;
+           }
          break;
        case R_386_TLS_TPOFF:
          /* The offset is negative, forward from the thread pointer.  */
          /* We know the offset of object the symbol is contained in.
             It is a negative value which will be added to the
             thread pointer.  */
-         CHECK_STATIC_TLS (map, sym_map);
-         *reloc_addr
-           = (sym == NULL ? 0 : sym->st_value - sym_map->l_tls_offset)
-             + reloc->r_addend;
+         if (sym != NULL)
+           {
+             CHECK_STATIC_TLS (map, sym_map);
+             *reloc_addr = sym->st_value - sym_map->l_tls_offset
+                           + reloc->r_addend;
+           }
          break;
 #  endif       /* use TLS */
        case R_386_COPY:
index a0852a4..834b81a 100644 (file)
@@ -580,10 +580,12 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
             It is a positive value which will be added to the thread
             pointer.  To get the variable position in the TLS block
             we add the offset from that of the TLS block.  */
-         CHECK_STATIC_TLS (map, sym_map);
-         *reloc_addr
-           = ((sym == NULL ? 0 : sym_map->l_tls_offset + sym->st_value)
-              + reloc->r_addend);
+         if (sym != NULL)
+           {
+             CHECK_STATIC_TLS (map, sym_map);
+             *reloc_addr = sym_map->l_tls_offset + sym->st_value
+                           + reloc->r_addend;
+           }
 # endif
          break;
 #endif /* use TLS */
index 5f39949..52fc632 100644 (file)
@@ -521,22 +521,27 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          /* We know the offset of object the symbol is contained in.
             It is a negative value which will be added to the
             thread pointer.  */
-         CHECK_STATIC_TLS (map, sym_map);
-         *reloc_addr
-           = (sym == NULL ? 0 : sym->st_value - sym_map->l_tls_offset)
-             + reloc->r_addend;
+         if (sym != NULL)
+           {
+             CHECK_STATIC_TLS (map, sym_map);
+             *reloc_addr = sym->st_value - sym_map->l_tls_offset
+                           + reloc->r_addend;
+           }
          break;
 # ifndef RTLD_BOOTSTRAP
        case R_SPARC_TLS_LE_HIX22:
        case R_SPARC_TLS_LE_LOX10:
-         CHECK_STATIC_TLS (map, sym_map);
-         value = (sym == NULL ? 0 : sym->st_value - sym_map->l_tls_offset)
-                 + reloc->r_addend;
-         if (r_type == R_SPARC_TLS_LE_HIX22)
-           *reloc_addr = (*reloc_addr & 0xffc00000) | ((~value) >> 10);
-         else
-           *reloc_addr = (*reloc_addr & 0xffffe000) | (value & 0x3ff)
-                         | 0x1c00;
+         if (sym != NULL)
+           {
+             CHECK_STATIC_TLS (map, sym_map);
+             value = sym->st_value - sym_map->l_tls_offset
+                     + reloc->r_addend;
+             if (r_type == R_SPARC_TLS_LE_HIX22)
+               *reloc_addr = (*reloc_addr & 0xffc00000) | ((~value) >> 10);
+             else
+               *reloc_addr = (*reloc_addr & 0xffffe000) | (value & 0x3ff)
+                             | 0x1c00;
+           }
          break;
 # endif
 #endif