* elf32-hppa.c (final_link_relocate): Convert R_PARISC_TLS_GD21L,
authorDave Anglin <dave.anglin@nrc.ca>
Sat, 30 Jan 2010 16:09:43 +0000 (16:09 +0000)
committerDave Anglin <dave.anglin@nrc.ca>
Sat, 30 Jan 2010 16:09:43 +0000 (16:09 +0000)
R_PARISC_TLS_LDM21L and R_PARISC_TLS_IE21L relocations that use the
linkage table pointer to use the global table pointer if not doing
a shared link.

bfd/ChangeLog
bfd/elf32-hppa.c

index efd86131f2204d46d910ee4e08d4d5b279708afc..1f66207211312714902ca82ef124a010af9c1fc1 100644 (file)
@@ -1,3 +1,10 @@
+2010-01-30  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       * elf32-hppa.c (final_link_relocate): Convert R_PARISC_TLS_GD21L,
+       R_PARISC_TLS_LDM21L and R_PARISC_TLS_IE21L relocations that use the
+       linkage table pointer to use the global table pointer if not doing
+       a shared link.
+
 2010-01-29  Joel Brobecker  <brobecker@adacore.com>
 
        * elf.c (elfcore_grok_lwpstatus): Do not overwrite the core signal
index 2a5547b1f3a96f71831cb97331f590442ab4a2c2..babe9f20a21815ca2c6283ed608e28cffe8b750f 100644 (file)
@@ -3388,12 +3388,19 @@ final_link_relocate (asection *input_section,
     case R_PARISC_DPREL21L:
     case R_PARISC_DPREL14R:
     case R_PARISC_DPREL14F:
+    case R_PARISC_TLS_GD21L:
+    case R_PARISC_TLS_LDM21L:
+    case R_PARISC_TLS_IE21L:
       /* Convert instructions that use the linkage table pointer (r19) to
         instructions that use the global data pointer (dp).  This is the
         most efficient way of using PIC code in an incomplete executable,
         but the user must follow the standard runtime conventions for
         accessing data for this to work.  */
-      if (orig_r_type == R_PARISC_DLTIND21L)
+      if (orig_r_type == R_PARISC_DLTIND21L
+         || (!info->shared
+             && (r_type == R_PARISC_TLS_GD21L
+                 || r_type == R_PARISC_TLS_LDM21L
+                 || r_type == R_PARISC_TLS_IE21L)))
        {
          /* Convert addil instructions if the original reloc was a
             DLTIND21L.  GCC sometimes uses a register other than r19 for
@@ -3444,11 +3451,8 @@ final_link_relocate (asection *input_section,
     case R_PARISC_DLTIND21L:
     case R_PARISC_DLTIND14R:
     case R_PARISC_DLTIND14F:
-    case R_PARISC_TLS_GD21L:
     case R_PARISC_TLS_GD14R:
-    case R_PARISC_TLS_LDM21L:
     case R_PARISC_TLS_LDM14R:
-    case R_PARISC_TLS_IE21L:
     case R_PARISC_TLS_IE14R:
       value -= elf_gp (input_section->output_section->owner);
       break;