Commit | Line | Data |
---|---|---|
305a3af6 | 1 | /* This file is tc-arm.h |
23604921 | 2 | Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. |
305a3af6 SC |
3 | Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) |
4 | Modified by David Taylor (dtaylor@armltd.co.uk) | |
5 | ||
305a3af6 SC |
6 | This file is part of GAS, the GNU Assembler. |
7 | ||
8 | GAS is free software; you can redistribute it and/or modify | |
9 | it under the terms of the GNU General Public License as published by | |
10 | the Free Software Foundation; either version 2, or (at your option) | |
11 | any later version. | |
12 | ||
13 | GAS is distributed in the hope that it will be useful, | |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | GNU General Public License for more details. | |
17 | ||
18 | You should have received a copy of the GNU General Public License | |
23604921 ILT |
19 | along with GAS; see the file COPYING. If not, write to the Free |
20 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
21 | 02111-1307, USA. */ | |
305a3af6 SC |
22 | |
23 | #define TC_ARM 1 | |
24 | ||
23604921 ILT |
25 | #ifndef TARGET_BYTES_BIG_ENDIAN |
26 | #define TARGET_BYTES_BIG_ENDIAN 0 | |
27 | #endif | |
28 | ||
305a3af6 SC |
29 | #define COFF_MAGIC ARMMAGIC |
30 | #define TARGET_ARCH bfd_arch_arm | |
31 | ||
32 | #define AOUT_MACHTYPE 0 | |
33 | ||
34 | #define DIFF_EXPR_OK | |
35 | ||
f8a21443 NC |
36 | #ifdef LITTLE_ENDIAN |
37 | #undef LITTLE_ENDIAN | |
38 | #endif | |
39 | #ifdef BIG_ENDIAN | |
40 | #undef BIG_ENDIAN | |
41 | #endif | |
42 | ||
305a3af6 SC |
43 | #define LITTLE_ENDIAN 1234 |
44 | #define BIG_ENDIAN 4321 | |
45 | ||
305a3af6 SC |
46 | #ifdef OBJ_AOUT |
47 | #ifdef TE_RISCIX | |
48 | #define TARGET_FORMAT "a.out-riscix" | |
49 | #else | |
af16e411 | 50 | #if TARGET_BYTES_BIG_ENDIAN |
305a3af6 SC |
51 | #define TARGET_FORMAT "a.out-arm-big" |
52 | #else | |
53 | #define TARGET_FORMAT "a.out-arm-little" | |
54 | #endif | |
55 | #endif | |
56 | #endif | |
57 | ||
58 | #ifdef OBJ_AIF | |
59 | #define TARGET_FORMAT "aif" | |
60 | #endif | |
61 | ||
62 | #ifdef OBJ_COFF | |
af16e411 | 63 | #define ARM_BI_ENDIAN |
305a3af6 | 64 | #ifdef TE_PE |
af16e411 | 65 | #define TC_FORCE_RELOCATION(x) ((x)->fx_r_type==BFD_RELOC_RVA) |
305a3af6 | 66 | #define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little") |
af16e411 FF |
67 | #else |
68 | #define TARGET_FORMAT (target_big_endian ? "coff-arm-big" : "coff-arm-little") | |
305a3af6 | 69 | /* Tell tc-arm.c to support runtime endian selection. */ |
305a3af6 SC |
70 | #endif |
71 | #endif | |
72 | ||
73 | #define md_convert_frag(b,s,f) {as_fatal ("arm convert_frag\n");} | |
74 | ||
75 | #define md_after_pass_hook() arm_after_pass_hook () | |
76 | #define md_start_line_hook() arm_start_line_hook () | |
f8a21443 NC |
77 | #define tc_frob_label(S) arm_frob_label (S) |
78 | /* We also need to mark assembler created symbols: */ | |
79 | #define tc_frob_fake_label(S) arm_frob_label (S) | |
80 | /* NOTE: The fake label creation in stabs.c:s_stab_generic() has | |
81 | deliberately not been updated to mark assembler created stabs | |
82 | symbols as Thumb. */ | |
305a3af6 SC |
83 | |
84 | #define obj_fix_adjustable(fixP) 0 | |
85 | ||
f8a21443 NC |
86 | /* We need to keep some local information on symbols. At the moment |
87 | this is 0 for ARM symbols, non-zero for Thumb symbols. */ | |
88 | #define TC_SYMFIELD_TYPE unsigned int | |
89 | #define ARM_GET_TYPE(S) ((S)->sy_tc) | |
90 | #define ARM_SET_TYPE(S,V) ((S)->sy_tc = (V)) | |
91 | ||
af16e411 FF |
92 | #define TC_FIX_TYPE PTR |
93 | #define TC_INIT_FIX_DATA(FIXP) ((FIXP)->tc_fix_data = NULL) | |
94 | ||
95 | #define TC_START_LABEL(C,STR) \ | |
96 | (c == ':' || (c == '/' && arm_data_in_code ())) | |
97 | int arm_data_in_code PARAMS ((void)); | |
98 | ||
99 | #define tc_canonicalize_symbol_name(str) \ | |
100 | arm_canonicalize_symbol_name (str); | |
101 | char *arm_canonicalize_symbol_name PARAMS ((char *)); | |
102 | ||
305a3af6 SC |
103 | #if 0 /* It isn't as simple as this */ |
104 | #define tc_frob_symbol(sym,punt) \ | |
105 | { if (S_IS_LOCAL (sym)) \ | |
106 | { \ | |
107 | punt = 1; \ | |
108 | sym->sy_used_in_reloc = 0; \ | |
109 | }} | |
110 | #endif | |
111 | ||
f8a21443 NC |
112 | /* Finish processing the entire symbol table: */ |
113 | #define tc_adjust_symtab() arm_adjust_symtab () | |
114 | extern void arm_adjust_symtab PARAMS ((void)); | |
115 | ||
305a3af6 SC |
116 | #if 0 |
117 | #define tc_crawl_symbol_chain(a) {;} /* not used */ | |
118 | #define tc_headers_hook(a) {;} /* not used */ | |
119 | #endif | |
120 | ||
121 | #define tc_aout_pre_write_hook(x) {;} /* not used */ | |
122 | ||
123 | #define LISTING_HEADER "ARM GAS " | |
124 | ||
125 | #define OPTIONAL_REGISTER_PREFIX '%' | |
126 | ||
127 | #define md_operand(x) | |
128 | ||
af16e411 FF |
129 | #define TC_HANDLES_FX_DONE |
130 | ||
131 | #define MD_APPLY_FIX3 | |
132 | ||
305a3af6 SC |
133 | #define LOCAL_LABELS_FB 1 |
134 | ||
305a3af6 | 135 | /* end of tc-arm.h */ |