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