Kill pthread_ops_hack
[deliverable/binutils-gdb.git] / bfd / som.c
index 006af8cae2a914eabaf00b2316d40fcbdb7a9bd2..360819dc686ad9feb325c891bd2529fa55196d31 100644 (file)
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -23,7 +23,6 @@
    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 
-#include "alloca-conf.h"
 #include "sysdep.h"
 #include "bfd.h"
 
 #include <machine/reg.h>
 #include <sys/file.h>
 
+/* This is the code recommended in the autoconf documentation, almost
+   verbatim.  */
+
+#ifndef __GNUC__
+# if HAVE_ALLOCA_H
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+/* Indented so that pre-ansi C compilers will ignore it, rather than
+   choke on it.  Some versions of AIX require this to be the first
+   thing in the file.  */
+ #pragma alloca
+#  else
+#   ifndef alloca /* predefined by HP cc +Olibcalls */
+#    if !defined (__STDC__) && !defined (__hpux)
+extern char *alloca ();
+#    else
+extern void *alloca ();
+#    endif /* __STDC__, __hpux */
+#   endif /* alloca */
+#  endif /* _AIX */
+# endif /* HAVE_ALLOCA_H */
+#else
+extern void *alloca (size_t);
+#endif /* __GNUC__ */
+
 static bfd_reloc_status_type hppa_som_reloc
   (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
 static bfd_boolean som_mkobject (bfd *);
@@ -328,7 +353,7 @@ static const struct fixup_format som_fixup_formats[256] =
   /* R_DATA_ONE_SYMBOL.  */
   {  0, "L4=Sb=" },            /* 0x25 */
   {  1, "L4=Sd=" },            /* 0x26 */
-  /* R_DATA_PLEBEL.  */
+  /* R_DATA_PLABEL.  */
   {  0, "L4=Sb=" },            /* 0x27 */
   {  1, "L4=Sd=" },            /* 0x28 */
   /* R_SPACE_REF.  */
@@ -412,8 +437,9 @@ static const struct fixup_format som_fixup_formats[256] =
   { 31, "L4=SD=" },            /* 0x6f */
   { 32, "L4=Sb=" },            /* 0x70 */
   { 33, "L4=Sd=" },            /* 0x71 */
+  /* R_DATA_GPREL.  */
+  {  0, "L4=Sd=" },            /* 0x72 */
   /* R_RESERVED.  */
-  {  0, "" },                  /* 0x72 */
   {  0, "" },                  /* 0x73 */
   {  0, "" },                  /* 0x74 */
   {  0, "" },                  /* 0x75 */
@@ -800,7 +826,7 @@ static reloc_howto_type som_hppa_howto_table[] =
   SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
   SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
   SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
-  SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"),
+  SOM_HOWTO (R_DATA_GPREL, "R_DATA_GPREL"),
   SOM_HOWTO (R_RESERVED, "R_RESERVED"),
   SOM_HOWTO (R_RESERVED, "R_RESERVED"),
   SOM_HOWTO (R_RESERVED, "R_RESERVED"),
@@ -1546,6 +1572,8 @@ hppa_som_gen_reloc_type (bfd *abfd,
          || field == e_lpsel
          || field == e_rpsel)
        *final_type = R_DATA_PLABEL;
+      else if (field == e_fsel && format == 32)
+       *final_type = R_DATA_GPREL;
       break;
 
     case R_HPPA_COMPLEX:
@@ -2774,6 +2802,24 @@ som_write_fixups (bfd *abfd,
                    abort ();
                  break;
 
+               case R_DATA_GPREL:
+                 /* Account for any addend.  */
+                 if (bfd_reloc->addend)
+                   p = som_reloc_addend (abfd, bfd_reloc->addend, p,
+                                         &subspace_reloc_size, reloc_queue);
+
+                 if (sym_num < 0x10000000)
+                   {
+                     bfd_put_8 (abfd, bfd_reloc->howto->type, p);
+                     bfd_put_8 (abfd, sym_num >> 16, p + 1);
+                     bfd_put_16 (abfd, (bfd_vma) sym_num, p + 2);
+                     p = try_prev_fixup (abfd, &subspace_reloc_size,
+                                         p, 4, reloc_queue);
+                   }
+                 else
+                   abort ();
+                 break;
+
                case R_DATA_ONE_SYMBOL:
                case R_DATA_PLABEL:
                case R_CODE_PLABEL:
This page took 0.024828 seconds and 4 git commands to generate.