2012-05-11 Yao Qi <yao@codesourcery.com>
[deliverable/binutils-gdb.git] / gas / as.h
CommitLineData
252b5132 1/* as.h - global header file
f7e42eb4 2 Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
8d25cc3d 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
252b5132
RH
4 Free Software Foundation, Inc.
5
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
ec2655a6 10 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
11 any later version.
12
ec2655a6
NC
13 GAS is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 License for more details.
252b5132
RH
17
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21 02110-1301, USA. */
252b5132
RH
22
23#ifndef GAS
24#define GAS 1
30a2b4ef 25/* I think this stuff is largely out of date. xoxorich.
329e276d
NC
26
27 CAPITALISED names are #defined.
28 "lowercaseH" is #defined if "lowercase.h" has been #include-d.
29 "lowercaseT" is a typedef of "lowercase" objects.
30 "lowercaseP" is type "pointer to object of type 'lowercase'".
31 "lowercaseS" is typedef struct ... lowercaseS.
32
33 #define DEBUG to enable all the "know" assertion tests.
34 #define SUSPECT when debugging hash code.
35 #define COMMON as "extern" for all modules except one, where you #define
36 COMMON as "".
37 If TEST is #defined, then we are testing a module: #define COMMON as "". */
252b5132 38
8d25cc3d 39#include "alloca-conf.h"
252b5132
RH
40
41/* Now, tend to the rest of the configuration. */
42
a01b9fa4 43/* System include files first... */
252b5132 44#include <stdio.h>
252b5132
RH
45#ifdef HAVE_STRING_H
46#include <string.h>
47#else
48#ifdef HAVE_STRINGS_H
49#include <strings.h>
50#endif
51#endif
52#ifdef HAVE_STDLIB_H
53#include <stdlib.h>
54#endif
55#ifdef HAVE_UNISTD_H
56#include <unistd.h>
57#endif
58#ifdef HAVE_SYS_TYPES_H
59/* for size_t, pid_t */
60#include <sys/types.h>
61#endif
62
6d74f28b
EB
63#ifdef HAVE_ERRNO_H
64#include <errno.h>
65#endif
66
6d74f28b 67#include <stdarg.h>
6d74f28b 68
29589b0c 69#include "getopt.h"
252b5132
RH
70/* The first getopt value for machine-independent long options.
71 150 isn't special; it's just an arbitrary non-ASCII char value. */
72#define OPTION_STD_BASE 150
73/* The first getopt value for machine-dependent long options.
d8374dcd
HPN
74 190 gives the standard options room to grow. */
75#define OPTION_MD_BASE 190
252b5132
RH
76
77#ifdef DEBUG
78#undef NDEBUG
79#endif
a1934524 80#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
5bc2ed93 81#define __PRETTY_FUNCTION__ ((char *) NULL)
252b5132 82#endif
9c2799c2 83#define gas_assert(P) \
c9dea48b 84 ((void) ((P) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0)))
252b5132
RH
85#undef abort
86#define abort() as_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
87
a01b9fa4 88/* Now GNU header files... */
8fce3f5e 89#include "ansidecl.h"
8fce3f5e 90#include "bfd.h"
8fce3f5e 91#include "libiberty.h"
252b5132
RH
92
93/* Define the standard progress macros. */
8fce3f5e 94#include "progress.h"
252b5132
RH
95
96/* This doesn't get taken care of anywhere. */
329e276d 97#ifndef __MWERKS__ /* Metrowerks C chokes on the "defined (inline)" */
252b5132
RH
98#if !defined (__GNUC__) && !defined (inline)
99#define inline
100#endif
101#endif /* !__MWERKS__ */
102
103/* Other stuff from config.h. */
e8a38df5
AL
104#ifdef NEED_DECLARATION_ENVIRON
105extern char **environ;
252b5132 106#endif
e8a38df5
AL
107#ifdef NEED_DECLARATION_ERRNO
108extern int errno;
109#endif
110#ifdef NEED_DECLARATION_FFS
111extern int ffs (int);
252b5132
RH
112#endif
113#ifdef NEED_DECLARATION_FREE
114extern void free ();
115#endif
e8a38df5 116#ifdef NEED_DECLARATION_MALLOC
5a49b8ac
AM
117extern void *malloc ();
118extern void *realloc ();
252b5132 119#endif
e8a38df5
AL
120#ifdef NEED_DECLARATION_STRSTR
121extern char *strstr ();
252b5132
RH
122#endif
123
0175442d
L
124#if !HAVE_DECL_MEMPCPY
125void *mempcpy(void *, const void *, size_t);
126#endif
127
6d74f28b
EB
128#if !HAVE_DECL_VSNPRINTF
129extern int vsnprintf(char *, size_t, const char *, va_list);
130#endif
131
252b5132
RH
132/* This is needed for VMS. */
133#if ! defined (HAVE_UNLINK) && defined (HAVE_REMOVE)
134#define unlink remove
135#endif
136
137/* Hack to make "gcc -Wall" not complain about obstack macros. */
138#if !defined (memcpy) && !defined (bcopy)
d1a6c242 139#define bcopy(src,dest,size) memcpy (dest, src, size)
252b5132
RH
140#endif
141
142/* Make Saber happier on obstack.h. */
143#ifdef SABER
144#undef __PTR_TO_INT
ee515fb7 145#define __PTR_TO_INT(P) ((int) (P))
252b5132 146#undef __INT_TO_PTR
ee515fb7 147#define __INT_TO_PTR(P) ((char *) (P))
252b5132
RH
148#endif
149
150#ifndef __LINE__
151#define __LINE__ "unknown"
152#endif /* __LINE__ */
153
154#ifndef __FILE__
155#define __FILE__ "unknown"
156#endif /* __FILE__ */
157
158#ifndef FOPEN_WB
c973bc5c 159#ifdef USE_BINARY_FOPEN
252b5132
RH
160#include "fopen-bin.h"
161#else
162#include "fopen-same.h"
163#endif
164#endif
165
166#ifndef EXIT_SUCCESS
167#define EXIT_SUCCESS 0
168#define EXIT_FAILURE 1
169#endif
170
12ff5d56
AM
171#ifndef SEEK_SET
172#define SEEK_SET 0
173#endif
174
252b5132
RH
175#define obstack_chunk_alloc xmalloc
176#define obstack_chunk_free xfree
177
178#define xfree free
179
180#include "asintl.h"
181
30a2b4ef
KH
182#define BAD_CASE(val) \
183 { \
184 as_fatal (_("Case value %ld unexpected at line %d of file \"%s\"\n"), \
185 (long) val, __LINE__, __FILE__); \
186 }
252b5132
RH
187\f
188#include "flonum.h"
189
190/* These are assembler-wide concepts */
191
252b5132
RH
192extern bfd *stdoutput;
193typedef bfd_vma addressT;
194typedef bfd_signed_vma offsetT;
252b5132
RH
195
196/* Type of symbol value, etc. For use in prototypes. */
197typedef addressT valueT;
198
199#ifndef COMMON
200#ifdef TEST
329e276d 201#define COMMON /* Declare our COMMONs storage here. */
252b5132 202#else
329e276d 203#define COMMON extern /* Our commons live elsewhere. */
252b5132
RH
204#endif
205#endif
206/* COMMON now defined */
207
c43a438d
AM
208#ifndef ENABLE_CHECKING
209#define ENABLE_CHECKING 0
210#endif
211
212#if ENABLE_CHECKING || defined (DEBUG)
252b5132 213#ifndef know
9c2799c2 214#define know(p) gas_assert(p) /* Verify our assumptions! */
252b5132
RH
215#endif /* not yet defined */
216#else
c5ed243b 217#define know(p) do {} while (0) /* know() checks are no-op.ed */
252b5132
RH
218#endif
219\f
220/* input_scrub.c */
221
30a2b4ef
KH
222/* Supplies sanitised buffers to read.c.
223 Also understands printing line-number part of error messages. */
252b5132 224\f
252b5132
RH
225/* subsegs.c Sub-segments. Also, segment(=expression type)s.*/
226
252b5132 227typedef asection *segT;
329e276d 228#define SEG_NORMAL(SEG) ( (SEG) != absolute_section \
252b5132
RH
229 && (SEG) != undefined_section \
230 && (SEG) != reg_section \
231 && (SEG) != expr_section)
252b5132
RH
232typedef int subsegT;
233
329e276d 234/* What subseg we are accessing now? */
252b5132
RH
235COMMON subsegT now_subseg;
236
a01b9fa4 237/* Segment our instructions emit to. */
252b5132
RH
238COMMON segT now_seg;
239
252b5132 240#define segment_name(SEG) bfd_get_section_name (stdoutput, SEG)
252b5132 241
252b5132
RH
242extern segT reg_section, expr_section;
243/* Shouldn't these be eliminated someday? */
244extern segT text_section, data_section, bss_section;
245#define absolute_section bfd_abs_section_ptr
246#define undefined_section bfd_und_section_ptr
252b5132 247
329e276d
NC
248enum _relax_state
249{
be95a9c1
AM
250 /* Dummy frag used by listing code. */
251 rs_dummy = 0,
252
30a2b4ef
KH
253 /* Variable chars to be repeated fr_offset times.
254 Fr_symbol unused. Used with fr_offset == 0 for a
255 constant length frag. */
be95a9c1 256 rs_fill,
30a2b4ef
KH
257
258 /* Align. The fr_offset field holds the power of 2 to which to
259 align. The fr_var field holds the number of characters in the
260 fill pattern. The fr_subtype field holds the maximum number of
261 bytes to skip when aligning, or 0 if there is no maximum. */
262 rs_align,
263
264 /* Align code. The fr_offset field holds the power of 2 to which
265 to align. This type is only generated by machine specific
266 code, which is normally responsible for handling the fill
267 pattern. The fr_subtype field holds the maximum number of
268 bytes to skip when aligning, or 0 if there is no maximum. */
269 rs_align_code,
270
0a9ef439
RH
271 /* Test for alignment. Like rs_align, but used by several targets
272 to warn if data is not properly aligned. */
273 rs_align_test,
274
30a2b4ef
KH
275 /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
276 character. */
277 rs_org,
252b5132
RH
278
279#ifndef WORKING_DOT_WORD
30a2b4ef
KH
280 /* JF: gunpoint */
281 rs_broken_word,
252b5132
RH
282#endif
283
329e276d 284 /* Machine specific relaxable (or similarly alterable) instruction. */
30a2b4ef 285 rs_machine_dependent,
252b5132 286
30a2b4ef
KH
287 /* .space directive with expression operand that needs to be computed
288 later. Similar to rs_org, but different.
289 fr_symbol: operand
290 1 variable char: fill character */
291 rs_space,
252b5132 292
30a2b4ef
KH
293 /* A DWARF leb128 value; only ELF uses this. The subtype is 0 for
294 unsigned, 1 for signed. */
295 rs_leb128,
252b5132 296
30a2b4ef 297 /* Exception frame information which we may be able to optimize. */
220e750f
RH
298 rs_cfa,
299
300 /* Cross-fragment dwarf2 line number optimization. */
301 rs_dwarf2dbg
30a2b4ef 302};
252b5132
RH
303
304typedef enum _relax_state relax_stateT;
305
306/* This type is used in prototypes, so it can't be a type that will be
307 widened for argument passing. */
308typedef unsigned int relax_substateT;
309
310/* Enough bits for address, but still an integer type.
311 Could be a problem, cross-assembling for 64-bit machines. */
312typedef addressT relax_addressT;
f17c130b
AM
313
314struct relax_type
315{
316 /* Forward reach. Signed number. > 0. */
317 offsetT rlx_forward;
318 /* Backward reach. Signed number. < 0. */
319 offsetT rlx_backward;
320
321 /* Bytes length of this address. */
322 unsigned char rlx_length;
323
324 /* Next longer relax-state. 0 means there is no 'next' relax-state. */
325 relax_substateT rlx_more;
326};
327
328typedef struct relax_type relax_typeS;
252b5132 329\f
329e276d 330/* main program "as.c" (command arguments etc). */
252b5132
RH
331
332COMMON unsigned char flag_no_comments; /* -f */
333COMMON unsigned char flag_debug; /* -D */
334COMMON unsigned char flag_signed_overflow_ok; /* -J */
335#ifndef WORKING_DOT_WORD
336COMMON unsigned char flag_warn_displacement; /* -K */
337#endif
338
339/* True if local symbols should be retained. */
340COMMON int flag_keep_locals; /* -L */
341
342/* True if we are assembling in MRI mode. */
343COMMON int flag_mri;
344
252b5132
RH
345/* Should the data section be made read-only and appended to the text
346 section? */
347COMMON unsigned char flag_readonly_data_in_text; /* -R */
348
349/* True if warnings should be inhibited. */
350COMMON int flag_no_warnings; /* -W */
351
2bdd6cf5
GK
352/* True if warnings count as errors. */
353COMMON int flag_fatal_warnings; /* --fatal-warnings */
354
252b5132
RH
355/* True if we should attempt to generate output even if non-fatal errors
356 are detected. */
357COMMON unsigned char flag_always_generate_output; /* -Z */
358
a01b9fa4 359/* This is true if the assembler should output time and space usage. */
252b5132
RH
360COMMON unsigned char flag_print_statistics;
361
362/* True if local absolute symbols are to be stripped. */
363COMMON int flag_strip_local_absolute;
364
365/* True if we should generate a traditional format object file. */
366COMMON int flag_traditional_format;
367
0acf065b
CC
368/* TRUE if debug sections should be compressed. */
369COMMON int flag_compress_debug;
370
68d55fe3
JJ
371/* TRUE if .note.GNU-stack section with SEC_CODE should be created */
372COMMON int flag_execstack;
373
374/* TRUE if .note.GNU-stack section with SEC_CODE should be created */
375COMMON int flag_noexecstack;
376
252b5132
RH
377/* name of emitted object file */
378COMMON char *out_file_name;
379
380/* name of file defining extensions to the basic instruction set */
381COMMON char *insttbl_file_name;
382
a01b9fa4 383/* TRUE if we need a second pass. */
252b5132
RH
384COMMON int need_pass_2;
385
386/* TRUE if we should do no relaxing, and
387 leave lots of padding. */
388COMMON int linkrelax;
389
390/* TRUE if we should produce a listing. */
391extern int listing;
392
4dc7ead9
RH
393/* Type of debugging information we should generate. We currently support
394 stabs, ECOFF, and DWARF2.
395
396 NOTE! This means debug information about the assembly source code itself
397 and _not_ about possible debug information from a high-level language.
398 This is especially relevant to DWARF2, since the compiler may emit line
399 number directives that the assembler resolves. */
252b5132 400
329e276d
NC
401enum debug_info_type
402{
30a2b4ef
KH
403 DEBUG_UNSPECIFIED,
404 DEBUG_NONE,
405 DEBUG_STABS,
406 DEBUG_ECOFF,
407 DEBUG_DWARF,
408 DEBUG_DWARF2
409};
252b5132
RH
410
411extern enum debug_info_type debug_type;
05da4302 412extern int use_gnu_debug_info_extensions;
252b5132
RH
413\f
414/* Maximum level of macro nesting. */
415extern int max_macro_nest;
416
54cfded0
AM
417/* Verbosity level. */
418extern int verbose;
419
252b5132
RH
420/* Obstack chunk size. Keep large for efficient space use, make small to
421 increase malloc calls for monitoring memory allocation. */
422extern int chunksize;
423
329e276d
NC
424struct _pseudo_type
425{
30a2b4ef
KH
426 /* assembler mnemonic, lower case, no '.' */
427 const char *poc_name;
428 /* Do the work */
73ee5e4c 429 void (*poc_handler) (int);
30a2b4ef
KH
430 /* Value to pass to handler */
431 int poc_val;
432};
252b5132
RH
433
434typedef struct _pseudo_type pseudo_typeS;
435
252b5132
RH
436#if (__GNUC__ >= 2) && !defined(VMS)
437/* for use with -Wformat */
438
a1934524 439#if __GNUC__ == 2 && __GNUC_MINOR__ < 6
252b5132
RH
440/* Support for double underscores in attribute names was added in gcc
441 2.6, so avoid them if we are using an earlier version. */
442#define __printf__ printf
443#define __format__ format
444#endif
445
446#define PRINTF_LIKE(FCN) \
447 void FCN (const char *format, ...) \
448 __attribute__ ((__format__ (__printf__, 1, 2)))
449#define PRINTF_WHERE_LIKE(FCN) \
450 void FCN (char *file, unsigned int line, const char *format, ...) \
451 __attribute__ ((__format__ (__printf__, 3, 4)))
452
453#else /* __GNUC__ < 2 || defined(VMS) */
454
73ee5e4c
KH
455#define PRINTF_LIKE(FCN) void FCN (const char *format, ...)
456#define PRINTF_WHERE_LIKE(FCN) void FCN (char *file, \
457 unsigned int line, \
458 const char *format, ...)
252b5132
RH
459
460#endif /* __GNUC__ < 2 || defined(VMS) */
461
252b5132 462PRINTF_LIKE (as_bad);
8fce3f5e 463PRINTF_LIKE (as_fatal) ATTRIBUTE_NORETURN;
252b5132
RH
464PRINTF_LIKE (as_tsktsk);
465PRINTF_LIKE (as_warn);
466PRINTF_WHERE_LIKE (as_bad_where);
467PRINTF_WHERE_LIKE (as_warn_where);
468
329e276d
NC
469void as_assert (const char *, int, const char *);
470void as_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
329e276d
NC
471void sprint_value (char *, addressT);
472int had_errors (void);
473int had_warnings (void);
474void as_warn_value_out_of_range (char *, offsetT, offsetT, offsetT, char *, unsigned);
475void as_bad_value_out_of_range (char *, offsetT, offsetT, offsetT, char *, unsigned);
476void print_version_id (void);
477char * app_push (void);
478char * atof_ieee (char *, int, LITTLENUM_TYPE *);
499ac353
NC
479char * ieee_md_atof (int, char *, int *, bfd_boolean);
480char * vax_md_atof (int, char *, int *);
329e276d
NC
481char * input_scrub_include_file (char *, char *);
482void input_scrub_insert_line (const char *);
483void input_scrub_insert_file (char *);
484char * input_scrub_new_file (char *);
485char * input_scrub_next_buffer (char **bufp);
486int do_scrub_chars (int (*get) (char *, int), char *, int);
487int gen_to_words (LITTLENUM_TYPE *, int, long);
488int had_err (void);
489int ignore_input (void);
490void cond_finish_check (int);
491void cond_exit_macro (int);
492int seen_at_least_1_file (void);
493void app_pop (char *);
329e276d
NC
494void as_where (char **, unsigned int *);
495void bump_line_counters (void);
496void do_scrub_begin (int);
497void input_scrub_begin (void);
498void input_scrub_close (void);
499void input_scrub_end (void);
500int new_logical_line (char *, int);
93e914b2 501int new_logical_line_flags (char *, int, int);
329e276d
NC
502void subsegs_begin (void);
503void subseg_change (segT, int);
504segT subseg_new (const char *, subsegT);
505segT subseg_force_new (const char *, subsegT);
506void subseg_set (segT, subsegT);
507int subseg_text_p (segT);
4ee4d249 508int seg_not_empty_p (segT);
329e276d
NC
509void start_dependencies (char *);
510void register_dependency (char *);
511void print_dependencies (void);
329e276d 512segT subseg_get (const char *, int);
252b5132 513
3d6b762c
JM
514const char *remap_debug_filename (const char *);
515void add_debug_prefix_map (const char *);
516
252b5132
RH
517struct expressionS;
518struct fix;
2b47531b 519typedef struct symbol symbolS;
252b5132
RH
520typedef struct frag fragS;
521
252b5132 522/* literal.c */
73ee5e4c 523valueT add_to_literal_pool (symbolS *, valueT, segT, int);
252b5132 524
73ee5e4c
KH
525int check_eh_frame (struct expressionS *, unsigned int *);
526int eh_frame_estimate_size_before_relax (fragS *);
527int eh_frame_relax_frag (fragS *);
528void eh_frame_convert_frag (fragS *);
73ee5e4c 529int generic_force_reloc (struct fix *);
ae6063d4 530
252b5132
RH
531#include "expr.h" /* Before targ-*.h */
532
329e276d 533/* This one starts the chain of target dependant headers. */
252b5132
RH
534#include "targ-env.h"
535
a161fe53
AM
536#ifdef OBJ_MAYBE_ELF
537#define IS_ELF (OUTPUT_FLAVOR == bfd_target_elf_flavour)
538#else
539#ifdef OBJ_ELF
540#define IS_ELF 1
541#else
542#define IS_ELF 0
543#endif
0d2bcfaf
NC
544#endif
545
252b5132
RH
546#include "write.h"
547#include "frags.h"
548#include "hash.h"
549#include "read.h"
550#include "symbols.h"
551
552#include "tc.h"
553#include "obj.h"
554
555#ifdef USE_EMULATIONS
556#include "emul.h"
557#endif
558#include "listing.h"
559
c54b5932
DD
560#ifdef H_TICK_HEX
561extern int enable_h_tick_hex;
562#endif
563
abd63a32
AM
564#ifdef TC_M68K
565/* True if we are assembling in m68k MRI mode. */
566COMMON int flag_m68k_mri;
4fa6945e 567#define DOLLAR_AMBIGU flag_m68k_mri
abd63a32
AM
568#else
569#define flag_m68k_mri 0
570#endif
571
4c400d5e 572#ifdef WARN_COMMENTS
329e276d
NC
573COMMON int warn_comment;
574COMMON unsigned int found_comment;
575COMMON char * found_comment_file;
4c400d5e
AM
576#endif
577
21be61f5
L
578#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
579/* If .size directive failure should be error or warning. */
580COMMON enum
581 {
582 size_check_error = 0,
583 size_check_warning
584 }
585flag_size_check;
586#endif
587
4fa6945e
NC
588#ifndef DOLLAR_AMBIGU
589#define DOLLAR_AMBIGU 0
590#endif
591
f805106c
TW
592#ifndef NUMBERS_WITH_SUFFIX
593#define NUMBERS_WITH_SUFFIX 0
594#endif
595
252b5132
RH
596#ifndef LOCAL_LABELS_DOLLAR
597#define LOCAL_LABELS_DOLLAR 0
598#endif
599
600#ifndef LOCAL_LABELS_FB
601#define LOCAL_LABELS_FB 0
602#endif
603
abd63a32
AM
604#ifndef LABELS_WITHOUT_COLONS
605#define LABELS_WITHOUT_COLONS 0
606#endif
607
608#ifndef NO_PSEUDO_DOT
609#define NO_PSEUDO_DOT 0
610#endif
611
252b5132
RH
612#ifndef TEXT_SECTION_NAME
613#define TEXT_SECTION_NAME ".text"
614#define DATA_SECTION_NAME ".data"
615#define BSS_SECTION_NAME ".bss"
616#endif
617
bea9907b
TW
618#ifndef OCTETS_PER_BYTE_POWER
619#define OCTETS_PER_BYTE_POWER 0
620#endif
621#ifndef OCTETS_PER_BYTE
622#define OCTETS_PER_BYTE (1<<OCTETS_PER_BYTE_POWER)
623#endif
624#if OCTETS_PER_BYTE != (1<<OCTETS_PER_BYTE_POWER)
625 #error "Octets per byte conflicts with its power-of-two definition!"
626#endif
627
252b5132 628#endif /* GAS */
This page took 0.645828 seconds and 4 git commands to generate.