source: trunk/src/binutils/gas/as.h@ 1569

Last change on this file since 1569 was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 18.8 KB
Line 
1/* as.h - global header file
2 Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003
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
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
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
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
22
23#ifndef GAS
24#define GAS 1
25/* I think this stuff is largely out of date. xoxorich.
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 "".
38 */
39
40#include "config.h"
41#include "bin-bugs.h"
42
43/* This is the code recommended in the autoconf documentation, almost
44 verbatim. If it doesn't work for you, let me know, and notify
45 djm@gnu.ai.mit.edu as well. */
46/* Added void* version for STDC case. This is to be compatible with
47 the declaration in bison.simple, used for m68k operand parsing.
48 --KR 1995.08.08 */
49/* Force void* decl for hpux. This is what Bison uses. --KR 1995.08.16 */
50
51#ifndef __GNUC__
52# if HAVE_ALLOCA_H
53# include <alloca.h>
54# else
55# ifdef _AIX
56/* Indented so that pre-ansi C compilers will ignore it, rather than
57 choke on it. Some versions of AIX require this to be the first
58 thing in the file. */
59 #pragma alloca
60# else
61# ifndef alloca /* predefined by HP cc +Olibcalls */
62# if !defined (__STDC__) && !defined (__hpux)
63extern char *alloca ();
64# else
65extern void *alloca ();
66# endif /* __STDC__, __hpux */
67# endif /* alloca */
68# endif /* _AIX */
69# endif /* HAVE_ALLOCA_H */
70#endif /* __GNUC__ */
71
72/* Now, tend to the rest of the configuration. */
73
74/* System include files first... */
75#include <stdio.h>
76#ifdef HAVE_STRING_H
77#include <string.h>
78#else
79#ifdef HAVE_STRINGS_H
80#include <strings.h>
81#endif
82#endif
83#ifdef HAVE_STDLIB_H
84#include <stdlib.h>
85#endif
86#ifdef HAVE_UNISTD_H
87#include <unistd.h>
88#endif
89#ifdef HAVE_SYS_TYPES_H
90/* for size_t, pid_t */
91#include <sys/types.h>
92#endif
93
94#include "getopt.h"
95/* The first getopt value for machine-independent long options.
96 150 isn't special; it's just an arbitrary non-ASCII char value. */
97#define OPTION_STD_BASE 150
98/* The first getopt value for machine-dependent long options.
99 190 gives the standard options room to grow. */
100#define OPTION_MD_BASE 190
101
102#ifdef DEBUG
103#undef NDEBUG
104#endif
105#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
106#define __PRETTY_FUNCTION__ ((char*)0)
107#endif
108#if 0
109
110/* Handle lossage with assert.h. */
111#ifndef BROKEN_ASSERT
112#include <assert.h>
113#else /* BROKEN_ASSERT */
114#ifndef NDEBUG
115#define assert(p) ((p) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0))
116#else
117#define assert(p) ((p), 0)
118#endif
119#endif /* BROKEN_ASSERT */
120
121#else
122
123#define assert(P) ((P) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0))
124#undef abort
125#define abort() as_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
126
127#endif
128
129/* Now GNU header files... */
130#include "ansidecl.h"
131#ifdef BFD_ASSEMBLER
132#include "bfd.h"
133#endif
134#include "libiberty.h"
135
136/* Define the standard progress macros. */
137#include "progress.h"
138
139/* This doesn't get taken care of anywhere. */
140#ifndef __MWERKS__ /* Metrowerks C chokes on the "defined (inline)" */
141#if !defined (__GNUC__) && !defined (inline)
142#define inline
143#endif
144#endif /* !__MWERKS__ */
145
146/* Other stuff from config.h. */
147#ifdef NEED_DECLARATION_STRSTR
148extern char *strstr ();
149#endif
150#ifdef NEED_DECLARATION_MALLOC
151extern PTR malloc ();
152extern PTR realloc ();
153#endif
154#ifdef NEED_DECLARATION_FREE
155extern void free ();
156#endif
157#ifdef NEED_DECLARATION_ERRNO
158extern int errno;
159#endif
160#ifdef NEED_DECLARATION_ENVIRON
161extern char **environ;
162#endif
163
164/* This is needed for VMS. */
165#if ! defined (HAVE_UNLINK) && defined (HAVE_REMOVE)
166#define unlink remove
167#endif
168
169/* Hack to make "gcc -Wall" not complain about obstack macros. */
170#if !defined (memcpy) && !defined (bcopy)
171#define bcopy(src,dest,size) memcpy (dest, src, size)
172#endif
173
174/* Make Saber happier on obstack.h. */
175#ifdef SABER
176#undef __PTR_TO_INT
177#define __PTR_TO_INT(P) ((int) (P))
178#undef __INT_TO_PTR
179#define __INT_TO_PTR(P) ((char *) (P))
180#endif
181
182#ifndef __LINE__
183#define __LINE__ "unknown"
184#endif /* __LINE__ */
185
186#ifndef __FILE__
187#define __FILE__ "unknown"
188#endif /* __FILE__ */
189
190#ifndef FOPEN_WB
191#if defined GO32 || defined __MINGW32__
192#include "fopen-bin.h"
193#else
194#include "fopen-same.h"
195#endif
196#endif
197
198#ifndef EXIT_SUCCESS
199#define EXIT_SUCCESS 0
200#define EXIT_FAILURE 1
201#endif
202
203#ifndef SEEK_SET
204#define SEEK_SET 0
205#endif
206
207#define obstack_chunk_alloc xmalloc
208#define obstack_chunk_free xfree
209
210#define xfree free
211
212#include "asintl.h"
213
214#define BAD_CASE(val) \
215 { \
216 as_fatal (_("Case value %ld unexpected at line %d of file \"%s\"\n"), \
217 (long) val, __LINE__, __FILE__); \
218 }
219
220
221#include "flonum.h"
222
223/* These are assembler-wide concepts */
224
225#ifdef BFD_ASSEMBLER
226extern bfd *stdoutput;
227typedef bfd_vma addressT;
228typedef bfd_signed_vma offsetT;
229#else
230typedef unsigned long addressT;
231typedef long offsetT;
232#endif
233
234/* Type of symbol value, etc. For use in prototypes. */
235typedef addressT valueT;
236
237#ifndef COMMON
238#ifdef TEST
239#define COMMON /* declare our COMMONs storage here. */
240#else
241#define COMMON extern /* our commons live elswhere */
242#endif
243#endif
244/* COMMON now defined */
245
246#ifdef DEBUG
247#ifndef know
248#define know(p) assert(p) /* Verify our assumptions! */
249#endif /* not yet defined */
250#else
251#define know(p) /* know() checks are no-op.ed */
252#endif
253
254
255/* input_scrub.c */
256
257/* Supplies sanitised buffers to read.c.
258 Also understands printing line-number part of error messages. */
259
260
261/* subsegs.c Sub-segments. Also, segment(=expression type)s.*/
262
263#ifndef BFD_ASSEMBLER
264
265#ifdef MANY_SEGMENTS
266#include "bfd.h"
267#define N_SEGMENTS 40
268#define SEG_NORMAL(x) ((x) >= SEG_E0 && (x) <= SEG_E39)
269#define SEG_LIST SEG_E0,SEG_E1,SEG_E2,SEG_E3,SEG_E4,SEG_E5,SEG_E6,SEG_E7,SEG_E8,SEG_E9,\
270 SEG_E10,SEG_E11,SEG_E12,SEG_E13,SEG_E14,SEG_E15,SEG_E16,SEG_E17,SEG_E18,SEG_E19,\
271 SEG_E20,SEG_E21,SEG_E22,SEG_E23,SEG_E24,SEG_E25,SEG_E26,SEG_E27,SEG_E28,SEG_E29,\
272 SEG_E30,SEG_E31,SEG_E32,SEG_E33,SEG_E34,SEG_E35,SEG_E36,SEG_E37,SEG_E38,SEG_E39
273#define SEG_TEXT SEG_E0
274#define SEG_DATA SEG_E1
275#define SEG_BSS SEG_E2
276#define SEG_LAST SEG_E39
277#else
278#define N_SEGMENTS 3
279#define SEG_NORMAL(x) ((x) == SEG_TEXT || (x) == SEG_DATA || (x) == SEG_BSS)
280#define SEG_LIST SEG_TEXT,SEG_DATA,SEG_BSS
281#endif
282
283typedef enum _segT {
284 SEG_ABSOLUTE = 0,
285 SEG_LIST,
286 SEG_UNKNOWN,
287 SEG_GOOF, /* Only happens if AS has a logic error. */
288 /* Invented so we don't crash printing */
289 /* error message involving weird segment. */
290 SEG_EXPR, /* Intermediate expression values. */
291 SEG_DEBUG, /* Debug segment */
292 SEG_NTV, /* Transfert vector preload segment */
293 SEG_PTV, /* Transfert vector postload segment */
294 SEG_REGISTER /* Mythical: a register-valued expression */
295} segT;
296
297#define SEG_MAXIMUM_ORDINAL (SEG_REGISTER)
298#else
299typedef asection *segT;
300#define SEG_NORMAL(SEG) ((SEG) != absolute_section \
301 && (SEG) != undefined_section \
302 && (SEG) != reg_section \
303 && (SEG) != expr_section)
304#endif
305typedef int subsegT;
306
307/* What subseg we are accreting now? */
308COMMON subsegT now_subseg;
309
310/* Segment our instructions emit to. */
311COMMON segT now_seg;
312
313#ifdef BFD_ASSEMBLER
314#define segment_name(SEG) bfd_get_section_name (stdoutput, SEG)
315#else
316extern char const *const seg_name[];
317#define segment_name(SEG) seg_name[(int) (SEG)]
318#endif
319
320#ifndef BFD_ASSEMBLER
321extern int section_alignment[];
322#endif
323
324#ifdef BFD_ASSEMBLER
325extern segT reg_section, expr_section;
326/* Shouldn't these be eliminated someday? */
327extern segT text_section, data_section, bss_section;
328#define absolute_section bfd_abs_section_ptr
329#define undefined_section bfd_und_section_ptr
330#else
331#define reg_section SEG_REGISTER
332#define expr_section SEG_EXPR
333#define text_section SEG_TEXT
334#define data_section SEG_DATA
335#define bss_section SEG_BSS
336#define absolute_section SEG_ABSOLUTE
337#define undefined_section SEG_UNKNOWN
338#endif
339
340/* relax() */
341
342enum _relax_state {
343 /* Variable chars to be repeated fr_offset times.
344 Fr_symbol unused. Used with fr_offset == 0 for a
345 constant length frag. */
346 rs_fill = 1,
347
348 /* Align. The fr_offset field holds the power of 2 to which to
349 align. The fr_var field holds the number of characters in the
350 fill pattern. The fr_subtype field holds the maximum number of
351 bytes to skip when aligning, or 0 if there is no maximum. */
352 rs_align,
353
354 /* Align code. The fr_offset field holds the power of 2 to which
355 to align. This type is only generated by machine specific
356 code, which is normally responsible for handling the fill
357 pattern. The fr_subtype field holds the maximum number of
358 bytes to skip when aligning, or 0 if there is no maximum. */
359 rs_align_code,
360
361 /* Test for alignment. Like rs_align, but used by several targets
362 to warn if data is not properly aligned. */
363 rs_align_test,
364
365 /* Org: Fr_offset, fr_symbol: address. 1 variable char: fill
366 character. */
367 rs_org,
368
369#ifndef WORKING_DOT_WORD
370 /* JF: gunpoint */
371 rs_broken_word,
372#endif
373
374 /* machine-specific relaxable (or similarly alterable) instruction */
375 rs_machine_dependent,
376
377 /* .space directive with expression operand that needs to be computed
378 later. Similar to rs_org, but different.
379 fr_symbol: operand
380 1 variable char: fill character */
381 rs_space,
382
383 /* A DWARF leb128 value; only ELF uses this. The subtype is 0 for
384 unsigned, 1 for signed. */
385 rs_leb128,
386
387 /* Exception frame information which we may be able to optimize. */
388 rs_cfa,
389
390 /* Cross-fragment dwarf2 line number optimization. */
391 rs_dwarf2dbg
392};
393
394typedef enum _relax_state relax_stateT;
395
396/* This type is used in prototypes, so it can't be a type that will be
397 widened for argument passing. */
398typedef unsigned int relax_substateT;
399
400/* Enough bits for address, but still an integer type.
401 Could be a problem, cross-assembling for 64-bit machines. */
402typedef addressT relax_addressT;
403
404
405/* main program "as.c" (command arguments etc) */
406
407COMMON unsigned char flag_no_comments; /* -f */
408COMMON unsigned char flag_debug; /* -D */
409COMMON unsigned char flag_signed_overflow_ok; /* -J */
410#ifndef WORKING_DOT_WORD
411COMMON unsigned char flag_warn_displacement; /* -K */
412#endif
413
414/* True if local symbols should be retained. */
415COMMON int flag_keep_locals; /* -L */
416
417/* True if we are assembling in MRI mode. */
418COMMON int flag_mri;
419
420/* Should the data section be made read-only and appended to the text
421 section? */
422COMMON unsigned char flag_readonly_data_in_text; /* -R */
423
424/* True if warnings should be inhibited. */
425COMMON int flag_no_warnings; /* -W */
426
427/* True if warnings count as errors. */
428COMMON int flag_fatal_warnings; /* --fatal-warnings */
429
430/* True if we should attempt to generate output even if non-fatal errors
431 are detected. */
432COMMON unsigned char flag_always_generate_output; /* -Z */
433
434/* This is true if the assembler should output time and space usage. */
435COMMON unsigned char flag_print_statistics;
436
437/* True if local absolute symbols are to be stripped. */
438COMMON int flag_strip_local_absolute;
439
440/* True if we should generate a traditional format object file. */
441COMMON int flag_traditional_format;
442
443/* name of emitted object file */
444COMMON char *out_file_name;
445
446/* name of file defining extensions to the basic instruction set */
447COMMON char *insttbl_file_name;
448
449/* TRUE if we need a second pass. */
450COMMON int need_pass_2;
451
452/* TRUE if we should do no relaxing, and
453 leave lots of padding. */
454COMMON int linkrelax;
455
456/* TRUE if we should produce a listing. */
457extern int listing;
458
459/* Type of debugging information we should generate. We currently support
460 stabs, ECOFF, and DWARF2.
461
462 NOTE! This means debug information about the assembly source code itself
463 and _not_ about possible debug information from a high-level language.
464 This is especially relevant to DWARF2, since the compiler may emit line
465 number directives that the assembler resolves. */
466
467enum debug_info_type {
468 DEBUG_UNSPECIFIED,
469 DEBUG_NONE,
470 DEBUG_STABS,
471 DEBUG_ECOFF,
472 DEBUG_DWARF,
473 DEBUG_DWARF2
474};
475
476extern enum debug_info_type debug_type;
477
478
479/* Maximum level of macro nesting. */
480extern int max_macro_nest;
481
482/* Obstack chunk size. Keep large for efficient space use, make small to
483 increase malloc calls for monitoring memory allocation. */
484extern int chunksize;
485
486struct _pseudo_type {
487 /* assembler mnemonic, lower case, no '.' */
488 const char *poc_name;
489 /* Do the work */
490 void (*poc_handler) PARAMS ((int));
491 /* Value to pass to handler */
492 int poc_val;
493};
494
495typedef struct _pseudo_type pseudo_typeS;
496
497/* Prefer varargs for non-ANSI compiler, since some will barf if the
498 ellipsis definition is used with a no-arguments declaration. */
499#if defined (HAVE_VARARGS_H) && !defined (__STDC__)
500#undef HAVE_STDARG_H
501#endif
502
503#if defined (HAVE_STDARG_H)
504#define USE_STDARG
505#endif
506#if !defined (USE_STDARG) && defined (HAVE_VARARGS_H)
507#define USE_VARARGS
508#endif
509
510#ifdef USE_STDARG
511#if (__GNUC__ >= 2) && !defined(VMS)
512/* for use with -Wformat */
513
514#if __GNUC__ == 2 && __GNUC_MINOR__ < 6
515/* Support for double underscores in attribute names was added in gcc
516 2.6, so avoid them if we are using an earlier version. */
517#define __printf__ printf
518#define __format__ format
519#endif
520
521#define PRINTF_LIKE(FCN) \
522 void FCN (const char *format, ...) \
523 __attribute__ ((__format__ (__printf__, 1, 2)))
524#define PRINTF_WHERE_LIKE(FCN) \
525 void FCN (char *file, unsigned int line, const char *format, ...) \
526 __attribute__ ((__format__ (__printf__, 3, 4)))
527
528#else /* __GNUC__ < 2 || defined(VMS) */
529
530#define PRINTF_LIKE(FCN) void FCN PARAMS ((const char *format, ...))
531#define PRINTF_WHERE_LIKE(FCN) void FCN PARAMS ((char *file, \
532 unsigned int line, \
533 const char *format, ...))
534
535#endif /* __GNUC__ < 2 || defined(VMS) */
536
537#else /* ! USE_STDARG */
538
539#define PRINTF_LIKE(FCN) void FCN ()
540#define PRINTF_WHERE_LIKE(FCN) void FCN ()
541
542#endif /* ! USE_STDARG */
543
544PRINTF_LIKE (as_bad);
545PRINTF_LIKE (as_fatal) ATTRIBUTE_NORETURN;
546PRINTF_LIKE (as_tsktsk);
547PRINTF_LIKE (as_warn);
548PRINTF_WHERE_LIKE (as_bad_where);
549PRINTF_WHERE_LIKE (as_warn_where);
550
551void as_assert PARAMS ((const char *, int, const char *));
552void as_abort PARAMS ((const char *, int, const char *)) ATTRIBUTE_NORETURN;
553
554void fprint_value PARAMS ((FILE *file, addressT value));
555void sprint_value PARAMS ((char *buf, addressT value));
556
557int had_errors PARAMS ((void));
558int had_warnings PARAMS ((void));
559
560void print_version_id PARAMS ((void));
561char *app_push PARAMS ((void));
562char *atof_ieee PARAMS ((char *str, int what_kind, LITTLENUM_TYPE * words));
563char *input_scrub_include_file PARAMS ((char *filename, char *position));
564extern void input_scrub_insert_line PARAMS((const char *line));
565extern void input_scrub_insert_file PARAMS((char *path));
566char *input_scrub_new_file PARAMS ((char *filename));
567char *input_scrub_next_buffer PARAMS ((char **bufp));
568int do_scrub_chars PARAMS ((int (*get) (char *, int), char *to, int tolen));
569int gen_to_words PARAMS ((LITTLENUM_TYPE * words, int precision,
570 long exponent_bits));
571int had_err PARAMS ((void));
572int ignore_input PARAMS ((void));
573void cond_finish_check PARAMS ((int));
574void cond_exit_macro PARAMS ((int));
575int seen_at_least_1_file PARAMS ((void));
576void app_pop PARAMS ((char *arg));
577void as_howmuch PARAMS ((FILE * stream));
578void as_perror PARAMS ((const char *gripe, const char *filename));
579void as_where PARAMS ((char **namep, unsigned int *linep));
580void bump_line_counters PARAMS ((void));
581void do_scrub_begin PARAMS ((int));
582void input_scrub_begin PARAMS ((void));
583void input_scrub_close PARAMS ((void));
584void input_scrub_end PARAMS ((void));
585int new_logical_line PARAMS ((char *fname, int line_number));
586void subsegs_begin PARAMS ((void));
587void subseg_change PARAMS ((segT seg, int subseg));
588segT subseg_new PARAMS ((const char *name, subsegT subseg));
589segT subseg_force_new PARAMS ((const char *name, subsegT subseg));
590void subseg_set PARAMS ((segT seg, subsegT subseg));
591#ifdef BFD_ASSEMBLER
592segT subseg_get PARAMS ((const char *, int));
593#endif
594int subseg_text_p PARAMS ((segT));
595
596void start_dependencies PARAMS ((char *));
597void register_dependency PARAMS ((char *));
598void print_dependencies PARAMS ((void));
599
600struct expressionS;
601struct fix;
602typedef struct symbol symbolS;
603struct relax_type;
604typedef struct frag fragS;
605
606#ifdef BFD_ASSEMBLER
607/* literal.c */
608valueT add_to_literal_pool PARAMS ((symbolS *, valueT, segT, int));
609#endif
610
611int check_eh_frame PARAMS ((struct expressionS *, unsigned int *));
612int eh_frame_estimate_size_before_relax PARAMS ((fragS *));
613int eh_frame_relax_frag PARAMS ((fragS *));
614void eh_frame_convert_frag PARAMS ((fragS *));
615
616int generic_force_reloc PARAMS ((struct fix *));
617
618#include "expr.h" /* Before targ-*.h */
619
620/* this one starts the chain of target dependant headers */
621#include "targ-env.h"
622
623#ifdef OBJ_MAYBE_ELF
624#define IS_ELF (OUTPUT_FLAVOR == bfd_target_elf_flavour)
625#else
626#ifdef OBJ_ELF
627#define IS_ELF 1
628#else
629#define IS_ELF 0
630#endif
631#endif
632
633#include "write.h"
634#include "frags.h"
635#include "hash.h"
636#include "read.h"
637#include "symbols.h"
638
639#include "tc.h"
640#include "obj.h"
641
642#ifdef USE_EMULATIONS
643#include "emul.h"
644#endif
645#include "listing.h"
646
647#ifdef TC_M68K
648/* True if we are assembling in m68k MRI mode. */
649COMMON int flag_m68k_mri;
650#else
651#define flag_m68k_mri 0
652#endif
653
654#ifdef WARN_COMMENTS
655COMMON int warn_comment;
656COMMON unsigned int found_comment;
657COMMON char *found_comment_file;
658#endif
659
660#ifndef NUMBERS_WITH_SUFFIX
661#define NUMBERS_WITH_SUFFIX 0
662#endif
663
664#ifndef LOCAL_LABELS_DOLLAR
665#define LOCAL_LABELS_DOLLAR 0
666#endif
667
668#ifndef LOCAL_LABELS_FB
669#define LOCAL_LABELS_FB 0
670#endif
671
672#ifndef LABELS_WITHOUT_COLONS
673#define LABELS_WITHOUT_COLONS 0
674#endif
675
676#ifndef NO_PSEUDO_DOT
677#define NO_PSEUDO_DOT 0
678#endif
679
680#ifndef TEXT_SECTION_NAME
681#define TEXT_SECTION_NAME ".text"
682#define DATA_SECTION_NAME ".data"
683#define BSS_SECTION_NAME ".bss"
684#endif
685
686#ifndef OCTETS_PER_BYTE_POWER
687#define OCTETS_PER_BYTE_POWER 0
688#endif
689#ifndef OCTETS_PER_BYTE
690#define OCTETS_PER_BYTE (1<<OCTETS_PER_BYTE_POWER)
691#endif
692#if OCTETS_PER_BYTE != (1<<OCTETS_PER_BYTE_POWER)
693 #error "Octets per byte conflicts with its power-of-two definition!"
694#endif
695
696#endif /* GAS */
Note: See TracBrowser for help on using the repository browser.