remove some duplicate #include's.
[deliverable/binutils-gdb.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 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 2, 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
This page took 0.089508 seconds and 5 git commands to generate.