You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA. */
+ 02111-1307, USA. */
/* This assembler implements a very hacked version of an elf-like thing
* that gcc emits (when gcc is suitably hacked). To make it behave more
as in 0d1.0. */
const char FLT_CHARS[] = "dD";
-
void
md_show_usage (stream)
FILE *stream;
{
- fprintf(stream, "\
+ fprintf (stream, "\
S/370 options: (these have not yet been tested and may not work) \n\
-u ignored\n\
-mregnames Allow symbolic names for registers\n\
-mno-regnames Do not allow symbolic names for registers\n");
#ifdef OBJ_ELF
- fprintf(stream, "\
+ fprintf (stream, "\
-mrelocatable support for GCC's -mrelocatble option\n\
-mrelocatable-lib support for GCC's -mrelocatble-lib option\n\
-V print assembler version number\n");
static void i370_elf_validate_fix PARAMS ((fixS *, segT));
#endif
-
\f
/* The target specific pseudo-ops which we support. */
1. r<reg_num> which has the value <reg_num>.
2. r.<reg_num> which has the value <reg_num>.
-
Each floating point register has predefined names of the form:
1. f<reg_num> which has the value <reg_num>.
2. f.<reg_num> which has the value <reg_num>.
There are only four floating point registers, and these are
commonly labelled 0,2,4 and 6. Thus, there is no f1, f3, etc.
-
There are individual registers as well:
rbase or r.base has the value 3 (base register)
rpgt or r.pgt has the value 4 (page origin table pointer)
dsa or r.dsa has the value 13 (stack pointer)
lr has the value 14 (link reg)
- The table is sorted. Suitable for searching by a binary search. */
+ The table is sorted. Suitable for searching by a binary search. */
static const struct pd_reg pre_defined_registers[] =
{
{ "f4", 4 },
{ "f6", 6 },
-
{ "dsa",13 }, /* stack pointer */
{ "lr", 14 }, /* Link Register */
{ "pgt", 4 }, /* Page Origin Table Pointer */
};
-#define REG_NAME_CNT (sizeof(pre_defined_registers) / sizeof(struct pd_reg))
+#define REG_NAME_CNT (sizeof (pre_defined_registers) / sizeof (struct pd_reg))
/* Given NAME, find the register number associated with that name, return
the integer value associated with the given name or -1 on failure. */
{
{NULL, no_argument, NULL, 0}
};
-size_t md_longopts_size = sizeof(md_longopts);
+size_t md_longopts_size = sizeof (md_longopts);
int
md_parse_option (c, arg)
\f
/* Set i370_cpu if it is not already set.
Currently defaults to the reasonable superset;
- but can be made more fine grained if desred. */
+ but can be made more fine grained if desred. */
static void
i370_set_cpu ()
const char *default_os = TARGET_OS;
const char *default_cpu = TARGET_CPU;
- /* override with the superset for the moment. */
+ /* override with the superset for the moment. */
i370_cpu = I370_OPCODE_ESA390_SUPERSET;
if (i370_cpu == 0)
{
}
/* Figure out the BFD architecture to use. */
-// hack alert -- specify the different 370 architectures
+/* hack alert -- specify the different 370 architectures */
enum bfd_architecture
i370_arch ()
i370_set_cpu ();
#ifdef OBJ_ELF
- /* Set the ELF flags if desired. */
+ /* Set the ELF flags if desired. */
if (i370_flags)
bfd_set_private_flags (stdoutput, i370_flags);
#endif
\f
#ifdef OBJ_ELF
/* Parse @got, etc. and return the desired relocation.
- * Currently, i370 does not support (don't really need to support) any
- * of these fancier markups ... for example, no one is going to
- * write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
- * So basically, we could get away with this routine returning
- * BFD_RELOC_UNUSED in all circumstances. However, I'll leave
- * in for now in case someone ambitious finds a good use for this stuff ...
- * this routine was pretty much just copied from the powerpc code ...
- */
+ Currently, i370 does not support (don't really need to support) any
+ of these fancier markups ... for example, no one is going to
+ write 'L 6,=V(bogus)@got' it just doesn't make sense (at least to me).
+ So basically, we could get away with this routine returning
+ BFD_RELOC_UNUSED in all circumstances. However, I'll leave
+ in for now in case someone ambitious finds a good use for this stuff ...
+ this routine was pretty much just copied from the powerpc code ... */
static bfd_reloc_code_real_type
i370_elf_suffix (str_p, exp_p)
char **str_p;
int len;
struct map_bfd *ptr;
-#define MAP(str,reloc) { str, sizeof(str)-1, reloc }
+#define MAP(str,reloc) { str, sizeof (str)-1, reloc }
static struct map_bfd mapping[] =
{
- // MAP ("l", BFD_RELOC_LO16),
- // MAP ("h", BFD_RELOC_HI16),
- // MAP ("ha", BFD_RELOC_HI16_S),
- MAP ("fixup", BFD_RELOC_CTOR), /* warnings with -mrelocatable */
- { (char *)0, 0, BFD_RELOC_UNUSED }
+#if 0
+ MAP ("l", BFD_RELOC_LO16),
+ MAP ("h", BFD_RELOC_HI16),
+ MAP ("ha", BFD_RELOC_HI16_S),
+#endif
+ /* warnings with -mrelocatable. */
+ MAP ("fixup", BFD_RELOC_CTOR),
+ { (char *)0, 0, BFD_RELOC_UNUSED }
};
if (*str++ != '@')
return BFD_RELOC_UNUSED;
}
-/* Like normal .long/.short/.word, except support @got, etc. */
-/* clobbers input_line_pointer, checks end-of-line. */
+/* Like normal .long/.short/.word, except support @got, etc. */
+/* clobbers input_line_pointer, checks end-of-line. */
static void
i370_elf_cons (nbytes)
register int nbytes; /* 1=.byte, 2=.word, 4=.long */
}
while (*input_line_pointer++ == ',');
- input_line_pointer--; /* Put terminator back into stream. */
+ input_line_pointer--; /* Put terminator back into stream. */
demand_empty_rest_of_line ();
}
p = frag_more (nbytes);
while (end > input_line_pointer)
{
- *p = ascebc [(unsigned char)(*input_line_pointer)];
+ *p = ascebc [(unsigned char) (*input_line_pointer)];
++p; ++input_line_pointer;
}
*p = '\0';
}
#endif /* OBJ_ELF */
-
\f
#define LITERAL_POOL_SUPPORT
#ifdef LITERAL_POOL_SUPPORT
-/* Provide support for literal pools within the text section. */
+/* Provide support for literal pools within the text section. */
/* Loosely based on similar code from tc-arm.c */
/*
* We will use four symbols to locate four parts of the literal pool.
expression (exx);
/* OK, now we have to subtract the "using" location */
- /* normally branches appear in the text section only... */
+ /* normally branches appear in the text section only... */
if (0 == strncmp (now_seg->name, ".text", 5) || 0 > i370_using_other_regno)
{
i370_make_relative (exx, &i370_using_text_baseaddr);
else as_bad ("bad alignment of %d bytes in literal pool", biggest_literal_size);
if (0 == biggest_align) biggest_align = 1;
-
/* Align pool for short, word, double word accesses */
frag_align (biggest_align, 0, 0);
record_alignment (now_seg, biggest_align);
/* Note that the gas listing will print only the first five
* entries in the pool .... wonder how to make it print more ...
*/
- /* output largest literals first, then the smaller ones. */
+ /* output largest literals first, then the smaller ones. */
for (litsize=8; litsize; litsize /=2)
{
symbolS *current_poolP = NULL;
char *star;
/* if "*" appears in a using, it means "." */
- /* replace it with "." so that expr doesn't get confused. */
+ /* replace it with "." so that expr doesn't get confused. */
star = strchr (input_line_pointer, '*');
if (star)
*star = '.';
/* the first arg to using will usually be ".", but it can
- * be a more complex exprsssion too ... */
+ * be a more complex exprsssion too ... */
expression (&baseaddr);
if (star)
*star = '*';
hold = input_line_pointer;
input_line_pointer = str;
- /* register names are only allowed where there are registers ... */
+ /* register names are only allowed where there are registers ... */
if ((operand->flags & I370_OPERAND_GPR) != 0)
{
/* quickie hack to get past things like (,r13) */
/* check for a address constant expression */
/* We will put PSW-relative addresses in the text section,
- * and adress literals in the .data (or other) section. */
+ * and adress literals in the .data (or other) section. */
else if (i370_addr_cons (&ex))
use_other=1;
else if (i370_addr_offset (&ex))
/* Allow @HA, @L, @H on constants.
* Well actually, no we don't; there really don't make sense
* (at least not to me) for the i370. However, this code is
- * left here for any dubious future expansion reasons ... */
+ * left here for any dubious future expansion reasons ... */
char *orig_str = str;
if ((reloc = i370_elf_suffix (&str, &ex)) != BFD_RELOC_UNUSED)
size = bfd_get_reloc_size (reloc_howto);
if (size < 1 || size > 4)
- abort();
+ abort ();
printf (" gwana doo fixup %d \n", i);
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal, size,
}
\f
/* Turn a string in input_line_pointer into a floating point constant
- of type type, and store the appropriate bytes in *litp. The number
- of LITTLENUMS emitted is stored in *sizep . An error message is
+ of type TYPE, and store the appropriate bytes in *LITP. The number
+ of LITTLENUMS emitted is stored in *SIZEP. An error message is
returned, or NULL on OK. */
char *
}
/* 360/370/390 have two float formats: an old, funky 360 single-precision
- * format, and the ieee format. Support only the ieee format. */
+ * format, and the ieee format. Support only the ieee format. */
t = atof_ieee (input_line_pointer, type, words);
if (t)
input_line_pointer = t;
return fixp->fx_frag->fr_address + fixp->fx_where;
}
-
/* Apply a fixup to the object code. This is called for all the
fixups we generated by the call to fix_new_exp, above. In the call
above we used a reloc code which was the largest legal reloc code
#endif
/* Fetch the instruction, insert the fully resolved operand
value, and stuff the instruction back again.
- fisxp->fx_size is the length of the instruction. */
+ fisxp->fx_size is the length of the instruction. */
where = fixp->fx_frag->fr_literal + fixp->fx_where;
insn.i[0] = bfd_getb32 ((unsigned char *) where);
if (6 <= fixp->fx_size)
relocs. In fact, we support *zero* operand relocations ...
Why? Because we are not expecting the compiler to generate
any operands that need relocation. Due to the 12-bit naturew of
- i370 addressing, this would be unusual. */
+ i370 addressing, this would be unusual. */
#if 0
if ((operand->flags & I370_OPERAND_RELATIVE) != 0
&& operand->bits == 12
break;
default:
- fprintf(stderr,
+ fprintf (stderr,
"Gas failure, reloc value %d\n", fixp->fx_r_type);
fflush(stderr);
abort ();