tc-riscv.h revision 1.1
1/* tc-riscv.h -- header file for tc-riscv.c. 2 Copyright 2011-2014 Free Software Foundation, Inc. 3 4 Contributed by Andrew Waterman (waterman@cs.berkeley.edu) at UC Berkeley. 5 Based on MIPS target. 6 7 This file is part of GAS. 8 9 GAS is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3, or (at your option) 12 any later version. 13 14 GAS is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with GAS; see the file COPYING. If not, write to the Free 21 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 22 02110-1301, USA. */ 23 24#ifndef TC_RISCV 25#define TC_RISCV 26 27#include "opcode/riscv.h" 28 29struct frag; 30struct expressionS; 31 32#define TARGET_BYTES_BIG_ENDIAN 0 33 34#define TARGET_ARCH bfd_arch_riscv 35 36#define WORKING_DOT_WORD 1 37#define OLD_FLOAT_READS 38#define REPEAT_CONS_EXPRESSIONS 39#define RELOC_EXPANSION_POSSIBLE 40#define MAX_RELOC_EXPANSION 3 41#define LOCAL_LABELS_FB 1 42 43#define md_relax_frag(segment, fragp, stretch) \ 44 riscv_relax_frag(segment, fragp, stretch) 45extern int riscv_relax_frag (asection *, struct frag *, long); 46 47#define md_section_align(seg,size) (size) 48#define md_undefined_symbol(name) (0) 49#define md_operand(x) 50 51#define NOP_OPCODE RISCV_NOP 52 53extern void riscv_handle_align (struct frag *); 54#define HANDLE_ALIGN(fragp) riscv_handle_align (fragp) 55 56#define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) 57 58struct insn_label_list; 59struct riscv_segment_info { 60 struct insn_label_list *labels; 61}; 62#define TC_SEGMENT_INFO_TYPE struct riscv_segment_info 63 64#define TC_SYMFIELD_TYPE int 65 66/* The ISA of the target may change based on command-line arguments. */ 67#define TARGET_FORMAT riscv_target_format() 68extern const char *riscv_target_format (void); 69 70#define md_after_parse_args() riscv_after_parse_args() 71extern void riscv_after_parse_args (void); 72 73#define tc_init_after_args() riscv_init_after_args() 74extern void riscv_init_after_args (void); 75 76#define md_parse_long_option(arg) riscv_parse_long_option (arg) 77extern int riscv_parse_long_option (const char *); 78 79#define tc_frob_label(sym) riscv_define_label (sym) 80extern void riscv_define_label (symbolS *); 81 82/* Let the linker resolve all the relocs due to relaxation. */ 83#define tc_fix_adjustable(fixp) 0 84#define md_allow_local_subtract(l,r,s) 0 85 86/* Values passed to md_apply_fix don't include symbol values. */ 87#define MD_APPLY_SYM_VALUE(FIX) 0 88 89/* Global syms must not be resolved, to support ELF shared libraries. */ 90#define EXTERN_FORCE_RELOC \ 91 (OUTPUT_FLAVOR == bfd_target_elf_flavour) 92 93#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) ((SEG)->flags & SEC_CODE) 94#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) 1 95#define TC_VALIDATE_FIX_SUB(FIX, SEG) TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) 96#define DIFF_EXPR_OK 1 97 98extern void riscv_pop_insert (void); 99#define md_pop_insert() riscv_pop_insert() 100 101extern void riscv_clear_insn_labels (void); 102#define md_flush_pending_output riscv_clear_insn_labels 103 104extern void riscv_enable_auto_align (void); 105#define md_elf_section_change_hook() riscv_enable_auto_align() 106 107enum dwarf2_format; 108extern enum dwarf2_format riscv_dwarf2_format (asection *); 109#define DWARF2_FORMAT(SEC) riscv_dwarf2_format (SEC) 110 111extern int riscv_dwarf2_addr_size (void); 112#define DWARF2_ADDR_SIZE(bfd) riscv_dwarf2_addr_size () 113#define DWARF2_FDE_RELOC_SIZE riscv_dwarf2_addr_size () 114 115#define TARGET_USE_CFIPOP 1 116 117#define tc_cfi_frame_initial_instructions riscv_cfi_frame_initial_instructions 118extern void riscv_cfi_frame_initial_instructions (void); 119 120#define tc_regname_to_dw2regnum tc_riscv_regname_to_dw2regnum 121extern int tc_riscv_regname_to_dw2regnum (char *regname); 122 123#define DWARF2_DEFAULT_RETURN_COLUMN LINK_REG 124#define DWARF2_CIE_DATA_ALIGNMENT (-4) 125 126#define elf_tc_final_processing riscv_elf_final_processing 127extern void riscv_elf_final_processing (void); 128 129#endif /* TC_RISCV */ 130