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