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