ChangeLog rotatation and copyright year update
[deliverable/binutils-gdb.git] / gas / config / tc-mmix.h
index 0ce112e9cf0f1a315f0ec54ecf3cf7587cdf9a0c..8b70bde95b2e9ecd7f7bccc1f9b56432ee62efa8 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-2015 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
 
@@ -41,25 +41,25 @@ extern const char 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 +70,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 +78,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 +87,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 +110,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 +123,58 @@ 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));
+extern void mmix_adjust_symtab (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.
-
-   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)
+extern long md_pcrel_from_section (struct fix *, segT);
 
 #define md_section_align(seg, size) (size)
 
@@ -190,20 +192,39 @@ extern fragS *mmix_opcode_frag;
    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 +232,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.028531 seconds and 4 git commands to generate.