#define TC_SH
#define TARGET_ARCH bfd_arch_sh
#if ANSI_PROTOTYPES
struct fix;
struct segment_info_struct;
struct internal_reloc;
#endif
extern int sh_relax;
extern int sh_small;
#define WORKING_DOT_WORD
#define md_cons_align(nbytes) sh_cons_align (nbytes)
extern void sh_cons_align (int);
#define HANDLE_ALIGN(frag) sh_handle_align (frag)
extern void sh_handle_align (fragS *);
#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2)
#define TC_FORCE_RELOCATION(fix) sh_force_relocation (fix)
extern int sh_force_relocation (struct fix *);
#ifdef BFD_ASSEMBLER
#define SWITCH_TABLE_CONS(FIX) (0)
#else
#define SWITCH_TABLE_CONS(FIX) \
((FIX)->fx_r_type == 0 \
&& ((FIX)->fx_size == 2 \
|| (FIX)->fx_size == 1 \
|| (FIX)->fx_size == 4))
#endif
#define SWITCH_TABLE(FIX) \
((FIX)->fx_addsy != NULL \
&& (FIX)->fx_subsy != NULL \
&& S_GET_SEGMENT ((FIX)->fx_addsy) == text_section \
&& S_GET_SEGMENT ((FIX)->fx_subsy) == text_section \
&& ((FIX)->fx_r_type == BFD_RELOC_32 \
|| (FIX)->fx_r_type == BFD_RELOC_16 \
|| (FIX)->fx_r_type == BFD_RELOC_8 \
|| SWITCH_TABLE_CONS (FIX)))
#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEC) \
(! SEG_NORMAL (SEC) \
|| TC_FORCE_RELOCATION (FIX) \
|| (sh_relax && SWITCH_TABLE (FIX)))
#define TC_VALIDATE_FIX_SUB(FIX) \
(sh_relax && SWITCH_TABLE (FIX))
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
extern long md_pcrel_from_section (struct fix *, segT);
#define IGNORE_NONSTANDARD_ESCAPES
#define LISTING_HEADER \
(!target_big_endian \
? "Renesas / SuperH SH GAS Little Endian" \
: "Renesas / SuperH SH GAS Big Endian")
#define md_operand(x)
extern const struct relax_type md_relax_table[];
#define TC_GENERIC_RELAX_TABLE md_relax_table
struct sh_segment_info_type
{
int in_code : 1;
};
#define TC_SEGMENT_INFO_TYPE struct sh_segment_info_type
extern void sh_frob_label (void);
#define tc_frob_label(sym) sh_frob_label ()
extern void sh_flush_pending_output (void);
#define md_flush_pending_output() sh_flush_pending_output ()
#ifdef BFD_ASSEMBLER
#define tc_frob_file_before_adjust sh_frob_file
#else
#define tc_frob_file sh_frob_file
#endif
extern void sh_frob_file (void);
#ifdef OBJ_COFF
#define DO_NOT_STRIP 0
#define TC_COFF_FIX2RTYPE(fix) ((fix)->fx_r_type)
#define BFD_ARCH TARGET_ARCH
#define COFF_MAGIC (!target_big_endian ? SH_ARCH_MAGIC_LITTLE : SH_ARCH_MAGIC_BIG)
#define TC_COUNT_RELOC(fix) ((fix)->fx_addsy != NULL)
#define TC_RELOC_MANGLE(seg, fix, int, paddr) \
sh_coff_reloc_mangle ((seg), (fix), (int), (paddr))
extern void sh_coff_reloc_mangle
(struct segment_info_struct *, struct fix *,
struct internal_reloc *, unsigned int);
#define tc_coff_symbol_emit_hook(a) ;
#define NEED_FX_R_TYPE 1
#define TC_KEEP_FX_OFFSET 1
#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep(frag)
extern int tc_coff_sizemachdep (fragS *);
#ifdef BFD_ASSEMBLER
#define SEG_NAME(SEG) segment_name (SEG)
#else
#define SEG_NAME(SEG) obj_segment_name (SEG)
#endif
#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
(strncmp (SEG_NAME (SEG), ".stabstr", 8) == 0 \
? 0 \
: ((strncmp (SEG_NAME (SEG), ".stab", 5) == 0 \
|| strcmp (SEG_NAME (SEG), ".ctors") == 0 \
|| strcmp (SEG_NAME (SEG), ".dtors") == 0) \
? 2 \
: (sh_small ? 2 : 4)))
#endif
#ifdef OBJ_ELF
extern int target_big_endian;
#ifdef TE_LINUX
#define TARGET_FORMAT (!target_big_endian ? "elf32-sh-linux" : "elf32-shbig-linux")
#elif defined(TE_NetBSD)
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-nbsd" : "elf32-sh-nbsd")
#elif defined TARGET_SYMBIAN
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl-symbian" : "elf32-sh-symbian")
#else
#define TARGET_FORMAT (!target_big_endian ? "elf32-shl" : "elf32-sh")
#endif
#define elf_tc_final_processing sh_elf_final_processing
extern void sh_elf_final_processing (void);
#define DIFF_EXPR_OK
#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
#define TC_RELOC_GLOBAL_OFFSET_TABLE BFD_RELOC_SH_GOTPC
#define tc_fix_adjustable(FIX) sh_fix_adjustable(FIX)
extern bfd_boolean sh_fix_adjustable (struct fix *);
#define MD_APPLY_SYM_VALUE(FIX) 0
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
|| (FIX)->fx_plt \
|| (FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL \
|| (FIX)->fx_r_type == BFD_RELOC_32_GOT_PCREL \
|| (FIX)->fx_r_type == BFD_RELOC_SH_GOTPC \
|| TC_FORCE_RELOCATION (FIX))
#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX) (sh_relax && SWITCH_TABLE (FIX))
#define TC_FORCE_RELOCATION_SUB_ABS(FIX) \
((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL)
#undef TC_VALIDATE_FIX_SUB
#define TC_VALIDATE_FIX_SUB(FIX) \
((FIX)->fx_r_type == BFD_RELOC_32_PLT_PCREL \
|| (sh_relax && SWITCH_TABLE (FIX)))
#define md_parse_name(name, exprP, nextcharP) \
sh_parse_name ((name), (exprP), (nextcharP))
int sh_parse_name (char const *name, expressionS *exprP, char *nextchar);
#define TC_CONS_FIX_NEW(FRAG, OFF, LEN, EXP) \
sh_cons_fix_new ((FRAG), (OFF), (LEN), (EXP))
void sh_cons_fix_new (fragS *, int, int, expressionS *);
#define O_PIC_reloc O_md1
#define TARGET_USE_CFIPOP 1
#define tc_cfi_frame_initial_instructions sh_cfi_frame_initial_instructions
extern void sh_cfi_frame_initial_instructions (void);
#define tc_regname_to_dw2regnum sh_regname_to_dw2regnum
extern int sh_regname_to_dw2regnum (const char *regname);
#define DWARF2_LINE_MIN_INSN_LENGTH 2
#define DWARF2_DEFAULT_RETURN_COLUMN 17
#define DWARF2_CIE_DATA_ALIGNMENT -4
#endif