Commit | Line | Data |
---|---|---|
e57f8c65 | 1 | /* Mach-O object file format for gas, the assembler. |
6f2750fe | 2 | Copyright (C) 2009-2016 Free Software Foundation, Inc. |
e57f8c65 TG |
3 | |
4 | This file is part of GAS, the GNU Assembler. | |
5 | ||
6 | GAS is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as | |
8 | published by the Free Software Foundation; either version 3, | |
9 | or (at your option) any later version. | |
10 | ||
11 | GAS is distributed in the hope that it will be useful, but | |
12 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | |
14 | the GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GAS; see the file COPYING. If not, write to the Free | |
18 | Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA | |
19 | 02110-1301, USA. */ | |
20 | ||
a4551119 TG |
21 | #ifndef _OBJ_MACH_O_H |
22 | #define _OBJ_MACH_O_H | |
23 | ||
e57f8c65 TG |
24 | /* Tag to validate Mach-O object file format processing */ |
25 | #define OBJ_MACH_O 1 | |
26 | ||
a4551119 TG |
27 | #include "bfd/mach-o.h" |
28 | ||
e57f8c65 TG |
29 | #include "targ-cpu.h" |
30 | ||
31 | #define OUTPUT_FLAVOR bfd_target_mach_o_flavour | |
32 | ||
bcf0aac6 IS |
33 | /* We want to control how the sections are pre-defined on startup. */ |
34 | #define obj_begin() mach_o_begin () | |
35 | extern void mach_o_begin (void); | |
36 | ||
a4551119 | 37 | /* All our align expressions are power of two. */ |
cdaa5616 | 38 | #define USE_ALIGN_PTWO 1 |
a4551119 TG |
39 | |
40 | /* Common symbols can carry alignment information. */ | |
41 | #ifndef S_SET_ALIGN | |
42 | #define S_SET_ALIGN(S,V) do {\ | |
b22161d6 IS |
43 | bfd_mach_o_asymbol *___s = (bfd_mach_o_asymbol *) symbol_get_bfdsym (S);\ |
44 | ___s->n_desc = (___s->n_desc & 0xf0ff) | (((V) & 0x0f) << 8);\ | |
a4551119 TG |
45 | } while (0) |
46 | #endif | |
47 | ||
e57f8c65 TG |
48 | extern const pseudo_typeS mach_o_pseudo_table[]; |
49 | ||
50 | #ifndef obj_pop_insert | |
51 | #define obj_pop_insert() pop_insert (mach_o_pseudo_table) | |
52 | #endif | |
53 | ||
54 | #define obj_sec_sym_ok_for_reloc(SEC) 1 | |
55 | ||
56 | #define obj_read_begin_hook() {;} | |
57 | #define obj_symbol_new_hook(s) {;} | |
58 | ||
cdaa5616 IS |
59 | #define EMIT_SECTION_SYMBOLS 0 |
60 | ||
61 | struct obj_mach_o_symbol_data | |
62 | { | |
63 | /* If the symbol represents a subsection, this is the size of the subsection. | |
64 | This is used to check whether a local symbol belongs to a subsection. */ | |
65 | valueT subsection_size; | |
66 | }; | |
67 | #define OBJ_SYMFIELD_TYPE struct obj_mach_o_symbol_data | |
68 | ||
69 | #define obj_frob_colon obj_mach_o_frob_colon | |
70 | extern void obj_mach_o_frob_colon (const char *); | |
71 | ||
72 | /* Called when a label is defined. Mach-O uses this to create subsections. */ | |
73 | #define obj_frob_label obj_mach_o_frob_label | |
74 | extern void obj_mach_o_frob_label (symbolS *); | |
75 | ||
76 | #define obj_frob_symbol(s, punt) punt = obj_mach_o_frob_symbol(s) | |
77 | extern int obj_mach_o_frob_symbol (struct symbol *); | |
78 | ||
79 | #define OBJ_PROCESS_STAB(SEG,W,S,T,O,D) obj_mach_o_process_stab(W,S,T,O,D) | |
80 | extern void obj_mach_o_process_stab (int, const char *,int, int, int); | |
81 | ||
82 | struct obj_mach_o_frag_data | |
83 | { | |
84 | /* Symbol that corresponds to the subsection. */ | |
85 | symbolS *subsection; | |
86 | }; | |
3739860c | 87 | |
cdaa5616 | 88 | #define OBJ_FRAG_TYPE struct obj_mach_o_frag_data |
b22161d6 | 89 | |
16a87420 IS |
90 | #define md_pre_output_hook obj_mach_o_pre_output_hook() |
91 | extern void obj_mach_o_pre_output_hook(void); | |
92 | ||
cdaa5616 IS |
93 | #define md_pre_relax_hook obj_mach_o_pre_relax_hook() |
94 | extern void obj_mach_o_pre_relax_hook (void); | |
b22161d6 | 95 | |
c3402d20 | 96 | #define md_post_relax_hook obj_mach_o_post_relax_hook() |
cdaa5616 | 97 | extern void obj_mach_o_post_relax_hook (void); |
c3402d20 | 98 | |
50d10658 IS |
99 | #define obj_frob_file_after_relocs obj_mach_o_frob_file_after_relocs |
100 | extern void obj_mach_o_frob_file_after_relocs (void); | |
101 | ||
34dd18bc IS |
102 | #define SET_SECTION_RELOCS(sec, relocs, n) \ |
103 | obj_mach_o_reorder_section_relocs (sec, relocs, n) | |
cdaa5616 IS |
104 | extern void obj_mach_o_reorder_section_relocs (asection *, arelent **, |
105 | unsigned int); | |
34dd18bc | 106 | |
854ac8ba IS |
107 | /* Emit relocs for local subtracts, to cater for subsections-via-symbols. */ |
108 | #define md_allow_local_subtract(LEFT, RIGHT, SECTION) \ | |
109 | obj_mach_o_allow_local_subtract (LEFT, RIGHT, SECTION) | |
110 | extern int obj_mach_o_allow_local_subtract (expressionS *, expressionS *, | |
111 | segT); | |
112 | ||
cdaa5616 IS |
113 | struct fix; |
114 | extern int obj_mach_o_in_different_subsection (symbolS *a, symbolS *b); | |
115 | extern int obj_mach_o_force_reloc (struct fix *fix); | |
116 | extern int obj_mach_o_force_reloc_sub_same (struct fix *fix, segT seg); | |
117 | extern int obj_mach_o_force_reloc_sub_local (struct fix *fix, segT seg); | |
68588f95 | 118 | |
a4551119 | 119 | #endif /* _OBJ_MACH_O_H */ |