1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
/* This file is tc-mcore.h
Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GAS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GAS; see the file COPYING. If not, write to the
Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#ifndef TC_MCORE
#define TC_MCORE 1
#ifndef BFD_ASSEMBLER
#error MCORE support requires BFD_ASSEMBLER
#endif
#define TARGET_ARCH bfd_arch_mcore
/* Used to initialise target_big_endian. */
#define TARGET_BYTES_BIG_ENDIAN 0
/* Don't write out relocs for pcrel stuff. */
#define TC_COUNT_RELOC(x) (((x)->fx_addsy || (x)->fx_subsy) && \
(x)->fx_r_type < BFD_RELOC_MCORE_PCREL_IMM8BY4)
#define IGNORE_NONSTANDARD_ESCAPES
#define TC_RELOC_MANGLE(a,b,c) tc_reloc_mangle (a, b, c)
/* Some pseudo-op semantic extensions. */
#define PSEUDO_LCOMM_OPTIONAL_ALIGN
#define LISTING_HEADER "M.CORE GAS Version 2.9.4"
#define LISTING_LHS_CONT_LINES 4
#define NEED_FX_R_TYPE 1
#define COFF_FLAGS 1
/* We want local label support. */
#define LOCAL_LABELS_FB 1
#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep (frag)
extern const struct relax_type md_relax_table[];
#define TC_GENERIC_RELAX_TABLE md_relax_table
#define md_end md_mcore_end
/* Want the section information too... */
#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from_section (FIX, SEC)
#ifdef OBJ_COFF
#define TARGET_FORMAT (target_big_endian ? "pe-mcore-big" : "pe-mcore-little")
struct mcore_tc_sy
{
int sy_flags;
};
#define TC_SYMFIELD_TYPE struct mcore_tc_sy
# if defined TE_PE
# define TC_FORCE_RELOCATION(x) \
((x)->fx_r_type == BFD_RELOC_RVA || S_FORCE_RELOC ((x)->fx_addsy))
# endif
#endif /* OBJ_COFF */
#ifdef OBJ_ELF
#define TARGET_FORMAT (target_big_endian ? "elf32-mcore-big" : "elf32-mcore-little")
#define ELF_TC_SPECIAL_SECTIONS \
{ ".ctors", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \
{ ".dtors", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \
/* Other special sections not generated by the assembler: .reginfo,
.liblist, .conflict, .gptab, .got, .dynamic, .rel.dyn. */
/* No shared lib support, so we don't need to ensure externally
visible symbols can be overridden. */
#define EXTERN_FORCE_RELOC 0
/* When relaxing, we need to emit various relocs we otherwise wouldn't. */
#define TC_FORCE_RELOCATION(fix) mcore_force_relocation (fix)
extern int mcore_force_relocation PARAMS ((struct fix *));
#define tc_fix_adjustable(FIX) mcore_fix_adjustable (FIX)
extern boolean mcore_fix_adjustable PARAMS ((struct fix *));
/* Values passed to md_apply_fix3 don't include the symbol value. */
#define MD_APPLY_SYM_VALUE(FIX) 0
#endif /* OBJ_ELF */
#ifndef TARGET_FORMAT
# error No target format specified.
#endif
#include "write.h" /* For definition of fixS */
extern void md_begin PARAMS ((void));
extern void md_assemble PARAMS ((char *));
extern symbolS * md_undefined_symbol PARAMS ((char *));
extern void md_mcore_end PARAMS ((void));
extern char * md_atof PARAMS ((int, char *, int *));
extern int md_parse_option PARAMS ((int, char *));
extern void md_show_usage PARAMS ((FILE *));
extern void md_create_short_jump
PARAMS ((char *, addressT, addressT, fragS *, symbolS *));
extern void md_create_long_jump
PARAMS ((char *, addressT, addressT, fragS *, symbolS *));
extern void md_convert_frag PARAMS ((bfd *, segT, fragS *));
extern void md_operand PARAMS ((expressionS *));
extern int md_estimate_size_before_relax PARAMS ((fragS *, segT));
extern void md_number_to_chars PARAMS ((char *, valueT, int));
extern valueT md_section_align PARAMS ((segT, valueT));
extern long md_pcrel_from_section PARAMS ((fixS *, segT));
extern arelent * tc_gen_reloc PARAMS ((asection *, fixS *));
#endif /* TC_MCORE */
|