2007-09-14 H.J. Lu <hongjiu.lu@intel.com>
[platform/upstream/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 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4    2004, 2005, 2006, 2007 Free Software Foundation, Inc.
5    Written by Ian Lance Taylor, Cygnus Support.
6
7    This file is part of GAS, the GNU Assembler.
8
9    GAS is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3, or (at your option)
12    any later version.
13
14    GAS is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with GAS; see the file COPYING.  If not, write to the Free
21    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
22    02110-1301, USA.  */
23
24 /* This assembler implements a very hacked version of an elf-like thing
25    that gcc emits (when gcc is suitably hacked).  To make it behave more
26    HLASM-like, try turning on the -M or --mri flag (as there are various
27    similarities between HLASM and the MRI assemblers, such as section
28    names, lack of leading . in pseudo-ops, DC and DS, etc.  */
29
30 #include "as.h"
31 #include "safe-ctype.h"
32 #include "subsegs.h"
33 #include "struc-symbol.h"
34
35 #include "opcode/i370.h"
36
37 #ifdef OBJ_ELF
38 #include "elf/i370.h"
39 #endif
40
41 /* This is the assembler for the System/390 Architecture.  */
42
43 /* Tell the main code what the endianness is.  */
44 extern int target_big_endian;
45
46 \f
47 /* Generic assembler global variables which must be defined by all
48    targets.  */
49
50 #ifdef OBJ_ELF
51 /* This string holds the chars that always start a comment.  If the
52    pre-processor is disabled, these aren't very useful.  The macro
53    tc_comment_chars points to this.  We use this, rather than the
54    usual comment_chars, so that we can switch for Solaris conventions.  */
55 static const char i370_eabi_comment_chars[] = "#";
56
57 const char *i370_comment_chars = i370_eabi_comment_chars;
58 #else
59 const char comment_chars[] = "#";
60 #endif
61
62 /* Characters which start a comment at the beginning of a line.  */
63 const char line_comment_chars[] = "#*";
64
65 /* Characters which may be used to separate multiple commands on a
66    single line.  */
67 const char line_separator_chars[] = ";";
68
69 /* Characters which are used to indicate an exponent in a floating
70    point number.  */
71 const char EXP_CHARS[] = "eE";
72
73 /* Characters which mean that a number is a floating point constant,
74    as in 0d1.0.  */
75 const char FLT_CHARS[] = "dD";
76
77 void
78 md_show_usage (FILE *stream)
79 {
80   fprintf (stream, "\
81 S/370 options: (these have not yet been tested and may not work) \n\
82 -u                      ignored\n\
83 -mregnames              Allow symbolic names for registers\n\
84 -mno-regnames           Do not allow symbolic names for registers\n");
85 #ifdef OBJ_ELF
86   fprintf (stream, "\
87 -mrelocatable           support for GCC's -mrelocatble option\n\
88 -mrelocatable-lib       support for GCC's -mrelocatble-lib option\n\
89 -V                      print assembler version number\n");
90 #endif
91 }
92
93 /* Whether to use user friendly register names.  */
94 #define TARGET_REG_NAMES_P TRUE
95
96 static bfd_boolean reg_names_p = TARGET_REG_NAMES_P;
97
98 \f
99 /* Predefined register names if -mregnames
100    In general, there are lots of them, in an attempt to be compatible
101    with a number of assemblers.  */
102
103 /* Structure to hold information about predefined registers.  */
104 struct pd_reg
105   {
106     char *name;
107     int value;
108   };
109
110 /* List of registers that are pre-defined:
111
112    Each general register has predefined names of the form:
113    1. r<reg_num> which has the value <reg_num>.
114    2. r.<reg_num> which has the value <reg_num>.
115
116    Each floating point register has predefined names of the form:
117    1. f<reg_num> which has the value <reg_num>.
118    2. f.<reg_num> which has the value <reg_num>.
119
120    There are only four floating point registers, and these are
121    commonly labelled 0,2,4 and 6.  Thus, there is no f1, f3, etc.
122
123    There are individual registers as well:
124    rbase or r.base has the value  3  (base register)
125    rpgt or r.pgt   has the value  4  (page origin table pointer)
126    rarg or r.arg   has the value 11  (argument pointer)
127    rtca or r.tca   has the value 12  (table of contents pointer)
128    rtoc or r.toc   has the value 12  (table of contents pointer)
129    sp or r.sp      has the value 13  (stack pointer)
130    dsa or r.dsa    has the value 13  (stack pointer)
131    lr              has the value 14  (link reg)
132
133    The table is sorted. Suitable for searching by a binary search.  */
134
135 static const struct pd_reg pre_defined_registers[] =
136 {
137   { "arg", 11 },   /* Argument Pointer.  */
138   { "base", 3 },   /* Base Reg.  */
139
140   { "f.0", 0 },    /* Floating point registers.  */
141   { "f.2", 2 },
142   { "f.4", 4 },
143   { "f.6", 6 },
144
145   { "f0", 0 },
146   { "f2", 2 },
147   { "f4", 4 },
148   { "f6", 6 },
149
150   { "dsa",13 },    /* Stack pointer.  */
151   { "lr", 14 },    /* Link Register.  */
152   { "pgt", 4 },    /* Page Origin Table Pointer.  */
153
154   { "r.0", 0 },    /* General Purpose Registers.  */
155   { "r.1", 1 },
156   { "r.10", 10 },
157   { "r.11", 11 },
158   { "r.12", 12 },
159   { "r.13", 13 },
160   { "r.14", 14 },
161   { "r.15", 15 },
162   { "r.2", 2 },
163   { "r.3", 3 },
164   { "r.4", 4 },
165   { "r.5", 5 },
166   { "r.6", 6 },
167   { "r.7", 7 },
168   { "r.8", 8 },
169   { "r.9", 9 },
170
171   { "r.arg", 11 },  /* Argument Pointer.  */
172   { "r.base", 3 },  /* Base Reg.  */
173   { "r.dsa", 13 },  /* Stack Pointer.  */
174   { "r.pgt", 4 },   /* Page Origin Table Pointer.  */
175   { "r.sp", 13 },   /* Stack Pointer.  */
176
177   { "r.tca", 12 },  /* Pointer to the table of contents.  */
178   { "r.toc", 12 },  /* Pointer to the table of contents.  */
179
180   { "r0", 0 },      /* More general purpose registers.  */
181   { "r1", 1 },
182   { "r10", 10 },
183   { "r11", 11 },
184   { "r12", 12 },
185   { "r13", 13 },
186   { "r14", 14 },
187   { "r15", 15 },
188   { "r2", 2 },
189   { "r3", 3 },
190   { "r4", 4 },
191   { "r5", 5 },
192   { "r6", 6 },
193   { "r7", 7 },
194   { "r8", 8 },
195   { "r9", 9 },
196
197   { "rbase", 3 },  /* Base Reg.  */
198
199   { "rtca", 12 },  /* Pointer to the table of contents.  */
200   { "rtoc", 12 },  /* Pointer to the table of contents.  */
201
202   { "sp", 13 },   /* Stack Pointer.  */
203
204 };
205
206 #define REG_NAME_CNT        (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
207
208 /* Given NAME, find the register number associated with that name, return
209    the integer value associated with the given name or -1 on failure.  */
210
211 static int
212 reg_name_search (const struct pd_reg *regs,
213                  int regcount,
214                  const char *name)
215 {
216   int middle, low, high;
217   int cmp;
218
219   low = 0;
220   high = regcount - 1;
221
222   do
223     {
224       middle = (low + high) / 2;
225       cmp = strcasecmp (name, regs[middle].name);
226       if (cmp < 0)
227         high = middle - 1;
228       else if (cmp > 0)
229         low = middle + 1;
230       else
231         return regs[middle].value;
232     }
233   while (low <= high);
234
235   return -1;
236 }
237
238 /* Summary of register_name().
239
240    in:        Input_line_pointer points to 1st char of operand.
241
242    out:        An expressionS.
243         The operand may have been a register: in this case, X_op == O_register,
244         X_add_number is set to the register number, and truth is returned.
245           Input_line_pointer->(next non-blank) char after operand, or is in its
246         original state.  */
247
248 static bfd_boolean
249 register_name (expressionS *expressionP)
250 {
251   int reg_number;
252   char *name;
253   char *start;
254   char c;
255
256   /* Find the spelling of the operand.  */
257   start = name = input_line_pointer;
258   if (name[0] == '%' && ISALPHA (name[1]))
259     name = ++input_line_pointer;
260
261   else if (!reg_names_p)
262     return FALSE;
263
264   while (' ' == *name)
265     name = ++input_line_pointer;
266
267   /* If it's a number, treat it as a number.  If it's alpha, look to
268      see if it's in the register table.  */
269   if (!ISALPHA (name[0]))
270     reg_number = get_single_number ();
271   else
272     {
273       c = get_symbol_end ();
274       reg_number = reg_name_search (pre_defined_registers, REG_NAME_CNT, name);
275
276       /* Put back the delimiting char.  */
277       *input_line_pointer = c;
278     }
279
280   /* If numeric, make sure its not out of bounds.  */
281   if ((0 <= reg_number) && (16 >= reg_number))
282     {
283       expressionP->X_op = O_register;
284       expressionP->X_add_number = reg_number;
285
286       /* Make the rest nice.  */
287       expressionP->X_add_symbol = NULL;
288       expressionP->X_op_symbol = NULL;
289       return TRUE;
290     }
291
292   /* Reset the line as if we had not done anything.  */
293   input_line_pointer = start;
294   return FALSE;
295 }
296 \f
297 /* Local variables.  */
298
299 /* The type of processor we are assembling for.  This is one or more
300    of the I370_OPCODE flags defined in opcode/i370.h.  */
301 static int i370_cpu = 0;
302
303 /* The base register to use for opcode with optional operands.
304    We define two of these: "text" and "other".  Normally, "text"
305    would get used in the .text section for branches, while "other"
306    gets used in the .data section for address constants.
307
308    The idea of a second base register in a different section
309    is foreign to the usual HLASM-style semantics; however, it
310    allows us to provide support for dynamically loaded libraries,
311    by allowing us to place address constants in a section other
312    than the text section. The "other" section need not be the
313    .data section, it can be any section that isn't the .text section.
314
315    Note that HLASM defines a multiple, concurrent .using semantic
316    that we do not: in calculating offsets, it uses either the most
317    recent .using directive, or the one with the smallest displacement.
318    This allows HLASM to support a quasi-block-scope-like behaviour.
319    Handy for people writing assembly by hand ... but not supported
320    by us.  */
321 static int i370_using_text_regno = -1;
322 static int i370_using_other_regno = -1;
323
324 /* The base address for address literals.  */
325 static expressionS i370_using_text_baseaddr;
326 static expressionS i370_using_other_baseaddr;
327
328 /* the "other" section, used only for syntax error detection.  */
329 static segT i370_other_section = undefined_section;
330
331 /* Opcode hash table.  */
332 static struct hash_control *i370_hash;
333
334 /* Macro hash table.  */
335 static struct hash_control *i370_macro_hash;
336
337 #ifdef OBJ_ELF
338 /* What type of shared library support to use.  */
339 static enum { SHLIB_NONE, SHLIB_PIC, SHILB_MRELOCATABLE } shlib = SHLIB_NONE;
340 #endif
341
342 /* Flags to set in the elf header.  */
343 static flagword i370_flags = 0;
344
345 #ifndef WORKING_DOT_WORD
346 int md_short_jump_size = 4;
347 int md_long_jump_size = 4;
348 #endif
349 \f
350 #ifdef OBJ_ELF
351 const char *md_shortopts = "l:um:K:VQ:";
352 #else
353 const char *md_shortopts = "um:";
354 #endif
355 struct option md_longopts[] =
356 {
357   {NULL, no_argument, NULL, 0}
358 };
359 size_t md_longopts_size = sizeof (md_longopts);
360
361 int
362 md_parse_option (int c, char *arg)
363 {
364   switch (c)
365     {
366     case 'u':
367       /* -u means that any undefined symbols should be treated as
368          external, which is the default for gas anyhow.  */
369       break;
370
371 #ifdef OBJ_ELF
372     case 'K':
373       /* Recognize -K PIC */
374       if (strcmp (arg, "PIC") == 0 || strcmp (arg, "pic") == 0)
375         {
376           shlib = SHLIB_PIC;
377           i370_flags |= EF_I370_RELOCATABLE_LIB;
378         }
379       else
380         return 0;
381
382       break;
383 #endif
384
385     case 'm':
386
387       /* -m360 mean to assemble for the ancient 360 architecture.  */
388       if (strcmp (arg, "360") == 0 || strcmp (arg, "i360") == 0)
389         i370_cpu = I370_OPCODE_360;
390       /* -mxa means to assemble for the IBM 370 XA.  */
391       else if (strcmp (arg, "xa") == 0)
392         i370_cpu = I370_OPCODE_370_XA;
393       /* -many means to assemble for any architecture (370/XA).  */
394       else if (strcmp (arg, "any") == 0)
395         i370_cpu = I370_OPCODE_370;
396
397       else if (strcmp (arg, "regnames") == 0)
398         reg_names_p = TRUE;
399
400       else if (strcmp (arg, "no-regnames") == 0)
401         reg_names_p = FALSE;
402
403 #ifdef OBJ_ELF
404       /* -mrelocatable/-mrelocatable-lib -- warn about
405          initializations that require relocation.  */
406       else if (strcmp (arg, "relocatable") == 0)
407         {
408           shlib = SHILB_MRELOCATABLE;
409           i370_flags |= EF_I370_RELOCATABLE;
410         }
411       else if (strcmp (arg, "relocatable-lib") == 0)
412         {
413           shlib = SHILB_MRELOCATABLE;
414           i370_flags |= EF_I370_RELOCATABLE_LIB;
415         }
416 #endif
417       else
418         {
419           as_bad ("invalid switch -m%s", arg);
420           return 0;
421         }
422       break;
423
424 #ifdef OBJ_ELF
425       /* -V: SVR4 argument to print version ID.  */
426     case 'V':
427       print_version_id ();
428       break;
429
430       /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
431          should be emitted or not.  FIXME: Not implemented.  */
432     case 'Q':
433       break;
434
435 #endif
436
437     default:
438       return 0;
439     }
440
441   return 1;
442 }
443
444 \f
445 /* Set i370_cpu if it is not already set.
446    Currently defaults to the reasonable superset;
447    but can be made more fine grained if desred.  */
448
449 static void
450 i370_set_cpu (void)
451 {
452   const char *default_os  = TARGET_OS;
453   const char *default_cpu = TARGET_CPU;
454
455   /* Override with the superset for the moment.  */
456   i370_cpu = I370_OPCODE_ESA390_SUPERSET;
457   if (i370_cpu == 0)
458     {
459       if (strcmp (default_cpu, "i360") == 0)
460         i370_cpu = I370_OPCODE_360;
461       else if (strcmp (default_cpu, "i370") == 0)
462         i370_cpu = I370_OPCODE_370;
463       else if (strcmp (default_cpu, "XA") == 0)
464         i370_cpu = I370_OPCODE_370_XA;
465       else
466         as_fatal ("Unknown default cpu = %s, os = %s", default_cpu, default_os);
467     }
468 }
469
470 /* Figure out the BFD architecture to use.
471    FIXME: specify the different 370 architectures.  */
472
473 enum bfd_architecture
474 i370_arch (void)
475 {
476    return bfd_arch_i370;
477 }
478
479 /* This function is called when the assembler starts up.  It is called
480    after the options have been parsed and the output file has been
481    opened.  */
482
483 void
484 md_begin (void)
485 {
486   const struct i370_opcode *op;
487   const struct i370_opcode *op_end;
488   const struct i370_macro *macro;
489   const struct i370_macro *macro_end;
490   bfd_boolean dup_insn = FALSE;
491
492   i370_set_cpu ();
493
494 #ifdef OBJ_ELF
495   /* Set the ELF flags if desired.  */
496   if (i370_flags)
497     bfd_set_private_flags (stdoutput, i370_flags);
498 #endif
499
500   /* Insert the opcodes into a hash table.  */
501   i370_hash = hash_new ();
502
503    op_end = i370_opcodes + i370_num_opcodes;
504    for (op = i370_opcodes; op < op_end; op++)
505      {
506        know ((op->opcode.i[0] & op->mask.i[0]) == op->opcode.i[0]
507              && (op->opcode.i[1] & op->mask.i[1]) == op->opcode.i[1]);
508
509        if ((op->flags & i370_cpu) != 0)
510          {
511            const char *retval;
512
513            retval = hash_insert (i370_hash, op->name, (void *) op);
514            if (retval != (const char *) NULL)
515              {
516                as_bad ("Internal assembler error for instruction %s", op->name);
517                dup_insn = TRUE;
518              }
519          }
520      }
521
522   /* Insert the macros into a hash table.  */
523   i370_macro_hash = hash_new ();
524
525   macro_end = i370_macros + i370_num_macros;
526   for (macro = i370_macros; macro < macro_end; macro++)
527     {
528       if ((macro->flags & i370_cpu) != 0)
529         {
530           const char *retval;
531
532           retval = hash_insert (i370_macro_hash, macro->name, (void *) macro);
533           if (retval != (const char *) NULL)
534             {
535               as_bad ("Internal assembler error for macro %s", macro->name);
536               dup_insn = TRUE;
537             }
538         }
539     }
540
541   if (dup_insn)
542     abort ();
543 }
544
545 /* Insert an operand value into an instruction.  */
546
547 static i370_insn_t
548 i370_insert_operand (i370_insn_t insn,
549                      const struct i370_operand *operand,
550                      offsetT val)
551 {
552   if (operand->insert)
553     {
554       const char *errmsg;
555
556       /* Used for 48-bit insn's.  */
557       errmsg = NULL;
558       insn = (*operand->insert) (insn, (long) val, &errmsg);
559       if (errmsg)
560         as_bad ("%s", errmsg);
561     }
562   else
563     /* This is used only for 16, 32 bit insn's.  */
564     insn.i[0] |= (((long) val & ((1 << operand->bits) - 1))
565                   << operand->shift);
566
567   return insn;
568 }
569
570 \f
571 #ifdef OBJ_ELF
572 /* Parse @got, etc. and return the desired relocation.
573    Currently, i370 does not support (don't really need to support) any
574    of these fancier markups ... for example, no one is going to
575    write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
576    So basically, we could get away with this routine returning
577    BFD_RELOC_UNUSED in all circumstances.  However, I'll leave
578    in for now in case someone ambitious finds a good use for this stuff ...
579    this routine was pretty much just copied from the powerpc code ...  */
580
581 static bfd_reloc_code_real_type
582 i370_elf_suffix (char **str_p, expressionS *exp_p)
583 {
584   struct map_bfd
585   {
586     char *string;
587     int length;
588     bfd_reloc_code_real_type reloc;
589   };
590
591   char ident[20];
592   char *str = *str_p;
593   char *str2;
594   int ch;
595   int len;
596   struct map_bfd *ptr;
597
598 #define MAP(str,reloc) { str, sizeof (str) - 1, reloc }
599
600   static struct map_bfd mapping[] =
601   {
602     /* warnings with -mrelocatable.  */
603     MAP ("fixup",       BFD_RELOC_CTOR),
604     { (char *)0, 0,     BFD_RELOC_UNUSED }
605   };
606
607   if (*str++ != '@')
608     return BFD_RELOC_UNUSED;
609
610   for (ch = *str, str2 = ident;
611        (str2 < ident + sizeof (ident) - 1
612         && (ISALNUM (ch) || ch == '@'));
613        ch = *++str)
614     *str2++ = TOLOWER (ch);
615
616   *str2 = '\0';
617   len = str2 - ident;
618
619   ch = ident[0];
620   for (ptr = &mapping[0]; ptr->length > 0; ptr++)
621     if (ch == ptr->string[0]
622         && len == ptr->length
623         && memcmp (ident, ptr->string, ptr->length) == 0)
624       {
625         if (exp_p->X_add_number != 0
626             && (ptr->reloc == BFD_RELOC_16_GOTOFF
627                 || ptr->reloc == BFD_RELOC_LO16_GOTOFF
628                 || ptr->reloc == BFD_RELOC_HI16_GOTOFF
629                 || ptr->reloc == BFD_RELOC_HI16_S_GOTOFF))
630           as_warn ("identifier+constant@got means identifier@got+constant");
631
632         /* Now check for identifier@suffix+constant */
633         if (*str == '-' || *str == '+')
634           {
635             char *orig_line = input_line_pointer;
636             expressionS new_exp;
637
638             input_line_pointer = str;
639             expression (&new_exp);
640             if (new_exp.X_op == O_constant)
641               {
642                 exp_p->X_add_number += new_exp.X_add_number;
643                 str = input_line_pointer;
644               }
645
646             if (&input_line_pointer != str_p)
647               input_line_pointer = orig_line;
648           }
649
650         *str_p = str;
651         return ptr->reloc;
652       }
653
654   return BFD_RELOC_UNUSED;
655 }
656
657 /* Like normal .long/.short/.word, except support @got, etc.
658    Clobbers input_line_pointer, checks end-of-line.  */
659
660 static void
661 i370_elf_cons (int nbytes)   /* 1=.byte, 2=.word, 4=.long.  */
662 {
663   expressionS exp;
664   bfd_reloc_code_real_type reloc;
665
666   if (is_it_end_of_statement ())
667     {
668       demand_empty_rest_of_line ();
669       return;
670     }
671
672   do
673     {
674       expression (&exp);
675
676       if (exp.X_op == O_symbol
677           && *input_line_pointer == '@'
678           && (reloc = i370_elf_suffix (&input_line_pointer, &exp)) != BFD_RELOC_UNUSED)
679         {
680           reloc_howto_type *reloc_howto = bfd_reloc_type_lookup (stdoutput, reloc);
681           int size = bfd_get_reloc_size (reloc_howto);
682
683           if (size > nbytes)
684             as_bad ("%s relocations do not fit in %d bytes\n", reloc_howto->name, nbytes);
685           else
686             {
687               char *p = frag_more ((int) nbytes);
688               int offset = nbytes - size;
689
690               fix_new_exp (frag_now, p - frag_now->fr_literal + offset, size, &exp, 0, reloc);
691             }
692         }
693       else
694         emit_expr (&exp, (unsigned int) nbytes);
695     }
696   while (*input_line_pointer++ == ',');
697
698   input_line_pointer--;         /* Put terminator back into stream.  */
699   demand_empty_rest_of_line ();
700 }
701
702 \f
703 /* ASCII to EBCDIC conversion table.  */
704 static unsigned char ascebc[256] =
705 {
706  /*00  NL    SH    SX    EX    ET    NQ    AK    BL */
707      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
708  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
709      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
710  /*10  DL    D1    D2    D3    D4    NK    SN    EB */
711      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
712  /*18  CN    EM    SB    EC    FS    GS    RS    US */
713      0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F,
714  /*20  SP     !     "     #     $     %     &     ' */
715      0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
716  /*28   (     )     *     +     ,     -    .      / */
717      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
718  /*30   0     1     2     3     4     5     6     7 */
719      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
720  /*38   8     9     :     ;     <     =     >     ? */
721      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
722  /*40   @     A     B     C     D     E     F     G */
723      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
724  /*48   H     I     J     K     L     M     N     O */
725      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
726  /*50   P     Q     R     S     T     U     V     W */
727      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
728  /*58   X     Y     Z     [     \     ]     ^     _ */
729      0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
730  /*60   `     a     b     c     d     e     f     g */
731      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
732  /*68   h     i     j     k     l     m     n     o */
733      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
734  /*70   p     q     r     s     t     u     v     w */
735      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
736  /*78   x     y     z     {     |     }     ~    DL */
737      0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
738      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
739      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
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, 0xFF
754 };
755
756 /* EBCDIC to ASCII conversion table.  */
757 unsigned char ebcasc[256] =
758 {
759  /*00  NU    SH    SX    EX    PF    HT    LC    DL */
760      0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7F,
761  /*08              SM    VT    FF    CR    SO    SI */
762      0x00, 0x00, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
763  /*10  DE    D1    D2    TM    RS    NL    BS    IL */
764      0x10, 0x11, 0x12, 0x13, 0x14, 0x0A, 0x08, 0x00,
765  /*18  CN    EM    CC    C1    FS    GS    RS    US */
766      0x18, 0x19, 0x00, 0x00, 0x1C, 0x1D, 0x1E, 0x1F,
767  /*20  DS    SS    FS          BP    LF    EB    EC */
768      0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x17, 0x1B,
769  /*28              SM    C2    EQ    AK    BL       */
770      0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, 0x00,
771  /*30              SY          PN    RS    UC    ET */
772      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
773  /*38                    C3    D4    NK          SU */
774      0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1A,
775  /*40  SP                                           */
776      0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
777  /*48                     .     <     (     +     | */
778      0x00, 0x00, 0x00, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
779  /*50   &                                           */
780      0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
781  /*58               !     $     *     )     ;     ^ */
782      0x00, 0x00, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
783  /*60   -     /                                     */
784      0x2D, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
785  /*68                     ,     %     _     >     ? */
786      0x00, 0x00, 0x00, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
787  /*70                                               */
788      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
789  /*78         `     :     #     @     '     =     " */
790      0x00, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
791  /*80         a     b     c     d     e     f     g */
792      0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
793  /*88   h     i           {                         */
794      0x68, 0x69, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x00,
795  /*90         j     k     l     m     n     o     p */
796      0x00, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
797  /*98   q     r           }                         */
798      0x71, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00,
799  /*A0         ~     s     t     u     v     w     x */
800      0x00, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
801  /*A8   y     z                       [             */
802      0x79, 0x7A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00,
803  /*B0                                               */
804      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
805  /*B8                                 ]             */
806      0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00,
807  /*C0   {     A     B     C     D     E     F     G */
808      0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
809  /*C8   H     I                                     */
810      0x48, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
811  /*D0   }     J     K     L     M     N     O     P */
812      0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
813  /*D8   Q     R                                     */
814      0x51, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
815  /*E0   \           S     T     U     V     W     X */
816      0x5C, 0x00, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
817  /*E8   Y     Z                                     */
818      0x59, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
819  /*F0   0     1     2     3     4     5     6     7 */
820      0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
821  /*F8   8     9                                     */
822      0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
823 };
824
825 /* EBCDIC translation tables needed for 3270 support.  */
826
827 static void
828 i370_ebcdic (int unused ATTRIBUTE_UNUSED)
829 {
830   char *p, *end;
831   char delim = 0;
832   size_t nbytes;
833
834   nbytes = strlen (input_line_pointer);
835   end = input_line_pointer + nbytes;
836   while ('\r' == *end) end --;
837   while ('\n' == *end) end --;
838
839   delim = *input_line_pointer;
840   if (('\'' == delim) || ('\"' == delim))
841     {
842       input_line_pointer ++;
843       end = rindex (input_line_pointer, delim);
844     }
845
846   if (end > input_line_pointer)
847     {
848       nbytes = end - input_line_pointer +1;
849       p = frag_more (nbytes);
850       while (end > input_line_pointer)
851         {
852           *p = ascebc [(unsigned char) (*input_line_pointer)];
853           ++p; ++input_line_pointer;
854         }
855       *p = '\0';
856     }
857   if (delim == *input_line_pointer) ++input_line_pointer;
858 }
859
860 \f
861 /* Stub out a couple of routines.  */
862
863 static void
864 i370_rmode (int unused ATTRIBUTE_UNUSED)
865 {
866   as_tsktsk ("rmode ignored");
867 }
868
869 static void
870 i370_dsect (int sect)
871 {
872   char *save_line = input_line_pointer;
873   static char section[] = ".data\n";
874
875   /* Just pretend this is .section .data.  */
876   input_line_pointer = section;
877   obj_elf_section (sect);
878
879   input_line_pointer = save_line;
880 }
881
882 static void
883 i370_csect (int unused ATTRIBUTE_UNUSED)
884 {
885   as_tsktsk ("csect not supported");
886 }
887
888 \f
889 /* DC Define Const  is only partially supported.
890    For samplecode on what to do, look at i370_elf_cons() above.
891    This code handles pseudoops of the style
892    DC   D'3.141592653'   # in sysv4, .double 3.14159265
893    DC   F'1'             # in sysv4, .long   1.  */
894
895 static void
896 i370_dc (int unused ATTRIBUTE_UNUSED)
897 {
898   char * p, tmp[50];
899   int nbytes=0;
900   expressionS exp;
901   char type=0;
902
903   if (is_it_end_of_statement ())
904     {
905       demand_empty_rest_of_line ();
906       return;
907     }
908
909   /* Figure out the size.  */
910   type = *input_line_pointer++;
911   switch (type)
912     {
913     case 'H':  /* 16-bit */
914       nbytes = 2;
915       break;
916     case 'E':  /* 32-bit */
917     case 'F':  /* 32-bit */
918       nbytes = 4;
919       break;
920     case 'D':  /* 64-bit */
921       nbytes = 8;
922       break;
923     default:
924       as_bad ("unsupported DC type");
925       return;
926     }
927
928   /* Get rid of pesky quotes.  */
929   if ('\'' == *input_line_pointer)
930     {
931       char * close;
932
933       ++input_line_pointer;
934       close = strchr (input_line_pointer, '\'');
935       if (close)
936         *close= ' ';
937       else
938         as_bad ("missing end-quote");
939     }
940
941   if ('\"' == *input_line_pointer)
942     {
943       char * close;
944
945       ++input_line_pointer;
946       close = strchr (input_line_pointer, '\"');
947       if (close)
948         *close= ' ';
949       else
950         as_bad ("missing end-quote");
951     }
952
953   switch (type)
954     {
955     case 'H':  /* 16-bit */
956     case 'F':  /* 32-bit */
957       expression (&exp);
958       emit_expr (&exp, nbytes);
959       break;
960     case 'E':  /* 32-bit */
961     case 'D':  /* 64-bit */
962       md_atof (type, tmp, &nbytes);
963       p = frag_more (nbytes);
964       memcpy (p, tmp, nbytes);
965       break;
966     default:
967       as_bad ("unsupported DC type");
968       return;
969     }
970
971   demand_empty_rest_of_line ();
972 }
973
974 \f
975 /* Provide minimal support for DS Define Storage.  */
976
977 static void
978 i370_ds (int unused ATTRIBUTE_UNUSED)
979 {
980   /* DS 0H or DS 0F or DS 0D.  */
981   if ('0' == *input_line_pointer)
982     {
983       int alignment = 0;  /* Left shift 1 << align.  */
984       input_line_pointer ++;
985       switch (*input_line_pointer++)
986         {
987         case 'H':  /* 16-bit */
988           alignment = 1;
989           break;
990         case 'F':  /* 32-bit */
991           alignment = 2;
992           break;
993         case 'D':  /* 64-bit */
994           alignment = 3;
995           break;
996         default:
997           as_bad ("unsupported alignment");
998           return;
999         }
1000       frag_align (alignment, 0, 0);
1001       record_alignment (now_seg, alignment);
1002     }
1003   else
1004     as_bad ("this DS form not yet supported");
1005 }
1006
1007 /* Solaris pseudo op to change to the .rodata section.  */
1008
1009 static void
1010 i370_elf_rdata (int sect)
1011 {
1012   char *save_line = input_line_pointer;
1013   static char section[] = ".rodata\n";
1014
1015   /* Just pretend this is .section .rodata.  */
1016   input_line_pointer = section;
1017   obj_elf_section (sect);
1018
1019   input_line_pointer = save_line;
1020 }
1021
1022 /* Pseudo op to make file scope bss items.  */
1023
1024 static void
1025 i370_elf_lcomm (int unused ATTRIBUTE_UNUSED)
1026 {
1027   char *name;
1028   char c;
1029   char *p;
1030   offsetT size;
1031   symbolS *symbolP;
1032   offsetT align;
1033   segT old_sec;
1034   int old_subsec;
1035   char *pfrag;
1036   int align2;
1037
1038   name = input_line_pointer;
1039   c = get_symbol_end ();
1040
1041   /* Just after name is now '\0'.  */
1042   p = input_line_pointer;
1043   *p = 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      -- its 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 its 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. Thats 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 thier 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 refrences 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 * close;
1525           ++input_line_pointer;
1526           close = strchr (input_line_pointer, '\'');
1527           if (close)
1528             *close= ' ';
1529           else
1530             as_bad ("missing end-quote");
1531         }
1532       if ('\"' == *input_line_pointer)
1533         {
1534           char * close;
1535           ++input_line_pointer;
1536           close = strchr (input_line_pointer, '\"');
1537           if (close)
1538             *close= ' ';
1539           else
1540             as_bad ("missing end-quote");
1541         }
1542       if (('X' == name[0]) || ('E' == name[0]) || ('D' == name[0]))
1543         {
1544           char tmp[50];
1545           char *save;
1546
1547           /* The length of hex constants is specified directly with L,
1548              or implied through the number of hex digits. For example:
1549              =X'AB'       one byte
1550              =X'abcd'     two bytes
1551              =X'000000AB' four bytes
1552              =XL4'AB'     four bytes, left-padded withn zero.  */
1553           if (('X' == name[0]) && (0 > cons_len))
1554             {
1555               save = input_line_pointer;
1556               while (*save)
1557                 {
1558                   if (ISXDIGIT (*save))
1559                     hex_len++;
1560                   save++;
1561                 }
1562               cons_len = (hex_len+1) /2;
1563             }
1564           /* I believe this works even for =XL8'dada0000beeebaaa'
1565              which should parse out to X_op == O_big
1566              Note that floats and doubles get represented as
1567              0d3.14159265358979  or 0f 2.7.  */
1568           tmp[0] = '0';
1569           tmp[1] = name[0];
1570           tmp[2] = 0;
1571           strcat (tmp, input_line_pointer);
1572           save = input_line_pointer;
1573           input_line_pointer = tmp;
1574           expression (exp);
1575           input_line_pointer = save + (input_line_pointer-tmp-2);
1576
1577           /* Fix up lengths for floats and doubles.  */
1578           if (O_big == exp->X_op)
1579             exp->X_add_number = cons_len / CHARS_PER_LITTLENUM;
1580         }
1581       else
1582         expression (exp);
1583
1584       /* O_big occurs when more than 4 bytes worth gets parsed.  */
1585       if ((exp->X_op != O_constant) && (exp->X_op != O_big))
1586         {
1587           as_bad ("expression not a constant");
1588           return FALSE;
1589         }
1590       add_to_lit_pool (exp, 0x0, cons_len);
1591       break;
1592
1593     default:
1594       as_bad ("Unknown/unsupported address literal type");
1595       return FALSE;
1596     }
1597
1598   return TRUE;
1599 }
1600
1601 \f
1602 /* Dump the contents of the literal pool that we've accumulated so far.
1603    This aligns the pool to the size of the largest literal in the pool.  */
1604
1605 static void
1606 i370_ltorg (int ignore ATTRIBUTE_UNUSED)
1607 {
1608   int litsize;
1609   int lit_count = 0;
1610   int biggest_literal_size = 0;
1611   int biggest_align = 0;
1612   char pool_name[20];
1613
1614   if (strncmp (now_seg->name, ".text", 5))
1615     {
1616       if (i370_other_section == undefined_section)
1617         as_bad (".ltorg without prior .using in section %s",
1618                 now_seg->name);
1619
1620       if (i370_other_section != now_seg)
1621         as_bad (".ltorg in section %s paired to .using in section %s",
1622                 now_seg->name, i370_other_section->name);
1623     }
1624
1625   if (! longlong_poolP
1626       && ! word_poolP
1627       && ! short_poolP
1628       && ! byte_poolP)
1629     /* Nothing to do.  */
1630     return;
1631
1632   /* Find largest literal .. 2 4 or 8.  */
1633   lit_count = 0;
1634   while (lit_count < next_literal_pool_place)
1635     {
1636       if (biggest_literal_size < literals[lit_count].size)
1637         biggest_literal_size = literals[lit_count].size;
1638       lit_count ++;
1639     }
1640   if (1 == biggest_literal_size) biggest_align = 0;
1641   else if (2 == biggest_literal_size) biggest_align = 1;
1642   else if (4 == biggest_literal_size) biggest_align = 2;
1643   else if (8 == biggest_literal_size) biggest_align = 3;
1644   else as_bad ("bad alignment of %d bytes in literal pool", biggest_literal_size);
1645   if (0 == biggest_align) biggest_align = 1;
1646
1647   /* Align pool for short, word, double word accesses.  */
1648   frag_align (biggest_align, 0, 0);
1649   record_alignment (now_seg, biggest_align);
1650
1651   /* Note that the gas listing will print only the first five
1652      entries in the pool .... wonder how to make it print more.  */
1653   /* Output largest literals first, then the smaller ones.  */
1654   for (litsize=8; litsize; litsize /=2)
1655     {
1656       symbolS *current_poolP = NULL;
1657       switch (litsize)
1658         {
1659         case 8:
1660           current_poolP = longlong_poolP; break;
1661         case 4:
1662           current_poolP = word_poolP; break;
1663         case 2:
1664           current_poolP = short_poolP; break;
1665         case 1:
1666           current_poolP = byte_poolP; break;
1667         default:
1668           as_bad ("bad literal size\n");
1669         }
1670       if (NULL == current_poolP)
1671         continue;
1672       sprintf (pool_name, ".LITP%01d%06d", litsize, lit_pool_num);
1673       symbol_locate (current_poolP, pool_name, now_seg,
1674                      (valueT) frag_now_fix (), frag_now);
1675       symbol_table_insert (current_poolP);
1676
1677       lit_count = 0;
1678       while (lit_count < next_literal_pool_place)
1679         {
1680           if (litsize == literals[lit_count].size)
1681             {
1682 #define EMIT_ADDR_CONS_SYMBOLS
1683 #ifdef EMIT_ADDR_CONS_SYMBOLS
1684               /* Create a bogus symbol, add it to the pool ...
1685                  For the most part, I think this is a useless exercise,
1686                  except that having these symbol names in the objects
1687                  is vaguely useful for debugging.  */
1688               if (literals[lit_count].sym_name)
1689                 {
1690                   symbolS * symP = symbol_make_empty ();
1691                   symbol_locate (symP, literals[lit_count].sym_name, now_seg,
1692                                  (valueT) frag_now_fix (), frag_now);
1693                   symbol_table_insert (symP);
1694                 }
1695 #endif /* EMIT_ADDR_CONS_SYMBOLS */
1696
1697               emit_expr (&(literals[lit_count].exp), literals[lit_count].size);
1698             }
1699           lit_count ++;
1700         }
1701     }
1702
1703   next_literal_pool_place = 0;
1704   longlong_poolP = NULL;
1705   word_poolP = NULL;
1706   short_poolP = NULL;
1707   byte_poolP = NULL;
1708   lit_pool_num++;
1709 }
1710
1711 #endif /* LITERAL_POOL_SUPPORT */
1712
1713 \f
1714 /* Add support for the HLASM-like USING directive to indicate
1715    the base register to use ...  we don't support the full
1716    hlasm semantics for this ... we merely pluck a base address
1717    and a register number out.  We print a warning if using is
1718    called multiple times.  I suppose we should check to see
1719    if the regno is valid.  */
1720
1721 static void
1722 i370_using (int ignore ATTRIBUTE_UNUSED)
1723 {
1724   expressionS ex, baseaddr;
1725   int iregno;
1726   char *star;
1727
1728   /* If "*" appears in a using, it means "."
1729      replace it with "." so that expr doesn't get confused.  */
1730   star = strchr (input_line_pointer, '*');
1731   if (star)
1732     *star = '.';
1733
1734   /* The first arg to using will usually be ".", but it can
1735      be a more complex expression too.  */
1736   expression (&baseaddr);
1737   if (star)
1738     *star = '*';
1739   if (O_constant != baseaddr.X_op
1740       && O_symbol != baseaddr.X_op
1741       && O_uminus != baseaddr.X_op)
1742     as_bad (".using: base address expression illegal or too complex");
1743
1744   if (*input_line_pointer != '\0') ++input_line_pointer;
1745
1746   /* The second arg to using had better be a register.  */
1747   register_name (&ex);
1748   demand_empty_rest_of_line ();
1749   iregno = ex.X_add_number;
1750
1751   if (0 == strncmp (now_seg->name, ".text", 5))
1752     {
1753       i370_using_text_baseaddr = baseaddr;
1754       i370_using_text_regno = iregno;
1755     }
1756   else
1757     {
1758       i370_using_other_baseaddr = baseaddr;
1759       i370_using_other_regno = iregno;
1760       i370_other_section = now_seg;
1761     }
1762 }
1763
1764 static void
1765 i370_drop (int ignore ATTRIBUTE_UNUSED)
1766 {
1767   expressionS ex;
1768   int iregno;
1769
1770   register_name (&ex);
1771   demand_empty_rest_of_line ();
1772   iregno = ex.X_add_number;
1773
1774   if (0 == strncmp (now_seg->name, ".text", 5))
1775     {
1776       if (iregno != i370_using_text_regno)
1777         as_bad ("droping register %d in section %s does not match using register %d",
1778                 iregno, now_seg->name, i370_using_text_regno);
1779
1780       i370_using_text_regno = -1;
1781       i370_using_text_baseaddr.X_op = O_absent;
1782     }
1783   else
1784     {
1785       if (iregno != i370_using_other_regno)
1786         as_bad ("droping register %d in section %s does not match using register %d",
1787                 iregno, now_seg->name, i370_using_other_regno);
1788
1789       if (i370_other_section != now_seg)
1790         as_bad ("droping register %d in section %s previously used in section %s",
1791                 iregno, now_seg->name, i370_other_section->name);
1792
1793       i370_using_other_regno = -1;
1794       i370_using_other_baseaddr.X_op = O_absent;
1795       i370_other_section = undefined_section;
1796     }
1797 }
1798
1799 \f
1800 /* We need to keep a list of fixups.  We can't simply generate them as
1801    we go, because that would require us to first create the frag, and
1802    that would screw up references to ``.''.  */
1803
1804 struct i370_fixup
1805 {
1806   expressionS exp;
1807   int opindex;
1808   bfd_reloc_code_real_type reloc;
1809 };
1810
1811 #define MAX_INSN_FIXUPS 5
1812
1813 /* Handle a macro.  Gather all the operands, transform them as
1814    described by the macro, and call md_assemble recursively.  All the
1815    operands are separated by commas; we don't accept parentheses
1816    around operands here.  */
1817
1818 static void
1819 i370_macro (char *str, const struct i370_macro *macro)
1820 {
1821   char *operands[10];
1822   unsigned int count;
1823   char *s;
1824   unsigned int len;
1825   const char *format;
1826   int arg;
1827   char *send;
1828   char *complete;
1829
1830   /* Gather the users operands into the operands array.  */
1831   count = 0;
1832   s = str;
1833   while (1)
1834     {
1835       if (count >= sizeof operands / sizeof operands[0])
1836         break;
1837       operands[count++] = s;
1838       s = strchr (s, ',');
1839       if (s == (char *) NULL)
1840         break;
1841       *s++ = '\0';
1842     }
1843
1844   if (count != macro->operands)
1845     {
1846       as_bad ("wrong number of operands");
1847       return;
1848     }
1849
1850   /* Work out how large the string must be (the size is unbounded
1851      because it includes user input).  */
1852   len = 0;
1853   format = macro->format;
1854   while (*format != '\0')
1855     {
1856       if (*format != '%')
1857         {
1858           ++len;
1859           ++format;
1860         }
1861       else
1862         {
1863           arg = strtol (format + 1, &send, 10);
1864           know (send != format && arg >= 0 && (unsigned) arg < count);
1865           len += strlen (operands[arg]);
1866           format = send;
1867         }
1868     }
1869
1870   /* Put the string together.  */
1871   complete = s = alloca (len + 1);
1872   format = macro->format;
1873   while (*format != '\0')
1874     {
1875       if (*format != '%')
1876         *s++ = *format++;
1877       else
1878         {
1879           arg = strtol (format + 1, &send, 10);
1880           strcpy (s, operands[arg]);
1881           s += strlen (s);
1882           format = send;
1883         }
1884     }
1885   *s = '\0';
1886
1887   /* Assemble the constructed instruction.  */
1888   md_assemble (complete);
1889 }
1890
1891 /* This routine is called for each instruction to be assembled.  */
1892
1893 void
1894 md_assemble (char *str)
1895 {
1896   char *s, *opcode_str;
1897   const struct i370_opcode *opcode;
1898   i370_insn_t insn;
1899   const unsigned char *opindex_ptr;
1900   int have_optional_index, have_optional_basereg, have_optional_reg;
1901   int skip_optional_index, skip_optional_basereg, skip_optional_reg;
1902   int use_text=0, use_other=0;
1903   int off_by_one;
1904   struct i370_fixup fixups[MAX_INSN_FIXUPS];
1905   int fc;
1906   char *f;
1907   int i;
1908 #ifdef OBJ_ELF
1909   bfd_reloc_code_real_type reloc;
1910 #endif
1911
1912   /* Get the opcode.  */
1913   for (s = str; *s != '\0' && ! ISSPACE (*s); s++)
1914     ;
1915   if (*s != '\0')
1916     *s++ = '\0';
1917   opcode_str = str;
1918
1919   /* Look up the opcode in the hash table.  */
1920   opcode = (const struct i370_opcode *) hash_find (i370_hash, str);
1921   if (opcode == (const struct i370_opcode *) NULL)
1922     {
1923       const struct i370_macro *macro;
1924
1925       assert (i370_macro_hash);
1926       macro = (const struct i370_macro *) hash_find (i370_macro_hash, str);
1927       if (macro == (const struct i370_macro *) NULL)
1928         as_bad ("Unrecognized opcode: `%s'", str);
1929       else
1930         i370_macro (s, macro);
1931
1932       return;
1933     }
1934
1935   insn = opcode->opcode;
1936
1937   str = s;
1938   while (ISSPACE (*str))
1939     ++str;
1940
1941   /* I370 operands are either expressions or address constants.
1942      Many operand types are optional.  The optional operands
1943      are always surrounded by parens, and are used to denote the base
1944      register ... e.g. "A R1, D2" or "A R1, D2(,B2) as opposed to
1945      the fully-formed "A R1, D2(X2,B2)".  Note also the = sign,
1946      such as A R1,=A(i) where the address-of operator =A implies
1947      use of both a base register, and a missing index register.
1948
1949      So, before we start seriously parsing the operands, we check
1950      to see if we have an optional operand, and, if we do, we count
1951      the number of commas to see which operand should be omitted.  */
1952
1953   have_optional_index = have_optional_basereg = have_optional_reg = 0;
1954   for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++)
1955     {
1956       const struct i370_operand *operand;
1957
1958       operand = &i370_operands[*opindex_ptr];
1959       if ((operand->flags & I370_OPERAND_INDEX) != 0)
1960         have_optional_index = 1;
1961       if ((operand->flags & I370_OPERAND_BASE) != 0)
1962         have_optional_basereg = 1;
1963       if ((operand->flags & I370_OPERAND_OPTIONAL) != 0)
1964         have_optional_reg = 1;
1965     }
1966
1967   skip_optional_index = skip_optional_basereg = skip_optional_reg = 0;
1968   if (have_optional_index || have_optional_basereg)
1969     {
1970       unsigned int opcount, nwanted;
1971
1972       /* There is an optional operand.  Count the number of
1973          commas and open-parens in the input line.  */
1974       if (*str == '\0')
1975         opcount = 0;
1976       else
1977         {
1978           opcount = 1;
1979           s = str;
1980           while ((s = strpbrk (s, ",(=")) != (char *) NULL)
1981             {
1982               ++opcount;
1983               ++s;
1984               if (',' == *s) ++s;  /* avoid counting things like (, */
1985               if ('=' == *s) { ++s; --opcount; }
1986             }
1987         }
1988
1989       /* If there are fewer operands in the line then are called
1990          for by the instruction, we want to skip the optional
1991          operand.  */
1992       nwanted = strlen ((char *) opcode->operands);
1993       if (have_optional_index)
1994         {
1995           if (opcount < nwanted)
1996             skip_optional_index = 1;
1997           if (have_optional_basereg && ((opcount+1) < nwanted))
1998             skip_optional_basereg = 1;
1999           if (have_optional_reg && ((opcount+1) < nwanted))
2000             skip_optional_reg = 1;
2001         }
2002       else
2003         {
2004           if (have_optional_basereg && (opcount < nwanted))
2005             skip_optional_basereg = 1;
2006           if (have_optional_reg && (opcount < nwanted))
2007             skip_optional_reg = 1;
2008         }
2009     }
2010
2011   /* Perform some off-by-one hacks on the length field of certain instructions.
2012      Its such a shame to have to do this, but the problem is that HLASM got
2013      defined so that the lengths differ by one from the actual machine instructions.
2014      this code should probably be moved to a special inster-operand routine.
2015      Sigh. Affected instructions are Compare Logical, Move and Exclusive OR
2016      hack alert -- aren't *all* SS instructions affected ??  */
2017   off_by_one = 0;
2018   if (0 == strcasecmp ("CLC", opcode->name)
2019       || 0 == strcasecmp ("ED", opcode->name)
2020       || 0 == strcasecmp ("EDMK", opcode->name)
2021       || 0 == strcasecmp ("MVC", opcode->name)
2022       || 0 == strcasecmp ("MVCIN", opcode->name)
2023       || 0 == strcasecmp ("MVN", opcode->name)
2024       || 0 == strcasecmp ("MVZ", opcode->name)
2025       || 0 == strcasecmp ("NC", opcode->name)
2026       || 0 == strcasecmp ("OC", opcode->name)
2027       || 0 == strcasecmp ("XC", opcode->name))
2028     off_by_one = 1;
2029
2030   /* Gather the operands.  */
2031   fc = 0;
2032   for (opindex_ptr = opcode->operands; *opindex_ptr != 0; opindex_ptr++)
2033     {
2034       const struct i370_operand *operand;
2035       const char *errmsg;
2036       char *hold;
2037       expressionS ex;
2038
2039       operand = &i370_operands[*opindex_ptr];
2040       errmsg = NULL;
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          Its 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 doo 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 /* Turn a string in input_line_pointer into a floating point constant
2359    of type TYPE, and store the appropriate bytes in *LITP.  The number
2360    of LITTLENUMS emitted is stored in *SIZEP.  An error message is
2361    returned, or NULL on OK.  */
2362
2363 char *
2364 md_atof (int type, char *litp, int *sizep)
2365 {
2366   int prec;
2367   LITTLENUM_TYPE words[4];
2368   char *t;
2369   int i;
2370
2371   switch (type)
2372     {
2373     case 'f':
2374     case 'E':
2375       type = 'f';
2376       prec = 2;
2377       break;
2378
2379     case 'd':
2380     case 'D':
2381       type = 'd';
2382       prec = 4;
2383       break;
2384
2385     default:
2386       *sizep = 0;
2387       return "bad call to md_atof";
2388     }
2389
2390   /* 360/370/390 have two float formats: an old, funky 360 single-precision
2391    * format, and the ieee format.  Support only the ieee format.  */
2392   t = atof_ieee (input_line_pointer, type, words);
2393   if (t)
2394     input_line_pointer = t;
2395
2396   *sizep = prec * 2;
2397
2398   for (i = 0; i < prec; i++)
2399     {
2400       md_number_to_chars (litp, (valueT) words[i], 2);
2401       litp += 2;
2402     }
2403
2404   return NULL;
2405 }
2406
2407 /* Write a value out to the object file, using the appropriate
2408    endianness.  */
2409
2410 void
2411 md_number_to_chars (char *buf, valueT val, int n)
2412 {
2413   number_to_chars_bigendian (buf, val, n);
2414 }
2415
2416 /* Align a section (I don't know why this is machine dependent).  */
2417
2418 valueT
2419 md_section_align (asection *seg, valueT addr)
2420 {
2421   int align = bfd_get_section_alignment (stdoutput, seg);
2422
2423   return (addr + (1 << align) - 1) & (-1 << align);
2424 }
2425
2426 /* We don't have any form of relaxing.  */
2427
2428 int
2429 md_estimate_size_before_relax (fragS *fragp ATTRIBUTE_UNUSED,
2430                                asection *seg ATTRIBUTE_UNUSED)
2431 {
2432   abort ();
2433   return 0;
2434 }
2435
2436 /* Convert a machine dependent frag.  We never generate these.  */
2437
2438 void
2439 md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
2440                  asection *sec ATTRIBUTE_UNUSED,
2441                  fragS *fragp ATTRIBUTE_UNUSED)
2442 {
2443   abort ();
2444 }
2445
2446 /* We have no need to default values of symbols.  */
2447
2448 symbolS *
2449 md_undefined_symbol (char *name ATTRIBUTE_UNUSED)
2450 {
2451   return 0;
2452 }
2453 \f
2454 /* Functions concerning relocs.  */
2455
2456 /* The location from which a PC relative jump should be calculated,
2457    given a PC relative reloc.  */
2458
2459 long
2460 md_pcrel_from_section (fixS *fixp, segT sec ATTRIBUTE_UNUSED)
2461 {
2462   return fixp->fx_frag->fr_address + fixp->fx_where;
2463 }
2464
2465 /* Apply a fixup to the object code.  This is called for all the
2466    fixups we generated by the call to fix_new_exp, above.  In the call
2467    above we used a reloc code which was the largest legal reloc code
2468    plus the operand index.  Here we undo that to recover the operand
2469    index.  At this point all symbol values should be fully resolved,
2470    and we attempt to completely resolve the reloc.  If we can not do
2471    that, we determine the correct reloc code and put it back in the
2472    fixup.
2473
2474    See gas/cgen.c for more sample code and explanations of what's
2475    going on here.  */
2476
2477 void
2478 md_apply_fix (fixS *fixP, valueT * valP, segT seg)
2479 {
2480   valueT value = * valP;
2481
2482   if (fixP->fx_addsy != NULL)
2483     {
2484 #ifdef DEBUG
2485       printf ("\nmd_apply_fix: symbol %s at 0x%x (%s:%d) val=0x%x addend=0x%x\n",
2486               S_GET_NAME (fixP->fx_addsy),
2487               fixP->fx_frag->fr_address + fixP->fx_where,
2488               fixP->fx_file, fixP->fx_line,
2489               S_GET_VALUE (fixP->fx_addsy), value);
2490 #endif
2491     }
2492   else
2493     fixP->fx_done = 1;
2494
2495   /* Apply fixups to operands.  Note that there should be no relocations
2496      for any operands, since no instruction ever takes an operand
2497      that requires reloc.  */
2498   if ((int) fixP->fx_r_type >= (int) BFD_RELOC_UNUSED)
2499     {
2500       int opindex;
2501       const struct i370_operand *operand;
2502       char *where;
2503       i370_insn_t insn;
2504
2505       opindex = (int) fixP->fx_r_type - (int) BFD_RELOC_UNUSED;
2506
2507       operand = &i370_operands[opindex];
2508
2509 #ifdef DEBUG
2510       printf ("\nmd_apply_fix: fixup operand %s at 0x%x in %s:%d addend=0x%x\n",
2511               operand->name,
2512               fixP->fx_frag->fr_address + fixP->fx_where,
2513               fixP->fx_file, fixP->fx_line,
2514               value);
2515 #endif
2516       /* Fetch the instruction, insert the fully resolved operand
2517          value, and stuff the instruction back again.
2518          fisxp->fx_size is the length of the instruction.  */
2519       where = fixP->fx_frag->fr_literal + fixP->fx_where;
2520       insn.i[0] = bfd_getb32 ((unsigned char *) where);
2521
2522       if (6 <= fixP->fx_size)
2523         /* Deal with 48-bit insn's.  */
2524         insn.i[1] = bfd_getb32 (((unsigned char *) where)+4);
2525
2526       insn = i370_insert_operand (insn, operand, (offsetT) value);
2527       bfd_putb32 ((bfd_vma) insn.i[0], (unsigned char *) where);
2528
2529       if (6 <= fixP->fx_size)
2530         /* Deal with 48-bit insn's.  */
2531         bfd_putb32 ((bfd_vma) insn.i[1], (((unsigned char *) where)+4));
2532
2533       /* We are done, right? right !!  */
2534       fixP->fx_done = 1;
2535       if (fixP->fx_done)
2536         /* Nothing else to do here.  */
2537         return;
2538
2539       /* Determine a BFD reloc value based on the operand information.
2540          We are only prepared to turn a few of the operands into
2541          relocs.  In fact, we support *zero* operand relocations ...
2542          Why?  Because we are not expecting the compiler to generate
2543          any operands that need relocation.  Due to the 12-bit naturew of
2544          i370 addressing, this would be unusual.  */
2545         {
2546           char *sfile;
2547           unsigned int sline;
2548
2549           /* Use expr_symbol_where to see if this is an expression
2550              symbol.  */
2551           if (expr_symbol_where (fixP->fx_addsy, &sfile, &sline))
2552             as_bad_where (fixP->fx_file, fixP->fx_line,
2553                           "unresolved expression that must be resolved");
2554           else
2555             as_bad_where (fixP->fx_file, fixP->fx_line,
2556                           "unsupported relocation type");
2557           fixP->fx_done = 1;
2558           return;
2559         }
2560     }
2561   else
2562     {
2563       /* We branch to here if the fixup is not to a symbol that
2564          appears in an instruction operand, but is rather some
2565          declared storage.  */
2566 #ifdef OBJ_ELF
2567       i370_elf_validate_fix (fixP, seg);
2568 #endif
2569 #ifdef DEBUG
2570       printf ("md_apply_fix: reloc case %d in segment  %s %s:%d\n",
2571               fixP->fx_r_type, segment_name (seg), fixP->fx_file, fixP->fx_line);
2572       printf ("\tcurrent fixup value is 0x%x \n", value);
2573 #endif
2574       switch (fixP->fx_r_type)
2575         {
2576         case BFD_RELOC_32:
2577         case BFD_RELOC_CTOR:
2578           if (fixP->fx_pcrel)
2579             fixP->fx_r_type = BFD_RELOC_32_PCREL;
2580           /* Fall through.  */
2581
2582         case BFD_RELOC_RVA:
2583         case BFD_RELOC_32_PCREL:
2584         case BFD_RELOC_32_BASEREL:
2585 #ifdef DEBUG
2586           printf ("\t32 bit relocation at 0x%x\n",
2587                   fixP->fx_frag->fr_address + fixP->fx_where);
2588 #endif
2589           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2590                               value, 4);
2591           break;
2592
2593         case BFD_RELOC_LO16:
2594         case BFD_RELOC_16:
2595           if (fixP->fx_pcrel)
2596             as_bad_where (fixP->fx_file, fixP->fx_line,
2597                           "cannot emit PC relative %s relocation%s%s",
2598                           bfd_get_reloc_code_name (fixP->fx_r_type),
2599                           fixP->fx_addsy != NULL ? " against " : "",
2600                           (fixP->fx_addsy != NULL
2601                            ? S_GET_NAME (fixP->fx_addsy)
2602                            : ""));
2603
2604           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2605                               value, 2);
2606           break;
2607
2608           /* This case happens when you write, for example,
2609              lis %r3,(L1-L2)@ha
2610              where L1 and L2 are defined later.  */
2611         case BFD_RELOC_HI16:
2612           if (fixP->fx_pcrel)
2613             abort ();
2614           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2615                               value >> 16, 2);
2616           break;
2617         case BFD_RELOC_HI16_S:
2618           if (fixP->fx_pcrel)
2619             abort ();
2620           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2621                               (value + 0x8000) >> 16, 2);
2622           break;
2623
2624         case BFD_RELOC_8:
2625           if (fixP->fx_pcrel)
2626             abort ();
2627
2628           md_number_to_chars (fixP->fx_frag->fr_literal + fixP->fx_where,
2629                               value, 1);
2630           break;
2631
2632         default:
2633           fprintf (stderr,
2634                   "Gas failure, reloc value %d\n", fixP->fx_r_type);
2635           fflush (stderr);
2636           abort ();
2637         }
2638     }
2639
2640   fixP->fx_addnumber = value;
2641 }
2642
2643 /* Generate a reloc for a fixup.  */
2644
2645 arelent *
2646 tc_gen_reloc (asection *seg ATTRIBUTE_UNUSED, fixS *fixp)
2647 {
2648   arelent *reloc;
2649
2650   reloc = xmalloc (sizeof (arelent));
2651
2652   reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
2653   *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
2654   reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
2655   reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
2656   if (reloc->howto == (reloc_howto_type *) NULL)
2657     {
2658       as_bad_where (fixp->fx_file, fixp->fx_line,
2659                     "reloc %d not supported by object file format", (int)fixp->fx_r_type);
2660       return NULL;
2661     }
2662   reloc->addend = fixp->fx_addnumber;
2663
2664 #ifdef DEBUG
2665   printf ("\ngen_reloc(): sym %s (%s:%d) at addr 0x%x addend=0x%x\n",
2666           fixp->fx_addsy->bsym->name,
2667           fixp->fx_file, fixp->fx_line,
2668           reloc->address, reloc->addend);
2669 #endif
2670
2671   return reloc;
2672 }
2673
2674 /* The target specific pseudo-ops which we support.  */
2675
2676 const pseudo_typeS md_pseudo_table[] =
2677 {
2678   /* Pseudo-ops which must be overridden.  */
2679   { "byte",     i370_byte,      0 },
2680
2681   { "dc",       i370_dc,        0 },
2682   { "ds",       i370_ds,        0 },
2683   { "rmode",    i370_rmode,     0 },
2684   { "csect",    i370_csect,     0 },
2685   { "dsect",    i370_dsect,     0 },
2686
2687   /* enable ebcdic strings e.g. for 3270 support */
2688   { "ebcdic",   i370_ebcdic,    0 },
2689
2690 #ifdef OBJ_ELF
2691   { "long",     i370_elf_cons,  4 },
2692   { "word",     i370_elf_cons,  4 },
2693   { "short",    i370_elf_cons,  2 },
2694   { "rdata",    i370_elf_rdata, 0 },
2695   { "rodata",   i370_elf_rdata, 0 },
2696   { "lcomm",    i370_elf_lcomm, 0 },
2697 #endif
2698
2699   /* This pseudo-op is used even when not generating XCOFF output.  */
2700   { "tc",       i370_tc,        0 },
2701
2702   /* dump the literal pool */
2703   { "ltorg",    i370_ltorg,     0 },
2704
2705   /* support the hlasm-style USING directive */
2706   { "using",    i370_using,     0 },
2707   { "drop",     i370_drop,      0 },
2708
2709   { NULL,       NULL,           0 }
2710 };
2711