1/* Multiple object format emulation.
2   Copyright 1995, 1996, 1997, 1999, 2000, 2002, 2004
3   Free Software Foundation, Inc.
4
5   This file is part of GAS, the GNU Assembler.
6
7   GAS is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 2, or (at your option)
10   any later version.
11
12   GAS is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with GAS; see the file COPYING.  If not, write to the Free
19   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20   02110-1301, USA.  */
21
22#ifndef _OBJ_MULTI_H
23#define _OBJ_MULTI_H
24
25#ifdef OBJ_HEADER
26#include OBJ_HEADER
27#else
28
29#include "emul.h"
30#include "targ-cpu.h"
31
32#define OUTPUT_FLAVOR					\
33	(this_format->flavor)
34
35#define obj_begin()					\
36	(this_format->begin				\
37	 ? (*this_format->begin) ()			\
38	 : (void) 0)
39
40#define obj_app_file(NAME, APPFILE)			\
41	(this_format->app_file				\
42	 ? (*this_format->app_file) (NAME, APPFILE)	\
43	 : (void) 0)
44
45#define obj_frob_symbol(S,P)				\
46	(*this_format->frob_symbol) (S, &(P))
47
48#define obj_frob_file()					\
49	(this_format->frob_file				\
50	 ? (*this_format->frob_file) ()			\
51	 : (void) 0)
52
53#define obj_frob_file_before_adjust()			\
54	(this_format->frob_file_before_adjust		\
55	 ? (*this_format->frob_file_before_adjust) ()	\
56	 : (void) 0)
57
58#define obj_frob_file_before_fix()			\
59	(this_format->frob_file_before_fix		\
60	 ? (*this_format->frob_file_before_fix) ()	\
61	 : (void) 0)
62
63#define obj_frob_file_after_relocs()			\
64	(this_format->frob_file_after_relocs		\
65	 ? (*this_format->frob_file_after_relocs) ()	\
66	 : (void) 0)
67
68#define obj_ecoff_set_ext				\
69	(*this_format->ecoff_set_ext)
70
71#define obj_pop_insert					\
72	(*this_format->pop_insert)
73
74#define obj_read_begin_hook()				\
75	(this_format->read_begin_hook			\
76	 ? (*this_format->read_begin_hook) ()		\
77	 : (void) 0)
78
79#define obj_symbol_new_hook(S)				\
80	(this_format->symbol_new_hook			\
81	 ? (*this_format->symbol_new_hook) (S)		\
82	 : (void) 0)
83
84#define obj_sec_sym_ok_for_reloc(A)			\
85	(this_format->sec_sym_ok_for_reloc		\
86	 ? (*this_format->sec_sym_ok_for_reloc) (A)	\
87	 : 0)
88
89#define S_GET_SIZE					\
90	(*this_format->s_get_size)
91
92#define S_SET_SIZE(S, N)				\
93	(this_format->s_set_size			\
94	 ? (*this_format->s_set_size) (S, N)		\
95	 : (void) 0)
96
97#define S_GET_ALIGN					\
98	(*this_format->s_get_align)
99
100#define S_SET_ALIGN(S, N)				\
101	(this_format->s_set_align			\
102	 ? (*this_format->s_set_align) (S, N)		\
103	 : (void) 0)
104
105#define S_GET_OTHER					\
106	(*this_format->s_get_other)
107
108#define S_SET_OTHER(S, O)				\
109	(this_format->s_set_other			\
110	 ? (*this_format->s_set_other) (S, O)		\
111	 : (void) 0)
112
113#define S_GET_DESC					\
114	(*this_format->s_get_desc)
115
116#define S_SET_DESC(S, D)				\
117	(this_format->s_set_desc			\
118	 ? (*this_format->s_set_desc) (S, D)		\
119	 : (void) 0)
120
121#define S_GET_TYPE					\
122	(*this_format->s_get_desc)
123
124#define S_SET_TYPE(S, T)				\
125	(this_format->s_set_type			\
126	 ? (*this_format->s_set_type) (S, T)		\
127	 : (void) 0)
128
129#define OBJ_COPY_SYMBOL_ATTRIBUTES(d,s)			\
130	(this_format->copy_symbol_attributes		\
131	 ? (*this_format->copy_symbol_attributes) (d, s) \
132	 : (void) 0)
133
134#define OBJ_PROCESS_STAB(SEG,W,S,T,O,D)			\
135	(this_format->process_stab			\
136	 ? (*this_format->process_stab) (SEG,W,S,T,O,D)	\
137	 : (void) 0)
138
139#define SEPARATE_STAB_SECTIONS \
140	((*this_format->separate_stab_sections) ())
141
142#define INIT_STAB_SECTION(S)				\
143	(this_format->init_stab_section			\
144	 ? (*this_format->init_stab_section) (S)	\
145	 : (void) 0)
146
147#define EMIT_SECTION_SYMBOLS (this_format->emit_section_symbols)
148
149#define FAKE_LABEL_NAME (this_emulation->fake_label_name)
150
151#ifdef OBJ_MAYBE_ELF
152/* We need OBJ_SYMFIELD_TYPE so that symbol_get_obj is defined in symbol.c
153   We also need various STAB defines for stab.c  */
154#include "obj-elf.h"
155#endif
156
157#ifdef OBJ_MAYBE_AOUT
158/* We want aout_process_stab in stabs.c for the aout table.  Defining this
159   macro will have no other effect.  */
160#define AOUT_STABS
161#endif
162
163#endif /* !OBJ_HEADER */
164#endif /* _OBJ_MULTI_H */
165