Back to index

cell-binutils  2.17cvs20070401
as.h
Go to the documentation of this file.
00001 /* as.h - global header file
00002    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
00003    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
00004    Free Software Foundation, Inc.
00005 
00006    This file is part of GAS, the GNU Assembler.
00007 
00008    GAS is free software; you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation; either version 2, or (at your option)
00011    any later version.
00012 
00013    GAS is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017 
00018    You should have received a copy of the GNU General Public License
00019    along with GAS; see the file COPYING.  If not, write to the Free
00020    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
00021    02110-1301, USA.  */
00022 
00023 #ifndef GAS
00024 #define GAS 1
00025 /* I think this stuff is largely out of date.  xoxorich.
00026  
00027    CAPITALISED names are #defined.
00028    "lowercaseH" is #defined if "lowercase.h" has been #include-d.
00029    "lowercaseT" is a typedef of "lowercase" objects.
00030    "lowercaseP" is type "pointer to object of type 'lowercase'".
00031    "lowercaseS" is typedef struct ... lowercaseS.
00032   
00033    #define DEBUG to enable all the "know" assertion tests.
00034    #define SUSPECT when debugging hash code.
00035    #define COMMON as "extern" for all modules except one, where you #define
00036        COMMON as "".
00037    If TEST is #defined, then we are testing a module: #define COMMON as "".  */
00038 
00039 #include "config.h"
00040 
00041 /* This is the code recommended in the autoconf documentation, almost
00042    verbatim.  If it doesn't work for you, let me know, and notify
00043    djm@gnu.ai.mit.edu as well.  */
00044 /* Added void* version for STDC case.  This is to be compatible with
00045    the declaration in bison.simple, used for m68k operand parsing.
00046    --KR 1995.08.08 */
00047 /* Force void* decl for hpux.  This is what Bison uses.  --KR 1995.08.16 */
00048 
00049 #ifndef __GNUC__
00050 # if HAVE_ALLOCA_H
00051 #  include <alloca.h>
00052 # else
00053 #  ifdef _AIX
00054 /* Indented so that pre-ansi C compilers will ignore it, rather than
00055    choke on it.  Some versions of AIX require this to be the first
00056    thing in the file.  */
00057  #pragma alloca
00058 #  else
00059 #   ifndef alloca /* predefined by HP cc +Olibcalls */
00060 #    if !defined (__STDC__) && !defined (__hpux)
00061 extern char *alloca ();
00062 #    else
00063 extern void *alloca ();
00064 #    endif /* __STDC__, __hpux */
00065 #   endif /* alloca */
00066 #  endif /* _AIX */
00067 # endif /* HAVE_ALLOCA_H */
00068 #endif /* __GNUC__ */
00069 
00070 /* Prefer varargs for non-ANSI compiler, since some will barf if the
00071    ellipsis definition is used with a no-arguments declaration.  */
00072 #if defined (HAVE_VARARGS_H) && !defined (__STDC__)
00073 #undef HAVE_STDARG_H
00074 #endif
00075 
00076 #if defined (HAVE_STDARG_H)
00077 #define USE_STDARG
00078 #endif
00079 #if !defined (USE_STDARG) && defined (HAVE_VARARGS_H)
00080 #define USE_VARARGS
00081 #endif
00082 
00083 /* Now, tend to the rest of the configuration.  */
00084 
00085 /* System include files first...  */
00086 #include <stdio.h>
00087 #ifdef HAVE_STRING_H
00088 #include <string.h>
00089 #else
00090 #ifdef HAVE_STRINGS_H
00091 #include <strings.h>
00092 #endif
00093 #endif
00094 #ifdef HAVE_STDLIB_H
00095 #include <stdlib.h>
00096 #endif
00097 #ifdef HAVE_UNISTD_H
00098 #include <unistd.h>
00099 #endif
00100 #ifdef HAVE_SYS_TYPES_H
00101 /* for size_t, pid_t */
00102 #include <sys/types.h>
00103 #endif
00104 
00105 #ifdef HAVE_ERRNO_H
00106 #include <errno.h>
00107 #endif
00108 
00109 #ifdef USE_STDARG
00110 #include <stdarg.h>
00111 #endif
00112 
00113 #ifdef USE_VARARGS
00114 #include <varargs.h>
00115 #endif
00116 
00117 #if !defined (USE_STDARG) && !defined (USE_VARARGS)
00118 /* Roll our own.  */
00119 #define va_alist REST
00120 #define va_dcl
00121 typedef int * va_list;
00122 #define va_start(ARGS)      ARGS = &REST
00123 #define va_end(ARGS)
00124 #endif
00125 
00126 #include "getopt.h"
00127 /* The first getopt value for machine-independent long options.
00128    150 isn't special; it's just an arbitrary non-ASCII char value.  */
00129 #define OPTION_STD_BASE 150
00130 /* The first getopt value for machine-dependent long options.
00131    190 gives the standard options room to grow.  */
00132 #define OPTION_MD_BASE 190
00133 
00134 #ifdef DEBUG
00135 #undef NDEBUG
00136 #endif
00137 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
00138 #define __PRETTY_FUNCTION__  ((char*)0)
00139 #endif
00140 #define assert(P) \
00141   ((void) ((P) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0)))
00142 #undef abort
00143 #define abort()             as_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
00144 
00145 /* Now GNU header files...  */
00146 #include "ansidecl.h"
00147 #include "bfd.h"
00148 #include "libiberty.h"
00149 
00150 /* Define the standard progress macros.  */
00151 #include "progress.h"
00152 
00153 /* This doesn't get taken care of anywhere.  */
00154 #ifndef __MWERKS__  /* Metrowerks C chokes on the "defined (inline)"  */
00155 #if !defined (__GNUC__) && !defined (inline)
00156 #define inline
00157 #endif
00158 #endif /* !__MWERKS__ */
00159 
00160 /* Other stuff from config.h.  */
00161 #ifdef NEED_DECLARATION_ENVIRON
00162 extern char **environ;
00163 #endif
00164 #ifdef NEED_DECLARATION_ERRNO
00165 extern int errno;
00166 #endif
00167 #ifdef NEED_DECLARATION_FFS
00168 extern int ffs (int);
00169 #endif
00170 #ifdef NEED_DECLARATION_FREE
00171 extern void free ();
00172 #endif
00173 #ifdef NEED_DECLARATION_MALLOC
00174 extern PTR malloc ();
00175 extern PTR realloc ();
00176 #endif
00177 #ifdef NEED_DECLARATION_STRSTR
00178 extern char *strstr ();
00179 #endif
00180 
00181 #if !HAVE_DECL_VSNPRINTF
00182 extern int vsnprintf(char *, size_t, const char *, va_list);
00183 #endif
00184 
00185 /* This is needed for VMS.  */
00186 #if ! defined (HAVE_UNLINK) && defined (HAVE_REMOVE)
00187 #define unlink remove
00188 #endif
00189 
00190 /* Hack to make "gcc -Wall" not complain about obstack macros.  */
00191 #if !defined (memcpy) && !defined (bcopy)
00192 #define bcopy(src,dest,size)       memcpy (dest, src, size)
00193 #endif
00194 
00195 /* Make Saber happier on obstack.h.  */
00196 #ifdef SABER
00197 #undef  __PTR_TO_INT
00198 #define __PTR_TO_INT(P) ((int) (P))
00199 #undef  __INT_TO_PTR
00200 #define __INT_TO_PTR(P) ((char *) (P))
00201 #endif
00202 
00203 #ifndef __LINE__
00204 #define __LINE__ "unknown"
00205 #endif /* __LINE__ */
00206 
00207 #ifndef __FILE__
00208 #define __FILE__ "unknown"
00209 #endif /* __FILE__ */
00210 
00211 #ifndef FOPEN_WB
00212 #ifdef USE_BINARY_FOPEN
00213 #include "fopen-bin.h"
00214 #else
00215 #include "fopen-same.h"
00216 #endif
00217 #endif
00218 
00219 #ifndef EXIT_SUCCESS
00220 #define EXIT_SUCCESS 0
00221 #define EXIT_FAILURE 1
00222 #endif
00223 
00224 #ifndef SEEK_SET
00225 #define SEEK_SET 0
00226 #endif
00227 
00228 #define obstack_chunk_alloc xmalloc
00229 #define obstack_chunk_free xfree
00230 
00231 #define xfree free
00232 
00233 #include "asintl.h"
00234 
00235 #define BAD_CASE(val)                                                     \
00236   {                                                                \
00237     as_fatal (_("Case value %ld unexpected at line %d of file \"%s\"\n"),   \
00238              (long) val, __LINE__, __FILE__);                             \
00239   }
00240 
00241 #include "flonum.h"
00242 
00243 /* These are assembler-wide concepts */
00244 
00245 extern bfd *stdoutput;
00246 typedef bfd_vma addressT;
00247 typedef bfd_signed_vma offsetT;
00248 
00249 /* Type of symbol value, etc.  For use in prototypes.  */
00250 typedef addressT valueT;
00251 
00252 #ifndef COMMON
00253 #ifdef TEST
00254 #define COMMON                     /* Declare our COMMONs storage here.  */
00255 #else
00256 #define COMMON extern              /* Our commons live elsewhere.  */
00257 #endif
00258 #endif
00259 /* COMMON now defined */
00260 
00261 #ifdef DEBUG
00262 #ifndef know
00263 #define know(p) assert(p)   /* Verify our assumptions!  */
00264 #endif /* not yet defined */
00265 #else
00266 #define know(p)                    /* know() checks are no-op.ed  */
00267 #endif
00268 
00269 /* input_scrub.c */
00270 
00271 /* Supplies sanitised buffers to read.c.
00272    Also understands printing line-number part of error messages.  */
00273 
00274 /* subsegs.c     Sub-segments. Also, segment(=expression type)s.*/
00275 
00276 typedef asection *segT;
00277 #define SEG_NORMAL(SEG)            (   (SEG) != absolute_section      \
00278                              && (SEG) != undefined_section     \
00279                              && (SEG) != reg_section    \
00280                              && (SEG) != expr_section)
00281 typedef int subsegT;
00282 
00283 /* What subseg we are accessing now?  */
00284 COMMON subsegT now_subseg;
00285 
00286 /* Segment our instructions emit to.  */
00287 COMMON segT now_seg;
00288 
00289 #define segment_name(SEG)   bfd_get_section_name (stdoutput, SEG)
00290 
00291 extern segT reg_section, expr_section;
00292 /* Shouldn't these be eliminated someday?  */
00293 extern segT text_section, data_section, bss_section;
00294 #define absolute_section    bfd_abs_section_ptr
00295 #define undefined_section   bfd_und_section_ptr
00296 
00297 enum _relax_state
00298 {
00299   /* Dummy frag used by listing code.  */
00300   rs_dummy = 0,
00301 
00302   /* Variable chars to be repeated fr_offset times.
00303      Fr_symbol unused. Used with fr_offset == 0 for a
00304      constant length frag.  */
00305   rs_fill,
00306 
00307   /* Align.  The fr_offset field holds the power of 2 to which to
00308      align.  The fr_var field holds the number of characters in the
00309      fill pattern.  The fr_subtype field holds the maximum number of
00310      bytes to skip when aligning, or 0 if there is no maximum.  */
00311   rs_align,
00312 
00313   /* Align code.  The fr_offset field holds the power of 2 to which
00314      to align.  This type is only generated by machine specific
00315      code, which is normally responsible for handling the fill
00316      pattern.  The fr_subtype field holds the maximum number of
00317      bytes to skip when aligning, or 0 if there is no maximum.  */
00318   rs_align_code,
00319 
00320   /* Test for alignment.  Like rs_align, but used by several targets
00321      to warn if data is not properly aligned.  */
00322   rs_align_test,
00323 
00324   /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
00325      character.  */
00326   rs_org,
00327 
00328 #ifndef WORKING_DOT_WORD
00329   /* JF: gunpoint */
00330   rs_broken_word,
00331 #endif
00332 
00333   /* Machine specific relaxable (or similarly alterable) instruction.  */
00334   rs_machine_dependent,
00335 
00336   /* .space directive with expression operand that needs to be computed
00337      later.  Similar to rs_org, but different.
00338      fr_symbol: operand
00339      1 variable char: fill character  */
00340   rs_space,
00341 
00342   /* A DWARF leb128 value; only ELF uses this.  The subtype is 0 for
00343      unsigned, 1 for signed.  */
00344   rs_leb128,
00345 
00346   /* Exception frame information which we may be able to optimize.  */
00347   rs_cfa,
00348 
00349   /* Cross-fragment dwarf2 line number optimization.  */
00350   rs_dwarf2dbg
00351 };
00352 
00353 typedef enum _relax_state relax_stateT;
00354 
00355 /* This type is used in prototypes, so it can't be a type that will be
00356    widened for argument passing.  */
00357 typedef unsigned int relax_substateT;
00358 
00359 /* Enough bits for address, but still an integer type.
00360    Could be a problem, cross-assembling for 64-bit machines.  */
00361 typedef addressT relax_addressT;
00362 
00363 struct relax_type
00364 {
00365   /* Forward reach. Signed number. > 0.  */
00366   offsetT rlx_forward;
00367   /* Backward reach. Signed number. < 0.  */
00368   offsetT rlx_backward;
00369 
00370   /* Bytes length of this address.  */
00371   unsigned char rlx_length;
00372 
00373   /* Next longer relax-state.  0 means there is no 'next' relax-state.  */
00374   relax_substateT rlx_more;
00375 };
00376 
00377 typedef struct relax_type relax_typeS;
00378 
00379 /* main program "as.c" (command arguments etc).  */
00380 
00381 COMMON unsigned char flag_no_comments; /* -f */
00382 COMMON unsigned char flag_debug; /* -D */
00383 COMMON unsigned char flag_signed_overflow_ok; /* -J */
00384 #ifndef WORKING_DOT_WORD
00385 COMMON unsigned char flag_warn_displacement; /* -K */
00386 #endif
00387 
00388 /* True if local symbols should be retained.  */
00389 COMMON int flag_keep_locals; /* -L */
00390 
00391 /* True if we are assembling in MRI mode.  */
00392 COMMON int flag_mri;
00393 
00394 /* Should the data section be made read-only and appended to the text
00395    section?  */
00396 COMMON unsigned char flag_readonly_data_in_text; /* -R */
00397 
00398 /* True if warnings should be inhibited.  */
00399 COMMON int flag_no_warnings; /* -W */
00400 
00401 /* True if warnings count as errors.  */
00402 COMMON int flag_fatal_warnings; /* --fatal-warnings */
00403 
00404 /* True if we should attempt to generate output even if non-fatal errors
00405    are detected.  */
00406 COMMON unsigned char flag_always_generate_output; /* -Z */
00407 
00408 /* This is true if the assembler should output time and space usage.  */
00409 COMMON unsigned char flag_print_statistics;
00410 
00411 /* True if local absolute symbols are to be stripped.  */
00412 COMMON int flag_strip_local_absolute;
00413 
00414 /* True if we should generate a traditional format object file.  */
00415 COMMON int flag_traditional_format;
00416 
00417 /* TRUE if .note.GNU-stack section with SEC_CODE should be created */
00418 COMMON int flag_execstack;
00419 
00420 /* TRUE if .note.GNU-stack section with SEC_CODE should be created */
00421 COMMON int flag_noexecstack;
00422 
00423 /* name of emitted object file */
00424 COMMON char *out_file_name;
00425 
00426 /* name of file defining extensions to the basic instruction set */
00427 COMMON char *insttbl_file_name;
00428 
00429 /* TRUE if we need a second pass.  */
00430 COMMON int need_pass_2;
00431 
00432 /* TRUE if we should do no relaxing, and
00433    leave lots of padding.  */
00434 COMMON int linkrelax;
00435 
00436 /* TRUE if we should produce a listing.  */
00437 extern int listing;
00438 
00439 /* Type of debugging information we should generate.  We currently support
00440    stabs, ECOFF, and DWARF2.
00441 
00442    NOTE!  This means debug information about the assembly source code itself
00443    and _not_ about possible debug information from a high-level language.
00444    This is especially relevant to DWARF2, since the compiler may emit line
00445    number directives that the assembler resolves.  */
00446 
00447 enum debug_info_type
00448 {
00449   DEBUG_UNSPECIFIED,
00450   DEBUG_NONE,
00451   DEBUG_STABS,
00452   DEBUG_ECOFF,
00453   DEBUG_DWARF,
00454   DEBUG_DWARF2
00455 };
00456 
00457 extern enum debug_info_type debug_type;
00458 extern int use_gnu_debug_info_extensions;
00459 
00460 /* Maximum level of macro nesting.  */
00461 extern int max_macro_nest;
00462 
00463 /* Verbosity level.  */
00464 extern int verbose;
00465 
00466 /* Obstack chunk size.  Keep large for efficient space use, make small to
00467    increase malloc calls for monitoring memory allocation.  */
00468 extern int chunksize;
00469 
00470 struct _pseudo_type
00471 {
00472   /* assembler mnemonic, lower case, no '.' */
00473   const char *poc_name;
00474   /* Do the work */
00475   void (*poc_handler) (int);
00476   /* Value to pass to handler */
00477   int poc_val;
00478 };
00479 
00480 typedef struct _pseudo_type pseudo_typeS;
00481 
00482 #ifdef USE_STDARG
00483 #if (__GNUC__ >= 2) && !defined(VMS)
00484 /* for use with -Wformat */
00485 
00486 #if __GNUC__ == 2 && __GNUC_MINOR__ < 6
00487 /* Support for double underscores in attribute names was added in gcc
00488    2.6, so avoid them if we are using an earlier version.  */
00489 #define __printf__ printf
00490 #define __format__ format
00491 #endif
00492 
00493 #define PRINTF_LIKE(FCN) \
00494   void FCN (const char *format, ...) \
00495     __attribute__ ((__format__ (__printf__, 1, 2)))
00496 #define PRINTF_WHERE_LIKE(FCN) \
00497   void FCN (char *file, unsigned int line, const char *format, ...) \
00498     __attribute__ ((__format__ (__printf__, 3, 4)))
00499 
00500 #else /* __GNUC__ < 2 || defined(VMS) */
00501 
00502 #define PRINTF_LIKE(FCN)    void FCN (const char *format, ...)
00503 #define PRINTF_WHERE_LIKE(FCN)     void FCN (char *file, \
00504                                      unsigned int line, \
00505                                      const char *format, ...)
00506 
00507 #endif /* __GNUC__ < 2 || defined(VMS) */
00508 
00509 #else /* ! USE_STDARG */
00510 
00511 #define PRINTF_LIKE(FCN)    void FCN ()
00512 #define PRINTF_WHERE_LIKE(FCN)     void FCN ()
00513 
00514 #endif /* ! USE_STDARG */
00515 
00516 PRINTF_LIKE (as_bad);
00517 PRINTF_LIKE (as_fatal) ATTRIBUTE_NORETURN;
00518 PRINTF_LIKE (as_tsktsk);
00519 PRINTF_LIKE (as_warn);
00520 PRINTF_WHERE_LIKE (as_bad_where);
00521 PRINTF_WHERE_LIKE (as_warn_where);
00522 
00523 void   as_assert (const char *, int, const char *);
00524 void   as_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
00525 void   sprint_value (char *, addressT);
00526 int    had_errors (void);
00527 int    had_warnings (void);
00528 void   as_warn_value_out_of_range (char *, offsetT, offsetT, offsetT, char *, unsigned);
00529 void   as_bad_value_out_of_range (char *, offsetT, offsetT, offsetT, char *, unsigned);
00530 void   print_version_id (void);
00531 char * app_push (void);
00532 char * atof_ieee (char *, int, LITTLENUM_TYPE *);
00533 char * input_scrub_include_file (char *, char *);
00534 void   input_scrub_insert_line (const char *);
00535 void   input_scrub_insert_file (char *);
00536 char * input_scrub_new_file (char *);
00537 char * input_scrub_next_buffer (char **bufp);
00538 int    do_scrub_chars (int (*get) (char *, int), char *, int);
00539 int    gen_to_words (LITTLENUM_TYPE *, int, long);
00540 int    had_err (void);
00541 int    ignore_input (void);
00542 void   cond_finish_check (int);
00543 void   cond_exit_macro (int);
00544 int    seen_at_least_1_file (void);
00545 void   app_pop (char *);
00546 void   as_where (char **, unsigned int *);
00547 void   bump_line_counters (void);
00548 void   do_scrub_begin (int);
00549 void   input_scrub_begin (void);
00550 void   input_scrub_close (void);
00551 void   input_scrub_end (void);
00552 int    new_logical_line (char *, int);
00553 int    new_logical_line_flags (char *, int, int);
00554 void   subsegs_begin (void);
00555 void   subseg_change (segT, int);
00556 segT   subseg_new (const char *, subsegT);
00557 segT   subseg_force_new (const char *, subsegT);
00558 void   subseg_set (segT, subsegT);
00559 int    subseg_text_p (segT);
00560 int    seg_not_empty_p (segT);
00561 void   start_dependencies (char *);
00562 void   register_dependency (char *);
00563 void   print_dependencies (void);
00564 segT   subseg_get (const char *, int);
00565 
00566 struct expressionS;
00567 struct fix;
00568 typedef struct symbol symbolS;
00569 struct relax_type;
00570 typedef struct frag fragS;
00571 
00572 /* literal.c */
00573 valueT add_to_literal_pool (symbolS *, valueT, segT, int);
00574 
00575 int check_eh_frame (struct expressionS *, unsigned int *);
00576 int eh_frame_estimate_size_before_relax (fragS *);
00577 int eh_frame_relax_frag (fragS *);
00578 void eh_frame_convert_frag (fragS *);
00579 int generic_force_reloc (struct fix *);
00580 
00581 #include "expr.h"           /* Before targ-*.h */
00582 
00583 /* This one starts the chain of target dependant headers.  */
00584 #include "targ-env.h"
00585 
00586 #ifdef OBJ_MAYBE_ELF
00587 #define IS_ELF (OUTPUT_FLAVOR == bfd_target_elf_flavour)
00588 #else
00589 #ifdef OBJ_ELF
00590 #define IS_ELF 1
00591 #else
00592 #define IS_ELF 0
00593 #endif
00594 #endif
00595 
00596 #include "write.h"
00597 #include "frags.h"
00598 #include "hash.h"
00599 #include "read.h"
00600 #include "symbols.h"
00601 
00602 #include "tc.h"
00603 #include "obj.h"
00604 
00605 #ifdef USE_EMULATIONS
00606 #include "emul.h"
00607 #endif
00608 #include "listing.h"
00609 
00610 #ifdef TC_M68K
00611 /* True if we are assembling in m68k MRI mode.  */
00612 COMMON int flag_m68k_mri;
00613 #define DOLLAR_AMBIGU flag_m68k_mri
00614 #else
00615 #define flag_m68k_mri 0
00616 #endif
00617 
00618 #ifdef WARN_COMMENTS
00619 COMMON int           warn_comment;
00620 COMMON unsigned int  found_comment;
00621 COMMON char *        found_comment_file;
00622 #endif
00623 
00624 #ifndef DOLLAR_AMBIGU
00625 #define DOLLAR_AMBIGU 0
00626 #endif
00627 
00628 #ifndef NUMBERS_WITH_SUFFIX
00629 #define NUMBERS_WITH_SUFFIX 0
00630 #endif
00631 
00632 #ifndef LOCAL_LABELS_DOLLAR
00633 #define LOCAL_LABELS_DOLLAR 0
00634 #endif
00635 
00636 #ifndef LOCAL_LABELS_FB
00637 #define LOCAL_LABELS_FB 0
00638 #endif
00639 
00640 #ifndef LABELS_WITHOUT_COLONS
00641 #define LABELS_WITHOUT_COLONS 0
00642 #endif
00643 
00644 #ifndef NO_PSEUDO_DOT
00645 #define NO_PSEUDO_DOT 0
00646 #endif
00647 
00648 #ifndef TEXT_SECTION_NAME
00649 #define TEXT_SECTION_NAME   ".text"
00650 #define DATA_SECTION_NAME   ".data"
00651 #define BSS_SECTION_NAME    ".bss"
00652 #endif
00653 
00654 #ifndef OCTETS_PER_BYTE_POWER
00655 #define OCTETS_PER_BYTE_POWER 0
00656 #endif
00657 #ifndef OCTETS_PER_BYTE
00658 #define OCTETS_PER_BYTE (1<<OCTETS_PER_BYTE_POWER)
00659 #endif
00660 #if OCTETS_PER_BYTE != (1<<OCTETS_PER_BYTE_POWER)
00661  #error "Octets per byte conflicts with its power-of-two definition!"
00662 #endif
00663 
00664 #endif /* GAS */