X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Fas.h;h=ff434cbed0cc1cec3ce56710871a0f588937ecbd;hb=2b3c4602718d2951e30572be3c1c6dcf5defa4fb;hp=a72dfad28dce4d6711dbb41038db4e71c294b738;hpb=252b5132c753830d5fd56823373aed85f2a0db63;p=binutils-gdb.git diff --git a/gas/as.h b/gas/as.h index a72dfad28dc..ff434cbed0c 100644 --- a/gas/as.h +++ b/gas/as.h @@ -1,5 +1,6 @@ /* as.h - global header file - Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 96, 97, 1998 + Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -21,8 +22,7 @@ #ifndef GAS #define GAS 1 -/* - * I think this stuff is largely out of date. xoxorich. +/* I think this stuff is largely out of date. xoxorich. * * CAPITALISED names are #defined. * "lowercaseH" is #defined if "lowercase.h" has been #include-d. @@ -38,32 +38,24 @@ */ #include "config.h" +#include "bin-bugs.h" /* This is the code recommended in the autoconf documentation, almost verbatim. If it doesn't work for you, let me know, and notify djm@gnu.ai.mit.edu as well. */ -/* Added #undef for DJ Delorie. The right fix is to ensure that as.h - is included first, before even any system header files, in all files - that use it. KR 1994.11.03 */ /* Added void* version for STDC case. This is to be compatible with the declaration in bison.simple, used for m68k operand parsing. --KR 1995.08.08 */ /* Force void* decl for hpux. This is what Bison uses. --KR 1995.08.16 */ -/* AIX requires this to be the first thing in the file. */ -#ifdef __GNUC__ -# ifndef alloca -# ifdef __STDC__ -extern void *alloca (); -# else -extern char *alloca (); -# endif -# endif -#else +#ifndef __GNUC__ # if HAVE_ALLOCA_H # include # else # ifdef _AIX +/* Indented so that pre-ansi C compilers will ignore it, rather than + choke on it. Some versions of AIX require this to be the first + thing in the file. */ #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ @@ -75,13 +67,12 @@ extern void *alloca (); # endif /* alloca */ # endif /* _AIX */ # endif /* HAVE_ALLOCA_H */ -#endif +#endif /* __GNUC__ */ /* Now, tend to the rest of the configuration. */ -/* System include files first... */ +/* System include files first... */ #include -#include #ifdef HAVE_STRING_H #include #else @@ -100,18 +91,18 @@ extern void *alloca (); #include #endif -#include +#include "getopt.h" /* The first getopt value for machine-independent long options. 150 isn't special; it's just an arbitrary non-ASCII char value. */ #define OPTION_STD_BASE 150 /* The first getopt value for machine-dependent long options. - 170 gives the standard options room to grow. */ -#define OPTION_MD_BASE 170 + 190 gives the standard options room to grow. */ +#define OPTION_MD_BASE 190 #ifdef DEBUG #undef NDEBUG #endif -#if !defined (__GNUC__) || __GNUC_MINOR__ <= 5 +#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) #define __PRETTY_FUNCTION__ ((char*)0) #endif #if 0 @@ -135,16 +126,15 @@ extern void *alloca (); #endif - -/* Now GNU header files... */ -#include +/* Now GNU header files... */ +#include "ansidecl.h" #ifdef BFD_ASSEMBLER -#include +#include "bfd.h" #endif -#include +#include "libiberty.h" /* Define the standard progress macros. */ -#include +#include "progress.h" /* This doesn't get taken care of anywhere. */ #ifndef __MWERKS__ /* Metrowerks C chokes on the "defined (inline)" */ @@ -178,15 +168,15 @@ extern char **environ; /* Hack to make "gcc -Wall" not complain about obstack macros. */ #if !defined (memcpy) && !defined (bcopy) -#define bcopy(src,dest,size) memcpy(dest,src,size) +#define bcopy(src,dest,size) memcpy (dest, src, size) #endif /* Make Saber happier on obstack.h. */ #ifdef SABER #undef __PTR_TO_INT -#define __PTR_TO_INT(P) ((int)(P)) +#define __PTR_TO_INT(P) ((int) (P)) #undef __INT_TO_PTR -#define __INT_TO_PTR(P) ((char *)(P)) +#define __INT_TO_PTR(P) ((char *) (P)) #endif #ifndef __LINE__ @@ -210,6 +200,10 @@ extern char **environ; #define EXIT_FAILURE 1 #endif +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free xfree @@ -217,11 +211,11 @@ extern char **environ; #include "asintl.h" -#define BAD_CASE(val) \ -{ \ - as_fatal(_("Case value %ld unexpected at line %d of file \"%s\"\n"), \ - (long) val, __LINE__, __FILE__); \ - } +#define BAD_CASE(val) \ + { \ + as_fatal (_("Case value %ld unexpected at line %d of file \"%s\"\n"), \ + (long) val, __LINE__, __FILE__); \ + } #include "flonum.h" @@ -241,7 +235,7 @@ typedef addressT valueT; #ifndef COMMON #ifdef TEST -#define COMMON /* declare our COMMONs storage here. */ +#define COMMON /* declare our COMMONs storage here. */ #else #define COMMON extern /* our commons live elswhere */ #endif @@ -258,12 +252,9 @@ typedef addressT valueT; /* input_scrub.c */ -/* - * Supplies sanitised buffers to read.c. - * Also understands printing line-number part of error messages. - */ +/* Supplies sanitised buffers to read.c. + Also understands printing line-number part of error messages. */ - /* subsegs.c Sub-segments. Also, segment(=expression type)s.*/ #ifndef BFD_ASSEMBLER @@ -286,20 +277,19 @@ typedef addressT valueT; #define SEG_LIST SEG_TEXT,SEG_DATA,SEG_BSS #endif -typedef enum _segT - { - SEG_ABSOLUTE = 0, - SEG_LIST, - SEG_UNKNOWN, - SEG_GOOF, /* Only happens if AS has a logic error. */ - /* Invented so we don't crash printing */ - /* error message involving weird segment. */ - SEG_EXPR, /* Intermediate expression values. */ - SEG_DEBUG, /* Debug segment */ - SEG_NTV, /* Transfert vector preload segment */ - SEG_PTV, /* Transfert vector postload segment */ - SEG_REGISTER /* Mythical: a register-valued expression */ - } segT; +typedef enum _segT { + SEG_ABSOLUTE = 0, + SEG_LIST, + SEG_UNKNOWN, + SEG_GOOF, /* Only happens if AS has a logic error. */ + /* Invented so we don't crash printing */ + /* error message involving weird segment. */ + SEG_EXPR, /* Intermediate expression values. */ + SEG_DEBUG, /* Debug segment */ + SEG_NTV, /* Transfert vector preload segment */ + SEG_PTV, /* Transfert vector postload segment */ + SEG_REGISTER /* Mythical: a register-valued expression */ +} segT; #define SEG_MAXIMUM_ORDINAL (SEG_REGISTER) #else @@ -314,7 +304,7 @@ typedef int subsegT; /* What subseg we are accreting now? */ COMMON subsegT now_subseg; -/* Segment our instructions emit to. */ +/* Segment our instructions emit to. */ COMMON segT now_seg; #ifdef BFD_ASSEMBLER @@ -346,51 +336,57 @@ extern segT text_section, data_section, bss_section; /* relax() */ -enum _relax_state - { - /* Variable chars to be repeated fr_offset times. - Fr_symbol unused. Used with fr_offset == 0 for a - constant length frag. */ - rs_fill = 1, - - /* Align. The fr_offset field holds the power of 2 to which to - align. The fr_var field holds the number of characters in the - fill pattern. The fr_subtype field holds the maximum number of - bytes to skip when aligning, or 0 if there is no maximum. */ - rs_align, - - /* Align code. The fr_offset field holds the power of 2 to which - to align. This type is only generated by machine specific - code, which is normally responsible for handling the fill - pattern. The fr_subtype field holds the maximum number of - bytes to skip when aligning, or 0 if there is no maximum. */ - rs_align_code, - - /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill - character. */ - rs_org, +enum _relax_state { + /* Variable chars to be repeated fr_offset times. + Fr_symbol unused. Used with fr_offset == 0 for a + constant length frag. */ + rs_fill = 1, + + /* Align. The fr_offset field holds the power of 2 to which to + align. The fr_var field holds the number of characters in the + fill pattern. The fr_subtype field holds the maximum number of + bytes to skip when aligning, or 0 if there is no maximum. */ + rs_align, + + /* Align code. The fr_offset field holds the power of 2 to which + to align. This type is only generated by machine specific + code, which is normally responsible for handling the fill + pattern. The fr_subtype field holds the maximum number of + bytes to skip when aligning, or 0 if there is no maximum. */ + rs_align_code, + + /* Test for alignment. Like rs_align, but used by several targets + to warn if data is not properly aligned. */ + rs_align_test, + + /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill + character. */ + rs_org, #ifndef WORKING_DOT_WORD - /* JF: gunpoint */ - rs_broken_word, + /* JF: gunpoint */ + rs_broken_word, #endif - /* machine-specific relaxable (or similarly alterable) instruction */ - rs_machine_dependent, + /* machine-specific relaxable (or similarly alterable) instruction */ + rs_machine_dependent, + + /* .space directive with expression operand that needs to be computed + later. Similar to rs_org, but different. + fr_symbol: operand + 1 variable char: fill character */ + rs_space, - /* .space directive with expression operand that needs to be computed - later. Similar to rs_org, but different. - fr_symbol: operand - 1 variable char: fill character */ - rs_space, + /* A DWARF leb128 value; only ELF uses this. The subtype is 0 for + unsigned, 1 for signed. */ + rs_leb128, - /* A DWARF leb128 value; only ELF uses this. The subtype is 0 for - unsigned, 1 for signed. */ - rs_leb128, + /* Exception frame information which we may be able to optimize. */ + rs_cfa, - /* Exception frame information which we may be able to optimize. */ - rs_cfa - }; + /* Cross-fragment dwarf2 line number optimization. */ + rs_dwarf2dbg +}; typedef enum _relax_state relax_stateT; @@ -417,9 +413,6 @@ COMMON int flag_keep_locals; /* -L */ /* True if we are assembling in MRI mode. */ COMMON int flag_mri; -/* True if we are assembling in m68k MRI mode. */ -COMMON int flag_m68k_mri; - /* Should the data section be made read-only and appended to the text section? */ COMMON unsigned char flag_readonly_data_in_text; /* -R */ @@ -427,11 +420,14 @@ COMMON unsigned char flag_readonly_data_in_text; /* -R */ /* True if warnings should be inhibited. */ COMMON int flag_no_warnings; /* -W */ +/* True if warnings count as errors. */ +COMMON int flag_fatal_warnings; /* --fatal-warnings */ + /* True if we should attempt to generate output even if non-fatal errors are detected. */ COMMON unsigned char flag_always_generate_output; /* -Z */ -/* This is true if the assembler should output time and space usage. */ +/* This is true if the assembler should output time and space usage. */ COMMON unsigned char flag_print_statistics; /* True if local absolute symbols are to be stripped. */ @@ -446,7 +442,7 @@ COMMON char *out_file_name; /* name of file defining extensions to the basic instruction set */ COMMON char *insttbl_file_name; -/* TRUE if we need a second pass. */ +/* TRUE if we need a second pass. */ COMMON int need_pass_2; /* TRUE if we should do no relaxing, and @@ -456,18 +452,22 @@ COMMON int linkrelax; /* TRUE if we should produce a listing. */ extern int listing; -/* Type of debugging information we should generate. We currently - only support stabs and ECOFF. */ +/* Type of debugging information we should generate. We currently support + stabs, ECOFF, and DWARF2. + + NOTE! This means debug information about the assembly source code itself + and _not_ about possible debug information from a high-level language. + This is especially relevant to DWARF2, since the compiler may emit line + number directives that the assembler resolves. */ -enum debug_info_type - { - DEBUG_UNSPECIFIED, - DEBUG_NONE, - DEBUG_STABS, - DEBUG_ECOFF, - DEBUG_DWARF, - DEBUG_DWARF2 - }; +enum debug_info_type { + DEBUG_UNSPECIFIED, + DEBUG_NONE, + DEBUG_STABS, + DEBUG_ECOFF, + DEBUG_DWARF, + DEBUG_DWARF2 +}; extern enum debug_info_type debug_type; @@ -478,15 +478,14 @@ extern int max_macro_nest; increase malloc calls for monitoring memory allocation. */ extern int chunksize; -struct _pseudo_type - { - /* assembler mnemonic, lower case, no '.' */ - const char *poc_name; - /* Do the work */ - void (*poc_handler) PARAMS ((int)); - /* Value to pass to handler */ - int poc_val; - }; +struct _pseudo_type { + /* assembler mnemonic, lower case, no '.' */ + const char *poc_name; + /* Do the work */ + void (*poc_handler) PARAMS ((int)); + /* Value to pass to handler */ + int poc_val; +}; typedef struct _pseudo_type pseudo_typeS; @@ -507,7 +506,7 @@ typedef struct _pseudo_type pseudo_typeS; #if (__GNUC__ >= 2) && !defined(VMS) /* for use with -Wformat */ -#if __GNUC_MINOR__ < 6 +#if __GNUC__ == 2 && __GNUC_MINOR__ < 6 /* Support for double underscores in attribute names was added in gcc 2.6, so avoid them if we are using an earlier version. */ #define __printf__ printf @@ -538,14 +537,14 @@ typedef struct _pseudo_type pseudo_typeS; #endif /* ! USE_STDARG */ PRINTF_LIKE (as_bad); -PRINTF_LIKE (as_fatal); +PRINTF_LIKE (as_fatal) ATTRIBUTE_NORETURN; PRINTF_LIKE (as_tsktsk); PRINTF_LIKE (as_warn); PRINTF_WHERE_LIKE (as_bad_where); PRINTF_WHERE_LIKE (as_warn_where); void as_assert PARAMS ((const char *, int, const char *)); -void as_abort PARAMS ((const char *, int, const char *)); +void as_abort PARAMS ((const char *, int, const char *)) ATTRIBUTE_NORETURN; void fprint_value PARAMS ((FILE *file, addressT value)); void sprint_value PARAMS ((char *buf, addressT value)); @@ -557,9 +556,11 @@ void print_version_id PARAMS ((void)); char *app_push PARAMS ((void)); char *atof_ieee PARAMS ((char *str, int what_kind, LITTLENUM_TYPE * words)); char *input_scrub_include_file PARAMS ((char *filename, char *position)); +extern void input_scrub_insert_line PARAMS((const char *line)); +extern void input_scrub_insert_file PARAMS((char *path)); char *input_scrub_new_file PARAMS ((char *filename)); char *input_scrub_next_buffer PARAMS ((char **bufp)); -int do_scrub_chars PARAMS ((int (*get) (char **), char *to, int tolen)); +int do_scrub_chars PARAMS ((int (*get) (char *, int), char *to, int tolen)); int gen_to_words PARAMS ((LITTLENUM_TYPE * words, int precision, long exponent_bits)); int had_err PARAMS ((void)); @@ -585,6 +586,7 @@ void subseg_set PARAMS ((segT seg, subsegT subseg)); #ifdef BFD_ASSEMBLER segT subseg_get PARAMS ((const char *, int)); #endif +int subseg_text_p PARAMS ((segT)); void start_dependencies PARAMS ((char *)); void register_dependency PARAMS ((char *)); @@ -592,13 +594,13 @@ void print_dependencies PARAMS ((void)); struct expressionS; struct fix; -struct symbol; +typedef struct symbol symbolS; struct relax_type; typedef struct frag fragS; #ifdef BFD_ASSEMBLER /* literal.c */ -valueT add_to_literal_pool PARAMS ((struct symbol *, valueT, segT, int)); +valueT add_to_literal_pool PARAMS ((symbolS *, valueT, segT, int)); #endif int check_eh_frame PARAMS ((struct expressionS *, unsigned int *)); @@ -611,7 +613,10 @@ void eh_frame_convert_frag PARAMS ((fragS *)); /* this one starts the chain of target dependant headers */ #include "targ-env.h" +#ifdef TC_ARC #include "struc-symbol.h" +#endif + #include "write.h" #include "frags.h" #include "hash.h" @@ -626,6 +631,23 @@ void eh_frame_convert_frag PARAMS ((fragS *)); #endif #include "listing.h" +#ifdef TC_M68K +/* True if we are assembling in m68k MRI mode. */ +COMMON int flag_m68k_mri; +#else +#define flag_m68k_mri 0 +#endif + +#ifdef WARN_COMMENTS +COMMON int warn_comment; +COMMON unsigned int found_comment; +COMMON char *found_comment_file; +#endif + +#ifndef NUMBERS_WITH_SUFFIX +#define NUMBERS_WITH_SUFFIX 0 +#endif + #ifndef LOCAL_LABELS_DOLLAR #define LOCAL_LABELS_DOLLAR 0 #endif @@ -634,12 +656,28 @@ void eh_frame_convert_frag PARAMS ((fragS *)); #define LOCAL_LABELS_FB 0 #endif +#ifndef LABELS_WITHOUT_COLONS +#define LABELS_WITHOUT_COLONS 0 +#endif + +#ifndef NO_PSEUDO_DOT +#define NO_PSEUDO_DOT 0 +#endif + #ifndef TEXT_SECTION_NAME #define TEXT_SECTION_NAME ".text" #define DATA_SECTION_NAME ".data" #define BSS_SECTION_NAME ".bss" #endif -#endif /* GAS */ +#ifndef OCTETS_PER_BYTE_POWER +#define OCTETS_PER_BYTE_POWER 0 +#endif +#ifndef OCTETS_PER_BYTE +#define OCTETS_PER_BYTE (1<