Fix region length calculations when regions end with .align padding.
[deliverable/binutils-gdb.git] / gas / config / tc-mips.h
index a19c87d474358f8055033dc295181100abb62c82..110dc09fd5b026bb3b9042efa462b58968f59c92 100644 (file)
@@ -1,5 +1,5 @@
 /* tc-mips.h -- header file for tc-mips.c.
-   Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002
+   Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003
    Free Software Foundation, Inc.
    Contributed by the OSF and Ralph Campbell.
    Written by Keith Knowles and Ralph Campbell, working independently.
    02111-1307, USA.  */
 
 #ifndef TC_MIPS
-
 #define TC_MIPS
 
-#ifdef ANSI_PROTOTYPES
 struct frag;
 struct expressionS;
-#endif
 
 /* Default to big endian.  */
 #ifndef TARGET_BYTES_BIG_ENDIAN
@@ -46,17 +43,17 @@ struct expressionS;
 #define LOCAL_LABELS_FB 1
 
 /* Maximum symbol offset that can be encoded in a BFD_RELOC_GPREL16
-   relocation: */
+   relocation */
 #define MAX_GPREL_OFFSET (0x7FF0)
 
 #define md_relax_frag(segment, fragp, stretch) \
   mips_relax_frag(segment, fragp, stretch)
-extern int mips_relax_frag PARAMS ((asection *, struct frag *, long));
+extern int mips_relax_frag (asection *, struct frag *, long);
 
 #define md_undefined_symbol(name)      (0)
 #define md_operand(x)
 
-extern void mips_handle_align PARAMS ((struct frag *));
+extern void mips_handle_align (struct frag *);
 #define HANDLE_ALIGN(fragp)  mips_handle_align (fragp)
 
 #define MAX_MEM_FOR_RS_ALIGN_CODE  (1 + 2)
@@ -71,7 +68,7 @@ extern void mips_handle_align PARAMS ((struct frag *));
 /* The endianness of the target format may change based on command
    line arguments.  */
 #define TARGET_FORMAT mips_target_format()
-extern const char *mips_target_format PARAMS ((void));
+extern const char *mips_target_format (void);
 
 /* MIPS PIC level.  */
 
@@ -101,33 +98,36 @@ struct mips_cl_insn
   unsigned short extend;
 };
 
-extern int tc_get_register PARAMS ((int frame));
+extern int tc_get_register (int frame);
 
 #define md_after_parse_args() mips_after_parse_args()
-extern void mips_after_parse_args PARAMS ((void));
+extern void mips_after_parse_args (void);
 
 #define tc_init_after_args() mips_init_after_args()
-extern void mips_init_after_args PARAMS ((void));
+extern void mips_init_after_args (void);
 
 #define md_parse_long_option(arg) mips_parse_long_option (arg)
-extern int mips_parse_long_option PARAMS ((const char *));
+extern int mips_parse_long_option (const char *);
 
 #define tc_frob_label(sym) mips_define_label (sym)
-extern void mips_define_label PARAMS ((symbolS *));
+extern void mips_define_label (symbolS *);
 
 #define tc_frob_file_before_adjust() mips_frob_file_before_adjust ()
-extern void mips_frob_file_before_adjust PARAMS ((void));
+extern void mips_frob_file_before_adjust (void);
 
 #define tc_frob_file_before_fix() mips_frob_file ()
-extern void mips_frob_file PARAMS ((void));
+extern void mips_frob_file (void);
 
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
 #define tc_frob_file_after_relocs mips_frob_file_after_relocs
-extern void mips_frob_file_after_relocs PARAMS ((void));
+extern void mips_frob_file_after_relocs (void);
 #endif
 
 #define tc_fix_adjustable(fixp) mips_fix_adjustable (fixp)
-extern int mips_fix_adjustable PARAMS ((struct fix *));
+extern int mips_fix_adjustable (struct fix *);
+
+/* Values passed to md_apply_fix3 don't include symbol values.  */
+#define MD_APPLY_SYM_VALUE(FIX) 0
 
 /* Global syms must not be resolved, to support ELF shared libraries.
    When generating embedded code, we don't have shared libs.  */
@@ -138,11 +138,19 @@ extern int mips_fix_adjustable PARAMS ((struct fix *));
 /* When generating embedded PIC code we must keep PC relative
    relocations.  */
 #define TC_FORCE_RELOCATION(FIX) mips_force_relocation (FIX)
-extern int mips_force_relocation PARAMS ((struct fix *));
+extern int mips_force_relocation (struct fix *);
+
+#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
+  (! SEG_NORMAL (SEG) || mips_force_relocation (FIX))
 
-#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
-  (mips_force_relocation (FIX)                 \
-   || !SEG_NORMAL (SEG))
+/* We use this to turn branches to global symbols into branches to
+   local symbols, so that they can be simplified.  */
+#define TC_VALIDATE_FIX(fixp, this_segment, skip_label) \
+  do \
+    if (! mips_validate_fix ((fixp), (this_segment))) \
+      goto skip_label; \
+  while (0)
+extern int mips_validate_fix (struct fix *, asection *);
 
 /* Register mask variables.  These are set by the MIPS assembly code
    and used by ECOFF and possibly other object file formats.  */
@@ -152,37 +160,27 @@ extern unsigned long mips_cprmask[4];
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
 
 #define elf_tc_final_processing mips_elf_final_processing
-extern void mips_elf_final_processing PARAMS ((void));
-
-#define ELF_TC_SPECIAL_SECTIONS \
-  { ".sdata",  SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL  }, \
-  { ".sbss",   SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL  }, \
-  { ".lit4",   SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL  }, \
-  { ".lit8",   SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL  }, \
-  { ".ucode",  SHT_MIPS_UCODE, 0                                       }, \
-  { ".mdebug", SHT_MIPS_DEBUG, 0                                       },
-/* Other special sections not generated by the assembler: .reginfo,
-   .liblist, .conflict, .gptab, .got, .dynamic, .rel.dyn.  */
+extern void mips_elf_final_processing (void);
 
 #endif
 
-extern void md_mips_end PARAMS ((void));
+extern void md_mips_end (void);
 #define md_end()       md_mips_end()
 
 #define USE_GLOBAL_POINTER_OPT (OUTPUT_FLAVOR == bfd_target_ecoff_flavour \
                                 || OUTPUT_FLAVOR == bfd_target_coff_flavour \
                                 || OUTPUT_FLAVOR == bfd_target_elf_flavour)
 
-extern void mips_pop_insert PARAMS ((void));
+extern void mips_pop_insert (void);
 #define md_pop_insert()                mips_pop_insert()
 
-extern void mips_flush_pending_output PARAMS ((void));
+extern void mips_flush_pending_output (void);
 #define md_flush_pending_output mips_flush_pending_output
 
-extern void mips_enable_auto_align PARAMS ((void));
+extern void mips_enable_auto_align (void);
 #define md_elf_section_change_hook()   mips_enable_auto_align()
 
-extern enum dwarf2_format mips_dwarf2_format PARAMS ((void));
+extern enum dwarf2_format mips_dwarf2_format (void);
 #define DWARF2_FORMAT() mips_dwarf2_format ()
 
 #define DWARF2_ADDR_SIZE(bfd) \
This page took 0.027018 seconds and 4 git commands to generate.