X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-ip2k.c;h=c1e50c1bdf851b9be510e8d9d2ef181b366cc3e1;hb=0c608d6b62f9164203685ab125b4b3ad113eb26e;hp=10e9e2f3fa208324ab35a0b579bf42e6e1494102;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-ip2k.c b/gas/config/tc-ip2k.c index 10e9e2f3fa..c1e50c1bdf 100644 --- a/gas/config/tc-ip2k.c +++ b/gas/config/tc-ip2k.c @@ -1,11 +1,11 @@ /* tc-ip2k.c -- Assembler for the Scenix IP2xxx. - Copyright (C) 2000, 2002, 2003, 2005 Free Software Foundation. + Copyright (C) 2000-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. GAS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) + the Free Software Foundation; either version 3, or (at your option) any later version. GAS is distributed in the hope that it will be useful, @@ -18,16 +18,14 @@ the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include #include "as.h" -#include "subsegs.h" +#include "subsegs.h" #include "symcat.h" #include "opcodes/ip2k-desc.h" #include "opcodes/ip2k-opc.h" #include "cgen.h" #include "elf/common.h" #include "elf/ip2k.h" -#include "libbfd.h" /* Structure to hold all of the different components describing an individual instruction. */ @@ -53,7 +51,7 @@ ip2k_insn; const char comment_chars[] = ";"; const char line_comment_chars[] = "#"; -const char line_separator_chars[] = ""; +const char line_separator_chars[] = ""; const char EXP_CHARS[] = "eE"; const char FLT_CHARS[] = "dD"; @@ -73,35 +71,18 @@ ip2k_elf_section_rtn (int i) if (force_code_align) { - /* The s_align_ptwo function expects that we are just after a .align - directive and it will either try and read the align value or stop - if end of line so we must fake it out so it thinks we are at the - end of the line. */ - char *old_input_line_pointer = input_line_pointer; - input_line_pointer = "\n"; - s_align_ptwo (1); + do_align (1, NULL, 0, 0); force_code_align = 0; - /* Restore. */ - input_line_pointer = old_input_line_pointer; } } static void ip2k_elf_section_text (int i) { - char *old_input_line_pointer; obj_elf_text(i); - /* the s_align_ptwo function expects that we are just after a .align - directive and it will either try and read the align value or stop if - end of line so we must fake it out so it thinks we are at the end of - the line. */ - old_input_line_pointer = input_line_pointer; - input_line_pointer = "\n"; - s_align_ptwo (1); + do_align (1, NULL, 0, 0); force_code_align = 0; - /* Restore. */ - input_line_pointer = old_input_line_pointer; } /* The target specific pseudo-ops which we support. */ @@ -120,7 +101,7 @@ enum options OPTION_CPU_IP2022EXT }; -struct option md_longopts[] = +struct option md_longopts[] = { { "mip2022", no_argument, NULL, OPTION_CPU_IP2022 }, { "mip2022ext", no_argument, NULL, OPTION_CPU_IP2022EXT }, @@ -131,7 +112,7 @@ size_t md_longopts_size = sizeof (md_longopts); const char * md_shortopts = ""; int -md_parse_option (int c ATTRIBUTE_UNUSED, char * arg ATTRIBUTE_UNUSED) +md_parse_option (int c ATTRIBUTE_UNUSED, const char * arg ATTRIBUTE_UNUSED) { switch (c) { @@ -165,7 +146,7 @@ void md_begin (void) { /* Initialize the `cgen' interface. */ - + /* Set the machine number and endian. */ gas_cgen_cpu_desc = ip2k_cgen_cpu_open (CGEN_CPU_OPEN_MACHS, ip2k_mach_bitmask, @@ -232,7 +213,7 @@ md_section_align (segT segment, valueT size) { int align = bfd_get_section_alignment (stdoutput, segment); - return ((size + (1 << align) - 1) & (-1 << align)); + return ((size + (1 << align) - 1) & -(1 << align)); } @@ -246,9 +227,9 @@ int md_estimate_size_before_relax (fragS * fragP ATTRIBUTE_UNUSED, segT segment ATTRIBUTE_UNUSED) { - as_fatal (_("md_estimate_size_before_relax\n")); + as_fatal (_("relaxation not supported\n")); return 1; -} +} /* *fragP has been relaxed to its final size, and now needs to have @@ -269,12 +250,9 @@ md_convert_frag (bfd * abfd ATTRIBUTE_UNUSED, /* Functions concerning relocs. */ long -md_pcrel_from (fixS *fixP) +md_pcrel_from (fixS *fixP ATTRIBUTE_UNUSED) { - as_fatal (_("md_pcrel_from\n")); - - /* Return the address of the delay slot. */ - return fixP->fx_size + fixP->fx_where + fixP->fx_frag->fr_address; + abort (); } @@ -332,59 +310,10 @@ md_number_to_chars (char * buf, valueT val, int n) number_to_chars_bigendian (buf, val, n); } -/* 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 returned, or NULL on - OK. */ - -/* Equal to MAX_PRECISION in atof-ieee.c */ -#define MAX_LITTLENUMS 6 - -char * +const char * md_atof (int type, char * litP, int * sizeP) { - int prec; - LITTLENUM_TYPE words [MAX_LITTLENUMS]; - LITTLENUM_TYPE *wordP; - char * t; - - switch (type) - { - case 'f': - case 'F': - case 's': - case 'S': - prec = 2; - break; - - case 'd': - case 'D': - case 'r': - case 'R': - prec = 4; - break; - - /* FIXME: Some targets allow other format chars for bigger sizes here. */ - - default: - * sizeP = 0; - return _("Bad call to md_atof()"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - * sizeP = prec * sizeof (LITTLENUM_TYPE); - - /* This loops outputs the LITTLENUMs in REVERSE order; in accord with - the ip2k endianness. */ - for (wordP = words; prec--;) - { - md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return 0; + return ieee_md_atof (type, litP, sizeP, TRUE); } @@ -463,8 +392,8 @@ ip2k_apply_fix (fixS *fixP, valueT *valueP, segT seg) } int -ip2k_elf_section_flags (int flags, - int attr ATTRIBUTE_UNUSED, +ip2k_elf_section_flags (flagword flags, + bfd_vma attr ATTRIBUTE_UNUSED, int type ATTRIBUTE_UNUSED) { /* This is used to detect when the section changes to an executable section. @@ -473,7 +402,7 @@ ip2k_elf_section_flags (int flags, word alignment should be forced. */ if (flags & SEC_CODE) force_code_align = 1; - + return flags; }