* config/tc-ppc.c (md_pseudo_table): If OBJ_XCOFF, add "long",
authorIan Lance Taylor <ian@airs.com>
Fri, 31 Jan 1997 19:57:31 +0000 (19:57 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 31 Jan 1997 19:57:31 +0000 (19:57 +0000)
  "word", and "short".
(ppc_xcoff_cons): New static function.

gas/ChangeLog
gas/config/tc-ppc.c

index fdac6541689634b0e359dad509413d421e965963..9b01903c8291a58edcff4e2878498b00dd553d6b 100644 (file)
@@ -5,6 +5,10 @@ Fri Jan 31 13:15:05 1997  Alan Modra  <alan@spri.levels.unisa.edu.au>
 
 Fri Jan 31 10:46:14 1997  Ian Lance Taylor  <ian@cygnus.com>
 
+       * config/tc-ppc.c (md_pseudo_table): If OBJ_XCOFF, add "long",
+       "word", and "short".
+       (ppc_xcoff_cons): New static function.
+
        * write.c (relax_segment): Give an error if a .space symbol is
        common or undefined.
 
index b9d7dd425ec5143d5c47017b3b44ceb7f6ea0759..530d2679357ddf27912347cf5df8600708bc6a32 100644 (file)
@@ -82,6 +82,7 @@ static void ppc_section PARAMS ((int));
 static void ppc_stabx PARAMS ((int));
 static void ppc_rename PARAMS ((int));
 static void ppc_toc PARAMS ((int));
+static void ppc_xcoff_cons PARAMS ((int));
 #endif
 
 #ifdef OBJ_ELF
@@ -110,6 +111,7 @@ static void ppc_pe_tocd PARAMS ((int));
 /* Generic assembler global variables which must be defined by all
    targets.  */
 
+#ifdef OBJ_ELF
 /* This string holds the chars that always start a comment.  If the
    pre-processor is disabled, these aren't very useful.  The macro
    tc_comment_chars points to this.  We use this, rather than the
@@ -122,6 +124,9 @@ const char *ppc_comment_chars = ppc_solaris_comment_chars;
 #else
 const char *ppc_comment_chars = ppc_eabi_comment_chars;
 #endif
+#else
+const char comment_chars[] = "#";
+#endif
 
 /* Characters which start a comment at the beginning of a line.  */
 const char line_comment_chars[] = "#";
@@ -171,6 +176,9 @@ const pseudo_typeS md_pseudo_table[] =
   { "stabx",   ppc_stabx,      0 },
   { "text",    ppc_section,    't' },
   { "toc",     ppc_toc,        0 },
+  { "long",    ppc_xcoff_cons, 2 },
+  { "word",    ppc_xcoff_cons, 1 },
+  { "short",   ppc_xcoff_cons, 1 },
 #endif
 
 #ifdef OBJ_ELF
@@ -1130,12 +1138,12 @@ ppc_elf_suffix (str_p, exp_p)
     MAP ("got@h",      BFD_RELOC_HI16_GOTOFF),
     MAP ("got@ha",     BFD_RELOC_HI16_S_GOTOFF),
     MAP ("fixup",      BFD_RELOC_CTOR),                /* warnings with -mrelocatable */
+    MAP ("plt",                BFD_RELOC_24_PLT_PCREL),
     MAP ("pltrel24",   BFD_RELOC_24_PLT_PCREL),
     MAP ("copy",       BFD_RELOC_PPC_COPY),
     MAP ("globdat",    BFD_RELOC_PPC_GLOB_DAT),
     MAP ("local24pc",  BFD_RELOC_PPC_LOCAL24PC),
     MAP ("local",      BFD_RELOC_PPC_LOCAL24PC),
-    MAP ("plt",                BFD_RELOC_32_PLTOFF),
     MAP ("pltrel",     BFD_RELOC_32_PLT_PCREL),
     MAP ("plt@l",      BFD_RELOC_LO16_PLTOFF),
     MAP ("plt@h",      BFD_RELOC_HI16_PLTOFF),
@@ -3061,6 +3069,18 @@ ppc_toc (ignore)
   demand_empty_rest_of_line ();
 }
 
+/* The AIX assembler automatically aligns the operands of a .long or
+   .short pseudo-op, and we want to be compatible.  */
+
+static void
+ppc_xcoff_cons (log_size)
+     int log_size;
+{
+  frag_align (log_size, 0);
+  record_alignment (now_seg, log_size);
+  cons (1 << log_size);
+}
+
 #endif /* OBJ_XCOFF */
 \f
 /* The .tc pseudo-op.  This is used when generating either XCOFF or
@@ -4733,6 +4753,7 @@ md_apply_fix3 (fixp, valuep, seg)
                              value, 1);
          break;
 
+       case BFD_RELOC_24_PLT_PCREL:
        case BFD_RELOC_PPC_LOCAL24PC:
          if (!fixp->fx_pcrel)
            abort ();