gas and ld pluralization fixes
[external/binutils.git] / gas / config / tc-i370.c
1 /* tc-i370.c -- Assembler for the IBM 360/370/390 instruction set.
2    Loosely based on the ppc files by Linas Vepstas <linas@linas.org> 1998, 99
3    Copyright (C) 1994-2017 Free Software Foundation, Inc.
4    Written by Ian Lance Taylor, Cygnus Support.
5
6    This file is part of GAS, the GNU Assembler.
7
8    GAS is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GAS is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GAS; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 /* This assembler implements a very hacked version of an elf-like thing
24    that gcc emits (when gcc is suitably hacked).  To make it behave more
25    HLASM-like, try turning on the -M or --mri flag (as there are various
26    similarities between HLASM and the MRI assemblers, such as section
27    names, lack of leading . in pseudo-ops, DC and DS, etc.  */
28
29 #include "as.h"
30 #include "safe-ctype.h"
31 #include "subsegs.h"
32 #include "struc-symbol.h"
33
34 #include "opcode/i370.h"
35
36 #ifdef OBJ_ELF
37 #include "elf/i370.h"
38 #endif
39
40 /* This is the assembler for the System/390 Architecture.  */
41
42 /* Tell the main code what the endianness is.  */
43 extern int target_big_endian;
44
45 \f
46 /* Generic assembler global variables which must be defined by all
47    targets.  */
48
49 #ifdef OBJ_ELF
50 /* This string holds the chars that always start a comment.  If the
51    pre-processor is disabled, these aren't very useful.  The macro
52    tc_comment_chars points to this.  We use this, rather than the
53    usual comment_chars, so that we can switch for Solaris conventions.  */
54 static const char i370_eabi_comment_chars[] = "#";
55
56 const char *i370_comment_chars = i370_eabi_comment_chars;
57 #else
58 const char comment_chars[] = "#";
59 #endif
60
61 /* Characters which start a comment at the beginning of a line.  */
62 const char line_comment_chars[] = "#*";
63
64 /* Characters which may be used to separate multiple commands on a
65    single line.  */
66 const char line_separator_chars[] = ";";
67
68 /* Characters which are used to indicate an exponent in a floating
69    point number.  */
70 const char EXP_CHARS[] = "eE";
71
72 /* Characters which mean that a number is a floating point constant,
73    as in 0d1.0.  */
74 const char FLT_CHARS[] = "dD";
75
76 void
77 md_show_usage (FILE *stream)
78 {
79   fprintf (stream, "\
80 S/370 options: (these have not yet been tested and may not work) \n\
81 -u                      ignored\n\
82 -mregnames              Allow symbolic names for registers\n\
83 -mno-regnames           Do not allow symbolic names for registers\n");
84 #ifdef OBJ_ELF
85   fprintf (stream, "\
86 -mrelocatable           support for GCC's -mrelocatble option\n\
87 -mrelocatable-lib       support for GCC's -mrelocatble-lib option\n\
88 -V                      print assembler version number\n");
89 #endif
90 }
91
92 /* Whether to use user friendly register names.  */
93 #define TARGET_REG_NAMES_P TRUE
94
95 static bfd_boolean reg_names_p = TARGET_REG_NAMES_P;
96
97 \f
98 /* Predefined register names if -mregnames
99    In general, there are lots of them, in an attempt to be compatible
100    with a number of assemblers.  */
101
102 /* Structure to hold information about predefined registers.  */
103 struct pd_reg
104   {
105     const char *name;
106     int value;
107   };
108
109 /* List of registers that are pre-defined:
110
111    Each general register has predefined names of the form:
112    1. r<reg_num> which has the value <reg_num>.
113    2. r.<reg_num> which has the value <reg_num>.
114
115    Each floating point register has predefined names of the form:
116    1. f<reg_num> which has the value <reg_num>.
117    2. f.<reg_num> which has the value <reg_num>.
118
119    There are only four floating point registers, and these are
120    commonly labelled 0,2,4 and 6.  Thus, there is no f1, f3, etc.
121
122    There are individual registers as well:
123    rbase or r.base has the value  3  (base register)
124    rpgt or r.pgt   has the value  4  (page origin table pointer)
125    rarg or r.arg   has the value 11  (argument pointer)
126    rtca or r.tca   has the value 12  (table of contents pointer)
127    rtoc or r.toc   has the value 12  (table of contents pointer)
128    sp or r.sp      has the value 13  (stack pointer)
129    dsa or r.dsa    has the value 13  (stack pointer)
130    lr              has the value 14  (link reg)
131
132    The table is sorted. Suitable for searching by a binary search.  */
133
134 static const struct pd_reg pre_defined_registers[] =
135 {
136   { "arg", 11 },   /* Argument Pointer.  */
137   { "base", 3 },   /* Base Reg.  */
138
139   { "f.0", 0 },    /* Floating point registers.  */
140   { "f.2", 2 },
141   { "f.4", 4 },
142   { "f.6", 6 },
143
144   { "f0", 0 },
145   { "f2", 2 },
146   { "f4", 4 },
147   { "f6", 6 },
148
149   { "dsa",13 },    /* Stack pointer.  */
150   { "lr", 14 },    /* Link Register.  */
151   { "pgt", 4 },    /* Page Origin Table Pointer.  */
152
153   { "r.0", 0 },    /* General Purpose Registers.  */
154   { "r.1", 1 },
155   { "r.10", 10 },
156   { "r.11", 11 },
157   { "r.12", 12 },
158   { "r.13", 13 },
159   { "r.14", 14 },
160   { "r.15", 15 },
161   { "r.2", 2 },
162   { "r.3", 3 },
163   { "r.4", 4 },
164   { "r.5", 5 },
165   { "r.6", 6 },
166   { "r.7", 7 },
167   { "r.8", 8 },
168   { "r.9", 9 },
169
170   { "r.arg", 11 },  /* Argument Pointer.  */
171   { "r.base", 3 },  /* Base Reg.  */
172   { "r.dsa", 13 },  /* Stack Pointer.  */
173   { "r.pgt", 4 },   /* Page Origin Table Pointer.  */
174   { "r.sp", 13 },   /* Stack Pointer.  */
175
176   { "r.tca", 12 },  /* Pointer to the table of contents.  */
177   { "r.toc", 12 },  /* Pointer to the table of contents.  */
178
179   { "r0", 0 },      /* More general purpose registers.  */
180   { "r1", 1 },
181   { "r10", 10 },
182   { "r11", 11 },
183   { "r12", 12 },
184   { "r13", 13 },
185   { "r14", 14 },
186   { "r15", 15 },
187   { "r2", 2 },
188   { "r3", 3 },
189   { "r4", 4 },
190   { "r5", 5 },
191   { "r6", 6 },
192   { "r7", 7 },
193   { "r8", 8 },
194   { "r9", 9 },
195
196   { "rbase", 3 },  /* Base Reg.  */
197
198   { "rtca", 12 },  /* Pointer to the table of contents.  */
199   { "rtoc", 12 },  /* Pointer to the table of contents.  */
200
201   { "sp", 13 },   /* Stack Pointer.  */
202
203 };
204
205 #define REG_NAME_CNT        (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
206
207 /* Given NAME, find the register number associated with that name, return
208    the integer value associated with the given name or -1 on failure.  */
209
210 static int
211 reg_name_search (const struct pd_reg *regs,
212                  int regcount,
213                  const char *name)
214 {
215   int middle, low, high;
216   int cmp;
217
218   low = 0;
219   high = regcount - 1;
220
221   do
222     {
223       middle = (low + high) / 2;
224       cmp = strcasecmp (name, regs[middle].name);
225       if (cmp < 0)
226         high = middle - 1;
227       else if (cmp > 0)
228         low = middle + 1;
229       else
230         return regs[middle].value;
231     }
232   while (low <= high);
233
234   return -1;
235 }
236
237 /* Summary of register_name().
238
239    in:        Input_line_pointer points to 1st char of operand.
240
241    out:        An expressionS.
242         The operand may have been a register: in this case, X_op == O_register,
243         X_add_number is set to the register number, and truth is returned.
244           Input_line_pointer->(next non-blank) char after operand, or is in its
245         original state.  */
246
247 static bfd_boolean
248 register_name (expressionS *expressionP)
249 {
250   int reg_number;
251   char *name;
252   char *start;
253   char c;
254
255   /* Find the spelling of the operand.  */
256   start = name = input_line_pointer;
257   if (name[0] == '%' && ISALPHA (name[1]))
258     name = ++input_line_pointer;
259
260   else if (!reg_names_p)
261     return FALSE;
262
263   while (' ' == *name)
264     name = ++input_line_pointer;
265
266   /* If it's a number, treat it as a number.  If it's alpha, look to
267      see if it's in the register table.  */
268   if (!ISALPHA (name[0]))
269     reg_number = get_single_number ();
270   else
271     {
272       c = get_symbol_name (&name);
273       reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, name);
274
275       /* Put back the delimiting char.  */
276       (void) restore_line_pointer (c);
277     }
278
279   /* If numeric, make sure it's not out of bounds.  */
280   if ((0 <= reg_number) && (16 >= reg_number))
281     {
282       expressionP->X_op = O_register;
283       expressionP->X_add_number = reg_number;
284
285       /* Make the rest nice.  */
286       expressionP->X_add_symbol = NULL;
287       expressionP->X_op_symbol = NULL;
288       return TRUE;
289     }
290
291   /* Reset the line as if we had not done anything.  */
292   input_line_pointer = start;
293   return FALSE;
294 }
295 \f
296 /* Local variables.  */
297
298 /* The type of processor we are assembling for.  This is one or more
299    of the I370_OPCODE flags defined in opcode/i370.h.  */
300 static int i370_cpu = 0;
301
302 /* The base register to use for opcode with optional operands.
303    We define two of these: "text" and "other".  Normally, "text"
304    would get used in the .text section for branches, while "other"
305    gets used in the .data section for address constants.
306
307    The idea of a second base register in a different section
308    is foreign to the usual HLASM-style semantics; however, it
309    allows us to provide support for dynamically loaded libraries,
310    by allowing us to place address constants in a section other
311    than the text section. The "other" section need not be the
312    .data section, it can be any section that isn't the .text section.
313
314    Note that HLASM defines a multiple, concurrent .using semantic
315    that we do not: in calculating offsets, it uses either the most
316    recent .using directive, or the one with the smallest displacement.
317    This allows HLASM to support a quasi-block-scope-like behaviour.
318    Handy for people writing assembly by hand ... but not supported
319    by us.  */
320 static int i370_using_text_regno = -1;
321 static int i370_using_other_regno = -1;
322
323 /* The base address for address literals.  */
324 static expressionS i370_using_text_baseaddr;
325 static expressionS i370_using_other_baseaddr;
326
327 /* the "other" section, used only for syntax error detection.  */
328 static segT i370_other_section = undefined_section;
329
330 /* Opcode hash table.  */
331 static struct hash_control *i370_hash;
332
333 /* Macro hash table.  */
334 static struct hash_control *i370_macro_hash;
335
336 #ifdef OBJ_ELF
337 /* What type of shared library support to use.  */
338 static enum { SHLIB_NONE, SHLIB_PIC, SHILB_MRELOCATABLE } shlib = SHLIB_NONE;
339 #endif
340
341 /* Flags to set in the elf header.  */
342 static flagword i370_flags = 0;
343
344 #ifndef WORKING_DOT_WORD
345 int md_short_jump_size = 4;
346 int md_long_jump_size = 4;
347 #endif
348 \f
349 #ifdef OBJ_ELF
350 const char *md_shortopts = "l:um:K:VQ:";
351 #else
352 const char *md_shortopts = "um:";
353 #endif
354 struct option md_longopts[] =
355 {
356   {NULL, no_argument, NULL, 0}
357 };
358 size_t md_longopts_size = sizeof (md_longopts);
359
360 int
361 md_parse_option (int c, const char *arg)
362 {
363   switch (c)
364     {
365     case 'u':
366       /* -u means that any undefined symbols should be treated as
367          external, which is the default for gas anyhow.  */
368       break;
369
370 #ifdef OBJ_ELF
371     case 'K':
372       /* Recognize -K PIC */
373       if (strcmp (arg, "PIC") == 0 || strcmp (arg, "pic") == 0)
374         {
375           shlib = SHLIB_PIC;
376           i370_flags |= EF_I370_RELOCATABLE_LIB;
377         }
378       else
379         return 0;
380
381       break;
382 #endif
383
384     case 'm':
385
386       /* -m360 mean to assemble for the ancient 360 architecture.  */
387       if (strcmp (arg, "360") == 0 || strcmp (arg, "i360") == 0)
388         i370_cpu = I370_OPCODE_360;
389       /* -mxa means to assemble for the IBM 370 XA.  */
390       else if (strcmp (arg, "xa") == 0)
391         i370_cpu = I370_OPCODE_370_XA;
392       /* -many means to assemble for any architecture (370/XA).  */
393       else if (strcmp (arg, "any") == 0)
394         i370_cpu = I370_OPCODE_370;
395
396       else if (strcmp (arg, "regnames") == 0)
397         reg_names_p = TRUE;
398
399       else if (strcmp (arg, "no-regnames") == 0)
400         reg_names_p = FALSE;
401
402 #ifdef OBJ_ELF
403       /* -mrelocatable/-mrelocatable-lib -- warn about
404          initializations that require relocation.  */
405       else if (strcmp (arg, "relocatable") == 0)
406         {
407           shlib = SHILB_MRELOCATABLE;
408           i370_flags |= EF_I370_RELOCATABLE;
409         }
410       else if (strcmp (arg, "relocatable-lib") == 0)
411         {
412           shlib = SHILB_MRELOCATABLE;
413           i370_flags |= EF_I370_RELOCATABLE_LIB;
414         }
415 #endif
416       else
417         {
418           as_bad (_("invalid switch -m%s"), arg);
419           return 0;
420         }
421       break;
422
423 #ifdef OBJ_ELF
424       /* -V: SVR4 argument to print version ID.  */
425     case 'V':
426       print_version_id ();
427       break;
428
429       /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
430          should be emitted or not.  FIXME: Not implemented.  */
431     case 'Q':
432       break;
433
434 #endif
435
436     default:
437       return 0;
438     }
439
440   return 1;
441 }
442
443 \f
444 /* Set i370_cpu if it is not already set.
445    Currently defaults to the reasonable superset;
446    but can be made more fine grained if desired.  */
447
448 static void
449 i370_set_cpu (void)
450 {
451   const char *default_os  = TARGET_OS;
452   const char *default_cpu = TARGET_CPU;
453
454   /* Override with the superset for the moment.  */
455   i370_cpu = I370_OPCODE_ESA390_SUPERSET;
456   if (i370_cpu == 0)
457     {
458       if (strcmp (default_cpu, "i360") == 0)
459         i370_cpu = I370_OPCODE_360;
460       else if (strcmp (default_cpu, "i370") == 0)
461         i370_cpu = I370_OPCODE_370;
462       else if (strcmp (default_cpu, "XA") == 0)
463         i370_cpu = I370_OPCODE_370_XA;
464       else
465         as_fatal ("Unknown default cpu = %s, os = %s", default_cpu, default_os);
466     }
467 }
468
469 /* Figure out the BFD architecture to use.
470    FIXME: specify the different 370 architectures.  */
471
472 enum bfd_architecture
473 i370_arch (void)
474 {
475    return bfd_arch_i370;
476 }
477
478 /* This function is called when the assembler starts up.  It is called
479    after the options have been parsed and the output file has been
480    opened.  */
481
482 void
483 md_begin (void)
484 {
485   const struct i370_opcode *op;
486   const struct i370_opcode *op_end;
487   const struct i370_macro *macro;
488   const struct i370_macro *macro_end;
489   bfd_boolean dup_insn = FALSE;
490
491   i370_set_cpu ();
492
493 #ifdef OBJ_ELF
494   /* Set the ELF flags if desired.  */
495   if (i370_flags)
496     bfd_set_private_flags (stdoutput, i370_flags);
497 #endif
498
499   /* Insert the opcodes into a hash table.  */
500   i370_hash = hash_new ();
501
502    op_end = i370_opcodes + i370_num_opcodes;
503    for (op = i370_opcodes; op < op_end; op++)
504      {
505        know ((op->opcode.i[0] & op->mask.i[0]) == op->opcode.i[0]
506              && (op->opcode.i[1] & op->mask.i[1]) == op->opcode.i[1]);
507
508        if ((op->flags & i370_cpu) != 0)
509          {
510            const char *retval;
511
512            retval = hash_insert (i370_hash, op->name, (void *) op);
513            if (retval != (const char *) NULL)
514              {
515                as_bad (_("Internal assembler error for instruction %s"), op->name);
516                dup_insn = TRUE;
517              }
518          }
519      }
520
521   /* Insert the macros into a hash table.  */
522   i370_macro_hash = hash_new ();
523
524   macro_end = i370_macros + i370_num_macros;
525   for (macro = i370_macros; macro < macro_end; macro++)
526     {
527       if ((macro->flags & i370_cpu) != 0)
528         {
529           const char *retval;
530
531           retval = hash_insert (i370_macro_hash, macro->name, (void *) macro);
532           if (retval != (const char *) NULL)
533             {
534               as_bad (_("Internal assembler error for macro %s"), macro->name);
535               dup_insn = TRUE;
536             }
537         }
538     }
539
540   if (dup_insn)
541     abort ();
542 }
543
544 /* Insert an operand value into an instruction.  */
545
546 static i370_insn_t
547 i370_insert_operand (i370_insn_t insn,
548                      const struct i370_operand *operand,
549                      offsetT val)
550 {
551   if (operand->insert)
552     {
553       const char *errmsg;
554
555       /* Used for 48-bit insn's.  */
556       errmsg = NULL;
557       insn = (*operand->insert) (insn, (long) val, &errmsg);
558       if (errmsg)
559         as_bad ("%s", errmsg);
560     }
561   else
562     /* This is used only for 16, 32 bit insn's.  */
563     insn.i[0] |= (((long) val & ((1 << operand->bits) - 1))
564                   << operand->shift);
565
566   return insn;
567 }
568
569 \f
570 #ifdef OBJ_ELF
571 /* Parse @got, etc. and return the desired relocation.
572    Currently, i370 does not support (don't really need to support) any
573    of these fancier markups ... for example, no one is going to
574    write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
575    So basically, we could get away with this routine returning
576    BFD_RELOC_UNUSED in all circumstances.  However, I'll leave
577    in for now in case someone ambitious finds a good use for this stuff ...
578    this routine was pretty much just copied from the powerpc code ...  */
579
580 static bfd_reloc_code_real_type
581 i370_elf_suffix (char **str_p, expressionS *exp_p)
582 {
583   struct map_bfd
584   {
585     const char *string;
586     int length;
587     bfd_reloc_code_real_type reloc;
588   };
589
590   char ident[20];
591   char *str = *str_p;
592   char *str2;
593   int ch;
594   int len;
595   struct map_bfd *ptr;
596
597 #define MAP(str,reloc) { str, sizeof (str) - 1, reloc }
598
599   static struct map_bfd mapping[] =
600   {
601     /* warnings with -mrelocatable.  */
602     MAP ("fixup",       BFD_RELOC_CTOR),
603     { (char *)0, 0,     BFD_RELOC_UNUSED }
604   };
605
606   if (*str++ != '@')
607     return BFD_RELOC_UNUSED;
608
609   for (ch = *str, str2 = ident;
610        (str2 < ident + sizeof (ident) - 1
611         && (ISALNUM (ch) || ch == '@'));
612        ch = *++str)
613     *str2++ = TOLOWER (ch);
614
615   *str2 = '\0';
616   len = str2 - ident;
617
618   ch = ident[0];
619   for (ptr = &mapping[0]; ptr->length > 0; ptr++)
620     if (ch == ptr->string[0]
621         && len == ptr->length
622         && memcmp (ident, ptr->string, ptr->length) == 0)
623       {
624         if (exp_p->X_add_number != 0
625             && (ptr->reloc == BFD_RELOC_16_GOTOFF
626                 || ptr->reloc == BFD_RELOC_LO16_GOTOFF
627                 || ptr->reloc == BFD_RELOC_HI16_GOTOFF
628                 || ptr->reloc == BFD_RELOC_HI16_S_GOTOFF))
629           as_warn (_("identifier+constant@got means identifier@got+constant"));
630
631         /* Now check for identifier@suffix+constant */
632         if (*str == '-' || *str == '+')
633           {
634             char *orig_line = input_line_pointer;
635             expressionS new_exp;
636
637             input_line_pointer = str;
638             expression (&new_exp);
639             if (new_exp.X_op == O_constant)
640               {
641                 exp_p->X_add_number += new_exp.X_add_number;
642                 str = input_line_pointer;
643               }
644
645             if (&input_line_pointer != str_p)
646               input_line_pointer = orig_line;
647           }
648
649         *str_p = str;
650         return ptr->reloc;
651       }
652
653   return BFD_RELOC_UNUSED;
654 }
655
656 /* Like normal .long/.short/.word, except support @got, etc.
657    Clobbers input_line_pointer, checks end-of-line.  */
658
659 static void
660 i370_elf_cons (int nbytes)   /* 1=.byte, 2=.word, 4=.long.  */
661 {
662   expressionS exp;
663   bfd_reloc_code_real_type reloc;
664
665   if (is_it_end_of_statement ())
666     {
667       demand_empty_rest_of_line ();
668       return;
669     }
670
671   do
672     {
673       expression (&exp);
674
675       if (exp.X_op == O_symbol
676           && *input_line_pointer == '@'
677           && (reloc = i370_elf_suffix (&input_line_pointer, &exp)) != BFD_RELOC_UNUSED)
678         {
679           reloc_howto_type *reloc_howto = bfd_reloc_type_lookup (stdoutput, reloc);
680           int size = bfd_get_reloc_size (reloc_howto);
681
682           if (size > nbytes)
683             as_bad (ngettext ("%s relocations do not fit in %u byte",
684                               "%s relocations do not fit in %u bytes",
685                               nbytes),
686                     reloc_howto->name, nbytes);
687           else
688             {
689               char *p = frag_more ((int) nbytes);
690               int offset = nbytes - size;
691
692               fix_new_exp (frag_now, p - frag_now->fr_literal + offset, size, &exp, 0, reloc);
693             }
694         }
695       else
696         emit_expr (&exp, (unsigned int) nbytes);
697     }
698   while (*input_line_pointer++ == ',');
699
700   input_line_pointer--;         /* Put terminator back into stream.  */
701   demand_empty_rest_of_line ();
702 }
703
704 \f
705 /* ASCII to EBCDIC conversion table.  */
706 static unsigned char ascebc[256] =
707 {
708  /*00  NL    SH    SX    EX    ET    NQ    AK    BL */
709      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
710  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
711      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
712  /*10  DL    D1    D2    D3    D4    NK    SN    EB */
713      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
714  /*18  CN    EM    SB    EC    FS    GS    RS    US */
715      0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F,
716  /*20  SP     !     "     #     $     %     &     ' */
717      0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
718  /*28   (     )     *     +     ,     -    .      / */
719      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
720  /*30   0     1     2     3     4     5     6     7 */
721      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
722  /*38   8     9     :     ;     <     =     >     ? */
723      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
724  /*40   @     A     B     C     D     E     F     G */
725      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
726  /*48   H     I     J     K     L     M     N     O */
727      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
728  /*50   P     Q     R     S     T     U     V     W */
729      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
730  /*58   X     Y     Z     [     \     ]     ^     _ */
731      0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
732  /*60   `     a     b     c     d     e     f     g */
733      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
734  /*68   h     i     j     k     l     m     n     o */
735      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
736  /*70   p     q     r     s     t     u     v     w */
737      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
738  /*78   x     y     z     {     |     }     ~    DL */
739      0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
740      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
741      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
742      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
743      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
744      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
745      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
746      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
747      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
748      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
749      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
750      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
751      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
752      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
753      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
754      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
755      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF
756 };
757
758 /* EBCDIC to ASCII conversion table.  */
759 unsigned char ebcasc[256] =
760 {
761  /*00  NU    SH    SX    EX    PF    HT    LC    DL */
762      0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7F,
763  /*08              SM    VT    FF    CR    SO    SI */
764      0x00, 0x00, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
765  /*10  DE    D1    D2    TM    RS    NL    BS    IL */
766      0x10, 0x11, 0x12, 0x13, 0x14, 0x0A, 0x08, 0x00,
767  /*18  CN    EM    CC    C1    FS    GS    RS    US */
768      0x18, 0x19, 0x00, 0x00, 0x1C, 0x1D, 0x1E, 0x1F,
769  /*20  DS    SS    FS          BP    LF    EB    EC */
770      0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x17, 0x1B,
771  /*28              SM    C2    EQ    AK    BL       */
772      0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, 0x00,
773  /*30              SY          PN    RS    UC    ET */
774      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
775  /*38                    C3    D4    NK          SU */
776      0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1A,
777  /*40  SP                                           */
778      0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
779  /*48                     .     <     (     +     | */
780      0x00, 0x00, 0x00, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
781  /*50   &                                           */
782      0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783  /*58               !     $     *     )     ;     ^ */
784      0x00, 0x00, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
785  /*60   -     /                                     */
786      0x2D, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787  /*68                     ,     %     _     >     ? */
788      0x00, 0x00, 0x00, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
789  /*70                                               */
790      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
791  /*78         `     :     #     @     '     =     " */
792      0x00, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
793  /*80         a     b     c     d     e     f     g */
794      0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
795  /*88   h     i           {                         */
796      0x68, 0x69, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x00,
797  /*90         j     k     l     m     n     o     p */
798      0x00, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
799  /*98   q     r           }                         */
800      0x71, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00,
801  /*A0         ~     s     t     u     v     w     x */
802      0x00, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
803  /*A8   y     z                       [             */
804      0x79, 0x7A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00,
805  /*B0                                               */
806      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807  /*B8                                 ]             */
808      0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00,
809  /*C0   {     A     B     C     D     E     F     G */
810      0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
811  /*C8   H     I                                     */
812      0x48, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
813  /*D0   }     J     K     L     M     N     O     P */
814      0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
815  /*D8   Q     R                                     */
816      0x51, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
817  /*E0   \           S     T     U     V     W     X */
818      0x5C, 0x00, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
819  /*E8   Y     Z                                     */
820      0x59, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821  /*F0   0     1     2     3     4     5     6     7 */
822      0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
823  /*F8   8     9                                     */
824      0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
825 };
826
827 /* EBCDIC translation tables needed for 3270 support.  */
828
829 static void
830 i370_ebcdic (int unused ATTRIBUTE_UNUSED)
831 {
832   char *p, *end;
833   char delim = 0;
834   size_t nbytes;
835
836   nbytes = strlen (input_line_pointer);
837   end = input_line_pointer + nbytes;
838   while ('\r' == *end) end --;
839   while ('\n' == *end) end --;
840
841   delim = *input_line_pointer;
842   if (('\'' == delim) || ('\"' == delim))
843     {
844       input_line_pointer ++;
845       end = rindex (input_line_pointer, delim);
846     }
847
848   if (end > input_line_pointer)
849     {
850       nbytes = end - input_line_pointer +1;
851       p = frag_more (nbytes);
852       while (end > input_line_pointer)
853         {
854           *p = ascebc [(unsigned char) (*input_line_pointer)];
855           ++p; ++input_line_pointer;
856         }
857       *p = '\0';
858     }
859   if (delim == *input_line_pointer) ++input_line_pointer;
860 }
861
862 \f
863 /* Stub out a couple of routines.  */
864
865 static void
866 i370_rmode (int unused ATTRIBUTE_UNUSED)
867 {
868   as_tsktsk ("rmode ignored");
869 }
870
871 static void
872 i370_dsect (int sect)
873 {
874   char *save_line = input_line_pointer;
875   static char section[] = ".data\n";
876
877   /* Just pretend this is .section .data.  */
878   input_line_pointer = section;
879   obj_elf_section (sect);
880
881   input_line_pointer = save_line;
882 }
883
884 static void
885 i370_csect (int unused ATTRIBUTE_UNUSED)
886 {
887   as_tsktsk ("csect not supported");
888 }
889
890 \f
891 /* DC Define Const  is only partially supported.
892    For sample code on what to do, look at i370_elf_cons() above.
893    This code handles pseudoops of the style
894    DC   D'3.141592653'   # in sysv4, .double 3.14159265
895    DC   F'1'             # in sysv4, .long   1.  */
896
897 static void
898 i370_dc (int unused ATTRIBUTE_UNUSED)
899 {
900   char * p, tmp[50];
901   int nbytes=0;
902   expressionS exp;
903   char type=0;
904   char * clse;
905
906   if (is_it_end_of_statement ())
907     {
908       demand_empty_rest_of_line ();
909       return;
910     }
911
912   /* Figure out the size.  */
913   type = *input_line_pointer++;
914   switch (type)
915     {
916     case 'H':  /* 16-bit */
917       nbytes = 2;
918       break;
919     case 'E':  /* 32-bit */
920     case 'F':  /* 32-bit */
921       nbytes = 4;
922       break;
923     case 'D':  /* 64-bit */
924       nbytes = 8;
925       break;
926     default:
927       as_bad (_("unsupported DC type"));
928       return;
929     }
930
931   /* Get rid of pesky quotes.  */
932   if ('\'' == *input_line_pointer)
933     {
934       ++input_line_pointer;
935       clse = strchr (input_line_pointer, '\'');
936       if (clse)
937         *clse= ' ';
938       else
939         as_bad (_("missing end-quote"));
940     }
941
942   if ('\"' == *input_line_pointer)
943     {
944       ++input_line_pointer;
945       clse = strchr (input_line_pointer, '\"');
946       if (clse)
947         *clse= ' ';
948       else
949         as_bad (_("missing end-quote"));
950     }
951
952   switch (type)
953     {
954     case 'H':  /* 16-bit */
955     case 'F':  /* 32-bit */
956       expression (&exp);
957       emit_expr (&exp, nbytes);
958       break;
959     case 'E':  /* 32-bit */
960       type = 'f';
961       /* Fall through.  */
962     case 'D':  /* 64-bit */
963       md_atof (type, tmp, &nbytes);
964       p = frag_more (nbytes);
965       memcpy (p, tmp, nbytes);
966       break;
967     default:
968       as_bad (_("unsupported DC type"));
969       return;
970     }
971
972   demand_empty_rest_of_line ();
973 }
974
975 \f
976 /* Provide minimal support for DS Define Storage.  */
977
978 static void
979 i370_ds (int unused ATTRIBUTE_UNUSED)
980 {
981   /* DS 0H or DS 0F or DS 0D.  */
982   if ('0' == *input_line_pointer)
983     {
984       int alignment = 0;  /* Left shift 1 << align.  */
985       input_line_pointer ++;
986       switch (*input_line_pointer++)
987         {
988         case 'H':  /* 16-bit */
989           alignment = 1;
990           break;
991         case 'F':  /* 32-bit */
992           alignment = 2;
993           break;
994         case 'D':  /* 64-bit */
995           alignment = 3;
996           break;
997         default:
998           as_bad (_("unsupported alignment"));
999           return;
1000         }
1001       frag_align (alignment, 0, 0);
1002       record_alignment (now_seg, alignment);
1003     }
1004   else
1005     as_bad (_("this DS form not yet supported"));
1006 }
1007
1008 /* Solaris pseudo op to change to the .rodata section.  */
1009
1010 static void
1011 i370_elf_rdata (int sect)
1012 {
1013   char *save_line = input_line_pointer;
1014   static char section[] = ".rodata\n";
1015
1016   /* Just pretend this is .section .rodata.  */
1017   input_line_pointer = section;
1018   obj_elf_section (sect);
1019
1020   input_line_pointer = save_line;
1021 }
1022
1023 /* Pseudo op to make file scope bss items.  */
1024
1025 static void
1026 i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
1027 {
1028   char *name;
1029   char c;
1030   char *p;
1031   offsetT size;
1032   symbolS *symbolP;
1033   offsetT align;
1034   segT old_sec;
1035   int old_subsec;
1036   char *pfrag;
1037   int align2;
1038
1039   c = get_symbol_name (&name);
1040
1041   /* Just after name is now '\0'.  */
1042   p = input_line_pointer;
1043   (void) restore_line_pointer (c);
1044   SKIP_WHITESPACE ();
1045   if (*input_line_pointer != ',')
1046     {
1047       as_bad (_("Expected comma after symbol-name: rest of line ignored."));
1048       ignore_rest_of_line ();
1049       return;
1050     }
1051
1052   /* Skip ','.  */
1053   input_line_pointer++;
1054   if ((size = get_absolute_expression ()) < 0)
1055     {
1056       as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) size);
1057       ignore_rest_of_line ();
1058       return;
1059     }
1060
1061   /* The third argument to .lcomm is the alignment.  */
1062   if (*input_line_pointer != ',')
1063     align = 8;
1064   else
1065     {
1066       ++input_line_pointer;
1067       align = get_absolute_expression ();
1068       if (align <= 0)
1069         {
1070           as_warn (_("ignoring bad alignment"));
1071           align = 8;
1072         }
1073     }
1074
1075   *p = 0;
1076   symbolP = symbol_find_or_make (name);
1077   *p = c;
1078
1079   if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
1080     {
1081       as_bad (_("Ignoring attempt to re-define symbol `%s'."),
1082               S_GET_NAME (symbolP));
1083       ignore_rest_of_line ();
1084       return;
1085     }
1086
1087   if (S_GET_VALUE (symbolP) && S_GET_VALUE (symbolP) != (valueT) size)
1088     {
1089       as_bad (_("Length of .lcomm \"%s\" is already %ld. Not changed to %ld."),
1090               S_GET_NAME (symbolP),
1091               (long) S_GET_VALUE (symbolP),
1092               (long) size);
1093
1094       ignore_rest_of_line ();
1095       return;
1096     }
1097
1098   /* Allocate_bss:  */
1099   old_sec = now_seg;
1100   old_subsec = now_subseg;
1101   if (align)
1102     {
1103       /* Convert to a power of 2 alignment.  */
1104       for (align2 = 0; (align & 1) == 0; align >>= 1, ++align2)
1105         ;
1106       if (align != 1)
1107         {
1108           as_bad (_("Common alignment not a power of 2"));
1109           ignore_rest_of_line ();
1110           return;
1111         }
1112     }
1113   else
1114     align2 = 0;
1115
1116   record_alignment (bss_section, align2);
1117   subseg_set (bss_section, 0);
1118   if (align2)
1119     frag_align (align2, 0, 0);
1120   if (S_GET_SEGMENT (symbolP) == bss_section)
1121     symbol_get_frag (symbolP)->fr_symbol = 0;
1122   symbol_set_frag (symbolP, frag_now);
1123   pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, size,
1124                     (char *) 0);
1125   *pfrag = 0;
1126   S_SET_SIZE (symbolP, size);
1127   S_SET_SEGMENT (symbolP, bss_section);
1128   subseg_set (old_sec, old_subsec);
1129   demand_empty_rest_of_line ();
1130 }
1131
1132 /* Validate any relocations emitted for -mrelocatable, possibly adding
1133    fixups for word relocations in writable segments, so we can adjust
1134    them at runtime.  */
1135
1136 static void
1137 i370_elf_validate_fix (fixS *fixp, segT seg)
1138 {
1139   if (fixp->fx_done || fixp->fx_pcrel)
1140     return;
1141
1142   switch (shlib)
1143     {
1144     case SHLIB_NONE:
1145     case SHLIB_PIC:
1146       return;
1147
1148     case SHILB_MRELOCATABLE:
1149       if (fixp->fx_r_type <= BFD_RELOC_UNUSED
1150           && fixp->fx_r_type != BFD_RELOC_16_GOTOFF
1151           && fixp->fx_r_type != BFD_RELOC_HI16_GOTOFF
1152           && fixp->fx_r_type != BFD_RELOC_LO16_GOTOFF
1153           && fixp->fx_r_type != BFD_RELOC_HI16_S_GOTOFF
1154           && fixp->fx_r_type != BFD_RELOC_32_BASEREL
1155           && fixp->fx_r_type != BFD_RELOC_LO16_BASEREL
1156           && fixp->fx_r_type != BFD_RELOC_HI16_BASEREL
1157           && fixp->fx_r_type != BFD_RELOC_HI16_S_BASEREL
1158           && strcmp (segment_name (seg), ".got2") != 0
1159           && strcmp (segment_name (seg), ".dtors") != 0
1160           && strcmp (segment_name (seg), ".ctors") != 0
1161           && strcmp (segment_name (seg), ".fixup") != 0
1162           && strcmp (segment_name (seg), ".stab") != 0
1163           && strcmp (segment_name (seg), ".gcc_except_table") != 0
1164           && strcmp (segment_name (seg), ".ex_shared") != 0)
1165         {
1166           if ((seg->flags & (SEC_READONLY | SEC_CODE)) != 0
1167               || fixp->fx_r_type != BFD_RELOC_CTOR)
1168             as_bad_where (fixp->fx_file, fixp->fx_line,
1169                           "Relocation cannot be done when using -mrelocatable");
1170         }
1171       return;
1172     default:
1173       break;
1174     }
1175 }
1176 #endif /* OBJ_ELF */
1177
1178 \f
1179 #define LITERAL_POOL_SUPPORT
1180 #ifdef LITERAL_POOL_SUPPORT
1181 /* Provide support for literal pools within the text section.
1182    Loosely based on similar code from tc-arm.c.
1183    We will use four symbols to locate four parts of the literal pool.
1184    These four sections contain 64,32,16 and 8-bit constants; we use
1185    four sections so that all memory access can be appropriately aligned.
1186    That is, we want to avoid mixing these together so that we don't
1187    waste space padding out to alignments.  The four pointers
1188    longlong_poolP, word_poolP, etc. point to a symbol labeling the
1189    start of each pool part.
1190
1191    lit_pool_num increments from zero to infinity and uniquely id's
1192      -- it's used to generate the *_poolP symbol name.  */
1193
1194 #define MAX_LITERAL_POOL_SIZE 1024
1195
1196 typedef struct literalS
1197 {
1198   struct expressionS  exp;
1199   char * sym_name;
1200   char size;  /* 1,2,4 or 8 */
1201   short offset;
1202 } literalT;
1203
1204 literalT literals[MAX_LITERAL_POOL_SIZE];
1205 int next_literal_pool_place = 0; /* Next free entry in the pool.  */
1206
1207 static symbolS *longlong_poolP = NULL;   /* 64-bit pool entries.  */
1208 static symbolS *word_poolP = NULL;       /* 32-bit pool entries.  */
1209 static symbolS *short_poolP = NULL;      /* 16-bit pool entries.  */
1210 static symbolS *byte_poolP = NULL;       /* 8-bit  pool entries.  */
1211
1212 static int lit_pool_num = 1;
1213
1214 /* Create a new, empty symbol.  */
1215 static symbolS *
1216 symbol_make_empty (void)
1217 {
1218   return symbol_create (FAKE_LABEL_NAME, undefined_section,
1219                         (valueT) 0, &zero_address_frag);
1220 }
1221
1222 /* Make the first argument an address-relative expression
1223    by subtracting the second argument.  */
1224
1225 static void
1226 i370_make_relative (expressionS *exx, expressionS *baseaddr)
1227 {
1228   if (O_constant == baseaddr->X_op)
1229     {
1230        exx->X_op = O_symbol;
1231        exx->X_add_number -= baseaddr->X_add_number;
1232     }
1233   else if (O_symbol == baseaddr->X_op)
1234     {
1235        exx->X_op = O_subtract;
1236        exx->X_op_symbol = baseaddr->X_add_symbol;
1237        exx->X_add_number -= baseaddr->X_add_number;
1238     }
1239   else if (O_uminus == baseaddr->X_op)
1240     {
1241        exx->X_op = O_add;
1242        exx->X_op_symbol = baseaddr->X_add_symbol;
1243        exx->X_add_number += baseaddr->X_add_number;
1244     }
1245   else
1246     as_bad (_("Missing or bad .using directive"));
1247 }
1248 /* Add an expression to the literal pool.  */
1249
1250 static  void
1251 add_to_lit_pool (expressionS *exx, char *name, int sz)
1252 {
1253   int lit_count = 0;
1254   int offset_in_pool = 0;
1255
1256   /* Start a new pool, if necessary.  */
1257   if (8 == sz && NULL == longlong_poolP)
1258     longlong_poolP = symbol_make_empty ();
1259   else if (4 == sz && NULL == word_poolP)
1260     word_poolP = symbol_make_empty ();
1261   else if (2 == sz && NULL == short_poolP)
1262     short_poolP = symbol_make_empty ();
1263   else if (1 == sz && NULL == byte_poolP)
1264     byte_poolP = symbol_make_empty ();
1265
1266   /* Check if this literal value is already in the pool.
1267      FIXME: We should probably be checking expressions
1268             of type O_symbol as well.
1269      FIXME: This is probably(certainly?) broken for O_big,
1270             which includes 64-bit long-longs.  */
1271   while (lit_count < next_literal_pool_place)
1272     {
1273       if (exx->X_op == O_constant
1274           && literals[lit_count].exp.X_op == exx->X_op
1275           && literals[lit_count].exp.X_add_number == exx->X_add_number
1276           && literals[lit_count].exp.X_unsigned == exx->X_unsigned
1277           && literals[lit_count].size == sz)
1278         break;
1279       else if (literals[lit_count].sym_name
1280                && name
1281                && !strcmp (name, literals[lit_count].sym_name))
1282         break;
1283       if (sz == literals[lit_count].size)
1284         offset_in_pool += sz;
1285       lit_count ++;
1286     }
1287
1288   if (lit_count == next_literal_pool_place) /* new entry */
1289     {
1290       if (next_literal_pool_place > MAX_LITERAL_POOL_SIZE)
1291         as_bad (_("Literal Pool Overflow"));
1292
1293       literals[next_literal_pool_place].exp = *exx;
1294       literals[next_literal_pool_place].size = sz;
1295       literals[next_literal_pool_place].offset = offset_in_pool;
1296       if (name)
1297         literals[next_literal_pool_place].sym_name = strdup (name);
1298       else
1299         literals[next_literal_pool_place].sym_name = NULL;
1300       next_literal_pool_place++;
1301     }
1302
1303   /* ???_poolP points to the beginning of the literal pool.
1304      X_add_number is the offset from the beginning of the
1305      literal pool to this expr minus the location of the most
1306      recent .using directive.  Thus, the grand total value of the
1307      expression is the distance from .using to the literal.  */
1308   if (8 == sz)
1309     exx->X_add_symbol = longlong_poolP;
1310   else if (4 == sz)
1311     exx->X_add_symbol = word_poolP;
1312   else if (2 == sz)
1313     exx->X_add_symbol = short_poolP;
1314   else if (1 == sz)
1315     exx->X_add_symbol = byte_poolP;
1316   exx->X_add_number = offset_in_pool;
1317   exx->X_op_symbol = NULL;
1318
1319   /* If the user has set up a base reg in another section,
1320      use that; otherwise use the text section.  */
1321   if (0 < i370_using_other_regno)
1322     i370_make_relative (exx, &i370_using_other_baseaddr);
1323   else
1324     i370_make_relative (exx, &i370_using_text_baseaddr);
1325 }
1326
1327 /* The symbol setup for the literal pool is done in two steps.  First,
1328    a symbol that represents the start of the literal pool is created,
1329    above, in the add_to_pool() routine. This sym ???_poolP.
1330    However, we don't know what fragment it's in until a bit later.
1331    So we defer the frag_now thing, and the symbol name, until .ltorg time.  */
1332
1333 /* Can't use symbol_new here, so have to create a symbol and then at
1334    a later date assign it a value. That's what these functions do.  */
1335
1336 static void
1337 symbol_locate (symbolS *symbolP,
1338                const char *name,        /* It is copied, the caller can modify.  */
1339                segT segment,            /* Segment identifier (SEG_<something>).  */
1340                valueT valu,             /* Symbol value.  */
1341                fragS *frag)             /* Associated fragment.  */
1342 {
1343   size_t name_length;
1344   char *preserved_copy_of_name;
1345
1346   name_length = strlen (name) + 1;      /* +1 for \0 */
1347   obstack_grow (&notes, name, name_length);
1348   preserved_copy_of_name = obstack_finish (&notes);
1349
1350   S_SET_NAME (symbolP, preserved_copy_of_name);
1351
1352   S_SET_SEGMENT (symbolP, segment);
1353   S_SET_VALUE (symbolP, valu);
1354   symbol_clear_list_pointers (symbolP);
1355
1356   symbol_set_frag (symbolP, frag);
1357
1358   /* Link to end of symbol chain.  */
1359   {
1360     extern int symbol_table_frozen;
1361
1362     if (symbol_table_frozen)
1363       abort ();
1364   }
1365
1366   symbol_append (symbolP, symbol_lastP, &symbol_rootP, &symbol_lastP);
1367
1368   obj_symbol_new_hook (symbolP);
1369
1370 #ifdef tc_symbol_new_hook
1371   tc_symbol_new_hook (symbolP);
1372 #endif
1373
1374 #define DEBUG_SYMS
1375 #ifdef DEBUG_SYMS
1376   verify_symbol_chain(symbol_rootP, symbol_lastP);
1377 #endif /* DEBUG_SYMS */
1378 }
1379
1380 /* i370_addr_offset() will convert operand expressions
1381    that appear to be absolute into their base-register
1382    relative form.  These expressions come in two types:
1383
1384    (1) of the form "* + const" * where "*" means
1385    relative offset since the last using
1386    i.e. "*" means ".-using_baseaddr"
1387
1388    (2) labels, which are never absolute, but are always
1389    relative to the last "using".  Anything with an alpha
1390    character is considered to be a label (since symbols
1391    can never be operands), and since we've already handled
1392    register operands. For example, "BL .L33" branch low
1393    to .L33 RX form insn frequently terminates for-loops.  */
1394
1395 static bfd_boolean
1396 i370_addr_offset (expressionS *exx)
1397 {
1398   char *dot, *lab;
1399   int islabel = 0;
1400   int all_digits = 0;
1401
1402   /* Search for a label; anything with an alpha char will do.
1403      Local labels consist of N digits followed by either b or f.  */
1404   lab = input_line_pointer;
1405   while (*lab && (',' != *lab) && ('(' != *lab))
1406     {
1407       if (ISDIGIT (*lab))
1408         all_digits = 1;
1409       else if (ISALPHA (*lab))
1410         {
1411           if (!all_digits)
1412             {
1413               islabel = 1;
1414               break;
1415             }
1416           else if (('f' == *lab) || ('b' == *lab))
1417             {
1418               islabel = 1;
1419               break;
1420             }
1421           if (all_digits)
1422             break;
1423         }
1424       else if ('.' != *lab)
1425         break;
1426       ++lab;
1427     }
1428
1429   /* See if operand has a * in it.  */
1430   dot = strchr (input_line_pointer, '*');
1431
1432   if (!dot && !islabel)
1433     return FALSE;
1434
1435   /* Replace * with . and let expr munch on it.  */
1436   if (dot)
1437     *dot = '.';
1438   expression (exx);
1439
1440   /* OK, now we have to subtract the "using" location.
1441      Normally branches appear in the text section only.  */
1442   if (0 == strncmp (now_seg->name, ".text", 5) || 0 > i370_using_other_regno)
1443     i370_make_relative (exx, &i370_using_text_baseaddr);
1444   else
1445     i370_make_relative (exx, &i370_using_other_baseaddr);
1446
1447   /* Put the * back.  */
1448   if (dot)
1449     *dot = '*';
1450
1451   return TRUE;
1452 }
1453
1454 /* Handle address constants of various sorts.  */
1455 /* The currently supported types are
1456       =A(some_symb)
1457       =V(some_extern)
1458       =X'deadbeef'    hexadecimal
1459       =F'1234'        32-bit const int
1460       =H'1234'        16-bit const int.  */
1461
1462 static bfd_boolean
1463 i370_addr_cons (expressionS *exp)
1464 {
1465   char *name;
1466   char *sym_name, delim;
1467   int name_len;
1468   int hex_len = 0;
1469   int cons_len = 0;
1470
1471   name = input_line_pointer;
1472   sym_name = input_line_pointer;
1473   /* Find the spelling of the operand.  */
1474   if (name[0] == '=' && ISALPHA (name[1]))
1475     name = ++input_line_pointer;
1476   else
1477     return FALSE;
1478
1479   switch (name[0])
1480     {
1481     case 'A': /* A == address-of.  */
1482     case 'V': /* V == extern.  */
1483       ++input_line_pointer;
1484       expression (exp);
1485
1486       /* We use a simple string name to collapse together
1487          multiple references to the same address literal.  */
1488       name_len = strcspn (sym_name, ", ");
1489       delim = *(sym_name + name_len);
1490       *(sym_name + name_len) = 0x0;
1491       add_to_lit_pool (exp, sym_name, 4);
1492       *(sym_name + name_len) = delim;
1493
1494       break;
1495     case 'H':
1496     case 'F':
1497     case 'X':
1498     case 'E':  /* Single-precision float point.  */
1499     case 'D':  /* Double-precision float point.  */
1500
1501       /* H == 16-bit fixed-point const; expression must be const.  */
1502       /* F == fixed-point const; expression must be const.  */
1503       /* X == fixed-point const; expression must be const.  */
1504       if ('H' == name[0]) cons_len = 2;
1505       else if ('F' == name[0]) cons_len = 4;
1506       else if ('X' == name[0]) cons_len = -1;
1507       else if ('E' == name[0]) cons_len = 4;
1508       else if ('D' == name[0]) cons_len = 8;
1509
1510       /* Extract length, if it is present;
1511          FIXME: assume single-digit length.  */
1512       if ('L' == name[1])
1513         {
1514           /* Should work for ASCII and EBCDIC.  */
1515           cons_len = name[2] - '0';
1516           input_line_pointer += 2;
1517         }
1518
1519       ++input_line_pointer;
1520
1521       /* Get rid of pesky quotes.  */
1522       if ('\'' == *input_line_pointer)
1523         {
1524           char * clse;
1525
1526           ++input_line_pointer;
1527           clse = strchr (input_line_pointer, '\'');
1528           if (clse)
1529             *clse= ' ';
1530           else
1531             as_bad (_("missing end-quote"));
1532         }
1533       if ('\"' == *input_line_pointer)
1534         {
1535           char * clse;
1536
1537           ++input_line_pointer;
1538           clse = strchr (input_line_pointer, '\"');
1539           if (clse)
1540             *clse= ' ';
1541           else
1542             as_bad (_("missing end-quote"));
1543         }
1544       if (('X' == name[0]) || ('E' == name[0]) || ('D' == name[0]))
1545         {
1546           char tmp[50];
1547           char *save;
1548
1549           /* The length of hex constants is specified directly with L,
1550              or implied through the number of hex digits. For example:
1551              =X'AB'       one byte
1552              =X'abcd'     two bytes
1553              =X'000000AB' four bytes
1554              =XL4'AB'     four bytes, left-padded with zero.  */
1555           if (('X' == name[0]) && (0 > cons_len))
1556             {
1557               save = input_line_pointer;
1558               while (*save)
1559                 {
1560                   if (ISXDIGIT (*save))
1561                     hex_len++;
1562                   save++;
1563                 }
1564               cons_len = (hex_len+1) /2;
1565             }
1566           /* I believe this works even for =XL8'dada0000beeebaaa'
1567              which should parse out to X_op == O_big
1568              Note that floats and doubles get represented as
1569              0d3.14159265358979  or 0f 2.7.  */
1570           tmp[0] = '0';
1571           tmp[1] = name[0];
1572           tmp[2] = 0;
1573           strcat (tmp, input_line_pointer);
1574           save = input_line_pointer;
1575           input_line_pointer = tmp;
1576           expression (exp);
1577           input_line_pointer = save + (input_line_pointer-tmp-2);
1578
1579           /* Fix up lengths for floats and doubles.  */
1580           if (O_big == exp->X_op)
1581             exp->X_add_number = cons_len / CHARS_PER_LITTLENUM;
1582         }
1583       else
1584         expression (exp);
1585
1586       /* O_big occurs when more than 4 bytes worth gets parsed.  */
1587       if ((exp->X_op != O_constant) && (exp->X_op != O_big))
1588         {
1589           as_bad (_("expression not a constant"));
1590           return FALSE;
1591         }
1592       add_to_lit_pool (exp, 0x0, cons_len);
1593       break;
1594
1595     default:
1596       as_bad (_("Unknown/unsupported address literal type"));
1597       return FALSE;
1598     }
1599
1600   return TRUE;
1601 }
1602
1603 \f
1604 /* Dump the contents of the literal pool that we've accumulated so far.
1605    This aligns the pool to the size of the largest literal in the pool.  */
1606
1607 static void
1608 i370_ltorg (int ignore ATTRIBUTE_UNUSED)
1609 {
1610   int litsize;
1611   int lit_count = 0;
1612   int biggest_literal_size = 0;
1613   int biggest_align = 0;
1614   char pool_name[20];
1615
1616   if (strncmp (now_seg->name, ".text", 5))
1617     {
1618       if (i370_other_section == undefined_section)
1619         as_bad (_(".ltorg without prior .using in section %s"),
1620                 now_seg->name);
1621
1622       if (i370_other_section != now_seg)
1623         as_bad (_(".ltorg in section %s paired to .using in section %s"),
1624                 now_seg->name, i370_other_section->name);
1625     }
1626
1627   if (! longlong_poolP
1628       && ! word_poolP
1629       && ! short_poolP
1630       && ! byte_poolP)
1631     /* Nothing to do.  */
1632     return;
1633
1634   /* Find largest literal .. 2 4 or 8.  */
1635   lit_count = 0;
1636   while (lit_count < next_literal_pool_place)
1637     {
1638       if (biggest_literal_size < literals[lit_count].size)
1639         biggest_literal_size = literals[lit_count].size;
1640       lit_count ++;
1641     }
1642   if (1 == biggest_literal_size) biggest_align = 0;
1643   else if (2 == biggest_literal_size) biggest_align = 1;
1644   else if (4 == biggest_literal_size) biggest_align = 2;
1645   else if (8 == biggest_literal_size) biggest_align = 3;
1646   else as_bad (_("bad alignment of %d bytes in literal pool"), biggest_literal_size);
1647   if (0 == biggest_align) biggest_align = 1;
1648
1649   /* Align pool for short, word, double word accesses.  */
1650   frag_align (biggest_align, 0, 0);
1651   record_alignment (now_seg, biggest_align);
1652
1653   /* Note that the gas listing will print only the first five
1654      entries in the pool .... wonder how to make it print more.  */
1655   /* Output largest literals first, then the smaller ones.  */
1656   for (litsize=8; litsize; litsize /=2)
1657     {
1658       symbolS *current_poolP = NULL;
1659       switch (litsize)
1660         {
1661         case 8:
1662           current_poolP = longlong_poolP; break;
1663         case 4:
1664           current_poolP = word_poolP; break;
1665         case 2:
1666           current_poolP = short_poolP; break;
1667         case 1:
1668           current_poolP = byte_poolP; break;
1669         default:
1670           as_bad (_("bad literal size\n"));
1671         }
1672       if (NULL == current_poolP)
1673         continue;
1674       sprintf (pool_name, ".LITP%01d%06d", litsize, lit_pool_num);
1675       symbol_locate (current_poolP, pool_name, now_seg,
1676                      (valueT) frag_now_fix (), frag_now);
1677       symbol_table_insert (current_poolP);
1678
1679       lit_count = 0;
1680       while (lit_count < next_literal_pool_place)
1681         {
1682           if (litsize == literals[lit_count].size)
1683             {
1684 #define EMIT_ADDR_CONS_SYMBOLS
1685 #ifdef EMIT_ADDR_CONS_SYMBOLS
1686               /* Create a bogus symbol, add it to the pool ...
1687                  For the most part, I think this is a useless exercise,
1688                  except that having these symbol names in the objects
1689                  is vaguely useful for debugging.  */
1690               if (literals[lit_count].sym_name)
1691                 {
1692                   symbolS * symP = symbol_make_empty ();
1693                   symbol_locate (symP, literals[lit_count].sym_name, now_seg,
1694                                  (valueT) frag_now_fix (), frag_now);
1695                   symbol_table_insert (symP);
1696                 }
1697 #endif /* EMIT_ADDR_CONS_SYMBOLS */
1698
1699               emit_expr (&(literals[lit_count].exp), literals[lit_count].size);
1700             }
1701           lit_count ++;
1702         }
1703     }
1704
1705   next_literal_pool_place = 0;
1706   longlong_poolP = NULL;
1707   word_poolP = NULL;
1708   short_poolP = NULL;
1709   byte_poolP = NULL;
1710   lit_pool_num++;
1711 }
1712
1713 #endif /* LITERAL_POOL_SUPPORT */
1714
1715 \f
1716 /* Add support for the HLASM-like USING directive to indicate
1717    the base register to use ...  we don't support the full
1718    hlasm semantics for this ... we merely pluck a base address
1719    and a register number out.  We print a warning if using is
1720    called multiple times.  I suppose we should check to see
1721    if the regno is valid.  */
1722
1723 static void
1724 i370_using (int ignore ATTRIBUTE_UNUSED)
1725 {
1726   expressionS ex, baseaddr;
1727   int iregno;
1728   char *star;
1729
1730   /* If "*" appears in a using, it means "."
1731      replace it with "." so that expr doesn't get confused.  */
1732   star = strchr (input_line_pointer, '*');
1733   if (star)
1734     *star = '.';
1735
1736   /* The first arg to using will usually be ".", but it can
1737      be a more complex expression too.  */
1738   expression (&baseaddr);
1739   if (star)
1740     *star = '*';
1741   if (O_constant != baseaddr.X_op
1742       && O_symbol != baseaddr.X_op
1743       && O_uminus != baseaddr.X_op)
1744     as_bad (_(".using: base address expression illegal or too complex"));
1745
1746   if (*input_line_pointer != '\0') ++input_line_pointer;
1747
1748   /* The second arg to using had better be a register.  */
1749   register_name (&ex);
1750   demand_empty_rest_of_line ();
1751   iregno = ex.X_add_number;
1752
1753   if (0 == strncmp (now_seg->name, ".text", 5))
1754     {
1755       i370_using_text_baseaddr = baseaddr;
1756       i370_using_text_regno = iregno;
1757     }
1758   else
1759     {
1760       i370_using_other_baseaddr = baseaddr;
1761       i370_using_other_regno = iregno;
1762       i370_other_section = now_seg;
1763     }
1764 }
1765
1766 static void
1767 i370_drop (int ignore ATTRIBUTE_UNUSED)
1768 {
1769   expressionS ex;
1770   int iregno;
1771
1772   register_name (&ex);
1773   demand_empty_rest_of_line ();
1774   iregno = ex.X_add_number;
1775
1776   if (0 == strncmp (now_seg->name, ".text", 5))
1777     {
1778       if (iregno != i370_using_text_regno)
1779         as_bad (_("dropping register %d in section %s does not match using register %d"),
1780                 iregno, now_seg->name, i370_using_text_regno);
1781
1782       i370_using_text_regno = -1;
1783       i370_using_text_baseaddr.X_op = O_absent;
1784     }
1785   else
1786     {
1787       if (iregno != i370_using_other_regno)
1788         as_bad (_("dropping register %d in section %s does not match using register %d"),
1789                 iregno, now_seg->name, i370_using_other_regno);
1790
1791       if (i370_other_section != now_seg)
1792         as_bad (_("dropping register %d in section %s previously used in section %s"),
1793                 iregno, now_seg->name, i370_other_section->name);
1794
1795       i370_using_other_regno = -1;
1796       i370_using_other_baseaddr.X_op = O_absent;
1797       i370_other_section = undefined_section;
1798     }
1799 }
1800
1801 \f
1802 /* We need to keep a list of fixups.  We can't simply generate them as
1803    we go, because that would require us to first create the frag, and
1804    that would screw up references to ``.''.  */
1805
1806 struct i370_fixup
1807 {
1808   expressionS exp;
1809   int opindex;
1810   bfd_reloc_code_real_type reloc;
1811 };
1812
1813 #define MAX_INSN_FIXUPS 5
1814
1815 /* Handle a macro.  Gather all the operands, transform them as
1816    described by the macro, and call md_assemble recursively.  All the
1817    operands are separated by commas; we don't accept parentheses
1818    around operands here.  */
1819
1820 static void
1821 i370_macro (char *str, const struct i370_macro *macro)
1822 {
1823   char *operands[10];
1824   unsigned int count;
1825   char *s;
1826   unsigned int len;
1827   const char *format;
1828   int arg;
1829   char *send;
1830   char *complete;
1831
1832   /* Gather the users operands into the operands array.  */
1833   count = 0;
1834   s = str;
1835   while (1)
1836     {
1837       if (count >= sizeof operands / sizeof operands[0])
1838         break;
1839       operands[count++] = s;
1840       s = strchr (s, ',');
1841       if (s == (char *) NULL)
1842         break;
1843       *s++ = '\0';
1844     }
1845
1846   if (count != macro->operands)
1847     {
1848       as_bad (_("wrong number of operands"));
1849       return;
1850     }
1851
1852   /* Work out how large the string must be (the size is unbounded
1853      because it includes user input).  */
1854   len = 0;
1855   format = macro->format;
1856   while (*format != '\0')
1857     {
1858       if (*format != '%')
1859         {
1860           ++len;
1861           ++format;
1862         }
1863       else
1864         {
1865           arg = strtol (format + 1, &send, 10);
1866           know (send != format && arg >= 0 && (unsigned) arg < count);
1867           len += strlen (operands[arg]);
1868           format = send;
1869         }
1870     }
1871
1872   /* Put the string together.  */
1873   complete = s = XNEWVEC (char, len + 1);
1874   format = macro->format;
1875   while (*format != '\0')
1876     {
1877       if (*format != '%')
1878         *s++ = *format++;
1879       else
1880         {
1881           arg = strtol (format + 1, &send, 10);
1882           strcpy (s, operands[arg]);
1883           s += strlen (s);
1884           format = send;
1885         }
1886     }
1887   *s = '\0';
1888
1889   /* Assemble the constructed instruction.  */
1890   md_assemble (complete);
1891   free (complete);
1892 }
1893
1894 /* This routine is called for each instruction to be assembled.  */
1895
1896 void
1897 md_assemble (char *str)
1898 {
1899   char *s;
1900   const struct i370_opcode *opcode;
1901   i370_insn_t insn;
1902   const unsigned char *opindex_ptr;
1903   int have_optional_index, have_optional_basereg, have_optional_reg;
1904   int skip_optional_index, skip_optional_basereg, skip_optional_reg;
1905   int use_text=0, use_other=0;
1906   int off_by_one;
1907   struct i370_fixup fixups[MAX_INSN_FIXUPS];
1908   int fc;
1909   char *f;
1910   int i;
1911 #ifdef OBJ_ELF
1912   bfd_reloc_code_real_type reloc;
1913 #endif
1914
1915   /* Get the opcode.  */
1916   for (s = str; *s != '\0' && ! ISSPACE (*s); s++)
1917     ;
1918   if (*s != '\0')
1919     *s++ = '\0';
1920
1921   /* Look up the opcode in the hash table.  */
1922   opcode = (const struct i370_opcode *) hash_find (i370_hash, str);
1923   if (opcode == (const struct i370_opcode *) NULL)
1924     {
1925       const struct i370_macro *macro;
1926
1927       gas_assert (i370_macro_hash);
1928       macro = (const struct i370_macro *) hash_find (i370_macro_hash, str);
1929       if (macro == (const struct i370_macro *) NULL)
1930         as_bad (_("Unrecognized opcode: `%s'"), str);
1931       else
1932         i370_macro (s, macro);
1933
1934       return;
1935     }
1936
1937   insn = opcode->opcode;
1938
1939   str = s;
1940   while (ISSPACE (*str))
1941     ++str;
1942
1943   /* I370 operands are either expressions or address constants.
1944      Many operand types are optional.  The optional operands
1945      are always surrounded by parens, and are used to denote the base
1946      register ... e.g. "A R1, D2" or "A R1, D2(,B2) as opposed to
1947      the fully-formed "A R1, D2(X2,B2)".  Note also the = sign,
1948      such as A R1,=A(i) where the address-of operator =A implies
1949      use of both a base register, and a missing index register.
1950
1951      So, before we start seriously parsing the operands, we check
1952      to see if we have an optional operand, and, if we do, we count
1953      the number of commas to see which operand should be omitted.  */
1954
1955   have_optional_index = have_optional_basereg = have_optional_reg = 0;
1956   for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++)
1957     {
1958       const struct i370_operand *operand;
1959
1960       operand = &i370_operands[*opindex_ptr];
1961       if ((operand->flags & I370_OPERAND_INDEX) != 0)
1962         have_optional_index = 1;
1963       if ((operand->flags & I370_OPERAND_BASE) != 0)
1964         have_optional_basereg = 1;
1965       if ((operand->flags & I370_OPERAND_OPTIONAL) != 0)
1966         have_optional_reg = 1;
1967     }
1968
1969   skip_optional_index = skip_optional_basereg = skip_optional_reg = 0;
1970   if (have_optional_index || have_optional_basereg)
1971     {
1972       unsigned int opcount, nwanted;
1973
1974       /* There is an optional operand.  Count the number of
1975          commas and open-parens in the input line.  */
1976       if (*str == '\0')
1977         opcount = 0;
1978       else
1979         {
1980           opcount = 1;
1981           s = str;
1982           while ((s = strpbrk (s, ",(=")) != (char *) NULL)
1983             {
1984               ++opcount;
1985               ++s;
1986               if (',' == *s) ++s;  /* avoid counting things like (, */
1987               if ('=' == *s) { ++s; --opcount; }
1988             }
1989         }
1990
1991       /* If there are fewer operands in the line then are called
1992          for by the instruction, we want to skip the optional
1993          operand.  */
1994       nwanted = strlen ((char *) opcode->operands);
1995       if (have_optional_index)
1996         {
1997           if (opcount < nwanted)
1998             skip_optional_index = 1;
1999           if (have_optional_basereg && ((opcount+1) < nwanted))
2000             skip_optional_basereg = 1;
2001           if (have_optional_reg && ((opcount+1) < nwanted))
2002             skip_optional_reg = 1;
2003         }
2004       else
2005         {
2006           if (have_optional_basereg && (opcount < nwanted))
2007             skip_optional_basereg = 1;
2008           if (have_optional_reg && (opcount < nwanted))
2009             skip_optional_reg = 1;
2010         }
2011     }
2012
2013   /* Perform some off-by-one hacks on the length field of certain instructions.
2014      It's such a shame to have to do this, but the problem is that HLASM got
2015      defined so that the lengths differ by one from the actual machine instructions.
2016      this code should probably be moved to a special inter-operand routine.
2017      Sigh. Affected instructions are Compare Logical, Move and Exclusive OR
2018      hack alert -- aren't *all* SS instructions affected ??  */
2019   off_by_one = 0;
2020   if (0 == strcasecmp ("CLC", opcode->name)
2021       || 0 == strcasecmp ("ED", opcode->name)
2022       || 0 == strcasecmp ("EDMK", opcode->name)
2023       || 0 == strcasecmp ("MVC", opcode->name)
2024       || 0 == strcasecmp ("MVCIN", opcode->name)
2025       || 0 == strcasecmp ("MVN", opcode->name)
2026       || 0 == strcasecmp ("MVZ", opcode->name)
2027       || 0 == strcasecmp ("NC", opcode->name)
2028       || 0 == strcasecmp ("OC", opcode->name)
2029       || 0 == strcasecmp ("XC", opcode->name))
2030     off_by_one = 1;
2031
2032   /* Gather the operands.  */
2033   fc = 0;
2034   for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++)
2035     {
2036       const struct i370_operand *operand;
2037       char *hold;
2038       expressionS ex;
2039
2040       operand = &i370_operands[*opindex_ptr];
2041
2042       /* If this is an index operand, and we are skipping it,
2043          just insert a zero.  */
2044       if (skip_optional_index &&
2045           ((operand->flags & I370_OPERAND_INDEX) != 0))
2046         {
2047           insn = i370_insert_operand (insn, operand, 0);
2048           continue;
2049         }
2050
2051       /* If this is the base operand, and we are skipping it,
2052          just insert the current using basreg.  */
2053       if (skip_optional_basereg &&
2054           ((operand->flags & I370_OPERAND_BASE) != 0))
2055         {
2056           int basereg = -1;
2057           if (use_text)
2058             {
2059               if (0 == strncmp (now_seg->name, ".text", 5)
2060                   || 0 > i370_using_other_regno)
2061                 basereg = i370_using_text_regno;
2062               else
2063                 basereg = i370_using_other_regno;
2064             }
2065           else if (use_other)
2066             {
2067               if (0 > i370_using_other_regno)
2068                 basereg = i370_using_text_regno;
2069               else
2070                 basereg = i370_using_other_regno;
2071             }
2072           if (0 > basereg)
2073             as_bad (_("not using any base register"));
2074
2075           insn = i370_insert_operand (insn, operand, basereg);
2076           continue;
2077         }
2078
2079       /* If this is an optional operand, and we are skipping it,
2080          Use zero (since a non-zero value would denote a register)  */
2081       if (skip_optional_reg
2082           && ((operand->flags & I370_OPERAND_OPTIONAL) != 0))
2083         {
2084           insn = i370_insert_operand (insn, operand, 0);
2085           continue;
2086         }
2087
2088       /* Gather the operand.  */
2089       hold = input_line_pointer;
2090       input_line_pointer = str;
2091
2092       /* Register names are only allowed where there are registers.  */
2093       if ((operand->flags & I370_OPERAND_GPR) != 0)
2094         {
2095           /* Quickie hack to get past things like (,r13).  */
2096           if (skip_optional_index && (',' == *input_line_pointer))
2097             {
2098               *input_line_pointer = ' ';
2099               input_line_pointer ++;
2100             }
2101
2102           if (! register_name (&ex))
2103             as_bad (_("expecting a register for operand %d"),
2104                     (int) (opindex_ptr - opcode->operands + 1));
2105         }
2106
2107       /* Check for an address constant expression.  */
2108       /* We will put PSW-relative addresses in the text section,
2109          and address literals in the .data (or other) section.  */
2110       else if (i370_addr_cons (&ex))
2111         use_other = 1;
2112       else if (i370_addr_offset (&ex))
2113         use_text = 1;
2114       else expression (&ex);
2115
2116       str = input_line_pointer;
2117       input_line_pointer = hold;
2118
2119       /* Perform some off-by-one hacks on the length field of certain instructions.
2120          It's such a shame to have to do this, but the problem is that HLASM got
2121          defined so that the programmer specifies a length that is one greater
2122          than what the machine instruction wants.  Sigh.  */
2123       if (off_by_one && (0 == strcasecmp ("SS L", operand->name)))
2124         ex.X_add_number --;
2125
2126       if (ex.X_op == O_illegal)
2127         as_bad (_("illegal operand"));
2128       else if (ex.X_op == O_absent)
2129         as_bad (_("missing operand"));
2130       else if (ex.X_op == O_register)
2131         insn = i370_insert_operand (insn, operand, ex.X_add_number);
2132       else if (ex.X_op == O_constant)
2133         {
2134 #ifdef OBJ_ELF
2135           /* Allow @HA, @L, @H on constants.
2136              Well actually, no we don't; there really don't make sense
2137              (at least not to me) for the i370.  However, this code is
2138              left here for any dubious future expansion reasons.  */
2139           char *orig_str = str;
2140
2141           if ((reloc = i370_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
2142             switch (reloc)
2143               {
2144               default:
2145                 str = orig_str;
2146                 break;
2147
2148               case BFD_RELOC_LO16:
2149                 /* X_unsigned is the default, so if the user has done
2150                    something which cleared it, we always produce a
2151                    signed value.  */
2152                 ex.X_add_number = (((ex.X_add_number & 0xffff)
2153                                     ^ 0x8000)
2154                                    - 0x8000);
2155                 break;
2156
2157               case BFD_RELOC_HI16:
2158                 ex.X_add_number = (ex.X_add_number >> 16) & 0xffff;
2159                 break;
2160
2161               case BFD_RELOC_HI16_S:
2162                 ex.X_add_number = (((ex.X_add_number >> 16) & 0xffff)
2163                                    + ((ex.X_add_number >> 15) & 1));
2164                 break;
2165               }
2166 #endif
2167           insn = i370_insert_operand (insn, operand, ex.X_add_number);
2168         }
2169 #ifdef OBJ_ELF
2170       else if ((reloc = i370_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
2171         {
2172           as_tsktsk ("md_assemble(): suffixed relocations not supported\n");
2173
2174           /* We need to generate a fixup for this expression.  */
2175           if (fc >= MAX_INSN_FIXUPS)
2176             as_fatal ("too many fixups");
2177           fixups[fc].exp = ex;
2178           fixups[fc].opindex = 0;
2179           fixups[fc].reloc = reloc;
2180           ++fc;
2181         }
2182 #endif /* OBJ_ELF */
2183       else
2184         {
2185           /* We need to generate a fixup for this expression.  */
2186           /* Typically, the expression will just be a symbol ...
2187                printf ("insn %s needs fixup for %s \n",
2188                     opcode->name, ex.X_add_symbol->bsym->name);  */
2189
2190           if (fc >= MAX_INSN_FIXUPS)
2191             as_fatal ("too many fixups");
2192           fixups[fc].exp = ex;
2193           fixups[fc].opindex = *opindex_ptr;
2194           fixups[fc].reloc = BFD_RELOC_UNUSED;
2195           ++fc;
2196         }
2197
2198       /* Skip over delimiter (close paren, or comma).  */
2199       if ((')' == *str) && (',' == *(str+1)))
2200         ++str;
2201       if (*str != '\0')
2202         ++str;
2203     }
2204
2205   while (ISSPACE (*str))
2206     ++str;
2207
2208   if (*str != '\0')
2209     as_bad (_("junk at end of line: `%s'"), str);
2210
2211   /* Write out the instruction.  */
2212   f = frag_more (opcode->len);
2213   if (4 >= opcode->len)
2214     md_number_to_chars (f, insn.i[0], opcode->len);
2215   else
2216     {
2217       md_number_to_chars (f, insn.i[0], 4);
2218
2219       if (6 == opcode->len)
2220         md_number_to_chars ((f + 4), ((insn.i[1])>>16), 2);
2221       else
2222         {
2223           /* Not used --- don't have any 8 byte instructions.  */
2224           as_bad (_("Internal Error: bad instruction length"));
2225           md_number_to_chars ((f + 4), insn.i[1], opcode->len -4);
2226         }
2227     }
2228
2229   /* Create any fixups.  At this point we do not use a
2230      bfd_reloc_code_real_type, but instead just use the
2231      BFD_RELOC_UNUSED plus the operand index.  This lets us easily
2232      handle fixups for any operand type, although that is admittedly
2233      not a very exciting feature.  We pick a BFD reloc type in
2234      md_apply_fix.  */
2235   for (i = 0; i < fc; i++)
2236     {
2237       const struct i370_operand *operand;
2238
2239       operand = &i370_operands[fixups[i].opindex];
2240       if (fixups[i].reloc != BFD_RELOC_UNUSED)
2241         {
2242           reloc_howto_type *reloc_howto = bfd_reloc_type_lookup (stdoutput, fixups[i].reloc);
2243           int size;
2244           fixS *fixP;
2245
2246           if (!reloc_howto)
2247             abort ();
2248
2249           size = bfd_get_reloc_size (reloc_howto);
2250
2251           if (size < 1 || size > 4)
2252             abort ();
2253
2254           printf (" gwana do fixup %d \n", i);
2255           fixP = fix_new_exp (frag_now, f - frag_now->fr_literal, size,
2256                               &fixups[i].exp, reloc_howto->pc_relative,
2257                               fixups[i].reloc);
2258
2259           /* Turn off complaints that the addend is too large for things like
2260              foo+100000@ha.  */
2261           switch (fixups[i].reloc)
2262             {
2263             case BFD_RELOC_16_GOTOFF:
2264             case BFD_RELOC_LO16:
2265             case BFD_RELOC_HI16:
2266             case BFD_RELOC_HI16_S:
2267               fixP->fx_no_overflow = 1;
2268               break;
2269             default:
2270               break;
2271             }
2272         }
2273       else
2274         {
2275           fix_new_exp (frag_now, f - frag_now->fr_literal, opcode->len,
2276                        &fixups[i].exp,
2277                        (operand->flags & I370_OPERAND_RELATIVE) != 0,
2278                        ((bfd_reloc_code_real_type)
2279                         (fixups[i].opindex + (int) BFD_RELOC_UNUSED)));
2280         }
2281     }
2282 }
2283
2284 \f
2285 /* Pseudo-op handling.  */
2286
2287 /* The .byte pseudo-op.  This is similar to the normal .byte
2288    pseudo-op, but it can also take a single ASCII string.  */
2289
2290 static void
2291 i370_byte (int ignore ATTRIBUTE_UNUSED)
2292 {
2293   if (*input_line_pointer != '\"')
2294     {
2295       cons (1);
2296       return;
2297     }
2298
2299   /* Gather characters.  A real double quote is doubled.  Unusual
2300      characters are not permitted.  */
2301   ++input_line_pointer;
2302   while (1)
2303     {
2304       char c;
2305
2306       c = *input_line_pointer++;
2307
2308       if (c == '\"')
2309         {
2310         if (*input_line_pointer != '\"')
2311             break;
2312           ++input_line_pointer;
2313         }
2314
2315       FRAG_APPEND_1_CHAR (c);
2316     }
2317
2318   demand_empty_rest_of_line ();
2319 }
2320 \f
2321 /* The .tc pseudo-op.  This is used when generating XCOFF and ELF.
2322    This takes two or more arguments.
2323
2324    When generating XCOFF output, the first argument is the name to
2325    give to this location in the toc; this will be a symbol with class
2326    TC.  The rest of the arguments are 4 byte values to actually put at
2327    this location in the TOC; often there is just one more argument, a
2328    relocatable symbol reference.
2329
2330    When not generating XCOFF output, the arguments are the same, but
2331    the first argument is simply ignored.  */
2332
2333 static void
2334 i370_tc (int ignore ATTRIBUTE_UNUSED)
2335 {
2336
2337   /* Skip the TOC symbol name.  */
2338   while (is_part_of_name (*input_line_pointer)
2339          || *input_line_pointer == '['
2340          || *input_line_pointer == ']'
2341          || *input_line_pointer == '{'
2342          || *input_line_pointer == '}')
2343     ++input_line_pointer;
2344
2345   /* Align to a four byte boundary.  */
2346   frag_align (2, 0, 0);
2347   record_alignment (now_seg, 2);
2348
2349   if (*input_line_pointer != ',')
2350     demand_empty_rest_of_line ();
2351   else
2352     {
2353       ++input_line_pointer;
2354       cons (4);
2355     }
2356 }
2357 \f
2358 const char *
2359 md_atof (int type, char *litp, int *sizep)
2360 {
2361   /* 360/370/390 have two float formats: an old, funky 360 single-precision
2362      format, and the ieee format.  Support only the ieee format.  */
2363   return ieee_md_atof (type, litp, sizep, TRUE);
2364 }
2365
2366 /* Write a value out to the object file, using the appropriate
2367    endianness.  */
2368
2369 void
2370 md_number_to_chars (char *buf, valueT val, int n)
2371 {
2372   number_to_chars_bigendian (buf, val, n);
2373 }
2374
2375 /* Align a section (I don't know why this is machine dependent).  */
2376
2377 valueT
2378 md_section_align (asection *seg, valueT addr)
2379 {
2380   int align = bfd_get_section_alignment (stdoutput, seg);
2381
2382   return (addr + (1 << align) - 1) & -(1 << align);
2383 }
2384
2385 /* We don't have any form of relaxing.  */
2386
2387 int
2388 md_estimate_size_before_relax (fragS *fragp ATTRIBUTE_UNUSED,
2389                                asection *seg ATTRIBUTE_UNUSED)
2390 {
2391   abort ();
2392   return 0;
2393 }
2394
2395 /* Convert a machine dependent frag.  We never generate these.  */
2396
2397 void
2398 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
2399                  asection *sec ATTRIBUTE_UNUSED,
2400                  fragS *fragp ATTRIBUTE_UNUSED)
2401 {
2402   abort ();
2403 }
2404
2405 /* We have no need to default values of symbols.  */
2406
2407 symbolS *
2408 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
2409 {
2410   return 0;
2411 }
2412 \f
2413 /* Functions concerning relocs.  */
2414
2415 /* The location from which a PC relative jump should be calculated,
2416    given a PC relative reloc.  */
2417
2418 long
2419 md_pcrel_from_section (fixS *fixp, segT sec ATTRIBUTE_UNUSED)
2420 {
2421   return fixp->fx_frag->fr_address + fixp->fx_where;
2422 }
2423
2424 /* Apply a fixup to the object code.  This is called for all the
2425    fixups we generated by the call to fix_new_exp, above.  In the call
2426    above we used a reloc code which was the largest legal reloc code
2427    plus the operand index.  Here we undo that to recover the operand
2428    index.  At this point all symbol values should be fully resolved,
2429    and we attempt to completely resolve the reloc.  If we can not do
2430    that, we determine the correct reloc code and put it back in the
2431    fixup.
2432
2433    See gas/cgen.c for more sample code and explanations of what's
2434    going on here.  */
2435
2436 void
2437 md_apply_fix (fixS *fixP, valueT * valP, segT seg)
2438 {
2439   valueT value = * valP;
2440
2441   if (fixP->fx_addsy != NULL)
2442     {
2443 #ifdef DEBUG
2444       printf ("\nmd_apply_fix: symbol %s at 0x%x (%s:%d) val=0x%x addend=0x%x\n",
2445               S_GET_NAME (fixP->fx_addsy),
2446               fixP->fx_frag->fr_address + fixP->fx_where,
2447               fixP->fx_file, fixP->fx_line,
2448               S_GET_VALUE (fixP->fx_addsy), value);
2449 #endif
2450     }
2451   else
2452     fixP->fx_done = 1;
2453
2454   /* Apply fixups to operands.  Note that there should be no relocations
2455      for any operands, since no instruction ever takes an operand
2456      that requires reloc.  */
2457   if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
2458     {
2459       int opindex;
2460       const struct i370_operand *operand;
2461       char *where;
2462       i370_insn_t insn;
2463
2464       opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
2465
2466       operand = &i370_operands[opindex];
2467
2468 #ifdef DEBUG
2469       printf ("\nmd_apply_fix: fixup operand %s at 0x%x in %s:%d addend=0x%x\n",
2470               operand->name,
2471               fixP->fx_frag->fr_address + fixP->fx_where,
2472               fixP->fx_file, fixP->fx_line,
2473               value);
2474 #endif
2475       /* Fetch the instruction, insert the fully resolved operand
2476          value, and stuff the instruction back again.
2477          fisxp->fx_size is the length of the instruction.  */
2478       where = fixP->fx_frag->fr_literal + fixP->fx_where;
2479       insn.i[0] = bfd_getb32 ((unsigned char *) where);
2480
2481       if (6 <= fixP->fx_size)
2482         /* Deal with 48-bit insn's.  */
2483         insn.i[1] = bfd_getb32 (((unsigned char *) where)+4);
2484
2485       insn = i370_insert_operand (insn, operand, (offsetT) value);
2486       bfd_putb32 ((bfd_vma) insn.i[0], (unsigned char *) where);
2487
2488       if (6 <= fixP->fx_size)
2489         /* Deal with 48-bit insn's.  */
2490         bfd_putb32 ((bfd_vma) insn.i[1], (((unsigned char *) where)+4));
2491
2492       /* We are done, right? right !!  */
2493       fixP->fx_done = 1;
2494       if (fixP->fx_done)
2495         /* Nothing else to do here.  */
2496         return;
2497
2498       /* Determine a BFD reloc value based on the operand information.
2499          We are only prepared to turn a few of the operands into
2500          relocs.  In fact, we support *zero* operand relocations ...
2501          Why?  Because we are not expecting the compiler to generate
2502          any operands that need relocation.  Due to the 12-bit nature of
2503          i370 addressing, this would be unusual.  */
2504         {
2505           const char *sfile;
2506           unsigned int sline;
2507
2508           /* Use expr_symbol_where to see if this is an expression
2509              symbol.  */
2510           if (expr_symbol_where (fixP->fx_addsy, &sfile, &sline))
2511             as_bad_where (fixP->fx_file, fixP->fx_line,
2512                           "unresolved expression that must be resolved");
2513           else
2514             as_bad_where (fixP->fx_file, fixP->fx_line,
2515                           "unsupported relocation type");
2516           fixP->fx_done = 1;
2517           return;
2518         }
2519     }
2520   else
2521     {
2522       /* We branch to here if the fixup is not to a symbol that
2523          appears in an instruction operand, but is rather some
2524          declared storage.  */
2525 #ifdef OBJ_ELF
2526       i370_elf_validate_fix (fixP, seg);
2527 #endif
2528 #ifdef DEBUG
2529       printf ("md_apply_fix: reloc case %d in segment  %s %s:%d\n",
2530               fixP->fx_r_type, segment_name (seg), fixP->fx_file, fixP->fx_line);
2531       printf ("\tcurrent fixup value is 0x%x \n", value);
2532 #endif
2533       switch (fixP->fx_r_type)
2534         {
2535         case BFD_RELOC_32:
2536         case BFD_RELOC_CTOR:
2537           if (fixP->fx_pcrel)
2538             fixP->fx_r_type = BFD_RELOC_32_PCREL;
2539           /* Fall through.  */
2540
2541         case BFD_RELOC_RVA:
2542         case BFD_RELOC_32_PCREL:
2543         case BFD_RELOC_32_BASEREL:
2544 #ifdef DEBUG
2545           printf ("\t32 bit relocation at 0x%x\n",
2546                   fixP->fx_frag->fr_address + fixP->fx_where);
2547 #endif
2548           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2549                               value, 4);
2550           break;
2551
2552         case BFD_RELOC_LO16:
2553         case BFD_RELOC_16:
2554           if (fixP->fx_pcrel)
2555             as_bad_where (fixP->fx_file, fixP->fx_line,
2556                           "cannot emit PC relative %s relocation%s%s",
2557                           bfd_get_reloc_code_name (fixP->fx_r_type),
2558                           fixP->fx_addsy != NULL ? " against " : "",
2559                           (fixP->fx_addsy != NULL
2560                            ? S_GET_NAME (fixP->fx_addsy)
2561                            : ""));
2562
2563           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2564                               value, 2);
2565           break;
2566
2567           /* This case happens when you write, for example,
2568              lis %r3,(L1-L2)@ha
2569              where L1 and L2 are defined later.  */
2570         case BFD_RELOC_HI16:
2571           if (fixP->fx_pcrel)
2572             abort ();
2573           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2574                               value >> 16, 2);
2575           break;
2576         case BFD_RELOC_HI16_S:
2577           if (fixP->fx_pcrel)
2578             abort ();
2579           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2580                               (value + 0x8000) >> 16, 2);
2581           break;
2582
2583         case BFD_RELOC_8:
2584           if (fixP->fx_pcrel)
2585             abort ();
2586
2587           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2588                               value, 1);
2589           break;
2590
2591         default:
2592           fprintf (stderr,
2593                   "Gas failure, reloc value %d\n", fixP->fx_r_type);
2594           fflush (stderr);
2595           abort ();
2596         }
2597     }
2598
2599   fixP->fx_addnumber = value;
2600 }
2601
2602 /* Generate a reloc for a fixup.  */
2603
2604 arelent *
2605 tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
2606 {
2607   arelent *reloc;
2608
2609   reloc = XNEW (arelent);
2610
2611   reloc->sym_ptr_ptr = XNEW (asymbol *);
2612   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
2613   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
2614   reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
2615   if (reloc->howto == (reloc_howto_type *) NULL)
2616     {
2617       as_bad_where (fixp->fx_file, fixp->fx_line,
2618                     "reloc %d not supported by object file format", (int)fixp->fx_r_type);
2619       return NULL;
2620     }
2621   reloc->addend = fixp->fx_addnumber;
2622
2623 #ifdef DEBUG
2624   printf ("\ngen_reloc(): sym %s (%s:%d) at addr 0x%x addend=0x%x\n",
2625           fixp->fx_addsy->bsym->name,
2626           fixp->fx_file, fixp->fx_line,
2627           reloc->address, reloc->addend);
2628 #endif
2629
2630   return reloc;
2631 }
2632
2633 /* The target specific pseudo-ops which we support.  */
2634
2635 const pseudo_typeS md_pseudo_table[] =
2636 {
2637   /* Pseudo-ops which must be overridden.  */
2638   { "byte",     i370_byte,      0 },
2639
2640   { "dc",       i370_dc,        0 },
2641   { "ds",       i370_ds,        0 },
2642   { "rmode",    i370_rmode,     0 },
2643   { "csect",    i370_csect,     0 },
2644   { "dsect",    i370_dsect,     0 },
2645
2646   /* enable ebcdic strings e.g. for 3270 support */
2647   { "ebcdic",   i370_ebcdic,    0 },
2648
2649 #ifdef OBJ_ELF
2650   { "long",     i370_elf_cons,  4 },
2651   { "word",     i370_elf_cons,  4 },
2652   { "short",    i370_elf_cons,  2 },
2653   { "rdata",    i370_elf_rdata, 0 },
2654   { "rodata",   i370_elf_rdata, 0 },
2655   { "lcomm",    i370_elf_lcomm, 0 },
2656 #endif
2657
2658   /* This pseudo-op is used even when not generating XCOFF output.  */
2659   { "tc",       i370_tc,        0 },
2660
2661   /* dump the literal pool */
2662   { "ltorg",    i370_ltorg,     0 },
2663
2664   /* support the hlasm-style USING directive */
2665   { "using",    i370_using,     0 },
2666   { "drop",     i370_drop,      0 },
2667
2668   { NULL,       NULL,           0 }
2669 };