X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fconfig%2Ftc-mips.h;h=fc96ef3a937faa7ace835a528775ad2b6d15a750;hb=1be595793285ba4000a824aa436c8824c04b5b94;hp=8d9c4ddf7f19bd0cda8a2abbcb00ce8b1c46d56c;hpb=ae6063d440ba5ec28af81e9fc899cc099561339e;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h index 8d9c4ddf7f..fc96ef3a93 100644 --- a/gas/config/tc-mips.h +++ b/gas/config/tc-mips.h @@ -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. @@ -23,13 +23,10 @@ 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,7 +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)) + +/* 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. */ @@ -148,40 +160,35 @@ 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) \ (DWARF2_FORMAT () == dwarf2_format_32bit ? 4 : 8) +typedef struct { + offsetT tc_fr_offset; +} tc_frag_data_type; +#define TC_FRAG_TYPE tc_frag_data_type + #endif /* TC_MIPS */