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 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 2, 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, 59 Temple Place - Suite 330, 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 ...
33 #include "safe-ctype.h"
35 #include "struc-symbol.h"
37 #include "opcode/i370.h"
43 /* This is the assembler for the System/390 Architecture */
45 /* Tell the main code what the endianness is. */
46 extern int target_big_endian
;
49 /* Generic assembler global variables which must be defined by all
53 /* This string holds the chars that always start a comment. If the
54 pre-processor is disabled, these aren't very useful. The macro
55 tc_comment_chars points to this. We use this, rather than the
56 usual comment_chars, so that we can switch for Solaris conventions. */
57 static const char i370_eabi_comment_chars
[] = "#";
59 const char *i370_comment_chars
= i370_eabi_comment_chars
;
61 const char comment_chars
[] = "#";
64 /* Characters which start a comment at the beginning of a line. */
65 const char line_comment_chars
[] = "#*";
67 /* Characters which may be used to separate multiple commands on a
69 const char line_separator_chars
[] = ";";
71 /* Characters which are used to indicate an exponent in a floating
73 const char EXP_CHARS
[] = "eE";
75 /* Characters which mean that a number is a floating point constant,
77 const char FLT_CHARS
[] = "dD";
80 md_show_usage (stream
)
84 S/370 options: (these have not yet been tested and may not work) \n\
86 -mregnames Allow symbolic names for registers\n\
87 -mno-regnames Do not allow symbolic names for registers\n");
90 -mrelocatable support for GCC's -mrelocatble option\n\
91 -mrelocatable-lib support for GCC's -mrelocatble-lib option\n\
92 -V print assembler version number\n");
97 static void i370_byte
PARAMS ((int));
98 static void i370_tc
PARAMS ((int));
99 static void i370_ebcdic
PARAMS ((int));
101 static void i370_dc
PARAMS ((int));
102 static void i370_ds
PARAMS ((int));
103 static void i370_rmode
PARAMS ((int));
104 static void i370_csect
PARAMS ((int));
105 static void i370_dsect
PARAMS ((int));
106 static void i370_ltorg
PARAMS ((int));
107 static void i370_using
PARAMS ((int));
108 static void i370_drop
PARAMS ((int));
109 static void i370_make_relative
PARAMS ((expressionS
*exp
, expressionS
*baseaddr
));
112 static bfd_reloc_code_real_type i370_elf_suffix
PARAMS ((char **, expressionS
*));
113 static void i370_elf_cons
PARAMS ((int));
114 static void i370_elf_rdata
PARAMS ((int));
115 static void i370_elf_lcomm
PARAMS ((int));
116 static void i370_elf_validate_fix
PARAMS ((fixS
*, segT
));
120 /* The target specific pseudo-ops which we support. */
122 const pseudo_typeS md_pseudo_table
[] =
124 /* Pseudo-ops which must be overridden. */
125 { "byte", i370_byte
, 0 },
127 { "dc", i370_dc
, 0 },
128 { "ds", i370_ds
, 0 },
129 { "rmode", i370_rmode
, 0 },
130 { "csect", i370_csect
, 0 },
131 { "dsect", i370_dsect
, 0 },
133 /* enable ebcdic strings e.g. for 3270 support */
134 { "ebcdic", i370_ebcdic
, 0 },
137 { "long", i370_elf_cons
, 4 },
138 { "word", i370_elf_cons
, 4 },
139 { "short", i370_elf_cons
, 2 },
140 { "rdata", i370_elf_rdata
, 0 },
141 { "rodata", i370_elf_rdata
, 0 },
142 { "lcomm", i370_elf_lcomm
, 0 },
145 /* This pseudo-op is used even when not generating XCOFF output. */
146 { "tc", i370_tc
, 0 },
148 /* dump the literal pool */
149 { "ltorg", i370_ltorg
, 0 },
151 /* support the hlasm-style USING directive */
152 { "using", i370_using
, 0 },
153 { "drop", i370_drop
, 0 },
158 /* ***************************************************************** */
160 /* Whether to use user friendly register names. */
161 #define TARGET_REG_NAMES_P TRUE
163 static bfd_boolean reg_names_p
= TARGET_REG_NAMES_P
;
165 static bfd_boolean register_name
PARAMS ((expressionS
*));
166 static void i370_set_cpu
PARAMS ((void));
167 static i370_insn_t i370_insert_operand
168 PARAMS ((i370_insn_t insn
, const struct i370_operand
*operand
, offsetT val
));
169 static void i370_macro
PARAMS ((char *str
, const struct i370_macro
*macro
));
171 /* Predefined register names if -mregnames */
172 /* In general, there are lots of them, in an attempt to be compatible */
173 /* with a number of assemblers. */
175 /* Structure to hold information about predefined registers. */
182 /* List of registers that are pre-defined:
184 Each general register has predefined names of the form:
185 1. r<reg_num> which has the value <reg_num>.
186 2. r.<reg_num> which has the value <reg_num>.
188 Each floating point register has predefined names of the form:
189 1. f<reg_num> which has the value <reg_num>.
190 2. f.<reg_num> which has the value <reg_num>.
192 There are only four floating point registers, and these are
193 commonly labelled 0,2,4 and 6. Thus, there is no f1, f3, etc.
195 There are individual registers as well:
196 rbase or r.base has the value 3 (base register)
197 rpgt or r.pgt has the value 4 (page origin table pointer)
198 rarg or r.arg has the value 11 (argument pointer)
199 rtca or r.tca has the value 12 (table of contents pointer)
200 rtoc or r.toc has the value 12 (table of contents pointer)
201 sp or r.sp has the value 13 (stack pointer)
202 dsa or r.dsa has the value 13 (stack pointer)
203 lr has the value 14 (link reg)
205 The table is sorted. Suitable for searching by a binary search. */
207 static const struct pd_reg pre_defined_registers
[] =
209 { "arg", 11 }, /* Argument Pointer */
210 { "base", 3 }, /* Base Reg */
212 { "f.0", 0 }, /* Floating point registers */
222 { "dsa",13 }, /* stack pointer */
223 { "lr", 14 }, /* Link Register */
224 { "pgt", 4 }, /* Page Origin Table Pointer */
226 { "r.0", 0 }, /* General Purpose Registers */
243 { "r.arg", 11 }, /* Argument Pointer */
244 { "r.base", 3 }, /* Base Reg */
245 { "r.dsa", 13 }, /* Stack Pointer */
246 { "r.pgt", 4 }, /* Page Origin Table Pointer */
247 { "r.sp", 13 }, /* Stack Pointer */
249 { "r.tca", 12 }, /* Pointer to the table of contents */
250 { "r.toc", 12 }, /* Pointer to the table of contents */
252 { "r0", 0 }, /* More general purpose registers */
269 { "rbase", 3 }, /* Base Reg */
271 { "rtca", 12 }, /* Pointer to the table of contents */
272 { "rtoc", 12 }, /* Pointer to the table of contents */
274 { "sp", 13 }, /* Stack Pointer */
278 #define REG_NAME_CNT (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
280 /* Given NAME, find the register number associated with that name, return
281 the integer value associated with the given name or -1 on failure. */
283 static int reg_name_search
284 PARAMS ((const struct pd_reg
*, int, const char * name
));
287 reg_name_search (regs
, regcount
, name
)
288 const struct pd_reg
*regs
;
292 int middle
, low
, high
;
300 middle
= (low
+ high
) / 2;
301 cmp
= strcasecmp (name
, regs
[middle
].name
);
307 return regs
[middle
].value
;
315 * Summary of register_name().
317 * in: Input_line_pointer points to 1st char of operand.
319 * out: An expressionS.
320 * The operand may have been a register: in this case, X_op == O_register,
321 * X_add_number is set to the register number, and truth is returned.
322 * Input_line_pointer->(next non-blank) char after operand, or is in its
327 register_name (expressionP
)
328 expressionS
*expressionP
;
335 /* Find the spelling of the operand. */
336 start
= name
= input_line_pointer
;
337 if (name
[0] == '%' && ISALPHA (name
[1]))
338 name
= ++input_line_pointer
;
340 else if (!reg_names_p
)
344 name
= ++input_line_pointer
;
346 /* If it's a number, treat it as a number. If it's alpha, look to
347 see if it's in the register table. */
348 if (!ISALPHA (name
[0]))
350 reg_number
= get_single_number ();
354 c
= get_symbol_end ();
355 reg_number
= reg_name_search (pre_defined_registers
, REG_NAME_CNT
, name
);
357 /* Put back the delimiting char. */
358 *input_line_pointer
= c
;
361 /* If numeric, make sure its not out of bounds. */
362 if ((0 <= reg_number
) && (16 >= reg_number
))
364 expressionP
->X_op
= O_register
;
365 expressionP
->X_add_number
= reg_number
;
367 /* Make the rest nice. */
368 expressionP
->X_add_symbol
= NULL
;
369 expressionP
->X_op_symbol
= NULL
;
373 /* Reset the line as if we had not done anything. */
374 input_line_pointer
= start
;
378 /* Local variables. */
380 /* The type of processor we are assembling for. This is one or more
381 of the I370_OPCODE flags defined in opcode/i370.h. */
382 static int i370_cpu
= 0;
384 /* The base register to use for opcode with optional operands.
385 * We define two of these: "text" and "other". Normally, "text"
386 * would get used in the .text section for branches, while "other"
387 * gets used in the .data section for address constants.
389 * The idea of a second base register in a different section
390 * is foreign to the usual HLASM-style semantics; however, it
391 * allows us to provide support for dynamically loaded libraries,
392 * by allowing us to place address constants in a section other
393 * than the text section. The "other" section need not be the
394 * .data section, it can be any section that isn't the .text section.
396 * Note that HLASM defines a multiple, concurrent .using semantic
397 * that we do not: in calculating offsets, it uses either the most
398 * recent .using directive, or the one with the smallest displacement.
399 * This allows HLASM to support a quasi-block-scope-like behaviour.
400 * Handy for people writing assembly by hand ... but not supported
403 static int i370_using_text_regno
= -1;
404 static int i370_using_other_regno
= -1;
406 /* The base address for address literals */
407 static expressionS i370_using_text_baseaddr
;
408 static expressionS i370_using_other_baseaddr
;
410 /* the "other" section, used only for syntax error detection */
411 static segT i370_other_section
= undefined_section
;
413 /* Opcode hash table. */
414 static struct hash_control
*i370_hash
;
416 /* Macro hash table. */
417 static struct hash_control
*i370_macro_hash
;
420 /* What type of shared library support to use */
421 static enum { SHLIB_NONE
, SHLIB_PIC
, SHILB_MRELOCATABLE
} shlib
= SHLIB_NONE
;
424 /* Flags to set in the elf header */
425 static flagword i370_flags
= 0;
427 #ifndef WORKING_DOT_WORD
428 int md_short_jump_size
= 4;
429 int md_long_jump_size
= 4;
433 const char *md_shortopts
= "l:um:K:VQ:";
435 const char *md_shortopts
= "um:";
437 struct option md_longopts
[] =
439 {NULL
, no_argument
, NULL
, 0}
441 size_t md_longopts_size
= sizeof (md_longopts
);
444 md_parse_option (c
, arg
)
451 /* -u means that any undefined symbols should be treated as
452 external, which is the default for gas anyhow. */
457 /* Recognize -K PIC */
458 if (strcmp (arg
, "PIC") == 0 || strcmp (arg
, "pic") == 0)
461 i370_flags
|= EF_I370_RELOCATABLE_LIB
;
471 /* -m360 mean to assemble for the ancient 360 architecture */
472 if (strcmp (arg
, "360") == 0 || strcmp (arg
, "i360") == 0)
473 i370_cpu
= I370_OPCODE_360
;
474 /* -mxa means to assemble for the IBM 370 XA */
475 else if (strcmp (arg
, "xa") == 0)
476 i370_cpu
= I370_OPCODE_370_XA
;
477 /* -many means to assemble for any architecture (370/XA). */
478 else if (strcmp (arg
, "any") == 0)
479 i370_cpu
= I370_OPCODE_370
;
481 else if (strcmp (arg
, "regnames") == 0)
484 else if (strcmp (arg
, "no-regnames") == 0)
488 /* -mrelocatable/-mrelocatable-lib -- warn about initializations that require relocation */
489 else if (strcmp (arg
, "relocatable") == 0)
491 shlib
= SHILB_MRELOCATABLE
;
492 i370_flags
|= EF_I370_RELOCATABLE
;
495 else if (strcmp (arg
, "relocatable-lib") == 0)
497 shlib
= SHILB_MRELOCATABLE
;
498 i370_flags
|= EF_I370_RELOCATABLE_LIB
;
504 as_bad ("invalid switch -m%s", arg
);
510 /* -V: SVR4 argument to print version ID. */
515 /* -Qy, -Qn: SVR4 arguments controlling whether a .comment section
516 should be emitted or not. FIXME: Not implemented. */
530 /* Set i370_cpu if it is not already set.
531 Currently defaults to the reasonable superset;
532 but can be made more fine grained if desred. */
537 const char *default_os
= TARGET_OS
;
538 const char *default_cpu
= TARGET_CPU
;
540 /* override with the superset for the moment. */
541 i370_cpu
= I370_OPCODE_ESA390_SUPERSET
;
544 if (strcmp (default_cpu
, "i360") == 0)
545 i370_cpu
= I370_OPCODE_360
;
546 else if (strcmp (default_cpu
, "i370") == 0)
547 i370_cpu
= I370_OPCODE_370
;
548 else if (strcmp (default_cpu
, "XA") == 0)
549 i370_cpu
= I370_OPCODE_370_XA
;
551 as_fatal ("Unknown default cpu = %s, os = %s", default_cpu
, default_os
);
555 /* Figure out the BFD architecture to use. */
556 /* hack alert -- specify the different 370 architectures */
558 enum bfd_architecture
561 return bfd_arch_i370
;
564 /* This function is called when the assembler starts up. It is called
565 after the options have been parsed and the output file has been
571 register const struct i370_opcode
*op
;
572 const struct i370_opcode
*op_end
;
573 const struct i370_macro
*macro
;
574 const struct i370_macro
*macro_end
;
575 bfd_boolean dup_insn
= FALSE
;
580 /* Set the ELF flags if desired. */
582 bfd_set_private_flags (stdoutput
, i370_flags
);
585 /* Insert the opcodes into a hash table. */
586 i370_hash
= hash_new ();
588 op_end
= i370_opcodes
+ i370_num_opcodes
;
589 for (op
= i370_opcodes
; op
< op_end
; op
++)
591 know ((op
->opcode
.i
[0] & op
->mask
.i
[0]) == op
->opcode
.i
[0]
592 && (op
->opcode
.i
[1] & op
->mask
.i
[1]) == op
->opcode
.i
[1]);
594 if ((op
->flags
& i370_cpu
) != 0)
598 retval
= hash_insert (i370_hash
, op
->name
, (PTR
) op
);
599 if (retval
!= (const char *) NULL
)
601 as_bad ("Internal assembler error for instruction %s", op
->name
);
607 /* Insert the macros into a hash table. */
608 i370_macro_hash
= hash_new ();
610 macro_end
= i370_macros
+ i370_num_macros
;
611 for (macro
= i370_macros
; macro
< macro_end
; macro
++)
613 if ((macro
->flags
& i370_cpu
) != 0)
617 retval
= hash_insert (i370_macro_hash
, macro
->name
, (PTR
) macro
);
618 if (retval
!= (const char *) NULL
)
620 as_bad ("Internal assembler error for macro %s", macro
->name
);
630 /* Insert an operand value into an instruction. */
633 i370_insert_operand (insn
, operand
, val
)
635 const struct i370_operand
*operand
;
642 /* used for 48-bit insn's */
644 insn
= (*operand
->insert
) (insn
, (long) val
, &errmsg
);
646 as_bad ("%s", errmsg
);
650 /* this is used only for 16, 32 bit insn's */
651 insn
.i
[0] |= (((long) val
& ((1 << operand
->bits
) - 1))
660 /* Parse @got, etc. and return the desired relocation.
661 Currently, i370 does not support (don't really need to support) any
662 of these fancier markups ... for example, no one is going to
663 write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
664 So basically, we could get away with this routine returning
665 BFD_RELOC_UNUSED in all circumstances. However, I'll leave
666 in for now in case someone ambitious finds a good use for this stuff ...
667 this routine was pretty much just copied from the powerpc code ... */
668 static bfd_reloc_code_real_type
669 i370_elf_suffix (str_p
, exp_p
)
677 bfd_reloc_code_real_type reloc
;
687 #define MAP(str,reloc) { str, sizeof (str)-1, reloc }
689 static struct map_bfd mapping
[] =
691 /* warnings with -mrelocatable. */
692 MAP ("fixup", BFD_RELOC_CTOR
),
693 { (char *)0, 0, BFD_RELOC_UNUSED
}
697 return BFD_RELOC_UNUSED
;
699 for (ch
= *str
, str2
= ident
;
700 (str2
< ident
+ sizeof (ident
) - 1
701 && (ISALNUM (ch
) || ch
== '@'));
704 *str2
++ = TOLOWER (ch
);
711 for (ptr
= &mapping
[0]; ptr
->length
> 0; ptr
++)
712 if (ch
== ptr
->string
[0]
713 && len
== ptr
->length
714 && memcmp (ident
, ptr
->string
, ptr
->length
) == 0)
716 if (exp_p
->X_add_number
!= 0
717 && (ptr
->reloc
== BFD_RELOC_16_GOTOFF
718 || ptr
->reloc
== BFD_RELOC_LO16_GOTOFF
719 || ptr
->reloc
== BFD_RELOC_HI16_GOTOFF
720 || ptr
->reloc
== BFD_RELOC_HI16_S_GOTOFF
))
721 as_warn ("identifier+constant@got means identifier@got+constant");
723 /* Now check for identifier@suffix+constant */
724 if (*str
== '-' || *str
== '+')
726 char *orig_line
= input_line_pointer
;
729 input_line_pointer
= str
;
730 expression (&new_exp
);
731 if (new_exp
.X_op
== O_constant
)
733 exp_p
->X_add_number
+= new_exp
.X_add_number
;
734 str
= input_line_pointer
;
737 if (&input_line_pointer
!= str_p
)
738 input_line_pointer
= orig_line
;
745 return BFD_RELOC_UNUSED
;
748 /* Like normal .long/.short/.word, except support @got, etc. */
749 /* clobbers input_line_pointer, checks end-of-line. */
751 i370_elf_cons (nbytes
)
752 register int nbytes
; /* 1=.byte, 2=.word, 4=.long */
755 bfd_reloc_code_real_type reloc
;
757 if (is_it_end_of_statement ())
759 demand_empty_rest_of_line ();
766 if (exp
.X_op
== O_symbol
767 && *input_line_pointer
== '@'
768 && (reloc
= i370_elf_suffix (&input_line_pointer
, &exp
)) != BFD_RELOC_UNUSED
)
770 reloc_howto_type
*reloc_howto
= bfd_reloc_type_lookup (stdoutput
, reloc
);
771 int size
= bfd_get_reloc_size (reloc_howto
);
774 as_bad ("%s relocations do not fit in %d bytes\n", reloc_howto
->name
, nbytes
);
778 register char *p
= frag_more ((int) nbytes
);
779 int offset
= nbytes
- size
;
781 fix_new_exp (frag_now
, p
- frag_now
->fr_literal
+ offset
, size
, &exp
, 0, reloc
);
785 emit_expr (&exp
, (unsigned int) nbytes
);
787 while (*input_line_pointer
++ == ',');
789 input_line_pointer
--; /* Put terminator back into stream. */
790 demand_empty_rest_of_line ();
794 /* ASCII to EBCDIC conversion table. */
795 static unsigned char ascebc
[256] =
797 /*00 NL SH SX EX ET NQ AK BL */
798 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
799 /*08 BS HT LF VT FF CR SO SI */
800 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
801 /*10 DL D1 D2 D3 D4 NK SN EB */
802 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
803 /*18 CN EM SB EC FS GS RS US */
804 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F,
805 /*20 SP ! " # $ % & ' */
806 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
807 /*28 ( ) * + , - . / */
808 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
809 /*30 0 1 2 3 4 5 6 7 */
810 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
811 /*38 8 9 : ; < = > ? */
812 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
813 /*40 @ A B C D E F G */
814 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
815 /*48 H I J K L M N O */
816 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
817 /*50 P Q R S T U V W */
818 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
819 /*58 X Y Z [ \ ] ^ _ */
820 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
821 /*60 ` a b c d e f g */
822 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
823 /*68 h i j k l m n o */
824 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
825 /*70 p q r s t u v w */
826 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
827 /*78 x y z { | } ~ DL */
828 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
829 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
830 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
831 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
832 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
833 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
834 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
835 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
836 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
837 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
838 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
839 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
840 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
841 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
842 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
843 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
844 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF
847 /* EBCDIC to ASCII conversion table. */
848 unsigned char ebcasc
[256] =
850 /*00 NU SH SX EX PF HT LC DL */
851 0x00, 0x01, 0x02, 0x03, 0x00, 0x09, 0x00, 0x7F,
852 /*08 SM VT FF CR SO SI */
853 0x00, 0x00, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
854 /*10 DE D1 D2 TM RS NL BS IL */
855 0x10, 0x11, 0x12, 0x13, 0x14, 0x0A, 0x08, 0x00,
856 /*18 CN EM CC C1 FS GS RS US */
857 0x18, 0x19, 0x00, 0x00, 0x1C, 0x1D, 0x1E, 0x1F,
858 /*20 DS SS FS BP LF EB EC */
859 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x17, 0x1B,
860 /*28 SM C2 EQ AK BL */
861 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x07, 0x00,
862 /*30 SY PN RS UC ET */
863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
865 0x00, 0x00, 0x00, 0x00, 0x14, 0x15, 0x00, 0x1A,
867 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
869 0x00, 0x00, 0x00, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
871 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
873 0x00, 0x00, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
875 0x2D, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
877 0x00, 0x00, 0x00, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
879 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
880 /*78 ` : # @ ' = " */
881 0x00, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
882 /*80 a b c d e f g */
883 0x00, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
885 0x68, 0x69, 0x00, 0x7B, 0x00, 0x00, 0x00, 0x00,
886 /*90 j k l m n o p */
887 0x00, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
889 0x71, 0x72, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x00,
890 /*A0 ~ s t u v w x */
891 0x00, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
893 0x79, 0x7A, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00,
895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
897 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00,
898 /*C0 { A B C D E F G */
899 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
901 0x48, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902 /*D0 } J K L M N O P */
903 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
905 0x51, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
906 /*E0 \ S T U V W X */
907 0x5C, 0x00, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
909 0x59, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
910 /*F0 0 1 2 3 4 5 6 7 */
911 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
913 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
916 /* ebcdic translation tables needed for 3270 support */
919 int unused ATTRIBUTE_UNUSED
;
925 nbytes
= strlen (input_line_pointer
);
926 end
= input_line_pointer
+ nbytes
;
927 while ('\r' == *end
) end
--;
928 while ('\n' == *end
) end
--;
930 delim
= *input_line_pointer
;
931 if (('\'' == delim
) || ('\"' == delim
)) {
932 input_line_pointer
++;
933 end
= rindex (input_line_pointer
, delim
);
936 if (end
> input_line_pointer
)
938 nbytes
= end
- input_line_pointer
+1;
939 p
= frag_more (nbytes
);
940 while (end
> input_line_pointer
)
942 *p
= ascebc
[(unsigned char) (*input_line_pointer
)];
943 ++p
; ++input_line_pointer
;
947 if (delim
== *input_line_pointer
) ++input_line_pointer
;
951 /* stub out a couple of routines */
954 int unused ATTRIBUTE_UNUSED
;
956 as_tsktsk ("rmode ignored");
963 char *save_line
= input_line_pointer
;
964 static char section
[] = ".data\n";
966 /* Just pretend this is .section .data */
967 input_line_pointer
= section
;
968 obj_elf_section (sect
);
970 input_line_pointer
= save_line
;
975 int unused ATTRIBUTE_UNUSED
;
977 as_tsktsk ("csect not supported");
981 /* DC Define Const is only partially supported.
982 * For samplecode on what to do, look at i370_elf_cons() above.
983 * This code handles pseudoops of the style
984 * DC D'3.141592653' # in sysv4, .double 3.14159265
985 * DC F'1' # in sysv4, .long 1
989 int unused ATTRIBUTE_UNUSED
;
996 if (is_it_end_of_statement ())
998 demand_empty_rest_of_line ();
1002 /* figure out the size */
1003 type
= *input_line_pointer
++;
1006 case 'H': /* 16-bit */
1009 case 'E': /* 32-bit */
1010 case 'F': /* 32-bit */
1013 case 'D': /* 64-bit */
1017 as_bad ("unsupported DC type");
1021 /* get rid of pesky quotes */
1022 if ('\'' == *input_line_pointer
)
1025 ++input_line_pointer
;
1026 close
= strchr (input_line_pointer
, '\'');
1030 as_bad ("missing end-quote");
1032 if ('\"' == *input_line_pointer
)
1035 ++input_line_pointer
;
1036 close
= strchr (input_line_pointer
, '\"');
1040 as_bad ("missing end-quote");
1045 case 'H': /* 16-bit */
1046 case 'F': /* 32-bit */
1048 emit_expr (&exp
, nbytes
);
1050 case 'E': /* 32-bit */
1051 case 'D': /* 64-bit */
1052 md_atof (type
, tmp
, &nbytes
);
1053 p
= frag_more (nbytes
);
1054 memcpy (p
, tmp
, nbytes
);
1057 as_bad ("unsupported DC type");
1061 demand_empty_rest_of_line ();
1065 /* provide minimal support for DS Define Storage */
1068 int unused ATTRIBUTE_UNUSED
;
1070 /* DS 0H or DS 0F or DS 0D */
1071 if ('0' == *input_line_pointer
)
1073 int alignment
= 0; /* left shift 1<<align */
1074 input_line_pointer
++;
1075 switch (*input_line_pointer
++)
1077 case 'H': /* 16-bit */
1080 case 'F': /* 32-bit */
1083 case 'D': /* 64-bit */
1087 as_bad ("unsupported alignment");
1090 frag_align (alignment
, 0, 0);
1091 record_alignment (now_seg
, alignment
);
1095 as_bad ("this DS form not yet supported");
1099 /* Solaris pseudo op to change to the .rodata section. */
1101 i370_elf_rdata (sect
)
1104 char *save_line
= input_line_pointer
;
1105 static char section
[] = ".rodata\n";
1107 /* Just pretend this is .section .rodata */
1108 input_line_pointer
= section
;
1109 obj_elf_section (sect
);
1111 input_line_pointer
= save_line
;
1114 /* Pseudo op to make file scope bss items */
1116 i370_elf_lcomm (unused
)
1117 int unused ATTRIBUTE_UNUSED
;
1119 register char *name
;
1123 register symbolS
*symbolP
;
1130 name
= input_line_pointer
;
1131 c
= get_symbol_end ();
1133 /* just after name is now '\0' */
1134 p
= input_line_pointer
;
1137 if (*input_line_pointer
!= ',')
1139 as_bad ("Expected comma after symbol-name: rest of line ignored.");
1140 ignore_rest_of_line ();
1144 input_line_pointer
++; /* skip ',' */
1145 if ((size
= get_absolute_expression ()) < 0)
1147 as_warn (".COMMon length (%ld.) <0! Ignored.", (long) size
);
1148 ignore_rest_of_line ();
1152 /* The third argument to .lcomm is the alignment. */
1153 if (*input_line_pointer
!= ',')
1157 ++input_line_pointer
;
1158 align
= get_absolute_expression ();
1161 as_warn ("ignoring bad alignment");
1167 symbolP
= symbol_find_or_make (name
);
1170 if (S_IS_DEFINED (symbolP
) && ! S_IS_COMMON (symbolP
))
1172 as_bad ("Ignoring attempt to re-define symbol `%s'.",
1173 S_GET_NAME (symbolP
));
1174 ignore_rest_of_line ();
1178 if (S_GET_VALUE (symbolP
) && S_GET_VALUE (symbolP
) != (valueT
) size
)
1180 as_bad ("Length of .lcomm \"%s\" is already %ld. Not changed to %ld.",
1181 S_GET_NAME (symbolP
),
1182 (long) S_GET_VALUE (symbolP
),
1185 ignore_rest_of_line ();
1191 old_subsec
= now_subseg
;
1194 /* convert to a power of 2 alignment */
1195 for (align2
= 0; (align
& 1) == 0; align
>>= 1, ++align2
)
1199 as_bad ("Common alignment not a power of 2");
1200 ignore_rest_of_line ();
1207 record_alignment (bss_section
, align2
);
1208 subseg_set (bss_section
, 0);
1210 frag_align (align2
, 0, 0);
1211 if (S_GET_SEGMENT (symbolP
) == bss_section
)
1212 symbol_get_frag (symbolP
)->fr_symbol
= 0;
1213 symbol_set_frag (symbolP
, frag_now
);
1214 pfrag
= frag_var (rs_org
, 1, 1, (relax_substateT
) 0, symbolP
, size
,
1217 S_SET_SIZE (symbolP
, size
);
1218 S_SET_SEGMENT (symbolP
, bss_section
);
1219 subseg_set (old_sec
, old_subsec
);
1220 demand_empty_rest_of_line ();
1223 /* Validate any relocations emitted for -mrelocatable, possibly adding
1224 fixups for word relocations in writable segments, so we can adjust
1227 i370_elf_validate_fix (fixp
, seg
)
1231 if (fixp
->fx_done
|| fixp
->fx_pcrel
)
1240 case SHILB_MRELOCATABLE
:
1241 if (fixp
->fx_r_type
<= BFD_RELOC_UNUSED
1242 && fixp
->fx_r_type
!= BFD_RELOC_16_GOTOFF
1243 && fixp
->fx_r_type
!= BFD_RELOC_HI16_GOTOFF
1244 && fixp
->fx_r_type
!= BFD_RELOC_LO16_GOTOFF
1245 && fixp
->fx_r_type
!= BFD_RELOC_HI16_S_GOTOFF
1246 && fixp
->fx_r_type
!= BFD_RELOC_32_BASEREL
1247 && fixp
->fx_r_type
!= BFD_RELOC_LO16_BASEREL
1248 && fixp
->fx_r_type
!= BFD_RELOC_HI16_BASEREL
1249 && fixp
->fx_r_type
!= BFD_RELOC_HI16_S_BASEREL
1250 && strcmp (segment_name (seg
), ".got2") != 0
1251 && strcmp (segment_name (seg
), ".dtors") != 0
1252 && strcmp (segment_name (seg
), ".ctors") != 0
1253 && strcmp (segment_name (seg
), ".fixup") != 0
1254 && strcmp (segment_name (seg
), ".stab") != 0
1255 && strcmp (segment_name (seg
), ".gcc_except_table") != 0
1256 && strcmp (segment_name (seg
), ".ex_shared") != 0)
1258 if ((seg
->flags
& (SEC_READONLY
| SEC_CODE
)) != 0
1259 || fixp
->fx_r_type
!= BFD_RELOC_CTOR
)
1261 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
1262 "Relocation cannot be done when using -mrelocatable");
1268 #endif /* OBJ_ELF */
1271 #define LITERAL_POOL_SUPPORT
1272 #ifdef LITERAL_POOL_SUPPORT
1273 /* Provide support for literal pools within the text section. */
1274 /* Loosely based on similar code from tc-arm.c */
1276 * We will use four symbols to locate four parts of the literal pool.
1277 * These four sections contain 64,32,16 and 8-bit constants; we use
1278 * four sections so that all memory access can be appropriately aligned.
1279 * That is, we want to avoid mixing these together so that we don't
1280 * waste space padding out to alignments. The four pointers
1281 * longlong_poolP, word_poolP, etc. point to a symbol labeling the
1282 * start of each pool part.
1284 * lit_pool_num increments from zero to infinity and uniquely id's
1285 * -- its used to generate the *_poolP symbol name.
1288 #define MAX_LITERAL_POOL_SIZE 1024
1290 typedef struct literalS
1292 struct expressionS exp
;
1294 char size
; /* 1,2,4 or 8 */
1298 literalT literals
[MAX_LITERAL_POOL_SIZE
];
1299 int next_literal_pool_place
= 0; /* Next free entry in the pool */
1301 static symbolS
*longlong_poolP
= NULL
; /* 64-bit pool entries */
1302 static symbolS
*word_poolP
= NULL
; /* 32-bit pool entries */
1303 static symbolS
*short_poolP
= NULL
; /* 16-bit pool entries */
1304 static symbolS
*byte_poolP
= NULL
; /* 8-bit pool entries */
1306 static int lit_pool_num
= 1;
1308 /* create a new, empty symbol */
1310 symbol_make_empty (void)
1312 return symbol_create (FAKE_LABEL_NAME
, undefined_section
,
1313 (valueT
) 0, &zero_address_frag
);
1316 /* add an expression to the literal pool */
1318 add_to_lit_pool (expressionS
*exx
, char *name
, int sz
)
1321 int offset_in_pool
= 0;
1323 /* start a new pool, if necessary */
1324 if (8 == sz
&& NULL
== longlong_poolP
)
1325 longlong_poolP
= symbol_make_empty ();
1326 else if (4 == sz
&& NULL
== word_poolP
)
1327 word_poolP
= symbol_make_empty ();
1328 else if (2 == sz
&& NULL
== short_poolP
)
1329 short_poolP
= symbol_make_empty ();
1330 else if (1 == sz
&& NULL
== byte_poolP
)
1331 byte_poolP
= symbol_make_empty ();
1333 /* Check if this literal value is already in the pool: */
1334 /* hack alert -- we should probably be checking expressions
1335 * of type O_symbol as well ... */
1336 /* hack alert XXX this is probably(certainly?) broken for O_big,
1337 * which includes 64-bit long-longs ...
1339 while (lit_count
< next_literal_pool_place
)
1341 if (exx
->X_op
== O_constant
1342 && literals
[lit_count
].exp
.X_op
== exx
->X_op
1343 && literals
[lit_count
].exp
.X_add_number
== exx
->X_add_number
1344 && literals
[lit_count
].exp
.X_unsigned
== exx
->X_unsigned
1345 && literals
[lit_count
].size
== sz
)
1347 else if (literals
[lit_count
].sym_name
1349 && !strcmp (name
, literals
[lit_count
].sym_name
))
1351 if (sz
== literals
[lit_count
].size
)
1352 offset_in_pool
+= sz
;
1356 if (lit_count
== next_literal_pool_place
) /* new entry */
1358 if (next_literal_pool_place
> MAX_LITERAL_POOL_SIZE
)
1360 as_bad ("Literal Pool Overflow");
1363 literals
[next_literal_pool_place
].exp
= *exx
;
1364 literals
[next_literal_pool_place
].size
= sz
;
1365 literals
[next_literal_pool_place
].offset
= offset_in_pool
;
1368 literals
[next_literal_pool_place
].sym_name
= strdup (name
);
1372 literals
[next_literal_pool_place
].sym_name
= NULL
;
1374 next_literal_pool_place
++;
1377 /* ???_poolP points to the beginning of the literal pool.
1378 * X_add_number is the offset from the beginning of the
1379 * literal pool to this expr minus the location of the most
1380 * recent .using directive. Thus, the grand total value of the
1381 * expression is the distance from .using to the literal.
1384 exx
->X_add_symbol
= longlong_poolP
;
1386 exx
->X_add_symbol
= word_poolP
;
1388 exx
->X_add_symbol
= short_poolP
;
1390 exx
->X_add_symbol
= byte_poolP
;
1391 exx
->X_add_number
= offset_in_pool
;
1392 exx
->X_op_symbol
= NULL
;
1394 /* If the user has set up a base reg in another section,
1395 * use that; otherwise use the text section. */
1396 if (0 < i370_using_other_regno
)
1398 i370_make_relative (exx
, &i370_using_other_baseaddr
);
1402 i370_make_relative (exx
, &i370_using_text_baseaddr
);
1406 /* The symbol setup for the literal pool is done in two steps. First,
1407 * a symbol that represents the start of the literal pool is created,
1408 * above, in the add_to_pool() routine. This sym ???_poolP.
1409 * However, we don't know what fragment its in until a bit later.
1410 * So we defer the frag_now thing, and the symbol name, until .ltorg time
1413 /* Can't use symbol_new here, so have to create a symbol and then at
1414 a later date assign it a value. Thats what these functions do */
1415 static void symbol_locate
1416 PARAMS ((symbolS
*, const char *, segT
, valueT
, fragS
*));
1419 symbol_locate (symbolP
, name
, segment
, valu
, frag
)
1421 const char *name
; /* It is copied, the caller can modify */
1422 segT segment
; /* Segment identifier (SEG_<something>) */
1423 valueT valu
; /* Symbol value */
1424 fragS
*frag
; /* Associated fragment */
1427 char *preserved_copy_of_name
;
1429 name_length
= strlen (name
) + 1; /* +1 for \0 */
1430 obstack_grow (¬es
, name
, name_length
);
1431 preserved_copy_of_name
= obstack_finish (¬es
);
1433 S_SET_NAME (symbolP
, preserved_copy_of_name
);
1435 S_SET_SEGMENT (symbolP
, segment
);
1436 S_SET_VALUE (symbolP
, valu
);
1437 symbol_clear_list_pointers (symbolP
);
1439 symbol_set_frag (symbolP
, frag
);
1442 * Link to end of symbol chain.
1445 extern int symbol_table_frozen
;
1446 if (symbol_table_frozen
)
1450 symbol_append (symbolP
, symbol_lastP
, &symbol_rootP
, &symbol_lastP
);
1452 obj_symbol_new_hook (symbolP
);
1454 #ifdef tc_symbol_new_hook
1455 tc_symbol_new_hook (symbolP
);
1460 verify_symbol_chain(symbol_rootP
, symbol_lastP
);
1461 #endif /* DEBUG_SYMS */
1464 /* i370_addr_offset() will convert operand expressions
1465 * that appear to be absolute into thier base-register
1466 * relative form. These expressions come in two types:
1468 * (1) of the form "* + const" * where "*" means
1469 * relative offset since the last using
1470 * i.e. "*" means ".-using_baseaddr"
1472 * (2) labels, which are never absolute, but are always
1473 * relative to the last "using". Anything with an alpha
1474 * character is considered to be a label (since symbols
1475 * can never be operands), and since we've already handled
1476 * register operands. For example, "BL .L33" branch low
1477 * to .L33 RX form insn frequently terminates for-loops,
1480 i370_addr_offset (expressionS
*exx
)
1486 /* search for a label; anything with an alpha char will do */
1487 /* local labels consist of N digits followed by either b or f */
1488 lab
= input_line_pointer
;
1489 while (*lab
&& (',' != *lab
) && ('(' != *lab
))
1495 else if (ISALPHA (*lab
))
1502 else if (('f' == *lab
) || ('b' == *lab
))
1510 else if ('.' != *lab
)
1515 /* See if operand has a * in it */
1516 dot
= strchr (input_line_pointer
, '*');
1518 if (!dot
&& !islabel
)
1521 /* replace * with . and let expr munch on it. */
1526 /* OK, now we have to subtract the "using" location */
1527 /* normally branches appear in the text section only... */
1528 if (0 == strncmp (now_seg
->name
, ".text", 5) || 0 > i370_using_other_regno
)
1530 i370_make_relative (exx
, &i370_using_text_baseaddr
);
1534 i370_make_relative (exx
, &i370_using_other_baseaddr
);
1537 /* put the * back */
1544 /* handle address constants of various sorts */
1545 /* The currently supported types are
1548 * =X'deadbeef' hexadecimal
1549 * =F'1234' 32-bit const int
1550 * =H'1234' 16-bit const int
1553 i370_addr_cons (expressionS
*exp
)
1556 char *sym_name
, delim
;
1561 name
= input_line_pointer
;
1562 sym_name
= input_line_pointer
;
1563 /* Find the spelling of the operand */
1564 if (name
[0] == '=' && ISALPHA (name
[1]))
1566 name
= ++input_line_pointer
;
1576 /* A == address-of */
1578 ++input_line_pointer
;
1581 /* we use a simple string name to collapse together
1582 * multiple refrences to the same address literal
1584 name_len
= strcspn (sym_name
, ", ");
1585 delim
= *(sym_name
+ name_len
);
1586 *(sym_name
+ name_len
) = 0x0;
1587 add_to_lit_pool (exp
, sym_name
, 4);
1588 *(sym_name
+ name_len
) = delim
;
1594 case 'E': /* single-precision float point */
1595 case 'D': /* double-precision float point */
1597 /* H == 16-bit fixed-point const; expression must be const */
1598 /* F == fixed-point const; expression must be const */
1599 /* X == fixed-point const; expression must be const */
1600 if ('H' == name
[0]) cons_len
= 2;
1601 else if ('F' == name
[0]) cons_len
= 4;
1602 else if ('X' == name
[0]) cons_len
= -1;
1603 else if ('E' == name
[0]) cons_len
= 4;
1604 else if ('D' == name
[0]) cons_len
= 8;
1606 /* extract length, if it is present; hack alert -- assume single-digit
1610 cons_len
= name
[2] - '0'; /* should work for ascii and ebcdic */
1611 input_line_pointer
+= 2;
1614 ++input_line_pointer
;
1616 /* get rid of pesky quotes */
1617 if ('\'' == *input_line_pointer
)
1620 ++input_line_pointer
;
1621 close
= strchr (input_line_pointer
, '\'');
1625 as_bad ("missing end-quote");
1627 if ('\"' == *input_line_pointer
)
1630 ++input_line_pointer
;
1631 close
= strchr (input_line_pointer
, '\"');
1635 as_bad ("missing end-quote");
1637 if (('X' == name
[0]) || ('E' == name
[0]) || ('D' == name
[0]))
1642 /* The length of hex constants is specified directly with L,
1643 * or implied through the number of hex digits. For example:
1645 * =X'abcd' two bytes
1646 * =X'000000AB' four bytes
1647 * =XL4'AB' four bytes, left-padded withn zero
1649 if (('X' == name
[0]) && (0 > cons_len
))
1651 save
= input_line_pointer
;
1654 if (ISXDIGIT (*save
))
1658 cons_len
= (hex_len
+1) /2;
1660 /* I believe this works even for =XL8'dada0000beeebaaa'
1661 * which should parse out to X_op == O_big
1662 * Note that floats and doubles get represented as
1663 * 0d3.14159265358979 or 0f 2.7
1668 strcat (tmp
, input_line_pointer
);
1669 save
= input_line_pointer
;
1670 input_line_pointer
= tmp
;
1672 input_line_pointer
= save
+ (input_line_pointer
-tmp
-2);
1674 /* fix up lengths for floats and doubles */
1675 if (O_big
== exp
->X_op
)
1677 exp
->X_add_number
= cons_len
/ CHARS_PER_LITTLENUM
;
1684 /* O_big occurs when more than 4 bytes worth gets parsed */
1685 if ((exp
->X_op
!= O_constant
) && (exp
->X_op
!= O_big
))
1687 as_bad ("expression not a constant");
1690 add_to_lit_pool (exp
, 0x0, cons_len
);
1694 as_bad ("Unknown/unsupported address literal type");
1702 /* Dump the contents of the literal pool that we've accumulated so far.
1703 * This aligns the pool to the size of the largest literal in the pool.
1708 int ignore ATTRIBUTE_UNUSED
;
1712 int biggest_literal_size
= 0;
1713 int biggest_align
= 0;
1716 if (strncmp (now_seg
->name
, ".text", 5))
1718 if (i370_other_section
== undefined_section
)
1720 as_bad (".ltorg without prior .using in section %s",
1723 if (i370_other_section
!= now_seg
)
1725 as_bad (".ltorg in section %s paired to .using in section %s",
1726 now_seg
->name
, i370_other_section
->name
);
1729 if (! longlong_poolP
1735 /* as_tsktsk ("Nothing to put in the pool\n"); */
1739 /* find largest literal .. 2 4 or 8 */
1741 while (lit_count
< next_literal_pool_place
)
1743 if (biggest_literal_size
< literals
[lit_count
].size
)
1744 biggest_literal_size
= literals
[lit_count
].size
;
1747 if (1 == biggest_literal_size
) biggest_align
= 0;
1748 else if (2 == biggest_literal_size
) biggest_align
= 1;
1749 else if (4 == biggest_literal_size
) biggest_align
= 2;
1750 else if (8 == biggest_literal_size
) biggest_align
= 3;
1751 else as_bad ("bad alignment of %d bytes in literal pool", biggest_literal_size
);
1752 if (0 == biggest_align
) biggest_align
= 1;
1754 /* Align pool for short, word, double word accesses */
1755 frag_align (biggest_align
, 0, 0);
1756 record_alignment (now_seg
, biggest_align
);
1758 /* Note that the gas listing will print only the first five
1759 * entries in the pool .... wonder how to make it print more ...
1761 /* output largest literals first, then the smaller ones. */
1762 for (litsize
=8; litsize
; litsize
/=2)
1764 symbolS
*current_poolP
= NULL
;
1768 current_poolP
= longlong_poolP
; break;
1770 current_poolP
= word_poolP
; break;
1772 current_poolP
= short_poolP
; break;
1774 current_poolP
= byte_poolP
; break;
1776 as_bad ("bad literal size\n");
1778 if (NULL
== current_poolP
)
1780 sprintf (pool_name
, ".LITP%01d%06d", litsize
, lit_pool_num
);
1781 symbol_locate (current_poolP
, pool_name
, now_seg
,
1782 (valueT
) frag_now_fix (), frag_now
);
1783 symbol_table_insert (current_poolP
);
1786 while (lit_count
< next_literal_pool_place
)
1788 if (litsize
== literals
[lit_count
].size
)
1790 #define EMIT_ADDR_CONS_SYMBOLS
1791 #ifdef EMIT_ADDR_CONS_SYMBOLS
1792 /* create a bogus symbol, add it to the pool ...
1793 * For the most part, I think this is a useless exercise,
1794 * except that having these symbol names in the objects
1795 * is vaguely useful for debugging ...
1797 if (literals
[lit_count
].sym_name
)
1799 symbolS
* symP
= symbol_make_empty ();
1800 symbol_locate (symP
, literals
[lit_count
].sym_name
, now_seg
,
1801 (valueT
) frag_now_fix (), frag_now
);
1802 symbol_table_insert (symP
);
1804 #endif /* EMIT_ADDR_CONS_SYMBOLS */
1806 emit_expr (&(literals
[lit_count
].exp
), literals
[lit_count
].size
);
1812 next_literal_pool_place
= 0;
1813 longlong_poolP
= NULL
;
1820 #endif /* LITERAL_POOL_SUPPORT */
1823 /* add support for the HLASM-like USING directive to indicate
1824 * the base register to use ... we don't support the full
1825 * hlasm semantics for this ... we merely pluck a base address
1826 * and a register number out. We print a warning if using is
1827 * called multiple times. I suppose we should check to see
1828 * if the regno is valid ...
1832 int ignore ATTRIBUTE_UNUSED
;
1834 expressionS ex
, baseaddr
;
1838 /* if "*" appears in a using, it means "." */
1839 /* replace it with "." so that expr doesn't get confused. */
1840 star
= strchr (input_line_pointer
, '*');
1844 /* the first arg to using will usually be ".", but it can
1845 * be a more complex expression too ... */
1846 expression (&baseaddr
);
1849 if (O_constant
!= baseaddr
.X_op
1850 && O_symbol
!= baseaddr
.X_op
1851 && O_uminus
!= baseaddr
.X_op
)
1853 as_bad (".using: base address expression illegal or too complex");
1856 if (*input_line_pointer
!= '\0') ++input_line_pointer
;
1858 /* the second arg to using had better be a register */
1859 register_name (&ex
);
1860 demand_empty_rest_of_line ();
1861 iregno
= ex
.X_add_number
;
1863 if (0 == strncmp (now_seg
->name
, ".text", 5))
1865 i370_using_text_baseaddr
= baseaddr
;
1866 i370_using_text_regno
= iregno
;
1870 i370_using_other_baseaddr
= baseaddr
;
1871 i370_using_other_regno
= iregno
;
1872 i370_other_section
= now_seg
;
1878 int ignore ATTRIBUTE_UNUSED
;
1883 register_name (&ex
);
1884 demand_empty_rest_of_line ();
1885 iregno
= ex
.X_add_number
;
1887 if (0 == strncmp (now_seg
->name
, ".text", 5))
1889 if (iregno
!= i370_using_text_regno
)
1891 as_bad ("droping register %d in section %s does not match using register %d",
1892 iregno
, now_seg
->name
, i370_using_text_regno
);
1894 i370_using_text_regno
= -1;
1895 i370_using_text_baseaddr
.X_op
= O_absent
;
1899 if (iregno
!= i370_using_other_regno
)
1901 as_bad ("droping register %d in section %s does not match using register %d",
1902 iregno
, now_seg
->name
, i370_using_other_regno
);
1904 if (i370_other_section
!= now_seg
)
1906 as_bad ("droping register %d in section %s previously used in section %s",
1907 iregno
, now_seg
->name
, i370_other_section
->name
);
1909 i370_using_other_regno
= -1;
1910 i370_using_other_baseaddr
.X_op
= O_absent
;
1911 i370_other_section
= undefined_section
;
1915 /* Make the first argument an address-relative expression
1916 * by subtracting the second argument.
1919 i370_make_relative (expressionS
*exx
, expressionS
*baseaddr
)
1922 if (O_constant
== baseaddr
->X_op
)
1924 exx
->X_op
= O_symbol
;
1925 exx
->X_add_number
-= baseaddr
->X_add_number
;
1927 else if (O_symbol
== baseaddr
->X_op
)
1929 exx
->X_op
= O_subtract
;
1930 exx
->X_op_symbol
= baseaddr
->X_add_symbol
;
1931 exx
->X_add_number
-= baseaddr
->X_add_number
;
1933 else if (O_uminus
== baseaddr
->X_op
)
1936 exx
->X_op_symbol
= baseaddr
->X_add_symbol
;
1937 exx
->X_add_number
+= baseaddr
->X_add_number
;
1941 as_bad ("Missing or bad .using directive");
1945 /* We need to keep a list of fixups. We can't simply generate them as
1946 we go, because that would require us to first create the frag, and
1947 that would screw up references to ``.''. */
1953 bfd_reloc_code_real_type reloc
;
1956 #define MAX_INSN_FIXUPS (5)
1958 /* This routine is called for each instruction to be assembled. */
1964 char *s
, *opcode_str
;
1965 const struct i370_opcode
*opcode
;
1967 const unsigned char *opindex_ptr
;
1968 int have_optional_index
, have_optional_basereg
, have_optional_reg
;
1969 int skip_optional_index
, skip_optional_basereg
, skip_optional_reg
;
1970 int use_text
=0, use_other
=0;
1972 struct i370_fixup fixups
[MAX_INSN_FIXUPS
];
1977 bfd_reloc_code_real_type reloc
;
1980 /* Get the opcode. */
1981 for (s
= str
; *s
!= '\0' && ! ISSPACE (*s
); s
++)
1987 /* Look up the opcode in the hash table. */
1988 opcode
= (const struct i370_opcode
*) hash_find (i370_hash
, str
);
1989 if (opcode
== (const struct i370_opcode
*) NULL
)
1991 const struct i370_macro
*macro
;
1993 assert (i370_macro_hash
);
1994 macro
= (const struct i370_macro
*) hash_find (i370_macro_hash
, str
);
1995 if (macro
== (const struct i370_macro
*) NULL
)
1996 as_bad ("Unrecognized opcode: `%s'", str
);
1998 i370_macro (s
, macro
);
2003 insn
= opcode
->opcode
;
2006 while (ISSPACE (*str
))
2009 /* I370 operands are either expressions or address constants.
2010 Many operand types are optional. The optional operands
2011 are always surrounded by parens, and are used to denote the base
2012 register ... e.g. "A R1, D2" or "A R1, D2(,B2) as opposed to
2013 the fully-formed "A R1, D2(X2,B2)". Note also the = sign,
2014 such as A R1,=A(i) where the address-of operator =A implies
2015 use of both a base register, and a missing index register.
2017 So, before we start seriously parsing the operands, we check
2018 to see if we have an optional operand, and, if we do, we count
2019 the number of commas to see which operand should be omitted. */
2021 have_optional_index
= have_optional_basereg
= have_optional_reg
= 0;
2022 for (opindex_ptr
= opcode
->operands
; *opindex_ptr
!= 0; opindex_ptr
++)
2024 const struct i370_operand
*operand
;
2025 operand
= &i370_operands
[*opindex_ptr
];
2026 if ((operand
->flags
& I370_OPERAND_INDEX
) != 0)
2027 have_optional_index
= 1;
2028 if ((operand
->flags
& I370_OPERAND_BASE
) != 0)
2029 have_optional_basereg
= 1;
2030 if ((operand
->flags
& I370_OPERAND_OPTIONAL
) != 0)
2031 have_optional_reg
= 1;
2034 skip_optional_index
= skip_optional_basereg
= skip_optional_reg
= 0;
2035 if (have_optional_index
|| have_optional_basereg
)
2037 unsigned int opcount
, nwanted
;
2039 /* There is an optional operand. Count the number of
2040 commas and open-parens in the input line. */
2047 while ((s
= strpbrk (s
, ",(=")) != (char *) NULL
)
2051 if (',' == *s
) ++s
; /* avoid counting things like (, */
2052 if ('=' == *s
) { ++s
; --opcount
; }
2056 /* If there are fewer operands in the line then are called
2057 for by the instruction, we want to skip the optional
2059 nwanted
= strlen ((char *) opcode
->operands
);
2060 if (have_optional_index
)
2062 if (opcount
< nwanted
)
2063 skip_optional_index
= 1;
2064 if (have_optional_basereg
&& ((opcount
+1) < nwanted
))
2065 skip_optional_basereg
= 1;
2066 if (have_optional_reg
&& ((opcount
+1) < nwanted
))
2067 skip_optional_reg
= 1;
2071 if (have_optional_basereg
&& (opcount
< nwanted
))
2072 skip_optional_basereg
= 1;
2073 if (have_optional_reg
&& (opcount
< nwanted
))
2074 skip_optional_reg
= 1;
2078 /* Perform some off-by-one hacks on the length field of certain instructions.
2079 * Its such a shame to have to do this, but the problem is that HLASM got
2080 * defined so that the lengths differ by one from the actual machine instructions.
2081 * this code should probably be moved to a special inster-operand routine.
2082 * Sigh. Affected instructions are Compare Logical, Move and Exclusive OR
2083 * hack alert -- aren't *all* SS instructions affected ??
2086 if (0 == strcasecmp ("CLC", opcode
->name
)
2087 || 0 == strcasecmp ("ED", opcode
->name
)
2088 || 0 == strcasecmp ("EDMK", opcode
->name
)
2089 || 0 == strcasecmp ("MVC", opcode
->name
)
2090 || 0 == strcasecmp ("MVCIN", opcode
->name
)
2091 || 0 == strcasecmp ("MVN", opcode
->name
)
2092 || 0 == strcasecmp ("MVZ", opcode
->name
)
2093 || 0 == strcasecmp ("NC", opcode
->name
)
2094 || 0 == strcasecmp ("OC", opcode
->name
)
2095 || 0 == strcasecmp ("XC", opcode
->name
))
2098 /* Gather the operands. */
2100 for (opindex_ptr
= opcode
->operands
; *opindex_ptr
!= 0; opindex_ptr
++)
2102 const struct i370_operand
*operand
;
2107 operand
= &i370_operands
[*opindex_ptr
];
2110 /* If this is an index operand, and we are skipping it,
2111 just insert a zero. */
2112 if (skip_optional_index
&&
2113 ((operand
->flags
& I370_OPERAND_INDEX
) != 0))
2115 insn
= i370_insert_operand (insn
, operand
, 0);
2119 /* If this is the base operand, and we are skipping it,
2120 just insert the current using basreg. */
2121 if (skip_optional_basereg
&&
2122 ((operand
->flags
& I370_OPERAND_BASE
) != 0))
2127 if (0 == strncmp (now_seg
->name
, ".text", 5)
2128 || 0 > i370_using_other_regno
)
2130 basereg
= i370_using_text_regno
;
2134 basereg
= i370_using_other_regno
;
2139 if (0 > i370_using_other_regno
)
2141 basereg
= i370_using_text_regno
;
2145 basereg
= i370_using_other_regno
;
2150 as_bad ("not using any base register");
2152 insn
= i370_insert_operand (insn
, operand
, basereg
);
2156 /* If this is an optional operand, and we are skipping it,
2157 Use zero (since a non-zero value would denote a register) */
2158 if (skip_optional_reg
2159 && ((operand
->flags
& I370_OPERAND_OPTIONAL
) != 0))
2161 insn
= i370_insert_operand (insn
, operand
, 0);
2165 /* Gather the operand. */
2166 hold
= input_line_pointer
;
2167 input_line_pointer
= str
;
2169 /* register names are only allowed where there are registers ... */
2170 if ((operand
->flags
& I370_OPERAND_GPR
) != 0)
2172 /* quickie hack to get past things like (,r13) */
2173 if (skip_optional_index
&& (',' == *input_line_pointer
))
2175 *input_line_pointer
= ' ';
2176 input_line_pointer
++;
2178 if (! register_name (&ex
))
2180 as_bad ("expecting a register for operand %d",
2181 opindex_ptr
- opcode
->operands
+ 1);
2185 /* Check for an address constant expression. */
2186 /* We will put PSW-relative addresses in the text section,
2187 * and address literals in the .data (or other) section. */
2188 else if (i370_addr_cons (&ex
))
2190 else if (i370_addr_offset (&ex
))
2192 else expression (&ex
);
2194 str
= input_line_pointer
;
2195 input_line_pointer
= hold
;
2197 /* perform some off-by-one hacks on the length field of certain instructions.
2198 * Its such a shame to have to do this, but the problem is that HLASM got
2199 * defined so that the programmer specifies a length that is one greater
2200 * than what the machine instruction wants.
2203 if (off_by_one
&& (0 == strcasecmp ("SS L", operand
->name
)))
2208 if (ex
.X_op
== O_illegal
)
2209 as_bad ("illegal operand");
2210 else if (ex
.X_op
== O_absent
)
2211 as_bad ("missing operand");
2212 else if (ex
.X_op
== O_register
)
2214 insn
= i370_insert_operand (insn
, operand
, ex
.X_add_number
);
2216 else if (ex
.X_op
== O_constant
)
2219 /* Allow @HA, @L, @H on constants.
2220 * Well actually, no we don't; there really don't make sense
2221 * (at least not to me) for the i370. However, this code is
2222 * left here for any dubious future expansion reasons ... */
2223 char *orig_str
= str
;
2225 if ((reloc
= i370_elf_suffix (&str
, &ex
)) != BFD_RELOC_UNUSED
)
2232 case BFD_RELOC_LO16
:
2233 /* X_unsigned is the default, so if the user has done
2234 something which cleared it, we always produce a
2236 ex
.X_add_number
= (((ex
.X_add_number
& 0xffff)
2241 case BFD_RELOC_HI16
:
2242 ex
.X_add_number
= (ex
.X_add_number
>> 16) & 0xffff;
2245 case BFD_RELOC_HI16_S
:
2246 ex
.X_add_number
= (((ex
.X_add_number
>> 16) & 0xffff)
2247 + ((ex
.X_add_number
>> 15) & 1));
2251 insn
= i370_insert_operand (insn
, operand
, ex
.X_add_number
);
2254 else if ((reloc
= i370_elf_suffix (&str
, &ex
)) != BFD_RELOC_UNUSED
)
2256 as_tsktsk ("md_assemble(): suffixed relocations not supported\n");
2258 /* We need to generate a fixup for this expression. */
2259 if (fc
>= MAX_INSN_FIXUPS
)
2260 as_fatal ("too many fixups");
2261 fixups
[fc
].exp
= ex
;
2262 fixups
[fc
].opindex
= 0;
2263 fixups
[fc
].reloc
= reloc
;
2266 #endif /* OBJ_ELF */
2270 /* We need to generate a fixup for this expression. */
2271 /* Typically, the expression will just be a symbol ...
2272 * printf ("insn %s needs fixup for %s \n",
2273 * opcode->name, ex.X_add_symbol->bsym->name);
2276 if (fc
>= MAX_INSN_FIXUPS
)
2277 as_fatal ("too many fixups");
2278 fixups
[fc
].exp
= ex
;
2279 fixups
[fc
].opindex
= *opindex_ptr
;
2280 fixups
[fc
].reloc
= BFD_RELOC_UNUSED
;
2284 /* skip over delimiter (close paren, or comma) */
2285 if ((')' == *str
) && (',' == *(str
+1)))
2291 while (ISSPACE (*str
))
2295 as_bad ("junk at end of line: `%s'", str
);
2297 /* Write out the instruction. */
2298 f
= frag_more (opcode
->len
);
2299 if (4 >= opcode
->len
)
2301 md_number_to_chars (f
, insn
.i
[0], opcode
->len
);
2305 md_number_to_chars (f
, insn
.i
[0], 4);
2306 if (6 == opcode
->len
)
2308 md_number_to_chars ((f
+4), ((insn
.i
[1])>>16), 2);
2312 /* not used --- don't have any 8 byte instructions */
2313 as_bad ("Internal Error: bad instruction length");
2314 md_number_to_chars ((f
+4), insn
.i
[1], opcode
->len
-4);
2318 /* Create any fixups. At this point we do not use a
2319 bfd_reloc_code_real_type, but instead just use the
2320 BFD_RELOC_UNUSED plus the operand index. This lets us easily
2321 handle fixups for any operand type, although that is admittedly
2322 not a very exciting feature. We pick a BFD reloc type in
2324 for (i
= 0; i
< fc
; i
++)
2326 const struct i370_operand
*operand
;
2328 operand
= &i370_operands
[fixups
[i
].opindex
];
2329 if (fixups
[i
].reloc
!= BFD_RELOC_UNUSED
)
2331 reloc_howto_type
*reloc_howto
= bfd_reloc_type_lookup (stdoutput
, fixups
[i
].reloc
);
2338 size
= bfd_get_reloc_size (reloc_howto
);
2340 if (size
< 1 || size
> 4)
2343 printf (" gwana doo fixup %d \n", i
);
2344 fixP
= fix_new_exp (frag_now
, f
- frag_now
->fr_literal
, size
,
2345 &fixups
[i
].exp
, reloc_howto
->pc_relative
,
2348 /* Turn off complaints that the addend is too large for things like
2350 switch (fixups
[i
].reloc
)
2352 case BFD_RELOC_16_GOTOFF
:
2353 case BFD_RELOC_LO16
:
2354 case BFD_RELOC_HI16
:
2355 case BFD_RELOC_HI16_S
:
2356 fixP
->fx_no_overflow
= 1;
2364 fix_new_exp (frag_now
, f
- frag_now
->fr_literal
, opcode
->len
,
2366 (operand
->flags
& I370_OPERAND_RELATIVE
) != 0,
2367 ((bfd_reloc_code_real_type
)
2368 (fixups
[i
].opindex
+ (int) BFD_RELOC_UNUSED
)));
2373 /* Handle a macro. Gather all the operands, transform them as
2374 described by the macro, and call md_assemble recursively. All the
2375 operands are separated by commas; we don't accept parentheses
2376 around operands here. */
2379 i370_macro (str
, macro
)
2381 const struct i370_macro
*macro
;
2392 /* Gather the users operands into the operands array. */
2397 if (count
>= sizeof operands
/ sizeof operands
[0])
2399 operands
[count
++] = s
;
2400 s
= strchr (s
, ',');
2401 if (s
== (char *) NULL
)
2406 if (count
!= macro
->operands
)
2408 as_bad ("wrong number of operands");
2412 /* Work out how large the string must be (the size is unbounded
2413 because it includes user input). */
2415 format
= macro
->format
;
2416 while (*format
!= '\0')
2425 arg
= strtol (format
+ 1, &send
, 10);
2426 know (send
!= format
&& arg
>= 0 && (unsigned) arg
< count
);
2427 len
+= strlen (operands
[arg
]);
2432 /* Put the string together. */
2433 complete
= s
= (char *) alloca (len
+ 1);
2434 format
= macro
->format
;
2435 while (*format
!= '\0')
2441 arg
= strtol (format
+ 1, &send
, 10);
2442 strcpy (s
, operands
[arg
]);
2449 /* Assemble the constructed instruction. */
2450 md_assemble (complete
);
2453 /* Pseudo-op handling. */
2455 /* The .byte pseudo-op. This is similar to the normal .byte
2456 pseudo-op, but it can also take a single ASCII string. */
2460 int ignore ATTRIBUTE_UNUSED
;
2462 if (*input_line_pointer
!= '\"')
2468 /* Gather characters. A real double quote is doubled. Unusual
2469 characters are not permitted. */
2470 ++input_line_pointer
;
2475 c
= *input_line_pointer
++;
2479 if (*input_line_pointer
!= '\"')
2481 ++input_line_pointer
;
2484 FRAG_APPEND_1_CHAR (c
);
2487 demand_empty_rest_of_line ();
2490 /* The .tc pseudo-op. This is used when generating XCOFF and ELF.
2491 This takes two or more arguments.
2493 When generating XCOFF output, the first argument is the name to
2494 give to this location in the toc; this will be a symbol with class
2495 TC. The rest of the arguments are 4 byte values to actually put at
2496 this location in the TOC; often there is just one more argument, a
2497 relocatable symbol reference.
2499 When not generating XCOFF output, the arguments are the same, but
2500 the first argument is simply ignored. */
2504 int ignore ATTRIBUTE_UNUSED
;
2507 /* Skip the TOC symbol name. */
2508 while (is_part_of_name (*input_line_pointer
)
2509 || *input_line_pointer
== '['
2510 || *input_line_pointer
== ']'
2511 || *input_line_pointer
== '{'
2512 || *input_line_pointer
== '}')
2513 ++input_line_pointer
;
2515 /* Align to a four byte boundary. */
2516 frag_align (2, 0, 0);
2517 record_alignment (now_seg
, 2);
2519 if (*input_line_pointer
!= ',')
2520 demand_empty_rest_of_line ();
2523 ++input_line_pointer
;
2528 /* Turn a string in input_line_pointer into a floating point constant
2529 of type TYPE, and store the appropriate bytes in *LITP. The number
2530 of LITTLENUMS emitted is stored in *SIZEP. An error message is
2531 returned, or NULL on OK. */
2534 md_atof (type
, litp
, sizep
)
2540 LITTLENUM_TYPE words
[4];
2560 return "bad call to md_atof";
2563 /* 360/370/390 have two float formats: an old, funky 360 single-precision
2564 * format, and the ieee format. Support only the ieee format. */
2565 t
= atof_ieee (input_line_pointer
, type
, words
);
2567 input_line_pointer
= t
;
2571 for (i
= 0; i
< prec
; i
++)
2573 md_number_to_chars (litp
, (valueT
) words
[i
], 2);
2580 /* Write a value out to the object file, using the appropriate
2584 md_number_to_chars (buf
, val
, n
)
2589 number_to_chars_bigendian (buf
, val
, n
);
2592 /* Align a section (I don't know why this is machine dependent). */
2595 md_section_align (seg
, addr
)
2599 int align
= bfd_get_section_alignment (stdoutput
, seg
);
2601 return (addr
+ (1 << align
) - 1) & (-1 << align
);
2604 /* We don't have any form of relaxing. */
2607 md_estimate_size_before_relax (fragp
, seg
)
2608 fragS
*fragp ATTRIBUTE_UNUSED
;
2609 asection
*seg ATTRIBUTE_UNUSED
;
2615 /* Convert a machine dependent frag. We never generate these. */
2618 md_convert_frag (abfd
, sec
, fragp
)
2619 bfd
*abfd ATTRIBUTE_UNUSED
;
2620 asection
*sec ATTRIBUTE_UNUSED
;
2621 fragS
*fragp ATTRIBUTE_UNUSED
;
2626 /* We have no need to default values of symbols. */
2629 md_undefined_symbol (name
)
2630 char *name ATTRIBUTE_UNUSED
;
2635 /* Functions concerning relocs. */
2637 /* The location from which a PC relative jump should be calculated,
2638 given a PC relative reloc. */
2641 md_pcrel_from_section (fixp
, sec
)
2643 segT sec ATTRIBUTE_UNUSED
;
2645 return fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2648 /* Apply a fixup to the object code. This is called for all the
2649 fixups we generated by the call to fix_new_exp, above. In the call
2650 above we used a reloc code which was the largest legal reloc code
2651 plus the operand index. Here we undo that to recover the operand
2652 index. At this point all symbol values should be fully resolved,
2653 and we attempt to completely resolve the reloc. If we can not do
2654 that, we determine the correct reloc code and put it back in the
2657 See gas/cgen.c for more sample code and explanations of what's
2662 md_apply_fix3 (fixP
, valP
, seg
)
2667 valueT value
= * valP
;
2669 if (fixP
->fx_addsy
!= NULL
)
2672 printf ("\nmd_apply_fix3: symbol %s at 0x%x (%s:%d) val=0x%x addend=0x%x\n",
2673 S_GET_NAME (fixP
->fx_addsy
),
2674 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
,
2675 fixP
->fx_file
, fixP
->fx_line
,
2676 S_GET_VALUE (fixP
->fx_addsy
), value
);
2682 /* Apply fixups to operands. Note that there should be no relocations
2683 for any operands, since no instruction ever takes an operand
2684 that requires reloc. */
2685 if ((int) fixP
->fx_r_type
>= (int) BFD_RELOC_UNUSED
)
2688 const struct i370_operand
*operand
;
2692 opindex
= (int) fixP
->fx_r_type
- (int) BFD_RELOC_UNUSED
;
2694 operand
= &i370_operands
[opindex
];
2697 printf ("\nmd_apply_fix3: fixup operand %s at 0x%x in %s:%d addend=0x%x\n",
2699 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
,
2700 fixP
->fx_file
, fixP
->fx_line
,
2703 /* Fetch the instruction, insert the fully resolved operand
2704 value, and stuff the instruction back again.
2705 fisxp->fx_size is the length of the instruction. */
2706 where
= fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
;
2707 insn
.i
[0] = bfd_getb32 ((unsigned char *) where
);
2709 if (6 <= fixP
->fx_size
)
2710 /* Deal with 48-bit insn's. */
2711 insn
.i
[1] = bfd_getb32 (((unsigned char *) where
)+4);
2713 insn
= i370_insert_operand (insn
, operand
, (offsetT
) value
);
2714 bfd_putb32 ((bfd_vma
) insn
.i
[0], (unsigned char *) where
);
2716 if (6 <= fixP
->fx_size
)
2717 /* Deal with 48-bit insn's. */
2718 bfd_putb32 ((bfd_vma
) insn
.i
[1], (((unsigned char *) where
)+4));
2720 /* We are done, right? right !! */
2723 /* Nothing else to do here. */
2726 /* Determine a BFD reloc value based on the operand information.
2727 We are only prepared to turn a few of the operands into
2728 relocs. In fact, we support *zero* operand relocations ...
2729 Why? Because we are not expecting the compiler to generate
2730 any operands that need relocation. Due to the 12-bit naturew of
2731 i370 addressing, this would be unusual. */
2736 /* Use expr_symbol_where to see if this is an expression
2738 if (expr_symbol_where (fixP
->fx_addsy
, &sfile
, &sline
))
2739 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2740 "unresolved expression that must be resolved");
2742 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2743 "unsupported relocation type");
2750 /* We branch to here if the fixup is not to a symbol that
2751 appears in an instruction operand, but is rather some
2752 declared storage. */
2754 i370_elf_validate_fix (fixP
, seg
);
2757 printf ("md_apply_fix3: reloc case %d in segment %s %s:%d\n",
2758 fixP
->fx_r_type
, segment_name (seg
), fixP
->fx_file
, fixP
->fx_line
);
2759 printf ("\tcurrent fixup value is 0x%x \n", value
);
2761 switch (fixP
->fx_r_type
)
2764 case BFD_RELOC_CTOR
:
2766 fixP
->fx_r_type
= BFD_RELOC_32_PCREL
;
2770 case BFD_RELOC_32_PCREL
:
2771 case BFD_RELOC_32_BASEREL
:
2773 printf ("\t32 bit relocation at 0x%x\n",
2774 fixP
->fx_frag
->fr_address
+ fixP
->fx_where
);
2776 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2780 case BFD_RELOC_LO16
:
2783 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
2784 "cannot emit PC relative %s relocation%s%s",
2785 bfd_get_reloc_code_name (fixP
->fx_r_type
),
2786 fixP
->fx_addsy
!= NULL
? " against " : "",
2787 (fixP
->fx_addsy
!= NULL
2788 ? S_GET_NAME (fixP
->fx_addsy
)
2791 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2795 /* This case happens when you write, for example,
2797 where L1 and L2 are defined later. */
2798 case BFD_RELOC_HI16
:
2801 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2804 case BFD_RELOC_HI16_S
:
2807 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2808 (value
+ 0x8000) >> 16, 2);
2815 md_number_to_chars (fixP
->fx_frag
->fr_literal
+ fixP
->fx_where
,
2821 "Gas failure, reloc value %d\n", fixP
->fx_r_type
);
2827 fixP
->fx_addnumber
= value
;
2830 /* Generate a reloc for a fixup. */
2833 tc_gen_reloc (seg
, fixp
)
2834 asection
*seg ATTRIBUTE_UNUSED
;
2839 reloc
= (arelent
*) xmalloc (sizeof (arelent
));
2841 reloc
->sym_ptr_ptr
= (asymbol
**) xmalloc (sizeof (asymbol
*));
2842 *reloc
->sym_ptr_ptr
= symbol_get_bfdsym (fixp
->fx_addsy
);
2843 reloc
->address
= fixp
->fx_frag
->fr_address
+ fixp
->fx_where
;
2844 reloc
->howto
= bfd_reloc_type_lookup (stdoutput
, fixp
->fx_r_type
);
2845 if (reloc
->howto
== (reloc_howto_type
*) NULL
)
2847 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
2848 "reloc %d not supported by object file format", (int)fixp
->fx_r_type
);
2851 reloc
->addend
= fixp
->fx_addnumber
;
2854 printf ("\ngen_reloc(): sym %s (%s:%d) at addr 0x%x addend=0x%x\n",
2855 fixp
->fx_addsy
->bsym
->name
,
2856 fixp
->fx_file
, fixp
->fx_line
,
2857 reloc
->address
, reloc
->addend
);