Use macros for TUI window names
[deliverable/binutils-gdb.git] / gas / config / tc-mmix.h
index 0ce112e9cf0f1a315f0ec54ecf3cf7587cdf9a0c..d9e8599c888ea1746d638496eca36f63bb7cf006 100644 (file)
@@ -1,12 +1,12 @@
 /* tc-mmix.h -- Header file for tc-mmix.c.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2001-2020 Free Software Foundation, Inc.
    Written by Hans-Peter Nilsson (hp@bitrange.com).
 
    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,
@@ -16,8 +16,8 @@
 
    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.  */
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #define TC_MMIX
 
@@ -32,34 +32,28 @@ extern const char mmix_comment_chars[];
 extern const char mmix_symbol_chars[];
 #define tc_symbol_chars mmix_symbol_chars
 
-extern const char mmix_exp_chars[];
-#define EXP_CHARS mmix_exp_chars
-
-extern const char mmix_flt_chars[];
-#define FLT_CHARS mmix_flt_chars
-
 /* "@" is a synonym for ".".  */
 #define LEX_AT (LEX_BEGIN_NAME)
 
-extern int mmix_label_without_colon_this_line PARAMS ((void));
+extern int mmix_label_without_colon_this_line (void);
 #define LABELS_WITHOUT_COLONS mmix_label_without_colon_this_line ()
 
 extern int mmix_next_semicolon_is_eoln;
 #define TC_EOL_IN_INSN(p) (*(p) == ';' && ! mmix_next_semicolon_is_eoln)
 
 /* This is one direction we can get mmixal compatibility.  */
-extern void mmix_handle_mmixal PARAMS ((void));
+extern void mmix_handle_mmixal (void);
 #define md_start_line_hook mmix_handle_mmixal
 
-extern void mmix_md_begin PARAMS ((void));
+extern void mmix_md_begin (void);
 #define md_begin mmix_md_begin
 
-extern void mmix_md_end PARAMS ((void));
+extern void mmix_md_end (void);
 #define md_end mmix_md_end
 
 extern int mmix_current_location \
-  PARAMS ((void (*fn) (expressionS *), expressionS *));
-extern int mmix_parse_predefined_name PARAMS ((char *, expressionS *));
+  (void (*fn) (expressionS *), expressionS *);
+extern int mmix_parse_predefined_name (char *, expressionS *);
 
 extern char *mmix_current_prefix;
 
@@ -70,7 +64,7 @@ extern char *mmix_current_prefix;
    The [DVWIOUZX]_Handler symbols are provided when-used.  */
 
 extern int mmix_gnu_syntax;
