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, 2009 Free Software Foundation, Inc.
5 Written by Ian Lance Taylor, Cygnus Support.
7 This file is part of GAS, the GNU Assembler.
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)
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.
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
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. */
31 #include "safe-ctype.h"
33 #include "struc-symbol.h"
35 #include "opcode/i370.h"
41 /* This is the assembler for the System/390 Architecture. */
43 /* Tell the main code what the endianness is. */
44 extern int target_big_endian
;
47 /* Generic assembler global variables which must be defined by all
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
[] = "#";
57 const char *i370_comment_chars
= i370_eabi_comment_chars
;
59 const char comment_chars
[] = "#";
62 /* Characters which start a comment at the beginning of a line. */
63 const char line_comment_chars
[] = "#*";
65 /* Characters which may be used to separate multiple commands on a
67 const char line_separator_chars
[] = ";";
69 /* Characters which are used to indicate an exponent in a floating
71 const char EXP_CHARS
[] = "eE";
73 /* Characters which mean that a number is a floating point constant,
75 const char FLT_CHARS
[] = "dD";
78 md_show_usage (FILE *stream
)
81 S/370 options: (these have not yet been tested and may not work) \n\
83 -mregnames Allow symbolic names for registers\n\
84 -mno-regnames Do not allow symbolic names for registers\n");
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");
93 /* Whether to use user friendly register names. */
94 #define TARGET_REG_NAMES_P TRUE
96 static bfd_boolean reg_names_p
= TARGET_REG_NAMES_P
;
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. */
103 /* Structure to hold information about predefined registers. */
110 /* List of registers that are pre-defined:
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>.
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>.
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.
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)
133 The table is sorted. Suitable for searching by a binary search. */
135 static const struct pd_reg pre_defined_registers
[] =
137 { "arg", 11 }, /* Argument Pointer. */
138 { "base", 3 }, /* Base Reg. */
140 { "f.0", 0 }, /* Floating point registers. */
150 { "dsa",13 }, /* Stack pointer. */
151 { "lr", 14 }, /* Link Register. */
152 { "pgt", 4 }, /* Page Origin Table Pointer. */
154 { "r.0", 0 }, /* General Purpose Registers. */
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. */
177 { "r.tca", 12 }, /* Pointer to the table of contents. */
178 { "r.toc", 12 }, /* Pointer to the table of contents. */
180 { "r0", 0 }, /* More general purpose registers. */
197 { "rbase", 3 }, /* Base Reg. */
199 { "rtca", 12 }, /* Pointer to the table of contents. */
200 { "rtoc", 12 }, /* Pointer to the table of contents. */
202 { "sp", 13 }, /* Stack Pointer. */
206 #define REG_NAME_CNT (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
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. */
212 reg_name_search (const struct pd_reg
*regs
,
216 int middle
, low
, high
;
224 middle
= (low
+ high
) / 2;
225 cmp
= strcasecmp (name
, regs
[middle
].name
);
231 return regs
[middle
].value
;
238 /* Summary of register_name().
240 in: Input_line_pointer points to 1st char of operand.
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
249 register_name (expressionS
*expressionP
)
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
;
261 else if (!reg_names_p
)
265 name
= ++input_line_pointer
;
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 ();
273 c
= get_symbol_end ();
274 reg_number
= reg_name_search (pre_defined_registers
, REG_NAME_CNT
, name
);
276 /* Put back the delimiting char. */
277 *input_line_pointer
= c
;
280 /* If numeric, make sure its not out of bounds. */
281 if ((0 <= reg_number
) && (16 >= reg_number
))
283 expressionP
->X_op
= O_register
;
284 expressionP
->X_add_number
= reg_number
;
286 /* Make the rest nice. */
287 expressionP
->X_add_symbol
= NULL
;
288 expressionP
->X_op_symbol
= NULL
;
292 /* Reset the line as if we had not done anything. */
293 input_line_pointer
= start
;
297 /* Local variables. */
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;
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.
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.
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
321 static int i370_using_text_regno
= -1;
322 static int i370_using_other_regno
= -1;
324 /* The base address for address literals. */
325 static expressionS i370_using_text_baseaddr
;
326 static expressionS i370_using_other_baseaddr
;
328 /* the "other" section, used only for syntax error detection. */
329 static segT i370_other_section
= undefined_section
;
331 /* Opcode hash table. */
332 static struct hash_control
*i370_hash
;
334 /* Macro hash table. */
335 static struct hash_control
*i370_macro_hash
;
338 /* What type of shared library support to use. */
339 static enum { SHLIB_NONE
, SHLIB_PIC
, SHILB_MRELOCATABLE
} shlib
= SHLIB_NONE
;
342 /* Flags to set in the elf header. */
343 static flagword i370_flags
= 0;
345 #ifndef WORKING_DOT_WORD
346 int md_short_jump_size
= 4;
347 int md_long_jump_size
= 4;
351 const char *md_shortopts
= "l:um:K:VQ:";
353 const char *md_shortopts
= "um:";
355 struct option md_longopts
[] =
357 {NULL
, no_argument
, NULL
, 0}
359 size_t md_longopts_size
= sizeof (md_longopts
);
362 md_parse_option (int c
, char *arg
)
367 /* -u means that any undefined symbols should be treated as
368 external, which is the default for gas anyhow. */
373 /* Recognize -K PIC */
374 if (strcmp (arg
, "PIC") == 0 || strcmp (arg
, "pic") == 0)
377 i370_flags
|= EF_I370_RELOCATABLE_LIB
;
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
;
397 else if (strcmp (arg
, "regnames") == 0)
400 else if (strcmp (arg
, "no-regnames") == 0)
404 /* -mrelocatable/-mrelocatable-lib -- warn about
405 initializations that require relocation. */
406 else if (strcmp (arg
, "relocatable") == 0)
408 shlib
= SHILB_MRELOCATABLE
;
409 i370_flags
|= EF_I370_RELOCATABLE
;
411 else if (strcmp (arg
, "relocatable-lib") == 0)
413 shlib
= SHILB_MRELOCATABLE
;
414 i370_flags
|= EF_I370_RELOCATABLE_LIB
;
419 as_bad (_("invalid switch -m%s"), arg
);
425 /* -V: SVR4 argument to print version ID. */
430 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
431 should be emitted or not. FIXME: Not implemented. */
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. */
452 const char *default_os
= TARGET_OS
;
453 const char *default_cpu
= TARGET_CPU
;
455 /* Override with the superset for the moment. */
456 i370_cpu
= I370_OPCODE_ESA390_SUPERSET
;
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
;
466 as_fatal ("Unknown default cpu = %s, os = %s", default_cpu
, default_os
);
470 /* Figure out the BFD architecture to use.
471 FIXME: specify the different 370 architectures. */
473 enum bfd_architecture
476 return bfd_arch_i370
;
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
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
;
495 /* Set the ELF flags if desired. */
497 bfd_set_private_flags (stdoutput
, i370_flags
);
500 /* Insert the opcodes into a hash table. */
501 i370_hash
= hash_new ();
503 op_end
= i370_opcodes
+ i370_num_opcodes
;
504 for (op
= i370_opcodes
; op
< op_end
; op
++)
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]);
509 if ((op
->flags
& i370_cpu
) != 0)
513 retval
= hash_insert (i370_hash
, op
->name
, (void *) op
);
514 if (retval
!= (const char *) NULL
)
516 as_bad (_("Internal assembler error for instruction %s"), op
->name
);
522 /* Insert the macros into a hash table. */
523 i370_macro_hash
= hash_new ();
525 macro_end
= i370_macros
+ i370_num_macros
;
526 for (macro
= i370_macros
; macro
< macro_end
; macro
++)
528 if ((macro
->flags
& i370_cpu
) != 0)
532 retval
= hash_insert (i370_macro_hash
, macro
->name
, (void *) macro
);
533 if (retval
!= (const char *) NULL
)
535 as_bad (_("Internal assembler error for macro %s"), macro
->name
);
545 /* Insert an operand value into an instruction. */
548 i370_insert_operand (i370_insn_t insn
,
549 const struct i370_operand
*operand
,
556 /* Used for 48-bit insn's. */
558 insn
= (*operand
->insert
) (insn
, (long) val
, &errmsg
);
560 as_bad ("%s", errmsg
);
563 /* This is used only for 16, 32 bit insn's. */
564 insn
.i
[0] |= (((long) val
& ((1 << operand
->bits
) - 1))
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 ... */
581 static bfd_reloc_code_real_type
582 i370_elf_suffix (char **str_p
, expressionS
*exp_p
)
588 bfd_reloc_code_real_type reloc
;
598 #define MAP(str,reloc) { str, sizeof (str) - 1, reloc }
600 static struct map_bfd mapping
[] =
602 /* warnings with -mrelocatable. */
603 MAP ("fixup", BFD_RELOC_CTOR
),
604 { (char *)0, 0, BFD_RELOC_UNUSED
}
608 return BFD_RELOC_UNUSED
;
610 for (ch
= *str
, str2
= ident
;
611 (str2
< ident
+ sizeof (ident
) - 1
612 && (ISALNUM (ch
) || ch
== '@'));
614 *str2
++ = TOLOWER (ch
);
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)
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"));
632 /* Now check for identifier@suffix+constant */
633 if (*str
== '-' || *str
== '+')
635 char *orig_line
= input_line_pointer
;
638 input_line_pointer
= str
;
639 expression (&new_exp
);
640 if (new_exp
.X_op
== O_constant
)
642 exp_p
->X_add_number
+= new_exp
.X_add_number
;
643 str
= input_line_pointer
;
646 if (&input_line_pointer
!= str_p
)
647 input_line_pointer
= orig_line
;
654 return BFD_RELOC_UNUSED
;
657 /* Like normal .long/.short/.word, except support @got, etc.
658 Clobbers input_line_pointer, checks end-of-line. */
661 i370_elf_cons (int nbytes
) /* 1=.byte, 2=.word, 4=.long. */
664 bfd_reloc_code_real_type reloc
;
666 if (is_it_end_of_statement ())
668 demand_empty_rest_of_line ();
676 if (exp
.X_op
== O_symbol
677 && *input_line_pointer
== '@'
678 && (reloc
= i370_elf_suffix (&input_line_pointer
, &exp
)) != BFD_RELOC_UNUSED
)
680 reloc_howto_type
*reloc_howto
= bfd_reloc_type_lookup (stdoutput
, reloc
);
681 int size
= bfd_get_reloc_size (reloc_howto
);
684 as_bad (_("%s relocations do not fit in %d bytes\n"),
685 reloc_howto
->name
, nbytes
);
688 char *p
= frag_more ((int) nbytes
);
689 int offset
= nbytes
- size
;
691 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
+ offset
, size
, &exp
, 0, reloc
);
695 emit_expr (&exp
, (unsigned int) nbytes
);
697 while (*input_line_pointer
++ == ',');
699 input_line_pointer
--; /* Put terminator back into stream. */
700 demand_empty_rest_of_line ();
704 /* ASCII to EBCDIC conversion table. */
705 static unsigned char ascebc
[256] =
707 /*00 NL SH SX EX ET NQ AK BL */
708 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
709 /*08 BS HT LF VT FF CR SO SI */
710 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
711 /*10 DL D1 D2 D3 D4 NK SN EB */
712 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
713 /*18 CN EM SB EC FS GS RS US */
714 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F,
715 /*20 SP ! " # $ % & ' */
716 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
717 /*28 ( ) * + , - . / */
718 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
719 /*30 0 1 2 3 4 5 6 7 */
720 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
721 /*38 8 9 : ; < = > ? */
722 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
723 /*40 @ A B C D E F G */
724 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
725 /*48 H I J K L M N O */
726 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
727 /*50 P Q R S T U V W */
728 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
729 /*58 X Y Z [ \ ] ^ _ */
730 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
731 /*60 ` a b c d e f g */
732 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
733 /*68 h i j k l m n o */
734 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
735 /*70 p q r s t u v w */
736 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
737 /*78 x y z { | } ~ DL */
738 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
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, 0x3F,
754 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF
757 /* EBCDIC to ASCII conversion table. */
758 unsigned char ebcasc
[256] =
760 /*00 NU SH SX EX PF HT LC DL */
761 0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7F,
762 /*08 SM VT FF CR SO SI */
763 0x00, 0x00, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
764 /*10 DE D1 D2 TM RS NL BS IL */
765 0x10, 0x11, 0x12, 0x13, 0x14, 0x0A, 0x08, 0x00,
766 /*18 CN EM CC C1 FS GS RS US */
767 0x18, 0x19, 0x00, 0x00, 0x1C, 0x1D, 0x1E, 0x1F,
768 /*20 DS SS FS BP LF EB EC */
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x17, 0x1B,
770 /*28 SM C2 EQ AK BL */
771 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, 0x00,
772 /*30 SY PN RS UC ET */
773 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
775 0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1A,
777 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
779 0x00, 0x00, 0x00, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
781 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
783 0x00, 0x00, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
785 0x2D, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
787 0x00, 0x00, 0x00, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
789 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
790 /*78 ` : # @ ' = " */
791 0x00, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
792 /*80 a b c d e f g */
793 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
795 0x68, 0x69, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x00,
796 /*90 j k l m n o p */
797 0x00, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
799 0x71, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00,
800 /*A0 ~ s t u v w x */
801 0x00, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
803 0x79, 0x7A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00,
805 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00,
808 /*C0 { A B C D E F G */
809 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
811 0x48, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
812 /*D0 } J K L M N O P */
813 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
815 0x51, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
816 /*E0 \ S T U V W X */
817 0x5C, 0x00, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
819 0x59, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
820 /*F0 0 1 2 3 4 5 6 7 */
821 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
823 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
826 /* EBCDIC translation tables needed for 3270 support. */
829 i370_ebcdic (int unused ATTRIBUTE_UNUSED
)
835 nbytes
= strlen (input_line_pointer
);
836 end
= input_line_pointer
+ nbytes
;
837 while ('\r' == *end
) end
--;
838 while ('\n' == *end
) end
--;
840 delim
= *input_line_pointer
;
841 if (('\'' == delim
) || ('\"' == delim
))
843 input_line_pointer
++;
844 end
= rindex (input_line_pointer
, delim
);
847 if (end
> input_line_pointer
)
849 nbytes
= end
- input_line_pointer
+1;
850 p
= frag_more (nbytes
);
851 while (end
> input_line_pointer
)
853 *p
= ascebc
[(unsigned char) (*input_line_pointer
)];
854 ++p
; ++input_line_pointer
;
858 if (delim
== *input_line_pointer
) ++input_line_pointer
;
862 /* Stub out a couple of routines. */
865 i370_rmode (int unused ATTRIBUTE_UNUSED
)
867 as_tsktsk ("rmode ignored");
871 i370_dsect (int sect
)
873 char *save_line
= input_line_pointer
;
874 static char section
[] = ".data\n";
876 /* Just pretend this is .section .data. */
877 input_line_pointer
= section
;
878 obj_elf_section (sect
);
880 input_line_pointer
= save_line
;
884 i370_csect (int unused ATTRIBUTE_UNUSED
)
886 as_tsktsk ("csect not supported");
890 /* DC Define Const is only partially supported.
891 For samplecode on what to do, look at i370_elf_cons() above.
892 This code handles pseudoops of the style
893 DC D'3.141592653' # in sysv4, .double 3.14159265
894 DC F'1' # in sysv4, .long 1. */
897 i370_dc (int unused ATTRIBUTE_UNUSED
)
904 if (is_it_end_of_statement ())
906 demand_empty_rest_of_line ();
910 /* Figure out the size. */
911 type
= *input_line_pointer
++;
914 case 'H': /* 16-bit */
917 case 'E': /* 32-bit */
918 case 'F': /* 32-bit */
921 case 'D': /* 64-bit */
925 as_bad (_("unsupported DC type"));
929 /* Get rid of pesky quotes. */
930 if ('\'' == *input_line_pointer
)
934 ++input_line_pointer
;
935 close
= strchr (input_line_pointer
, '\'');
939 as_bad (_("missing end-quote"));
942 if ('\"' == *input_line_pointer
)
946 ++input_line_pointer
;
947 close
= strchr (input_line_pointer
, '\"');
951 as_bad (_("missing end-quote"));
956 case 'H': /* 16-bit */
957 case 'F': /* 32-bit */
959 emit_expr (&exp
, nbytes
);
961 case 'E': /* 32-bit */
963 case 'D': /* 64-bit */
964 md_atof (type
, tmp
, &nbytes
);
965 p
= frag_more (nbytes
);
966 memcpy (p
, tmp
, nbytes
);
969 as_bad (_("unsupported DC type"));
973 demand_empty_rest_of_line ();
977 /* Provide minimal support for DS Define Storage. */
980 i370_ds (int unused ATTRIBUTE_UNUSED
)
982 /* DS 0H or DS 0F or DS 0D. */
983 if ('0' == *input_line_pointer
)
985 int alignment
= 0; /* Left shift 1 << align. */
986 input_line_pointer
++;
987 switch (*input_line_pointer
++)
989 case 'H': /* 16-bit */
992 case 'F': /* 32-bit */
995 case 'D': /* 64-bit */
999 as_bad (_("unsupported alignment"));
1002 frag_align (alignment
, 0, 0);
1003 record_alignment (now_seg
, alignment
);
1006 as_bad (_("this DS form not yet supported"));
1009 /* Solaris pseudo op to change to the .rodata section. */
1012 i370_elf_rdata (int sect
)
1014 char *save_line
= input_line_pointer
;
1015 static char section
[] = ".rodata\n";
1017 /* Just pretend this is .section .rodata. */
1018 input_line_pointer
= section
;
1019 obj_elf_section (sect
);
1021 input_line_pointer
= save_line
;
1024 /* Pseudo op to make file scope bss items. */
1027 i370_elf_lcomm (int unused ATTRIBUTE_UNUSED
)
1040 name
= input_line_pointer
;
1041 c
= get_symbol_end ();
1043 /* Just after name is now '\0'. */
1044 p
= input_line_pointer
;
1047 if (*input_line_pointer
!= ',')
1049 as_bad (_("Expected comma after symbol-name: rest of line ignored."));
1050 ignore_rest_of_line ();
1055 input_line_pointer
++;
1056 if ((size
= get_absolute_expression ()) < 0)
1058 as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) size
);
1059 ignore_rest_of_line ();
1063 /* The third argument to .lcomm is the alignment. */
1064 if (*input_line_pointer
!= ',')
1068 ++input_line_pointer
;
1069 align
= get_absolute_expression ();
1072 as_warn (_("ignoring bad alignment"));
1078 symbolP
= symbol_find_or_make (name
);
1081 if (S_IS_DEFINED (symbolP
) && ! S_IS_COMMON (symbolP
))
1083 as_bad (_("Ignoring attempt to re-define symbol `%s'."),
1084 S_GET_NAME (symbolP
));
1085 ignore_rest_of_line ();
1089 if (S_GET_VALUE (symbolP
) && S_GET_VALUE (symbolP
) != (valueT
) size
)
1091 as_bad (_("Length of .lcomm \"%s\" is already %ld. Not changed to %ld."),
1092 S_GET_NAME (symbolP
),
1093 (long) S_GET_VALUE (symbolP
),
1096 ignore_rest_of_line ();
1102 old_subsec
= now_subseg
;
1105 /* Convert to a power of 2 alignment. */
1106 for (align2
= 0; (align
& 1) == 0; align
>>= 1, ++align2
)
1110 as_bad (_("Common alignment not a power of 2"));
1111 ignore_rest_of_line ();
1118 record_alignment (bss_section
, align2
);
1119 subseg_set (bss_section
, 0);
1121 frag_align (align2
, 0, 0);
1122 if (S_GET_SEGMENT (symbolP
) == bss_section
)
1123 symbol_get_frag (symbolP
)->fr_symbol
= 0;
1124 symbol_set_frag (symbolP
, frag_now
);
1125 pfrag
= frag_var (rs_org
, 1, 1, (relax_substateT
) 0, symbolP
, size
,
1128 S_SET_SIZE (symbolP
, size
);
1129 S_SET_SEGMENT (symbolP
, bss_section
);
1130 subseg_set (old_sec
, old_subsec
);
1131 demand_empty_rest_of_line ();
1134 /* Validate any relocations emitted for -mrelocatable, possibly adding
1135 fixups for word relocations in writable segments, so we can adjust
1139 i370_elf_validate_fix (fixS
*fixp
, segT seg
)
1141 if (fixp
->fx_done
|| fixp
->fx_pcrel
)
1150 case SHILB_MRELOCATABLE
:
1151 if (fixp
->fx_r_type
<= BFD_RELOC_UNUSED
1152 && fixp
->fx_r_type
!= BFD_RELOC_16_GOTOFF
1153 && fixp
->fx_r_type
!= BFD_RELOC_HI16_GOTOFF
1154 && fixp
->fx_r_type
!= BFD_RELOC_LO16_GOTOFF
1155 && fixp
->fx_r_type
!= BFD_RELOC_HI16_S_GOTOFF
1156 && fixp
->fx_r_type
!= BFD_RELOC_32_BASEREL
1157 && fixp
->fx_r_type
!= BFD_RELOC_LO16_BASEREL
1158 && fixp
->fx_r_type
!= BFD_RELOC_HI16_BASEREL
1159 && fixp
->fx_r_type
!= BFD_RELOC_HI16_S_BASEREL
1160 && strcmp (segment_name (seg
), ".got2") != 0
1161 && strcmp (segment_name (seg
), ".dtors") != 0
1162 && strcmp (segment_name (seg
), ".ctors") != 0
1163 && strcmp (segment_name (seg
), ".fixup") != 0
1164 && strcmp (segment_name (seg
), ".stab") != 0
1165 && strcmp (segment_name (seg
), ".gcc_except_table") != 0
1166 && strcmp (segment_name (seg
), ".ex_shared") != 0)
1168 if ((seg
->flags
& (SEC_READONLY
| SEC_CODE
)) != 0
1169 || fixp
->fx_r_type
!= BFD_RELOC_CTOR
)
1170 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
1171 "Relocation cannot be done when using -mrelocatable");
1178 #endif /* OBJ_ELF */
1181 #define LITERAL_POOL_SUPPORT
1182 #ifdef LITERAL_POOL_SUPPORT
1183 /* Provide support for literal pools within the text section.
1184 Loosely based on similar code from tc-arm.c.
1185 We will use four symbols to locate four parts of the literal pool.
1186 These four sections contain 64,32,16 and 8-bit constants; we use
1187 four sections so that all memory access can be appropriately aligned.
1188 That is, we want to avoid mixing these together so that we don't
1189 waste space padding out to alignments. The four pointers
1190 longlong_poolP, word_poolP, etc. point to a symbol labeling the
1191 start of each pool part.
1193 lit_pool_num increments from zero to infinity and uniquely id's
1194 -- its used to generate the *_poolP symbol name. */
1196 #define MAX_LITERAL_POOL_SIZE 1024
1198 typedef struct literalS
1200 struct expressionS exp
;
1202 char size
; /* 1,2,4 or 8 */
1206 literalT literals
[MAX_LITERAL_POOL_SIZE
];
1207 int next_literal_pool_place
= 0; /* Next free entry in the pool. */
1209 static symbolS
*longlong_poolP
= NULL
; /* 64-bit pool entries. */
1210 static symbolS
*word_poolP
= NULL
; /* 32-bit pool entries. */
1211 static symbolS
*short_poolP
= NULL
; /* 16-bit pool entries. */
1212 static symbolS
*byte_poolP
= NULL
; /* 8-bit pool entries. */
1214 static int lit_pool_num
= 1;
1216 /* Create a new, empty symbol. */
1218 symbol_make_empty (void)
1220 return symbol_create (FAKE_LABEL_NAME
, undefined_section
,
1221 (valueT
) 0, &zero_address_frag
);
1224 /* Make the first argument an address-relative expression
1225 by subtracting the second argument. */
1228 i370_make_relative (expressionS
*exx
, expressionS
*baseaddr
)
1230 if (O_constant
== baseaddr
->X_op
)
1232 exx
->X_op
= O_symbol
;
1233 exx
->X_add_number
-= baseaddr
->X_add_number
;
1235 else if (O_symbol
== baseaddr
->X_op
)
1237 exx
->X_op
= O_subtract
;
1238 exx
->X_op_symbol
= baseaddr
->X_add_symbol
;
1239 exx
->X_add_number
-= baseaddr
->X_add_number
;
1241 else if (O_uminus
== baseaddr
->X_op
)
1244 exx
->X_op_symbol
= baseaddr
->X_add_symbol
;
1245 exx
->X_add_number
+= baseaddr
->X_add_number
;
1248 as_bad (_("Missing or bad .using directive"));
1250 /* Add an expression to the literal pool. */
1253 add_to_lit_pool (expressionS
*exx
, char *name
, int sz
)
1256 int offset_in_pool
= 0;
1258 /* Start a new pool, if necessary. */
1259 if (8 == sz
&& NULL
== longlong_poolP
)
1260 longlong_poolP
= symbol_make_empty ();
1261 else if (4 == sz
&& NULL
== word_poolP
)
1262 word_poolP
= symbol_make_empty ();
1263 else if (2 == sz
&& NULL
== short_poolP
)
1264 short_poolP
= symbol_make_empty ();
1265 else if (1 == sz
&& NULL
== byte_poolP
)
1266 byte_poolP
= symbol_make_empty ();
1268 /* Check if this literal value is already in the pool.
1269 FIXME: We should probably be checking expressions
1270 of type O_symbol as well.
1271 FIXME: This is probably(certainly?) broken for O_big,
1272 which includes 64-bit long-longs. */
1273 while (lit_count
< next_literal_pool_place
)
1275 if (exx
->X_op
== O_constant
1276 && literals
[lit_count
].exp
.X_op
== exx
->X_op
1277 && literals
[lit_count
].exp
.X_add_number
== exx
->X_add_number
1278 && literals
[lit_count
].exp
.X_unsigned
== exx
->X_unsigned
1279 && literals
[lit_count
].size
== sz
)
1281 else if (literals
[lit_count
].sym_name
1283 && !strcmp (name
, literals
[lit_count
].sym_name
))
1285 if (sz
== literals
[lit_count
].size
)
1286 offset_in_pool
+= sz
;
1290 if (lit_count
== next_literal_pool_place
) /* new entry */
1292 if (next_literal_pool_place
> MAX_LITERAL_POOL_SIZE
)
1293 as_bad (_("Literal Pool Overflow"));
1295 literals
[next_literal_pool_place
].exp
= *exx
;
1296 literals
[next_literal_pool_place
].size
= sz
;
1297 literals
[next_literal_pool_place
].offset
= offset_in_pool
;
1299 literals
[next_literal_pool_place
].sym_name
= strdup (name
);
1301 literals
[next_literal_pool_place
].sym_name
= NULL
;
1302 next_literal_pool_place
++;
1305 /* ???_poolP points to the beginning of the literal pool.
1306 X_add_number is the offset from the beginning of the
1307 literal pool to this expr minus the location of the most
1308 recent .using directive. Thus, the grand total value of the
1309 expression is the distance from .using to the literal. */
1311 exx
->X_add_symbol
= longlong_poolP
;
1313 exx
->X_add_symbol
= word_poolP
;
1315 exx
->X_add_symbol
= short_poolP
;
1317 exx
->X_add_symbol
= byte_poolP
;
1318 exx
->X_add_number
= offset_in_pool
;
1319 exx
->X_op_symbol
= NULL
;
1321 /* If the user has set up a base reg in another section,
1322 use that; otherwise use the text section. */
1323 if (0 < i370_using_other_regno
)
1324 i370_make_relative (exx
, &i370_using_other_baseaddr
);
1326 i370_make_relative (exx
, &i370_using_text_baseaddr
);
1329 /* The symbol setup for the literal pool is done in two steps. First,
1330 a symbol that represents the start of the literal pool is created,
1331 above, in the add_to_pool() routine. This sym ???_poolP.
1332 However, we don't know what fragment its in until a bit later.
1333 So we defer the frag_now thing, and the symbol name, until .ltorg time. */
1335 /* Can't use symbol_new here, so have to create a symbol and then at
1336 a later date assign it a value. Thats what these functions do. */
1339 symbol_locate (symbolS
*symbolP
,
1340 const char *name
, /* It is copied, the caller can modify. */
1341 segT segment
, /* Segment identifier (SEG_<something>). */
1342 valueT valu
, /* Symbol value. */
1343 fragS
*frag
) /* Associated fragment. */
1346 char *preserved_copy_of_name
;
1348 name_length
= strlen (name
) + 1; /* +1 for \0 */
1349 obstack_grow (¬es
, name
, name_length
);
1350 preserved_copy_of_name
= obstack_finish (¬es
);
1352 S_SET_NAME (symbolP
, preserved_copy_of_name
);
1354 S_SET_SEGMENT (symbolP
, segment
);
1355 S_SET_VALUE (symbolP
, valu
);
1356 symbol_clear_list_pointers (symbolP
);
1358 symbol_set_frag (symbolP
, frag
);
1360 /* Link to end of symbol chain. */
1362 extern int symbol_table_frozen
;
1364 if (symbol_table_frozen
)
1368 symbol_append (symbolP
, symbol_lastP
, &symbol_rootP
, &symbol_lastP
);
1370 obj_symbol_new_hook (symbolP
);
1372 #ifdef tc_symbol_new_hook
1373 tc_symbol_new_hook (symbolP
);
1378 verify_symbol_chain(symbol_rootP
, symbol_lastP
);
1379 #endif /* DEBUG_SYMS */
1382 /* i370_addr_offset() will convert operand expressions
1383 that appear to be absolute into thier base-register
1384 relative form. These expressions come in two types:
1386 (1) of the form "* + const" * where "*" means
1387 relative offset since the last using
1388 i.e. "*" means ".-using_baseaddr"
1390 (2) labels, which are never absolute, but are always
1391 relative to the last "using". Anything with an alpha
1392 character is considered to be a label (since symbols
1393 can never be operands), and since we've already handled
1394 register operands. For example, "BL .L33" branch low
1395 to .L33 RX form insn frequently terminates for-loops. */
1398 i370_addr_offset (expressionS
*exx
)
1404 /* Search for a label; anything with an alpha char will do.
1405 Local labels consist of N digits followed by either b or f. */
1406 lab
= input_line_pointer
;
1407 while (*lab
&& (',' != *lab
) && ('(' != *lab
))
1411 else if (ISALPHA (*lab
))
1418 else if (('f' == *lab
) || ('b' == *lab
))
1426 else if ('.' != *lab
)
1431 /* See if operand has a * in it. */
1432 dot
= strchr (input_line_pointer
, '*');
1434 if (!dot
&& !islabel
)
1437 /* Replace * with . and let expr munch on it. */
1442 /* OK, now we have to subtract the "using" location.
1443 Normally branches appear in the text section only. */
1444 if (0 == strncmp (now_seg
->name
, ".text", 5) || 0 > i370_using_other_regno
)
1445 i370_make_relative (exx
, &i370_using_text_baseaddr
);
1447 i370_make_relative (exx
, &i370_using_other_baseaddr
);
1449 /* Put the * back. */
1456 /* Handle address constants of various sorts. */
1457 /* The currently supported types are
1460 =X'deadbeef' hexadecimal
1461 =F'1234' 32-bit const int
1462 =H'1234' 16-bit const int. */
1465 i370_addr_cons (expressionS
*exp
)
1468 char *sym_name
, delim
;
1473 name
= input_line_pointer
;
1474 sym_name
= input_line_pointer
;
1475 /* Find the spelling of the operand. */
1476 if (name
[0] == '=' && ISALPHA (name
[1]))
1477 name
= ++input_line_pointer
;
1483 case 'A': /* A == address-of. */
1484 case 'V': /* V == extern. */
1485 ++input_line_pointer
;
1488 /* We use a simple string name to collapse together
1489 multiple refrences to the same address literal. */
1490 name_len
= strcspn (sym_name
, ", ");
1491 delim
= *(sym_name
+ name_len
);
1492 *(sym_name
+ name_len
) = 0x0;
1493 add_to_lit_pool (exp
, sym_name
, 4);
1494 *(sym_name
+ name_len
) = delim
;
1500 case 'E': /* Single-precision float point. */
1501 case 'D': /* Double-precision float point. */
1503 /* H == 16-bit fixed-point const; expression must be const. */
1504 /* F == fixed-point const; expression must be const. */
1505 /* X == fixed-point const; expression must be const. */
1506 if ('H' == name
[0]) cons_len
= 2;
1507 else if ('F' == name
[0]) cons_len
= 4;
1508 else if ('X' == name
[0]) cons_len
= -1;
1509 else if ('E' == name
[0]) cons_len
= 4;
1510 else if ('D' == name
[0]) cons_len
= 8;
1512 /* Extract length, if it is present;
1513 FIXME: assume single-digit length. */
1516 /* Should work for ASCII and EBCDIC. */
1517 cons_len
= name
[2] - '0';
1518 input_line_pointer
+= 2;
1521 ++input_line_pointer
;
1523 /* Get rid of pesky quotes. */
1524 if ('\'' == *input_line_pointer
)
1527 ++input_line_pointer
;
1528 close
= strchr (input_line_pointer
, '\'');
1532 as_bad (_("missing end-quote"));
1534 if ('\"' == *input_line_pointer
)
1537 ++input_line_pointer
;
1538 close
= strchr (input_line_pointer
, '\"');
1542 as_bad (_("missing end-quote"));
1544 if (('X' == name
[0]) || ('E' == name
[0]) || ('D' == name
[0]))
1549 /* The length of hex constants is specified directly with L,
1550 or implied through the number of hex digits. For example:
1553 =X'000000AB' four bytes
1554 =XL4'AB' four bytes, left-padded withn zero. */
1555 if (('X' == name
[0]) && (0 > cons_len
))
1557 save
= input_line_pointer
;
1560 if (ISXDIGIT (*save
))
1564 cons_len
= (hex_len
+1) /2;
1566 /* I believe this works even for =XL8'dada0000beeebaaa'
1567 which should parse out to X_op == O_big
1568 Note that floats and doubles get represented as
1569 0d3.14159265358979 or 0f 2.7. */
1573 strcat (tmp
, input_line_pointer
);
1574 save
= input_line_pointer
;
1575 input_line_pointer
= tmp
;
1577 input_line_pointer
= save
+ (input_line_pointer
-tmp
-2);
1579 /* Fix up lengths for floats and doubles. */
1580 if (O_big
== exp
->X_op
)
1581 exp
->X_add_number
= cons_len
/ CHARS_PER_LITTLENUM
;
1586 /* O_big occurs when more than 4 bytes worth gets parsed. */
1587 if ((exp
->X_op
!= O_constant
) && (exp
->X_op
!= O_big
))
1589 as_bad (_("expression not a constant"));
1592 add_to_lit_pool (exp
, 0x0, cons_len
);
1596 as_bad (_("Unknown/unsupported address literal type"));
1604 /* Dump the contents of the literal pool that we've accumulated so far.
1605 This aligns the pool to the size of the largest literal in the pool. */
1608 i370_ltorg (int ignore ATTRIBUTE_UNUSED
)
1612 int biggest_literal_size
= 0;
1613 int biggest_align
= 0;
1616 if (strncmp (now_seg
->name
, ".text", 5))
1618 if (i370_other_section
== undefined_section
)
1619 as_bad (_(".ltorg without prior .using in section %s"),
1622 if (i370_other_section
!= now_seg
)
1623 as_bad (_(".ltorg in section %s paired to .using in section %s"),
1624 now_seg
->name
, i370_other_section
->name
);
1627 if (! longlong_poolP
1631 /* Nothing to do. */
1634 /* Find largest literal .. 2 4 or 8. */
1636 while (lit_count
< next_literal_pool_place
)
1638 if (biggest_literal_size
< literals
[lit_count
].size
)
1639 biggest_literal_size
= literals
[lit_count
].size
;
1642 if (1 == biggest_literal_size
) biggest_align
= 0;
1643 else if (2 == biggest_literal_size
) biggest_align
= 1;
1644 else if (4 == biggest_literal_size
) biggest_align
= 2;
1645 else if (8 == biggest_literal_size
) biggest_align
= 3;
1646 else as_bad (_("bad alignment of %d bytes in literal pool"), biggest_literal_size
);
1647 if (0 == biggest_align
) biggest_align
= 1;
1649 /* Align pool for short, word, double word accesses. */
1650 frag_align (biggest_align
, 0, 0);
1651 record_alignment (now_seg
, biggest_align
);
1653 /* Note that the gas listing will print only the first five
1654 entries in the pool .... wonder how to make it print more. */
1655 /* Output largest literals first, then the smaller ones. */
1656 for (litsize
=8; litsize
; litsize
/=2)
1658 symbolS
*current_poolP
= NULL
;
1662 current_poolP
= longlong_poolP
; break;
1664 current_poolP
= word_poolP
; break;
1666 current_poolP
= short_poolP
; break;
1668 current_poolP
= byte_poolP
; break;
1670 as_bad (_("bad literal size\n"));
1672 if (NULL
== current_poolP
)
1674 sprintf (pool_name
, ".LITP%01d%06d", litsize
, lit_pool_num
);
1675 symbol_locate (current_poolP
, pool_name
, now_seg
,
1676 (valueT
) frag_now_fix (), frag_now
);
1677 symbol_table_insert (current_poolP
);
1680 while (lit_count
< next_literal_pool_place
)
1682 if (litsize
== literals
[lit_count
].size
)
1684 #define EMIT_ADDR_CONS_SYMBOLS
1685 #ifdef EMIT_ADDR_CONS_SYMBOLS
1686 /* Create a bogus symbol, add it to the pool ...
1687 For the most part, I think this is a useless exercise,
1688 except that having these symbol names in the objects
1689 is vaguely useful for debugging. */
1690 if (literals
[lit_count
].sym_name
)
1692 symbolS
* symP
= symbol_make_empty ();
1693 symbol_locate (symP
, literals
[lit_count
].sym_name
, now_seg
,
1694 (valueT
) frag_now_fix (), frag_now
);
1695 symbol_table_insert (symP
);
1697 #endif /* EMIT_ADDR_CONS_SYMBOLS */
1699 emit_expr (&(literals
[lit_count
].exp
), literals
[lit_count
].size
);
1705 next_literal_pool_place
= 0;
1706 longlong_poolP
= NULL
;
1713 #endif /* LITERAL_POOL_SUPPORT */
1716 /* Add support for the HLASM-like USING directive to indicate
1717 the base register to use ... we don't support the full
1718 hlasm semantics for this ... we merely pluck a base address
1719 and a register number out. We print a warning if using is
1720 called multiple times. I suppose we should check to see
1721 if the regno is valid. */
1724 i370_using (int ignore ATTRIBUTE_UNUSED
)
1726 expressionS ex
, baseaddr
;
1730 /* If "*" appears in a using, it means "."
1731 replace it with "." so that expr doesn't get confused. */
1732 star
= strchr (input_line_pointer
, '*');
1736 /* The first arg to using will usually be ".", but it can
1737 be a more complex expression too. */
1738 expression (&baseaddr
);
1741 if (O_constant
!= baseaddr
.X_op
1742 && O_symbol
!= baseaddr
.X_op
1743 && O_uminus
!= baseaddr
.X_op
)
1744 as_bad (_(".using: base address expression illegal or too complex"));
1746 if (*input_line_pointer
!= '\0') ++input_line_pointer
;
1748 /* The second arg to using had better be a register. */
1749 register_name (&ex
);
1750 demand_empty_rest_of_line ();
1751 iregno
= ex
.X_add_number
;
1753 if (0 == strncmp (now_seg
->name
, ".text", 5))
1755 i370_using_text_baseaddr
= baseaddr
;
1756 i370_using_text_regno
= iregno
;
1760 i370_using_other_baseaddr
= baseaddr
;
1761 i370_using_other_regno
= iregno
;
1762 i370_other_section
= now_seg
;
1767 i370_drop (int ignore ATTRIBUTE_UNUSED
)
1772 register_name (&ex
);
1773 demand_empty_rest_of_line ();
1774 iregno
= ex
.X_add_number
;
1776 if (0 == strncmp (now_seg
->name
, ".text", 5))
1778 if (iregno
!= i370_using_text_regno
)
1779 as_bad (_("droping register %d in section %s does not match using register %d"),
1780 iregno
, now_seg
->name
, i370_using_text_regno
);
1782 i370_using_text_regno
= -1;
1783 i370_using_text_baseaddr
.X_op
= O_absent
;
1787 if (iregno
!= i370_using_other_regno
)
1788 as_bad (_("droping register %d in section %s does not match using register %d"),
1789 iregno
, now_seg
->name
, i370_using_other_regno
);
1791 if (i370_other_section
!= now_seg
)
1792 as_bad (_("droping register %d in section %s previously used in section %s"),
1793 iregno
, now_seg
->name
, i370_other_section
->name
);
1795 i370_using_other_regno
= -1;
1796 i370_using_other_baseaddr
.X_op
= O_absent
;
1797 i370_other_section
= undefined_section
;
1802 /* We need to keep a list of fixups. We can't simply generate them as
1803 we go, because that would require us to first create the frag, and
1804 that would screw up references to ``.''. */
1810 bfd_reloc_code_real_type reloc
;
1813 #define MAX_INSN_FIXUPS 5
1815 /* Handle a macro. Gather all the operands, transform them as
1816 described by the macro, and call md_assemble recursively. All the
1817 operands are separated by commas; we don't accept parentheses
1818 around operands here. */
1821 i370_macro (char *str
, const struct i370_macro
*macro
)
1832 /* Gather the users operands into the operands array. */
1837 if (count
>= sizeof operands
/ sizeof operands
[0])
1839 operands
[count
++] = s
;
1840 s
= strchr (s
, ',');
1841 if (s
== (char *) NULL
)
1846 if (count
!= macro
->operands
)
1848 as_bad (_("wrong number of operands"));
1852 /* Work out how large the string must be (the size is unbounded
1853 because it includes user input). */
1855 format
= macro
->format
;
1856 while (*format
!= '\0')
1865 arg
= strtol (format
+ 1, &send
, 10);
1866 know (send
!= format
&& arg
>= 0 && (unsigned) arg
< count
);
1867 len
+= strlen (operands
[arg
]);
1872 /* Put the string together. */
1873 complete
= s
= alloca (len
+ 1);
1874 format
= macro
->format
;
1875 while (*format
!= '\0')
1881 arg
= strtol (format
+ 1, &send
, 10);
1882 strcpy (s
, operands
[arg
]);
1889 /* Assemble the constructed instruction. */
1890 md_assemble (complete
);
1893 /* This routine is called for each instruction to be assembled. */
1896 md_assemble (char *str
)
1898 char *s
, *opcode_str
;
1899 const struct i370_opcode
*opcode
;
1901 const unsigned char *opindex_ptr
;
1902 int have_optional_index
, have_optional_basereg
, have_optional_reg
;
1903 int skip_optional_index
, skip_optional_basereg
, skip_optional_reg
;
1904 int use_text
=0, use_other
=0;
1906 struct i370_fixup fixups
[MAX_INSN_FIXUPS
];
1911 bfd_reloc_code_real_type reloc
;
1914 /* Get the opcode. */
1915 for (s
= str
; *s
!= '\0' && ! ISSPACE (*s
); s
++)
1921 /* Look up the opcode in the hash table. */
1922 opcode
= (const struct i370_opcode
*) hash_find (i370_hash
, str
);
1923 if (opcode
== (const struct i370_opcode
*) NULL
)
1925 const struct i370_macro
*macro
;
1927 gas_assert (i370_macro_hash
);
1928 macro
= (const struct i370_macro
*) hash_find (i370_macro_hash
, str
);
1929 if (macro
== (const struct i370_macro
*) NULL
)
1930 as_bad (_("Unrecognized opcode: `%s'"), str
);
1932 i370_macro (s
, macro
);
1937 insn
= opcode
->opcode
;
1940 while (ISSPACE (*str
))
1943 /* I370 operands are either expressions or address constants.
1944 Many operand types are optional. The optional operands
1945 are always surrounded by parens, and are used to denote the base
1946 register ... e.g. "A R1, D2" or "A R1, D2(,B2) as opposed to
1947 the fully-formed "A R1, D2(X2,B2)". Note also the = sign,
1948 such as A R1,=A(i) where the address-of operator =A implies
1949 use of both a base register, and a missing index register.
1951 So, before we start seriously parsing the operands, we check
1952 to see if we have an optional operand, and, if we do, we count
1953 the number of commas to see which operand should be omitted. */
1955 have_optional_index
= have_optional_basereg
= have_optional_reg
= 0;
1956 for (opindex_ptr
= opcode
->operands
; *opindex_ptr
!= 0; opindex_ptr
++)
1958 const struct i370_operand
*operand
;
1960 operand
= &i370_operands
[*opindex_ptr
];
1961 if ((operand
->flags
& I370_OPERAND_INDEX
) != 0)
1962 have_optional_index
= 1;
1963 if ((operand
->flags
& I370_OPERAND_BASE
) != 0)
1964 have_optional_basereg
= 1;
1965 if ((operand
->flags
& I370_OPERAND_OPTIONAL
) != 0)
1966 have_optional_reg
= 1;
1969 skip_optional_index
= skip_optional_basereg
= skip_optional_reg
= 0;
1970 if (have_optional_index
|| have_optional_basereg
)
1972 unsigned int opcount
, nwanted
;
1974 /* There is an optional operand. Count the number of
1975 commas and open-parens in the input line. */
1982 while ((s
= strpbrk (s
, ",(=")) != (char *) NULL
)
1986 if (',' == *s
) ++s
; /* avoid counting things like (, */
1987 if ('=' == *s
) { ++s
; --opcount
; }
1991 /* If there are fewer operands in the line then are called
1992 for by the instruction, we want to skip the optional
1994 nwanted
= strlen ((char *) opcode
->operands
);
1995 if (have_optional_index
)
1997 if (opcount
< nwanted
)
1998 skip_optional_index
= 1;
1999 if (have_optional_basereg
&& ((opcount
+1) < nwanted
))
2000 skip_optional_basereg
= 1;
2001 if (have_optional_reg
&& ((opcount
+1) < nwanted
))
2002 skip_optional_reg
= 1;
2006 if (have_optional_basereg
&& (opcount
< nwanted
))
2007 skip_optional_basereg
= 1;
2008 if (have_optional_reg
&& (opcount
< nwanted
))
2009 skip_optional_reg
= 1;
2013 /* Perform some off-by-one hacks on the length field of certain instructions.
2014 Its such a shame to have to do this, but the problem is that HLASM got
2015 defined so that the lengths differ by one from the actual machine instructions.
2016 this code should probably be moved to a special inster-operand routine.
2017 Sigh. Affected instructions are Compare Logical, Move and Exclusive OR
2018 hack alert -- aren't *all* SS instructions affected ?? */
2020 if (0 == strcasecmp ("CLC", opcode
->name
)
2021 || 0 == strcasecmp ("ED", opcode
->name
)
2022 || 0 == strcasecmp ("EDMK", opcode
->name
)
2023 || 0 == strcasecmp ("MVC", opcode
->name
)
2024 || 0 == strcasecmp ("MVCIN", opcode
->name
)
2025 || 0 == strcasecmp ("MVN", opcode
->name
)
2026 || 0 == strcasecmp ("MVZ", opcode
->name
)
2027 || 0 == strcasecmp ("NC", opcode
->name
)
2028 || 0 == strcasecmp ("OC", opcode
->name
)
2029 || 0 == strcasecmp ("XC", opcode
->name
))
2032 /* Gather the operands. */
2034 for (opindex_ptr
= opcode
->operands
; *opindex_ptr
!= 0; opindex_ptr
++)
2036 const struct i370_operand
*operand
;
2041 operand
= &i370_operands
[*opindex_ptr
];
2044 /* If this is an index operand, and we are skipping it,
2045 just insert a zero. */
2046 if (skip_optional_index
&&
2047 ((operand
->flags
& I370_OPERAND_INDEX
) != 0))
2049 insn
= i370_insert_operand (insn
, operand
, 0);
2053 /* If this is the base operand, and we are skipping it,
2054 just insert the current using basreg. */
2055 if (skip_optional_basereg
&&
2056 ((operand
->flags
& I370_OPERAND_BASE
) != 0))
2061 if (0 == strncmp (now_seg
->name
, ".text", 5)
2062 || 0 > i370_using_other_regno
)
2063 basereg
= i370_using_text_regno
;
2065 basereg
= i370_using_other_regno
;
2069 if (0 > i370_using_other_regno
)
2070 basereg
= i370_using_text_regno
;
2072 basereg
= i370_using_other_regno
;
2075 as_bad (_("not using any base register"));
2077 insn
= i370_insert_operand (insn
, operand
, basereg
);
2081 /* If this is an optional operand, and we are skipping it,
2082 Use zero (since a non-zero value would denote a register) */
2083 if (skip_optional_reg
2084 && ((operand
->flags
& I370_OPERAND_OPTIONAL
) != 0))
2086 insn
= i370_insert_operand (insn
, operand
, 0);
2090 /* Gather the operand. */
2091 hold
= input_line_pointer
;
2092 input_line_pointer
= str
;
2094 /* Register names are only allowed where there are registers. */
2095 if ((operand
->flags
& I370_OPERAND_GPR
) != 0)
2097 /* Quickie hack to get past things like (,r13). */
2098 if (skip_optional_index
&& (',' == *input_line_pointer
))
2100 *input_line_pointer
= ' ';
2101 input_line_pointer
++;
2104 if (! register_name (&ex
))
2105 as_bad (_("expecting a register for operand %d"),
2106 (int) (opindex_ptr
- opcode
->operands
+ 1));
2109 /* Check for an address constant expression. */
2110 /* We will put PSW-relative addresses in the text section,
2111 and address literals in the .data (or other) section. */
2112 else if (i370_addr_cons (&ex
))
2114 else if (i370_addr_offset (&ex
))
2116 else expression (&ex
);
2118 str
= input_line_pointer
;
2119 input_line_pointer
= hold
;
2121 /* Perform some off-by-one hacks on the length field of certain instructions.
2122 Its such a shame to have to do this, but the problem is that HLASM got
2123 defined so that the programmer specifies a length that is one greater
2124 than what the machine instruction wants. Sigh. */
2125 if (off_by_one
&& (0 == strcasecmp ("SS L", operand
->name
)))
2128 if (ex
.X_op
== O_illegal
)
2129 as_bad (_("illegal operand"));
2130 else if (ex
.X_op
== O_absent
)
2131 as_bad (_("missing operand"));
2132 else if (ex
.X_op
== O_register
)
2133 insn
= i370_insert_operand (insn
, operand
, ex
.X_add_number
);
2134 else if (ex
.X_op
== O_constant
)
2137 /* Allow @HA, @L, @H on constants.
2138 Well actually, no we don't; there really don't make sense
2139 (at least not to me) for the i370. However, this code is
2140 left here for any dubious future expansion reasons. */
2141 char *orig_str
= str
;
2143 if ((reloc
= i370_elf_suffix (&str
, &ex
)) != BFD_RELOC_UNUSED
)
2150 case BFD_RELOC_LO16
:
2151 /* X_unsigned is the default, so if the user has done
2152 something which cleared it, we always produce a
2154 ex
.X_add_number
= (((ex
.X_add_number
& 0xffff)
2159 case BFD_RELOC_HI16
:
2160 ex
.X_add_number
= (ex
.X_add_number
>> 16) & 0xffff;
2163 case BFD_RELOC_HI16_S
:
2164 ex
.X_add_number
= (((ex
.X_add_number
>> 16) & 0xffff)
2165 + ((ex
.X_add_number
>> 15) & 1));
2169 insn
= i370_insert_operand (insn
, operand
, ex
.X_add_number
);
2172 else if ((reloc
= i370_elf_suffix (&str
, &ex
)) != BFD_RELOC_UNUSED
)
2174 as_tsktsk ("md_assemble(): suffixed relocations not supported\n");
2176 /* We need to generate a fixup for this expression. */
2177 if (fc
>= MAX_INSN_FIXUPS
)
2178 as_fatal ("too many fixups");
2179 fixups
[fc
].exp
= ex
;
2180 fixups
[fc
].opindex
= 0;
2181 fixups
[fc
].reloc
= reloc
;
2184 #endif /* OBJ_ELF */
2187 /* We need to generate a fixup for this expression. */
2188 /* Typically, the expression will just be a symbol ...
2189 printf ("insn %s needs fixup for %s \n",
2190 opcode->name, ex.X_add_symbol->bsym->name); */
2192 if (fc
>= MAX_INSN_FIXUPS
)
2193 as_fatal ("too many fixups");
2194 fixups
[fc
].exp
= ex
;
2195 fixups
[fc
].opindex
= *opindex_ptr
;
2196 fixups
[fc
].reloc
= BFD_RELOC_UNUSED
;
2200 /* Skip over delimiter (close paren, or comma). */
2201 if ((')' == *str
) && (',' == *(str
+1)))
2207 while (ISSPACE (*str
))
2211 as_bad (_("junk at end of line: `%s'"), str
);
2213 /* Write out the instruction. */
2214 f
= frag_more (opcode
->len
);
2215 if (4 >= opcode
->len
)
2216 md_number_to_chars (f
, insn
.i
[0], opcode
->len
);
2219 md_number_to_chars (f
, insn
.i
[0], 4);
2221 if (6 == opcode
->len
)
2222 md_number_to_chars ((f
+ 4), ((insn
.i
[1])>>16), 2);
2225 /* Not used --- don't have any 8 byte instructions. */
2226 as_bad (_("Internal Error: bad instruction length"));
2227 md_number_to_chars ((f
+ 4), insn
.i
[1], opcode
->len
-4);
2231 /* Create any fixups. At this point we do not use a
2232 bfd_reloc_code_real_type, but instead just use the
2233 BFD_RELOC_UNUSED plus the operand index. This lets us easily
2234 handle fixups for any operand type, although that is admittedly
2235 not a very exciting feature. We pick a BFD reloc type in
2237 for (i
= 0; i
< fc
; i
++)
2239 const struct i370_operand
*operand
;
2241 operand
= &i370_operands
[fixups
[i
].opindex
];
2242 if (fixups
[i
].reloc
!= BFD_RELOC_UNUSED
)
2244 reloc_howto_type
*reloc_howto
= bfd_reloc_type_lookup (stdoutput
, fixups
[i
].reloc
);
2251 size
= bfd_get_reloc_size (reloc_howto
);
2253 if (size
< 1 || size
> 4)
2256 printf (" gwana doo fixup %d \n", i
);
2257 fixP
= fix_new_exp (frag_now
, f
- frag_now
->fr_literal
, size
,
2258 &fixups
[i
].exp
, reloc_howto
->pc_relative
,
2261 /* Turn off complaints that the addend is too large for things like
2263 switch (fixups
[i
].reloc
)
2265 case BFD_RELOC_16_GOTOFF
:
2266 case BFD_RELOC_LO16
:
2267 case BFD_RELOC_HI16
:
2268 case BFD_RELOC_HI16_S
:
2269 fixP
->fx_no_overflow
= 1;
2277 fix_new_exp (frag_now
, f
- frag_now
->fr_literal
, opcode
->len
,
2279 (operand
->flags
& I370_OPERAND_RELATIVE
) != 0,
2280 ((bfd_reloc_code_real_type
)
2281 (fixups
[i
].opindex
+ (int) BFD_RELOC_UNUSED
)));
2287 /* Pseudo-op handling. */
2289 /* The .byte pseudo-op. This is similar to the normal .byte
2290 pseudo-op, but it can also take a single ASCII string. */
2293 i370_byte (int ignore ATTRIBUTE_UNUSED
)
2295 if (*input_line_pointer
!= '\"')
2301 /* Gather characters. A real double quote is doubled. Unusual
2302 characters are not permitted. */
2303 ++input_line_pointer
;
2308 c
= *input_line_pointer
++;
2312 if (*input_line_pointer
!= '\"')
2314 ++input_line_pointer
;
2317 FRAG_APPEND_1_CHAR (c
);
2320 demand_empty_rest_of_line ();
2323 /* The .tc pseudo-op. This is used when generating XCOFF and ELF.
2324 This takes two or more arguments.
2326 When generating XCOFF output, the first argument is the name to
2327 give to this location in the toc; this will be a symbol with class
2328 TC. The rest of the arguments are 4 byte values to actually put at
2329 this location in the TOC; often there is just one more argument, a
2330 relocatable symbol reference.
2332 When not generating XCOFF output, the arguments are the same, but
2333 the first argument is simply ignored. */
2336 i370_tc (int ignore ATTRIBUTE_UNUSED
)
2339 /* Skip the TOC symbol name. */
2340 while (is_part_of_name (*input_line_pointer
)
2341 || *input_line_pointer
== '['
2342 || *input_line_pointer
== ']'
2343 || *input_line_pointer
== '{'
2344 || *input_line_pointer
== '}')
2345 ++input_line_pointer
;
2347 /* Align to a four byte boundary. */
2348 frag_align (2, 0, 0);
2349 record_alignment (now_seg
, 2);
2351 if (*input_line_pointer
!= ',')
2352 demand_empty_rest_of_line ();
2355 ++input_line_pointer
;
2361 md_atof (int type
, char *litp
, int *sizep
)
2363 /* 360/370/390 have two float formats: an old, funky 360 single-precision
2364 format, and the ieee format. Support only the ieee format. */
2365 return ieee_md_atof (type
, litp
, sizep
, TRUE
);
2368 /* Write a value out to the object file, using the appropriate
2372 md_number_to_chars (char *buf
, valueT val
, int n
)
2374 number_to_chars_bigendian (buf
, val
, n
);
2377 /* Align a section (I don't know why this is machine dependent). */
2380 md_section_align (asection
*seg
, valueT addr
)
2382 int align
= bfd_get_section_alignment (stdoutput
, seg
);
2384 return (addr
+ (1 << align
) - 1) & (-1 << align
);
2387 /* We don't have any form of relaxing. */
2390 md_estimate_size_before_relax (fragS
*fragp ATTRIBUTE_UNUSED
,
2391 asection
*seg ATTRIBUTE_UNUSED
)
2397 /* Convert a machine dependent frag. We never generate these. */
2400 md_convert_frag (bfd
*abfd ATTRIBUTE_UNUSED
,
2401 asection
*sec ATTRIBUTE_UNUSED
,
2402 fragS
*fragp ATTRIBUTE_UNUSED
)
2407 /* We have no need to default values of symbols. */
2410 md_undefined_symbol (char *name ATTRIBUTE_UNUSED
)
2415 /* Functions concerning relocs. */
2417 /* The location from which a PC relative jump should be calculated,
2418 given a PC relative reloc. */
2421 md_pcrel_from_section (fixS
*fixp
, segT sec ATTRIBUTE_UNUSED
)
2423 return fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2426 /* Apply a fixup to the object code. This is called for all the
2427 fixups we generated by the call to fix_new_exp, above. In the call
2428 above we used a reloc code which was the largest legal reloc code
2429 plus the operand index. Here we undo that to recover the operand
2430 index. At this point all symbol values should be fully resolved,
2431 and we attempt to completely resolve the reloc. If we can not do
2432 that, we determine the correct reloc code and put it back in the
2435 See gas/cgen.c for more sample code and explanations of what's
2439 md_apply_fix (fixS
*fixP
, valueT
* valP
, segT seg
)
2441 valueT value
= * valP
;
2443 if (fixP
->fx_addsy
!= NULL
)
2446 printf ("\nmd_apply_fix: symbol %s at 0x%x (%s:%d) val=0x%x addend=0x%x\n",
2447 S_GET_NAME (fixP
->fx_addsy
),
2448 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
,
2449 fixP
->fx_file
, fixP
->fx_line
,
2450 S_GET_VALUE (fixP
->fx_addsy
), value
);
2456 /* Apply fixups to operands. Note that there should be no relocations
2457 for any operands, since no instruction ever takes an operand
2458 that requires reloc. */
2459 if ((int) fixP
->fx_r_type
>= (int) BFD_RELOC_UNUSED
)
2462 const struct i370_operand
*operand
;
2466 opindex
= (int) fixP
->fx_r_type
- (int) BFD_RELOC_UNUSED
;
2468 operand
= &i370_operands
[opindex
];
2471 printf ("\nmd_apply_fix: fixup operand %s at 0x%x in %s:%d addend=0x%x\n",
2473 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
,
2474 fixP
->fx_file
, fixP
->fx_line
,
2477 /* Fetch the instruction, insert the fully resolved operand
2478 value, and stuff the instruction back again.
2479 fisxp->fx_size is the length of the instruction. */
2480 where
= fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
;
2481 insn
.i
[0] = bfd_getb32 ((unsigned char *) where
);
2483 if (6 <= fixP
->fx_size
)
2484 /* Deal with 48-bit insn's. */
2485 insn
.i
[1] = bfd_getb32 (((unsigned char *) where
)+4);
2487 insn
= i370_insert_operand (insn
, operand
, (offsetT
) value
);
2488 bfd_putb32 ((bfd_vma
) insn
.i
[0], (unsigned char *) where
);
2490 if (6 <= fixP
->fx_size
)
2491 /* Deal with 48-bit insn's. */
2492 bfd_putb32 ((bfd_vma
) insn
.i
[1], (((unsigned char *) where
)+4));
2494 /* We are done, right? right !! */
2497 /* Nothing else to do here. */
2500 /* Determine a BFD reloc value based on the operand information.
2501 We are only prepared to turn a few of the operands into
2502 relocs. In fact, we support *zero* operand relocations ...
2503 Why? Because we are not expecting the compiler to generate
2504 any operands that need relocation. Due to the 12-bit naturew of
2505 i370 addressing, this would be unusual. */
2510 /* Use expr_symbol_where to see if this is an expression
2512 if (expr_symbol_where (fixP
->fx_addsy
, &sfile
, &sline
))
2513 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2514 "unresolved expression that must be resolved");
2516 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2517 "unsupported relocation type");
2524 /* We branch to here if the fixup is not to a symbol that
2525 appears in an instruction operand, but is rather some
2526 declared storage. */
2528 i370_elf_validate_fix (fixP
, seg
);
2531 printf ("md_apply_fix: reloc case %d in segment %s %s:%d\n",
2532 fixP
->fx_r_type
, segment_name (seg
), fixP
->fx_file
, fixP
->fx_line
);
2533 printf ("\tcurrent fixup value is 0x%x \n", value
);
2535 switch (fixP
->fx_r_type
)
2538 case BFD_RELOC_CTOR
:
2540 fixP
->fx_r_type
= BFD_RELOC_32_PCREL
;
2544 case BFD_RELOC_32_PCREL
:
2545 case BFD_RELOC_32_BASEREL
:
2547 printf ("\t32 bit relocation at 0x%x\n",
2548 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
);
2550 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2554 case BFD_RELOC_LO16
:
2557 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2558 "cannot emit PC relative %s relocation%s%s",
2559 bfd_get_reloc_code_name (fixP
->fx_r_type
),
2560 fixP
->fx_addsy
!= NULL
? " against " : "",
2561 (fixP
->fx_addsy
!= NULL
2562 ? S_GET_NAME (fixP
->fx_addsy
)
2565 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2569 /* This case happens when you write, for example,
2571 where L1 and L2 are defined later. */
2572 case BFD_RELOC_HI16
:
2575 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2578 case BFD_RELOC_HI16_S
:
2581 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2582 (value
+ 0x8000) >> 16, 2);
2589 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2595 "Gas failure, reloc value %d\n", fixP
->fx_r_type
);
2601 fixP
->fx_addnumber
= value
;
2604 /* Generate a reloc for a fixup. */
2607 tc_gen_reloc (asection
*seg ATTRIBUTE_UNUSED
, fixS
*fixp
)
2611 reloc
= xmalloc (sizeof (arelent
));
2613 reloc
->sym_ptr_ptr
= xmalloc (sizeof (asymbol
*));
2614 *reloc
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
2615 reloc
->address
= fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2616 reloc
->howto
= bfd_reloc_type_lookup (stdoutput
, fixp
->fx_r_type
);
2617 if (reloc
->howto
== (reloc_howto_type
*) NULL
)
2619 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
2620 "reloc %d not supported by object file format", (int)fixp
->fx_r_type
);
2623 reloc
->addend
= fixp
->fx_addnumber
;
2626 printf ("\ngen_reloc(): sym %s (%s:%d) at addr 0x%x addend=0x%x\n",
2627 fixp
->fx_addsy
->bsym
->name
,
2628 fixp
->fx_file
, fixp
->fx_line
,
2629 reloc
->address
, reloc
->addend
);
2635 /* The target specific pseudo-ops which we support. */
2637 const pseudo_typeS md_pseudo_table
[] =
2639 /* Pseudo-ops which must be overridden. */
2640 { "byte", i370_byte
, 0 },
2642 { "dc", i370_dc
, 0 },
2643 { "ds", i370_ds
, 0 },
2644 { "rmode", i370_rmode
, 0 },
2645 { "csect", i370_csect
, 0 },
2646 { "dsect", i370_dsect
, 0 },
2648 /* enable ebcdic strings e.g. for 3270 support */
2649 { "ebcdic", i370_ebcdic
, 0 },
2652 { "long", i370_elf_cons
, 4 },
2653 { "word", i370_elf_cons
, 4 },
2654 { "short", i370_elf_cons
, 2 },
2655 { "rdata", i370_elf_rdata
, 0 },
2656 { "rodata", i370_elf_rdata
, 0 },
2657 { "lcomm", i370_elf_lcomm
, 0 },
2660 /* This pseudo-op is used even when not generating XCOFF output. */
2661 { "tc", i370_tc
, 0 },
2663 /* dump the literal pool */
2664 { "ltorg", i370_ltorg
, 0 },
2666 /* support the hlasm-style USING directive */
2667 { "using", i370_using
, 0 },
2668 { "drop", i370_drop
, 0 },