1 /* as.h - global header file
2 Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GAS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
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
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
23 * I think this stuff is largely out of date. xoxorich.
25 * CAPITALISED names are #defined.
26 * "lowercaseH" is #defined if "lowercase.h" has been #include-d.
27 * "lowercaseT" is a typedef of "lowercase" objects.
28 * "lowercaseP" is type "pointer to object of type 'lowercase'".
29 * "lowercaseS" is typedef struct ... lowercaseS.
31 * #define DEBUG to enable all the "know" assertion tests.
32 * #define SUSPECT when debugging hash code.
33 * #define COMMON as "extern" for all modules except one, where you #define
35 * If TEST is #defined, then we are testing a module: #define COMMON as "".
40 /* This is the code recommended in the autoconf documentation --
41 verbatim. If it doesn't work for you, let me know, and notify
42 djm@gnu.ai.mit.edu as well. */
43 /* AIX requires this to be the first thing in the file. */
45 # define alloca __builtin_alloca
53 # ifndef alloca /* predefined by HP cc +Olibcalls */
60 /* Now, tend to the rest of the configuration. */
62 /* System include files first... */
76 #ifdef HAVE_SYS_TYPES_H
77 /* for size_t, pid_t */
78 #include <sys/types.h>
81 /* Some systems do declare this, but this seems to be the universal
82 declaration, though the parameter type varies. (It ought to use
83 `const' but many systems prototype it without.) Include it here
84 for systems that don't declare it. If conflicts arise, just add
85 another autoconf test... */
86 extern char *strdup (/* const char * */);
89 /* The first getopt value for machine-independent long options.
90 150 isn't special; it's just an arbitrary non-ASCII char value. */
91 #define OPTION_STD_BASE 150
92 /* The first getopt value for machine-dependent long options.
93 170 gives the standard options room to grow. */
94 #define OPTION_MD_BASE 170
99 /* Handle lossage with assert.h. */
100 #ifndef BROKEN_ASSERT
102 #else /* BROKEN_ASSERT */
104 #define assert(p) ((p) ? 0 : (abort(), 0))
106 #define assert(p) ((p), 0)
108 #endif /* BROKEN_ASSERT */
111 /* Now GNU header files... */
112 #include <ansidecl.h>
117 #ifdef WANT_FOPEN_BIN
118 #include "fopen-bin.h"
120 #include "fopen-same.h"
123 /* This doesn't get taken care of anywhere. */
124 #if !defined (__GNUC__) && !defined (inline)
128 /* Other stuff from config.h. */
129 #ifdef NEED_MALLOC_DECLARATION
130 extern PTR
malloc ();
131 extern PTR
realloc ();
133 #ifdef NEED_FREE_DECLARATION
137 /* This is needed for VMS. */
138 #if ! defined (HAVE_UNLINK) && defined (HAVE_DELETE)
139 #define unlink delete
143 /* This one doesn't get declared, but we're using it anyways. This
144 should be fixed -- either it's part of the external interface or
146 extern PTR bfd_alloc_by_size_t
PARAMS ((bfd
*abfd
, size_t sz
));
149 /* Make Saber happier on obstack.h. */
152 #define __PTR_TO_INT(P) ((int)(P))
154 #define __INT_TO_PTR(P) ((char *)(P))
158 #define __LINE__ "unknown"
159 #endif /* __LINE__ */
162 #define __FILE__ "unknown"
163 #endif /* __FILE__ */
172 #endif /* ! __STDC__ */
174 #if !defined (__GNUC__) && !defined (inline)
180 #include "fopen-bin.h"
182 #include "fopen-same.h"
187 #define EXIT_SUCCESS 0
188 #define EXIT_FAILURE 1
191 #define obstack_chunk_alloc xmalloc
192 #define obstack_chunk_free xfree
196 #define BAD_CASE(val) \
198 as_fatal("Case value %ld unexpected at line %d of file \"%s\"\n", \
199 (long) val, __LINE__, __FILE__); \
202 /* Version 2.1 of Solaris had problems with this declaration, but I
203 think that bug has since been fixed. If it causes problems on your
204 system, just delete it. */
205 extern char *strstr ();
209 /* These are assembler-wide concepts */
212 extern bfd
*stdoutput
;
213 typedef bfd_vma addressT
;
214 typedef bfd_signed_vma offsetT
;
216 typedef unsigned long addressT
;
217 typedef long offsetT
;
220 /* Type of symbol value, etc. For use in prototypes. */
221 typedef addressT valueT
;
225 #define COMMON /* declare our COMMONs storage here. */
227 #define COMMON extern /* our commons live elswhere */
230 /* COMMON now defined */
234 #define know(p) assert(p) /* Verify our assumptions! */
235 #endif /* not yet defined */
237 #define know(p) /* know() checks are no-op.ed */
243 * Supplies sanitised buffers to read.c.
244 * Also understands printing line-number part of error messages.
248 /* subsegs.c Sub-segments. Also, segment(=expression type)s.*/
250 #ifndef BFD_ASSEMBLER
254 #define N_SEGMENTS 10
255 #define SEG_NORMAL(x) ((x) >= SEG_E0 && (x) <= SEG_E9)
256 #define SEG_LIST SEG_E0,SEG_E1,SEG_E2,SEG_E3,SEG_E4,SEG_E5,SEG_E6,SEG_E7,SEG_E8,SEG_E9
257 #define SEG_TEXT SEG_E0
258 #define SEG_DATA SEG_E1
259 #define SEG_BSS SEG_E2
262 #define SEG_NORMAL(x) ((x) == SEG_TEXT || (x) == SEG_DATA || (x) == SEG_BSS)
263 #define SEG_LIST SEG_TEXT,SEG_DATA,SEG_BSS
271 SEG_GOOF
, /* Only happens if AS has a logic error. */
272 /* Invented so we don't crash printing */
273 /* error message involving weird segment. */
274 SEG_EXPR
, /* Intermediate expression values. */
275 SEG_DEBUG
, /* Debug segment */
276 SEG_NTV
, /* Transfert vector preload segment */
277 SEG_PTV
, /* Transfert vector postload segment */
278 SEG_REGISTER
/* Mythical: a register-valued expression */
281 #define SEG_MAXIMUM_ORDINAL (SEG_REGISTER)
283 typedef asection
*segT
;
284 #define SEG_NORMAL(SEG) ((SEG) != absolute_section \
285 && (SEG) != undefined_section \
286 && (SEG) != reg_section \
287 && (SEG) != expr_section)
291 /* What subseg we are accreting now? */
292 COMMON subsegT now_subseg
;
294 /* Segment our instructions emit to. */
298 #define segment_name(SEG) bfd_get_section_name (stdoutput, SEG)
300 extern char *const seg_name
[];
301 #define segment_name(SEG) seg_name[(int) (SEG)]
304 #ifndef BFD_ASSEMBLER
305 extern int section_alignment
[];
309 extern segT reg_section
, expr_section
;
310 /* Shouldn't these be eliminated someday? */
311 extern segT text_section
, data_section
, bss_section
;
312 #define absolute_section bfd_abs_section_ptr
313 #define undefined_section bfd_und_section_ptr
315 #define reg_section SEG_REGISTER
316 #define expr_section SEG_EXPR
317 #define text_section SEG_TEXT
318 #define data_section SEG_DATA
319 #define bss_section SEG_BSS
320 #define absolute_section SEG_ABSOLUTE
321 #define undefined_section SEG_UNKNOWN
326 typedef enum _relax_state
328 /* Variable chars to be repeated fr_offset times.
329 Fr_symbol unused. Used with fr_offset == 0 for a
330 constant length frag. */
333 /* Align: Fr_offset: power of 2. Variable chars: fill pattern. */
336 /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
342 #ifndef WORKING_DOT_WORD
348 /* typedef unsigned char relax_substateT; */
349 /* JF this is more likely to leave the end of a struct frag on an align
350 boundry. Be very careful with this. */
351 typedef unsigned long relax_substateT
;
353 /* Enough bits for address, but still an integer type.
354 Could be a problem, cross-assembling for 64-bit machines. */
355 typedef addressT relax_addressT
;
361 * A code fragment (frag) is some known number of chars, followed by some
362 * unknown number of chars. Typically the unknown number of chars is an
363 * instruction address whose size is yet unknown. We always know the greatest
364 * possible size the unknown number of chars may become, and reserve that
365 * much room at the end of the frag.
366 * Once created, frags do not change address during assembly.
367 * We chain the frags in (a) forward-linked list(s). The object-file address
368 * of the 1st char of a frag is generally not known until after relax().
369 * Many things at assembly time describe an address by {object-file-address
370 * of a particular frag}+offset.
372 BUG: it may be smarter to have a single pointer off to various different
373 notes for different frag kinds. See how code pans
377 /* Object file address. */
379 /* Chain forward; ascending address order. Rooted in frch_root. */
380 struct frag
*fr_next
;
382 /* (Fixed) number of chars we know we have. May be 0. */
384 /* (Variable) number of chars after above. May be 0. */
386 /* For variable-length tail. */
387 struct symbol
*fr_symbol
;
388 /* For variable-length tail. */
390 /* Points to opcode low addr byte, for relaxation. */
394 struct list_info_struct
*line
;
397 /* What state is my tail in? */
398 relax_stateT fr_type
;
399 relax_substateT fr_subtype
;
401 /* These are needed only on the NS32K machines. But since we don't
402 include targ-cpu.h until after this structure has been defined,
403 we can't really conditionalize it. This code should be
404 rearranged a bit to make that possible.
406 In the meantime, if we get stuck like this with any other target,
407 create a union here. */
408 char fr_pcrel_adjust
, fr_bsr
;
410 /* Data begins here. */
414 #define SIZEOF_STRUCT_FRAG \
415 ((char *)zero_address_frag.fr_literal-(char *)&zero_address_frag)
416 /* We want to say fr_literal[0] above. */
418 typedef struct frag fragS
;
420 /* Current frag we are building. This frag is incomplete. It is, however,
421 included in frchain_now. The fr_fix field is bogus; instead, use:
422 obstack_next_free(&frags)-frag_now->fr_literal. */
423 COMMON fragS
*frag_now
;
424 #define frag_now_fix() ((char*)obstack_next_free (&frags) - frag_now->fr_literal)
426 /* For foreign-segment symbol fixups. */
427 COMMON fragS zero_address_frag
;
428 /* For local common (N_BSS segment) fixups. */
429 COMMON fragS bss_address_frag
;
431 /* main program "as.c" (command arguments etc) */
433 COMMON
unsigned char flag_no_comments
; /* -f */
434 COMMON
unsigned char flag_debug
; /* -D */
435 COMMON
unsigned char flag_signed_overflow_ok
; /* -J */
436 COMMON
unsigned char flag_warn_displacement
; /* -K */
438 /* True if local symbols should be retained. */
439 COMMON
unsigned char flag_keep_locals
; /* -L */
441 /* Should the data section be made read-only and appended to the text
443 COMMON
unsigned char flag_readonly_data_in_text
; /* -R */
445 /* True if warnings should be inhibited. */
446 COMMON
unsigned char flag_no_warnings
; /* -W */
448 /* True if we should attempt to generate output even if non-fatal errors
450 COMMON
unsigned char flag_always_generate_output
; /* -Z */
452 /* This is true if the assembler should output time and space usage. */
454 COMMON
unsigned char flag_print_statistics
;
456 /* name of emitted object file */
457 COMMON
char *out_file_name
;
459 /* TRUE if we need a second pass. */
460 COMMON
int need_pass_2
;
462 /* TRUE if we should do no relaxing, and
463 leave lots of padding. */
464 COMMON
int linkrelax
;
466 /* TRUE if we should produce a listing. */
471 /* assembler mnemonic, lower case, no '.' */
474 void (*poc_handler
) PARAMS ((int));
475 /* Value to pass to handler */
479 typedef struct _pseudo_type pseudo_typeS
;
481 #ifdef BFD_ASSEMBLER_xxx
486 struct lineno_struct
*next
;
488 typedef struct lineno_struct lineno
;
491 #if defined (__STDC__) && !defined(NO_STDARG)
494 /* for use with -Wformat */
495 #define PRINTF_LIKE(FCN) void FCN (const char *format, ...) \
496 __attribute__ ((format (printf, 1, 2)))
497 #define PRINTF_WHERE_LIKE(FCN) void FCN (char *file, unsigned int line, \
498 const char *format, ...) \
499 __attribute__ ((format (printf, 3, 4)))
500 #else /* ANSI C with stdarg, but not GNU C */
501 #define PRINTF_LIKE(FCN) void FCN (const char *format, ...)
502 #define PRINTF_WHERE_LIKE(FCN) void FCN (char *file, unsigned int line, \
503 const char *format, ...)
505 #else /* not ANSI C, or not stdarg */
506 #define PRINTF_LIKE(FCN) void FCN ()
507 #define PRINTF_WHERE_LIKE(FCN) void FCN ()
510 PRINTF_LIKE (as_bad
);
511 PRINTF_LIKE (as_fatal
);
512 PRINTF_LIKE (as_tsktsk
);
513 PRINTF_LIKE (as_warn
);
514 PRINTF_WHERE_LIKE (as_bad_where
);
515 PRINTF_WHERE_LIKE (as_warn_where
);
517 void fprint_value
PARAMS ((FILE *file
, addressT value
));
518 void sprint_value
PARAMS ((char *buf
, addressT value
));
520 int had_errors
PARAMS ((void));
521 int had_warnings
PARAMS ((void));
523 void print_version_id
PARAMS ((void));
524 char *app_push
PARAMS ((void));
525 char *atof_ieee
PARAMS ((char *str
, int what_kind
, LITTLENUM_TYPE
* words
));
526 char *input_scrub_include_file
PARAMS ((char *filename
, char *position
));
527 char *input_scrub_new_file
PARAMS ((char *filename
));
528 char *input_scrub_next_buffer
PARAMS ((char **bufp
));
529 PTR xmalloc
PARAMS ((unsigned long size
));
530 PTR xrealloc
PARAMS ((PTR ptr
, unsigned long n
));
531 int do_scrub_next_char
PARAMS ((int (*get
) (void), void (*unget
) (int)));
532 int gen_to_words
PARAMS ((LITTLENUM_TYPE
* words
, int precision
,
533 long exponent_bits
));
534 int had_err
PARAMS ((void));
535 int ignore_input
PARAMS ((void));
536 int scrub_from_file
PARAMS ((void));
537 int scrub_from_string
PARAMS ((void));
538 int seen_at_least_1_file
PARAMS ((void));
539 void app_pop
PARAMS ((char *arg
));
540 void as_howmuch
PARAMS ((FILE * stream
));
541 void as_perror
PARAMS ((const char *gripe
, const char *filename
));
542 void as_where
PARAMS ((char **namep
, unsigned int *linep
));
543 void bump_line_counters
PARAMS ((void));
544 void do_scrub_begin
PARAMS ((void));
545 void input_scrub_begin
PARAMS ((void));
546 void input_scrub_close
PARAMS ((void));
547 void input_scrub_end
PARAMS ((void));
548 void new_logical_line
PARAMS ((char *fname
, int line_number
));
549 void scrub_to_file
PARAMS ((int ch
));
550 void scrub_to_string
PARAMS ((int ch
));
551 void subsegs_begin
PARAMS ((void));
552 void subseg_change
PARAMS ((segT seg
, int subseg
));
553 segT subseg_new
PARAMS ((const char *name
, subsegT subseg
));
554 segT subseg_force_new
PARAMS ((const char *name
, subsegT subseg
));
555 void subseg_set
PARAMS ((segT seg
, subsegT subseg
));
557 segT subseg_get
PARAMS ((const char *, int));
566 valueT add_to_literal_pool
PARAMS ((struct symbol
*, valueT
, segT
, int));
569 #include "expr.h" /* Before targ-*.h */
571 /* this one starts the chain of target dependant headers */
572 #include "targ-env.h"
574 #include "struc-symbol.h"
587 /* Someday perhaps this will be selectable at run-time. */
588 #if defined (OBJ_AOUT) || defined (OBJ_BOUT)
589 #define OUTPUT_FLAVOR bfd_target_aout_flavour
592 #define OUTPUT_FLAVOR bfd_target_coff_flavour
595 #define OUTPUT_FLAVOR bfd_target_ecoff_flavour
598 #define OUTPUT_FLAVOR bfd_target_elf_flavour
600 #endif /* BFD_ASSEMBLER */