-#define md_parse_name(name, exp, cpos)                         \
+#define md_parse_name(name, exp, mode, cpos)                   \
  (! mmix_gnu_syntax                                            \
   && (name[0] == '@'                                           \
       ? (! is_part_of_name (name[1])                           \
@@ -78,7 +72,7 @@ extern int mmix_gnu_syntax;
       : ((name[0] == ':' || ISUPPER (name[0]))                 \
         && mmix_parse_predefined_name (name, exp))))
 
-extern char *mmix_prefix_name PARAMS ((char *));
+extern char *mmix_prefix_name (char *);
 
 /* We implement when *creating* a symbol, we also need to strip a ':' or
    prepend a prefix.  */
@@ -87,7 +81,7 @@ extern char *mmix_prefix_name PARAMS ((char *));
 
 #define md_undefined_symbol(x) NULL
 
-extern void mmix_fb_label PARAMS ((expressionS *));
+extern void mmix_fb_label (expressionS *);
 
 /* Since integer_constant is local to expr.c, we have to make this a
    macro.  FIXME: Do it cleaner.  */
@@ -110,7 +104,7 @@ extern void mmix_fb_label PARAMS ((expressionS *));
 /* Gas dislikes the 2ADD, 8ADD etc. insns, so we have to assemble them in
    the error-recovery loop.  Hopefully there are no significant
    differences.  Also, space on a line isn't gracefully handled.  */
-extern int mmix_assemble_return_nonzero PARAMS ((char *));
+extern int mmix_assemble_return_nonzero (char *);
 #define tc_unrecognized_line(c)                                                \
  ((c) == ' '                                                           \
   || (((c) == '1' || (c) == '2' || (c) == '4' || (c) == '8')           \
@@ -123,56 +117,57 @@ extern int mmix_assemble_return_nonzero PARAMS ((char *));
 extern const struct relax_type mmix_relax_table[];
 #define TC_GENERIC_RELAX_TABLE mmix_relax_table
 
-/* We use the relax table for everything except the GREG frags.  */
-extern long mmix_md_relax_frag PARAMS ((segT, fragS *, long));
+/* We use the relax table for everything except the GREG frags and PUSHJ.  */
+extern long mmix_md_relax_frag (segT, fragS *, long);
 #define md_relax_frag mmix_md_relax_frag
 
-#define tc_fix_adjustable(X)                                   \
- ((! (X)->fx_addsy                                             \
-   || (! S_IS_WEAK ((X)->fx_addsy)                             \
-       && S_GET_SEGMENT ((X)->fx_addsy) != reg_section))       \
-  && (X)->fx_r_type != BFD_RELOC_VTABLE_INHERIT                        \
-  && (X)->fx_r_type != BFD_RELOC_VTABLE_ENTRY)
+#define tc_fix_adjustable(FIX)                                 \
+ (((FIX)->fx_addsy == NULL                                     \
+   || S_GET_SEGMENT ((FIX)->fx_addsy) != reg_section)          \
+  && (FIX)->fx_r_type != BFD_RELOC_VTABLE_INHERIT              \
+  && (FIX)->fx_r_type != BFD_RELOC_VTABLE_ENTRY                        \
+  && (FIX)->fx_r_type != BFD_RELOC_MMIX_LOCAL)
 
 /* Adjust symbols which are registers.  */
 #define tc_adjust_symtab() mmix_adjust_symtab ()
-extern void mmix_adjust_symtab PARAMS ((void));
-
-/* Avoid outputting GAS register section symbols.  This happens when the
-   assembly had errors, and will propagate to an assert in BFD.  FIXME:
-   It seems the symbol output when-errors is a bug in GAS.  Fix that
-   some time.  See also tc_gen_reloc.
+extern void mmix_adjust_symtab (void);
 
-   Here's where we make all symbols global, when so requested.
+/* Here's where we make all symbols global, when so requested.
    We must avoid doing that for expression symbols or section symbols,
    though.  */
 extern int mmix_globalize_symbols;
 #define tc_frob_symbol(sym, punt)                              \
   do                                                           \
     {                                                          \
-      if (S_GET_SEGMENT (sym) == reg_section                   \
-         || (symp) == section_symbol (absolute_section))       \
-       (punt) = 1;                                             \
-                                                               \
-      if (mmix_globalize_symbols                               \
-         && ! symbol_section_p (sym)                           \
-         && symp != section_symbol (absolute_section)          \
-         && (! S_IS_LOCAL (sym)                                \
-             || S_GET_SEGMENT (sym) == reg_section)            \
-         && (S_GET_SEGMENT (sym) != reg_section                \
-             || (S_GET_NAME (sym)[0] != '$'                    \
-                 && S_GET_VALUE (sym) < 256)))                 \
+      if (S_GET_SEGMENT (sym) == reg_section)                  \
+       {                                                       \
+         if (S_GET_NAME (sym)[0] != '$'                        \
+             && S_GET_VALUE (sym) < 256)                       \
+           {                                                   \
+             if (mmix_globalize_symbols)                       \
+               S_SET_EXTERNAL (sym);                           \
+             else                                              \
+               symbol_mark_used_in_reloc (sym);                \
+           }                                                   \
+       }                                                       \
+      else if (mmix_globalize_symbols                          \
+              && ! symbol_section_p (sym)                      \
+              && sym != section_symbol (absolute_section)      \
+              && ! S_IS_LOCAL (sym))                           \
        S_SET_EXTERNAL (sym);                                   \
     }                                                          \
   while (0)
 
+/* No shared lib support, so we don't need to ensure externally
+   visible symbols can be overridden.  */
+#define EXTERN_FORCE_RELOC 0
+
 /* When relaxing, we need to emit various relocs we otherwise wouldn't.  */
 #define TC_FORCE_RELOCATION(fix) mmix_force_relocation (fix)
-extern int mmix_force_relocation PARAMS ((struct fix *));
+extern int mmix_force_relocation (struct fix *);
 
 /* Call md_pcrel_from_section(), not md_pcrel_from().  */
-#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC)
-extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
+#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
 
 #define md_section_align(seg, size) (size)
 
@@ -183,27 +178,46 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT));
 
 extern fragS *mmix_opcode_frag;
 #define TC_FRAG_TYPE fragS *
-#define TC_FRAG_INIT(frag) (frag)->tc_frag_data = mmix_opcode_frag
+#define TC_FRAG_INIT(frag, max_bytes) (frag)->tc_frag_data = mmix_opcode_frag
 
 /* We need to associate each section symbol with a list of GREGs defined
    for that section/segment and sorted on offset, between the point where
    all symbols have been evaluated and all frags mapped, and when the
    fixups are done and relocs are output.  Similarly for each unknown
    symbol.  */
-extern void mmix_frob_file PARAMS ((void));
-#define tc_frob_file mmix_frob_file
+extern void mmix_frob_file (void);
+#define tc_frob_file_before_fix()                                      \
+  do                                                                   \
+    {                                                                  \
+      int i = 0;                                                       \
+                                                                       \
+      /* It's likely mmix_frob_file changed (removed) sections, so make        \
+        sure sections are correctly numbered as per renumber_sections, \
+        (static to write.c where this macro is called).  */            \
+      mmix_frob_file ();                                               \
+      bfd_map_over_sections (stdoutput, renumber_sections, &i);                \
+    }                                                                  \
+  while (0)
 
 /* Used by mmix_frob_file.  Hangs on section symbols and unknown symbols.  */
 struct mmix_symbol_gregs;
 #define TC_SYMFIELD_TYPE struct mmix_symbol_gregs *
 
-extern void mmix_frob_file_before_adjust PARAMS ((void));
-#define tc_frob_file_before_adjust mmix_frob_file_before_adjust
-
-extern void mmix_md_elf_section_change_hook PARAMS ((void));
+/* Used by relaxation, counting maximum needed PUSHJ stubs for a section.  */
+struct mmix_segment_info_type
+ {
+   /* We only need to keep track of the last stubbable frag because
+      there's no less hackish way to keep track of different relaxation
+      rounds.  */
+   fragS *last_stubfrag;
+   bfd_size_type nstubs;
+ };
+#define TC_SEGMENT_INFO_TYPE struct mmix_segment_info_type
+
+extern void mmix_md_elf_section_change_hook (void);
 #define md_elf_section_change_hook mmix_md_elf_section_change_hook
 
-extern void mmix_md_do_align PARAMS ((int, char *, int, int));
+extern void mmix_md_do_align (int, char *, int, int);
 #define md_do_align(n, fill, len, max, label) \
  mmix_md_do_align (n, fill, len, max)
 
@@ -211,3 +225,9 @@ extern void mmix_md_do_align PARAMS ((int, char *, int, int));
    sequences sprinkled in, we can get unaligned DWARF2 offsets, so let's
    explicitly say one byte.  */
 #define DWARF2_LINE_MIN_INSN_LENGTH 1
+
+/* This target is buggy, and sets fix size too large.  */
+#define TC_FX_SIZE_SLACK(FIX) 6
+
+/* MMIX has global register symbols.  */
+#define TC_GLOBAL_REGISTER_SYMBOL_OK
This page took 0.02627 seconds and 4 git commands to generate.