diff options
author | Nick Clifton <nickc@redhat.com> | 2000-07-20 17:12:25 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2000-07-20 17:12:25 +0000 |
commit | 041ff4dd56f6deddc34a4c9670b789b7ca09b4da (patch) | |
tree | 494d7951bc9eac2129654dfecbce240a6976faa6 /gas/read.c | |
parent | 936897734c9c6e2283da9e041835c9cb5b612697 (diff) | |
download | binutils-gdb-041ff4dd56f6deddc34a4c9670b789b7ca09b4da.tar.gz |
Fix formatting.
Diffstat (limited to 'gas/read.c')
-rw-r--r-- | gas/read.c | 1030 |
1 files changed, 510 insertions, 520 deletions
diff --git a/gas/read.c b/gas/read.c index 90c43ddc56b..30ad92c4ec1 100644 --- a/gas/read.c +++ b/gas/read.c @@ -20,25 +20,22 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if 0 -#define MASK_CHAR (0xFF) /* If your chars aren't 8 bits, you will - change this a bit. But then, GNU isn't - spozed to run on your machine anyway. - (RMS is so shortsighted sometimes.) - */ +/* If your chars aren't 8 bits, you will change this a bit. + But then, GNU isn't spozed to run on your machine anyway. + (RMS is so shortsighted sometimes.) */ +#define MASK_CHAR (0xFF) #else -#define MASK_CHAR ((int)(unsigned char)-1) +#define MASK_CHAR ((int)(unsigned char) -1) #endif - /* This is the largest known floating point format (for now). It will - grow when we do 4361 style flonums. */ - + grow when we do 4361 style flonums. */ #define MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT (16) /* Routines that read assembler source text to build spagetti in memory. Another group of these functions is in the expr.c module. */ -/* for isdigit() */ +/* For isdigit (). */ #include <ctype.h> #include "as.h" @@ -55,28 +52,29 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* Set by the object-format or the target. */ #ifndef TC_IMPLICIT_LCOMM_ALIGNMENT -#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ - do { \ - if ((SIZE) >= 8) \ - (P2VAR) = 3; \ - else if ((SIZE) >= 4) \ - (P2VAR) = 2; \ - else if ((SIZE) >= 2) \ - (P2VAR) = 1; \ - else \ - (P2VAR) = 0; \ - } while (0) +#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \ + do \ + { \ + if ((SIZE) >= 8) \ + (P2VAR) = 3; \ + else if ((SIZE) >= 4) \ + (P2VAR) = 2; \ + else if ((SIZE) >= 2) \ + (P2VAR) = 1; \ + else \ + (P2VAR) = 0; \ + } \ + while (0) #endif /* The NOP_OPCODE is for the alignment fill value. - * fill it a nop instruction so that the disassembler does not choke - * on it - */ + Fill it a nop instruction so that the disassembler does not choke + on it. */ #ifndef NOP_OPCODE #define NOP_OPCODE 0x00 #endif -char *input_line_pointer; /*->next char of source file to parse. */ +char *input_line_pointer; /*->next char of source file to parse. */ #if BITS_PER_CHAR != 8 /* The following table is indexed by[(char)] and will break if @@ -120,7 +118,7 @@ die horribly; #define LEX_TILDE 0 #endif -/* used by is_... macros. our ctype[] */ +/* Used by is_... macros. our ctype[]. */ char lex_type[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* @ABCDEFGHIJKLMNO */ @@ -130,7 +128,7 @@ char lex_type[256] = LEX_AT, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* @ABCDEFGHIJKLMNO */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, 0, 3, /* PQRSTUVWXYZ[\]^_ */ 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* `abcdefghijklmno */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, LEX_TILDE, 0, /* pqrstuvwxyz{|}~. */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, LEX_TILDE, 0, /* pqrstuvwxyz{|}~. */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -141,11 +139,8 @@ char lex_type[256] = 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }; - -/* - * In: a character. - * Out: 1 if this character ends a line. - */ +/* In: a character. + Out: 1 if this character ends a line. */ char is_end_of_line[256] = { #ifdef CR_EOL @@ -170,25 +165,30 @@ char is_end_of_line[256] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* */ }; -/* Functions private to this file. */ +/* Functions private to this file. */ -static char *buffer; /* 1st char of each buffer of lines is here. */ -static char *buffer_limit; /*->1 + last char in buffer. */ +static char *buffer; /* 1st char of each buffer of lines is here. */ +static char *buffer_limit; /*->1 + last char in buffer. */ -/* TARGET_BYTES_BIG_ENDIAN is required to be defined to either 0 or 1 in the - tc-<CPU>.h file. See the "Porting GAS" section of the internals manual. */ +/* TARGET_BYTES_BIG_ENDIAN is required to be defined to either 0 or 1 + in the tc-<CPU>.h file. See the "Porting GAS" section of the + internals manual. */ int target_big_endian = TARGET_BYTES_BIG_ENDIAN; -static char *old_buffer; /* JF a hack */ +static char *old_buffer; /* JF a hack. */ static char *old_input; static char *old_limit; -/* Variables for handling include file directory table. */ +/* Variables for handling include file directory table. */ -char **include_dirs; /* Table of pointers to directories to - search for .include's */ -int include_dir_count; /* How many are in the table */ -int include_dir_maxlen = 1;/* Length of longest in table */ +/* Table of pointers to directories to search for .include's. */ +char **include_dirs; + +/* How many are in the table. */ +int include_dir_count; + +/* Length of longest in table. */ +int include_dir_maxlen = 1; #ifndef WORKING_DOT_WORD struct broken_word *broken_words; @@ -245,7 +245,6 @@ static void pobegin PARAMS ((void)); static int get_line_sb PARAMS ((sb *)); static void generate_file_debug PARAMS ((void)); - void read_begin () { @@ -259,16 +258,16 @@ read_begin () obstack_begin (¬es, chunksize); obstack_begin (&cond_obstack, chunksize); - /* Use machine dependent syntax */ + /* Use machine dependent syntax. */ for (p = line_separator_chars; *p; p++) is_end_of_line[(unsigned char) *p] = 1; - /* Use more. FIXME-SOMEDAY. */ + /* Use more. FIXME-SOMEDAY. */ if (flag_mri) lex_type['?'] = 3; } -/* set up pseudo-op tables */ +/* Set up pseudo-op tables. */ static struct hash_control *po_hash; @@ -281,7 +280,7 @@ static const pseudo_typeS potable[] = {"balign", s_align_bytes, 0}, {"balignw", s_align_bytes, -2}, {"balignl", s_align_bytes, -4}, -/* block */ +/* block */ {"byte", cons, 1}, {"comm", s_comm, 0}, {"common", s_mri_common, 0}, @@ -313,10 +312,10 @@ static const pseudo_typeS potable[] = #ifdef S_SET_DESC {"desc", s_desc, 0}, #endif -/* dim */ +/* dim */ {"double", float_cons, 'd'}, -/* dsect */ - {"eject", listing_eject, 0}, /* Formfeed listing */ +/* dsect */ + {"eject", listing_eject, 0}, /* Formfeed listing. */ {"else", s_else, 0}, {"elsec", s_else, 0}, {"elseif", s_elseif, (int) O_ne}, @@ -324,13 +323,13 @@ static const pseudo_typeS potable[] = {"endc", s_endif, 0}, {"endfunc", s_func, 1}, {"endif", s_endif, 0}, -/* endef */ +/* endef */ {"equ", s_set, 0}, {"equiv", s_set, 1}, {"err", s_err, 0}, {"exitm", s_mexit, 0}, -/* extend */ - {"extern", s_ignore, 0}, /* We treat all undef as ext */ +/* extend */ + {"extern", s_ignore, 0}, /* We treat all undef as ext. */ {"appfile", s_app_file, 1}, {"appline", s_app_line, 0}, {"fail", s_fail, 0}, @@ -363,9 +362,9 @@ static const pseudo_typeS potable[] = {"irpc", s_irp, 1}, {"irepc", s_irp, 1}, {"lcomm", s_lcomm, 0}, - {"lflags", listing_flags, 0}, /* Listing flags */ + {"lflags", listing_flags, 0}, /* Listing flags. */ {"linkonce", s_linkonce, 0}, - {"list", listing_list, 1}, /* Turn listing on */ + {"list", listing_list, 1}, /* Turn listing on. */ {"llen", listing_psize, 1}, {"long", cons, 4}, {"lsym", s_lsym, 0}, @@ -375,7 +374,7 @@ static const pseudo_typeS potable[] = {".mri", s_mri, 0}, /* Special case so .mri works in MRI mode. */ {"name", s_ignore, 0}, {"noformat", s_ignore, 0}, - {"nolist", listing_list, 0}, /* Turn listing off */ + {"nolist", listing_list, 0}, /* Turn listing off. */ {"nopage", listing_nopage, 0}, {"octa", cons, 16}, {"offset", s_struct, 0}, @@ -386,19 +385,19 @@ static const pseudo_typeS potable[] = {"page", listing_eject, 0}, {"plen", listing_psize, 0}, {"print", s_print, 0}, - {"psize", listing_psize, 0}, /* set paper size */ + {"psize", listing_psize, 0}, /* Set paper size. */ {"purgem", s_purgem, 0}, {"quad", cons, 8}, {"rep", s_rept, 0}, {"rept", s_rept, 0}, {"rva", s_rva, 4}, - {"sbttl", listing_title, 1}, /* Subtitle of listing */ -/* scl */ -/* sect */ + {"sbttl", listing_title, 1}, /* Subtitle of listing. */ +/* scl */ +/* sect */ {"set", s_set, 0}, {"short", cons, 2}, {"single", float_cons, 'f'}, -/* size */ +/* size */ {"space", s_space, 0}, {"skip", s_space, 0}, {"sleb128", s_leb128, 1}, @@ -408,7 +407,7 @@ static const pseudo_typeS potable[] = {"stabs", s_stab, 's'}, {"string", stringer, 1}, {"struct", s_struct, 0}, -/* tag */ +/* tag */ {"text", s_text, 0}, /* This is for gcc to use. It's only just been added (2/94), so gcc @@ -421,19 +420,19 @@ static const pseudo_typeS potable[] = this one. Match it either way... */ {"this_gcc_requires_the_gnu_assembler", s_ignore, 0}, - {"title", listing_title, 0}, /* Listing title */ + {"title", listing_title, 0}, /* Listing title. */ {"ttl", listing_title, 0}, -/* type */ +/* type */ {"uleb128", s_leb128, 0}, -/* use */ -/* val */ +/* use */ +/* val */ {"xcom", s_comm, 0}, {"xdef", s_globl, 0}, {"xref", s_ignore, 0}, {"xstabs", s_xstab, 's'}, {"word", cons, 2}, {"zero", s_space, 0}, - {NULL, NULL, 0} /* end sentinel */ + {NULL, NULL, 0} /* End sentinel. */ }; static int pop_override_ok = 0; @@ -462,21 +461,21 @@ pop_insert (table) #define obj_pop_insert() pop_insert(obj_pseudo_table) #endif -static void +static void pobegin () { po_hash = hash_new (); - /* Do the target-specific pseudo ops. */ + /* Do the target-specific pseudo ops. */ pop_table_name = "md"; md_pop_insert (); - /* Now object specific. Skip any that were in the target table. */ + /* Now object specific. Skip any that were in the target table. */ pop_table_name = "obj"; pop_override_ok = 1; obj_pop_insert (); - /* Now portable ones. Skip any that we've seen already. */ + /* Now portable ones. Skip any that we've seen already. */ pop_table_name = "standard"; pop_insert (potable); } @@ -484,13 +483,12 @@ pobegin () #define HANDLE_CONDITIONAL_ASSEMBLY() \ if (ignore_input ()) \ { \ - while (! is_end_of_line[(unsigned char) *input_line_pointer++]) \ + while (!is_end_of_line[(unsigned char) *input_line_pointer++]) \ if (input_line_pointer == buffer_limit) \ break; \ continue; \ } - /* This function is used when scrubbing the characters between #APP and #NO_APP. */ @@ -512,17 +510,14 @@ scrub_from_string (buf, buflen) return copy; } -/* read_a_source_file() - * - * We read the file, putting things into a web that - * represents what we have been reading. - */ -void +/* We read the file, putting things into a web that represents what we + have been reading. */ +void read_a_source_file (name) char *name; { register char c; - register char *s; /* string of symbol, '\0' appended */ + register char *s; /* String of symbol, '\0' appended. */ register int temp; pseudo_typeS *pop; @@ -538,26 +533,23 @@ read_a_source_file (name) generate_file_debug (); while ((buffer_limit = input_scrub_next_buffer (&input_line_pointer)) != 0) - { /* We have another line to parse. */ - know (buffer_limit[-1] == '\n'); /* Must have a sentinel. */ + { /* We have another line to parse. */ + know (buffer_limit[-1] == '\n'); /* Must have a sentinel. */ contin: /* JF this goto is my fault I admit it. Someone brave please re-write the whole input section here? Pleeze??? */ while (input_line_pointer < buffer_limit) { - /* We have more of this buffer to parse. */ + /* We have more of this buffer to parse. */ - /* - * We now have input_line_pointer->1st char of next line. - * If input_line_pointer [-1] == '\n' then we just - * scanned another line: so bump line counters. - */ + /* We now have input_line_pointer->1st char of next line. + If input_line_pointer [-1] == '\n' then we just + scanned another line: so bump line counters. */ if (is_end_of_line[(unsigned char) input_line_pointer[-1]]) { #ifdef md_start_line_hook md_start_line_hook (); #endif - if (input_line_pointer[-1] == '\n') bump_line_counters (); @@ -608,9 +600,9 @@ read_a_source_file (name) /* In MRI mode, we need to handle the MACRO pseudo-op specially: we don't want to put the symbol in the symbol table. */ - if (! mri_line_macro + if (!mri_line_macro #ifdef TC_START_LABEL_WITHOUT_COLON - && TC_START_LABEL_WITHOUT_COLON(c, + && TC_START_LABEL_WITHOUT_COLON(c, input_line_pointer) #endif ) @@ -628,28 +620,25 @@ read_a_source_file (name) } } - /* - * We are at the begining of a line, or similar place. - * We expect a well-formed assembler statement. - * A "symbol-name:" is a statement. - * - * Depending on what compiler is used, the order of these tests - * may vary to catch most common case 1st. - * Each test is independent of all other tests at the (top) level. - * PLEASE make a compiler that doesn't use this assembler. - * It is crufty to waste a compiler's time encoding things for this - * assembler, which then wastes more time decoding it. - * (And communicating via (linear) files is silly! - * If you must pass stuff, please pass a tree!) - */ + /* We are at the begining of a line, or similar place. + We expect a well-formed assembler statement. + A "symbol-name:" is a statement. + + Depending on what compiler is used, the order of these tests + may vary to catch most common case 1st. + Each test is independent of all other tests at the (top) level. + PLEASE make a compiler that doesn't use this assembler. + It is crufty to waste a compiler's time encoding things for this + assembler, which then wastes more time decoding it. + (And communicating via (linear) files is silly! + If you must pass stuff, please pass a tree!) */ if ((c = *input_line_pointer++) == '\t' || c == ' ' || c == '\f' || c == 0) - { - c = *input_line_pointer++; - } - know (c != ' '); /* No further leading whitespace. */ + c = *input_line_pointer++; + + know (c != ' '); /* No further leading whitespace. */ #ifndef NO_LISTING /* If listing is on, and we are expanding a macro, then give @@ -662,7 +651,7 @@ read_a_source_file (name) int len; /* Find the end of the current expanded macro line. */ - for (s = input_line_pointer-1; *s ; ++s) + for (s = input_line_pointer - 1; *s ; ++s) if (is_end_of_line[(unsigned char) *s]) break; @@ -672,8 +661,8 @@ read_a_source_file (name) copy = (char *) xmalloc (len + macro_nest + 2); memset (copy, '>', macro_nest); copy[macro_nest] = ' '; - memcpy (copy + macro_nest + 1, input_line_pointer-1, len); - copy[macro_nest+1+len] = '\0'; + memcpy (copy + macro_nest + 1, input_line_pointer - 1, len); + copy[macro_nest + 1 + len] = '\0'; /* Install the line with the listing facility. */ listing_newline (copy); @@ -682,37 +671,34 @@ read_a_source_file (name) listing_newline (NULL); } #endif - - /* - * C is the 1st significant character. - * Input_line_pointer points after that character. - */ + /* C is the 1st significant character. + Input_line_pointer points after that character. */ if (is_name_beginner (c)) { - /* want user-defined label or pseudo/opcode */ + /* Want user-defined label or pseudo/opcode. */ HANDLE_CONDITIONAL_ASSEMBLY (); s = --input_line_pointer; - c = get_symbol_end (); /* name's delimiter */ - /* - * C is character after symbol. - * That character's place in the input line is now '\0'. - * S points to the beginning of the symbol. - * [In case of pseudo-op, s->'.'.] - * Input_line_pointer->'\0' where c was. - */ - if (TC_START_LABEL(c, input_line_pointer)) + c = get_symbol_end (); /* name's delimiter. */ + + /* C is character after symbol. + That character's place in the input line is now '\0'. + S points to the beginning of the symbol. + [In case of pseudo-op, s->'.'.] + Input_line_pointer->'\0' where c was. */ + if (TC_START_LABEL (c, input_line_pointer)) { if (flag_m68k_mri) { char *rest = input_line_pointer + 1; /* In MRI mode, \tsym: set 0 is permitted. */ - if (*rest == ':') ++rest; + if (*rest == ' ' || *rest == '\t') ++rest; + if ((strncasecmp (rest, "EQU", 3) == 0 || strncasecmp (rest, "SET", 3) == 0) && (rest[3] == ' ' || rest[3] == '\t')) @@ -723,18 +709,17 @@ read_a_source_file (name) } } - line_label = colon (s); /* user-defined label */ - *input_line_pointer++ = ':'; /* Put ':' back for error messages' sake. */ - /* Input_line_pointer->after ':'. */ + line_label = colon (s); /* User-defined label. */ + /* Put ':' back for error messages' sake. */ + *input_line_pointer++ = ':'; + /* Input_line_pointer->after ':'. */ SKIP_WHITESPACE (); - - } else if (c == '=' || ((c == ' ' || c == '\t') && input_line_pointer[1] == '=' #ifdef TC_EQUAL_IN_INSN - && ! TC_EQUAL_IN_INSN (c, input_line_pointer) + && !TC_EQUAL_IN_INSN (c, input_line_pointer) #endif )) { @@ -742,7 +727,8 @@ read_a_source_file (name) demand_empty_rest_of_line (); } else - { /* expect pseudo-op or machine instruction */ + { + /* Expect pseudo-op or machine instruction. */ pop = NULL; #define IGNORE_OPCODE_CASE @@ -757,7 +743,6 @@ read_a_source_file (name) } } #endif - if (NO_PSEUDO_DOT || flag_m68k_mri) { /* The MRI assembler and the m88k use pseudo-ops @@ -768,15 +753,13 @@ read_a_source_file (name) } if (pop != NULL - || (! flag_m68k_mri && *s == '.')) + || (!flag_m68k_mri && *s == '.')) { - /* - * PSEUDO - OP. - * - * WARNING: c has next char, which may be end-of-line. - * We lookup the pseudo-op table with s+1 because we - * already know that the pseudo-op begins with a '.'. - */ + /* PSEUDO - OP. + + WARNING: c has next char, which may be end-of-line. + We lookup the pseudo-op table with s+1 because we + already know that the pseudo-op begins with a '.'. */ if (pop == NULL) pop = (pseudo_typeS *) hash_find (po_hash, s + 1); @@ -786,24 +769,25 @@ read_a_source_file (name) this is. */ if (mri_pending_align && (pop == NULL - || ! ((pop->poc_handler == cons - && pop->poc_val == 1) - || (pop->poc_handler == s_space - && pop->poc_val == 1) + || !((pop->poc_handler == cons + && pop->poc_val == 1) + || (pop->poc_handler == s_space + && pop->poc_val == 1) #ifdef tc_conditional_pseudoop - || tc_conditional_pseudoop (pop) + || tc_conditional_pseudoop (pop) #endif - || pop->poc_handler == s_if - || pop->poc_handler == s_ifdef - || pop->poc_handler == s_ifc - || pop->poc_handler == s_ifeqs - || pop->poc_handler == s_else - || pop->poc_handler == s_endif - || pop->poc_handler == s_globl - || pop->poc_handler == s_ignore))) + || pop->poc_handler == s_if + || pop->poc_handler == s_ifdef + || pop->poc_handler == s_ifc + || pop->poc_handler == s_ifeqs + || pop->poc_handler == s_else + || pop->poc_handler == s_endif + || pop->poc_handler == s_globl + || pop->poc_handler == s_ignore))) { do_align (1, (char *) NULL, 0, 0); mri_pending_align = 0; + if (line_label != NULL) { symbol_set_frag (line_label, frag_now); @@ -811,7 +795,7 @@ read_a_source_file (name) } } - /* Print the error msg now, while we still can */ + /* Print the error msg now, while we still can. */ if (pop == NULL) { as_bad (_("Unknown pseudo-op: `%s'"), s); @@ -820,18 +804,17 @@ read_a_source_file (name) continue; } - /* Put it back for error messages etc. */ + /* Put it back for error messages etc. */ *input_line_pointer = c; /* The following skip of whitespace is compulsory. A well shaped space is sometimes all that separates - keyword from operands. */ + keyword from operands. */ if (c == ' ' || c == '\t') input_line_pointer++; - /* - * Input_line is restored. - * Input_line_pointer->1st non-blank char - * after pseudo-operation. - */ + + /* Input_line is restored. + Input_line_pointer->1st non-blank char + after pseudo-operation. */ (*pop->poc_handler) (pop->poc_val); /* If that was .end, just get out now. */ @@ -845,8 +828,8 @@ read_a_source_file (name) int inescape = 0; #endif - /* WARNING: c has char, which may be end-of-line. */ - /* Also: input_line_pointer->`\0` where c was. */ + /* WARNING: c has char, which may be end-of-line. */ + /* Also: input_line_pointer->`\0` where c was. */ *input_line_pointer = c; while (!is_end_of_line[(unsigned char) *input_line_pointer] || inquote @@ -856,12 +839,12 @@ read_a_source_file (name) ) { if (flag_m68k_mri && *input_line_pointer == '\'') - inquote = ! inquote; + inquote = !inquote; #ifdef QUOTES_IN_INSN if (inescape) inescape = 0; else if (*input_line_pointer == '"') - inquote = ! inquote; + inquote = !inquote; else if (*input_line_pointer == '\\') inescape = 1; #endif @@ -877,7 +860,7 @@ read_a_source_file (name) { sb out; const char *err; - macro_entry *macro; + macro_entry *macro; if (check_macro (s, &out, '\0', &err, ¯o)) { @@ -890,7 +873,7 @@ read_a_source_file (name) buffer_limit = input_scrub_next_buffer (&input_line_pointer); #ifdef md_macro_info - md_macro_info (macro); + md_macro_info (macro); #endif continue; } @@ -907,17 +890,16 @@ read_a_source_file (name) } } - md_assemble (s); /* Assemble 1 instruction. */ + md_assemble (s); /* Assemble 1 instruction. */ *input_line_pointer++ = c; /* We resume loop AFTER the end-of-line from - this instruction. */ - } /* if (*s=='.') */ - } /* if c==':' */ + this instruction. */ + } + } continue; - } /* if (is_name_beginner(c) */ - + } /* Empty statement? */ if (is_end_of_line[(unsigned char) c]) @@ -926,18 +908,19 @@ read_a_source_file (name) if ((LOCAL_LABELS_DOLLAR || LOCAL_LABELS_FB) && isdigit ((unsigned char) c)) { - /* local label ("4:") */ + /* local label ("4:") */ char *backup = input_line_pointer; HANDLE_CONDITIONAL_ASSEMBLY (); temp = c - '0'; + /* Read the whole number. */ while (isdigit ((unsigned char) *input_line_pointer)) { temp = (temp * 10) + *input_line_pointer - '0'; ++input_line_pointer; - } /* read the whole number */ + } if (LOCAL_LABELS_DOLLAR && *input_line_pointer == '$' @@ -967,7 +950,7 @@ read_a_source_file (name) } /* local label ("4:") */ if (c && strchr (line_comment_chars, c)) - { /* Its a comment. Better say APP or NO_APP */ + { /* Its a comment. Better say APP or NO_APP. */ char *ends; char *new_buf; char *new_tmp; @@ -990,7 +973,7 @@ read_a_source_file (name) /* The end of the #APP wasn't in this buffer. We keep reading in buffers until we find the #NO_APP that goes with this #APP There is one. The specs - guarentee it. . . */ + guarentee it... */ tmp_len = buffer_limit - s; tmp_buf = xmalloc (tmp_len + 1); memcpy (tmp_buf, s, tmp_len); @@ -1058,6 +1041,7 @@ read_a_source_file (name) buffer = new_buf; input_line_pointer = new_buf; buffer_limit = new_tmp; + continue; } @@ -1067,11 +1051,10 @@ read_a_source_file (name) if (tc_unrecognized_line (c)) continue; #endif - - /* as_warn("Junk character %d.",c); Now done by ignore_rest */ - input_line_pointer--; /* Report unknown char as ignored. */ + /* as_warn (_("Junk character %d."),c); Now done by ignore_rest. */ + input_line_pointer--; /* Report unknown char as ignored. */ ignore_rest_of_line (); - } /* while (input_line_pointer<buffer_limit) */ + } #ifdef md_after_pass_hook md_after_pass_hook (); @@ -1090,14 +1073,15 @@ read_a_source_file (name) goto contin; } } - } /* while (more buffers to scan) */ + } quit: #ifdef md_cleanup - md_cleanup(); + md_cleanup (); #endif - input_scrub_close (); /* Close the input file */ + /* Close the input file. */ + input_scrub_close (); } /* For most MRI pseudo-ops, the line actually ends at the first @@ -1112,37 +1096,30 @@ char * mri_comment_field (stopcp) char *stopcp; { -#ifdef TC_M68K - char *s; +#ifdef TC_M68K int inquote = 0; know (flag_m68k_mri); for (s = input_line_pointer; - ((! is_end_of_line[(unsigned char) *s] && *s != ' ' && *s != '\t') + ((!is_end_of_line[(unsigned char) *s] && *s != ' ' && *s != '\t') || inquote); s++) { if (*s == '\'') - inquote = ! inquote; + inquote = !inquote; } - *stopcp = *s; - *s = '\0'; - return s; - #else - - char *s; - - for (s = input_line_pointer; ! is_end_of_line[(unsigned char) *s]; s++) + for (s = input_line_pointer; + !is_end_of_line[(unsigned char) *s]; + s++) ; +#endif *stopcp = *s; *s = '\0'; + return s; - -#endif - } /* Skip to the end of an MRI comment field. */ @@ -1156,11 +1133,11 @@ mri_comment_end (stop, stopc) input_line_pointer = stop; *stop = stopc; - while (! is_end_of_line[(unsigned char) *input_line_pointer]) + while (!is_end_of_line[(unsigned char) *input_line_pointer]) ++input_line_pointer; } -void +void s_abort (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -1173,7 +1150,7 @@ s_abort (ignore) the maximum number of characters to skip when doing the alignment, or 0 if there is no maximum. */ -static void +static void do_align (n, fill, len, max) int n; char *fill; @@ -1196,7 +1173,7 @@ do_align (n, fill, len, max) len = 1; } - /* Only make a frag if we HAVE to. . . */ + /* Only make a frag if we HAVE to... */ if (n != 0 && !need_pass_2) { if (len <= 1) @@ -1237,7 +1214,7 @@ s_align (arg, bytes_p) if (arg < 0) align = 0; else - align = arg; /* Default value from pseudo-op table */ + align = arg; /* Default value from pseudo-op table. */ } else { @@ -1256,6 +1233,7 @@ s_align (arg, bytes_p) ; if (align != 1) as_bad (_("Alignment not a power of 2")); + align = i; } } @@ -1292,7 +1270,7 @@ s_align (arg, bytes_p) } } - if (! fill_p) + if (!fill_p) { if (arg < 0) as_warn (_("expected fill pattern missing")); @@ -1305,7 +1283,7 @@ s_align (arg, bytes_p) if (arg >= 0) fill_len = 1; else - fill_len = - arg; + fill_len = -arg; if (fill_len <= 1) { char fill_char; @@ -1333,7 +1311,7 @@ s_align (arg, bytes_p) /* Handle the .align pseudo-op on machines where ".align 4" means align to a 4 byte boundary. */ -void +void s_align_bytes (arg) int arg; { @@ -1343,14 +1321,14 @@ s_align_bytes (arg) /* Handle the .align pseudo-op on machines where ".align 4" means align to a 2**4 boundary. */ -void +void s_align_ptwo (arg) int arg; { s_align (arg, 0); } -void +void s_comm (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -1367,10 +1345,11 @@ s_comm (ignore) name = input_line_pointer; c = get_symbol_end (); - /* just after name is now '\0' */ + /* Just after name is now '\0'. */ p = input_line_pointer; *p = c; SKIP_WHITESPACE (); + if (*input_line_pointer != ',') { as_bad (_("Expected comma after symbol-name: rest of line ignored.")); @@ -1379,7 +1358,9 @@ s_comm (ignore) mri_comment_end (stop, stopc); return; } + input_line_pointer++; /* skip ',' */ + if ((temp = get_absolute_expression ()) < 0) { as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) temp); @@ -1388,10 +1369,12 @@ s_comm (ignore) mri_comment_end (stop, stopc); return; } + *p = 0; symbolP = symbol_find_or_make (name); *p = c; - if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP)) + + if (S_IS_DEFINED (symbolP) && !S_IS_COMMON (symbolP)) { as_bad (_("Ignoring attempt to re-define symbol `%s'."), S_GET_NAME (symbolP)); @@ -1400,6 +1383,7 @@ s_comm (ignore) mri_comment_end (stop, stopc); return; } + if (S_GET_VALUE (symbolP)) { if (S_GET_VALUE (symbolP) != (valueT) temp) @@ -1416,7 +1400,7 @@ s_comm (ignore) #ifdef OBJ_VMS { extern int flag_one; - if ( (!temp) || !flag_one) + if (!temp || !flag_one) S_GET_OTHER(symbolP) = const_flag; } #endif /* not OBJ_VMS */ @@ -1444,7 +1428,7 @@ s_mri_common (small) char *stop = NULL; char stopc; - if (! flag_mri) + if (!flag_mri) { s_comm (0); return; @@ -1455,7 +1439,7 @@ s_mri_common (small) SKIP_WHITESPACE (); name = input_line_pointer; - if (! isdigit ((unsigned char) *name)) + if (!isdigit ((unsigned char) *name)) c = get_symbol_end (); else { @@ -1464,6 +1448,7 @@ s_mri_common (small) ++input_line_pointer; } while (isdigit ((unsigned char) *input_line_pointer)); + c = *input_line_pointer; *input_line_pointer = '\0'; @@ -1490,7 +1475,7 @@ s_mri_common (small) align = get_absolute_expression (); } - if (S_IS_DEFINED (sym) && ! S_IS_COMMON (sym)) + if (S_IS_DEFINED (sym) && !S_IS_COMMON (sym)) { as_bad (_("attempt to re-define symbol `%s'"), S_GET_NAME (sym)); ignore_rest_of_line (); @@ -1562,21 +1547,21 @@ s_data (ignore) definition for .file; the APPFILE argument is 1 for .appfile, 0 for .file. */ -void +void s_app_file (appfile) int appfile; { register char *s; int length; - /* Some assemblers tolerate immediately following '"' */ + /* Some assemblers tolerate immediately following '"'. */ if ((s = demand_copy_string (&length)) != 0) { /* If this is a fake .appfile, a fake newline was inserted into the buffer. Passing -2 to new_logical_line tells it to account for it. */ int may_omit - = (! new_logical_line (s, appfile ? -2 : -1) && appfile); + = (!new_logical_line (s, appfile ? -2 : -1) && appfile); /* In MRI mode, the preprocessor may have inserted an extraneous backquote. */ @@ -1586,7 +1571,7 @@ s_app_file (appfile) ++input_line_pointer; demand_empty_rest_of_line (); - if (! may_omit) + if (!may_omit) { #ifdef LISTING if (listing) @@ -1616,7 +1601,8 @@ s_app_line (ignore) if (l < 0) /* Some of the back ends can't deal with non-positive line numbers. Besides, it's silly. */ - as_warn (_("Line numbers must be positive; line number %d rejected."), l+1); + as_warn (_("Line numbers must be positive; line number %d rejected."), + l + 1); else { new_logical_line ((char *) NULL, l); @@ -1640,7 +1626,7 @@ s_end (ignore) /* The MRI assembler permits the start symbol to follow .end, but we don't support that. */ SKIP_WHITESPACE (); - if (! is_end_of_line[(unsigned char) *input_line_pointer] + if (!is_end_of_line[(unsigned char) *input_line_pointer] && *input_line_pointer != '*' && *input_line_pointer != '!') as_warn (_("start address not supported")); @@ -1682,7 +1668,7 @@ s_fail (ignore) mri_comment_end (stop, stopc); } -void +void s_fill (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -1760,26 +1746,28 @@ s_fill (ignore) p = frag_var (rs_space, (int) size, (int) size, (relax_substateT) 0, rep_sym, (offsetT) 0, (char *) 0); } + memset (p, 0, (unsigned int) size); + /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX - * flavoured AS. The following bizzare behaviour is to be - * compatible with above. I guess they tried to take up to 8 - * bytes from a 4-byte expression and they forgot to sign - * extend. Un*x Sux. */ + flavoured AS. The following bizzare behaviour is to be + compatible with above. I guess they tried to take up to 8 + bytes from a 4-byte expression and they forgot to sign + extend. Un*x Sux. */ #define BSD_FILL_SIZE_CROCK_4 (4) md_number_to_chars (p, (valueT) fill, (size > BSD_FILL_SIZE_CROCK_4 ? BSD_FILL_SIZE_CROCK_4 : (int) size)); /* Note: .fill (),0 emits no frag (since we are asked to .fill 0 bytes) - * but emits no error message because it seems a legal thing to do. - * It is a degenerate case of .fill but could be emitted by a compiler. - */ + but emits no error message because it seems a legal thing to do. + It is a degenerate case of .fill but could be emitted by a + compiler. */ } demand_empty_rest_of_line (); } -void +void s_globl (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -1833,7 +1821,7 @@ s_irp (irpc) as_where (&file, &line); sb_new (&s); - while (! is_end_of_line[(unsigned char) *input_line_pointer]) + while (!is_end_of_line[(unsigned char) *input_line_pointer]) sb_add_char (&s, *input_line_pointer++); sb_new (&out); @@ -1864,7 +1852,7 @@ s_linkonce (ignore) type = LINKONCE_DISCARD; - if (! is_end_of_line[(unsigned char) *input_line_pointer]) + if (!is_end_of_line[(unsigned char) *input_line_pointer]) { char *s; char c; @@ -1914,7 +1902,7 @@ s_linkonce (ignore) flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS; break; } - if (! bfd_set_section_flags (stdoutput, now_seg, flags)) + if (!bfd_set_section_flags (stdoutput, now_seg, flags)) as_bad (_("bfd_set_section_flags: %s"), bfd_errmsg (bfd_get_error ())); } @@ -1926,13 +1914,13 @@ s_linkonce (ignore) demand_empty_rest_of_line (); } -static void +static void s_lcomm_internal (needs_align, bytes_p) /* 1 if this was a ".bss" directive, which may require a 3rd argument - (alignment); 0 if it was an ".lcomm" (2 args only) */ + (alignment); 0 if it was an ".lcomm" (2 args only). */ int needs_align; /* 1 if the alignment value should be interpreted as the byte boundary, - rather than the power of 2. */ + rather than the power of 2. */ int bytes_p; { register char *name; @@ -1983,7 +1971,7 @@ s_lcomm_internal (needs_align, bytes_p) bss_seg = subseg_new (".sbss", 1); seg_info (bss_seg)->bss = 1; #ifdef BFD_ASSEMBLER - if (! bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC)) + if (!bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC)) as_warn (_("error setting flags for \".sbss\": %s"), bfd_errmsg (bfd_get_error ())); #endif @@ -1991,33 +1979,38 @@ s_lcomm_internal (needs_align, bytes_p) } #endif - if (!needs_align) - { - TC_IMPLICIT_LCOMM_ALIGNMENT (temp, align); + if (!needs_align) + { + TC_IMPLICIT_LCOMM_ALIGNMENT (temp, align); - /* Still zero unless TC_IMPLICIT_LCOMM_ALIGNMENT set it. */ - if (align) - record_alignment(bss_seg, align); - } + /* Still zero unless TC_IMPLICIT_LCOMM_ALIGNMENT set it. */ + if (align) + record_alignment (bss_seg, align); + } if (needs_align) { align = 0; SKIP_WHITESPACE (); + if (*input_line_pointer != ',') { as_bad (_("Expected comma after size")); ignore_rest_of_line (); return; } + input_line_pointer++; SKIP_WHITESPACE (); + if (*input_line_pointer == '\n') { as_bad (_("Missing alignment")); return; } + align = get_absolute_expression (); + if (bytes_p) { /* Convert to a power of 2. */ @@ -2032,6 +2025,7 @@ s_lcomm_internal (needs_align, bytes_p) align = i; } } + if (align > max_alignment) { align = max_alignment; @@ -2042,8 +2036,9 @@ s_lcomm_internal (needs_align, bytes_p) align = 0; as_warn (_("Alignment negative. 0 assumed.")); } + record_alignment (bss_seg, align); - } /* if needs align */ + } else { /* Assume some objects may require alignment on some systems. */ @@ -2080,12 +2075,13 @@ s_lcomm_internal (needs_align, bytes_p) if (align) frag_align (align, 0, 0); - /* detach from old frag */ + + /* Detach from old frag. */ if (S_GET_SEGMENT (symbolP) == bss_seg) symbol_get_frag (symbolP)->fr_symbol = NULL; symbol_set_frag (symbolP, frag_now); - pfrag = frag_var (rs_org, 1, 1, (relax_substateT)0, symbolP, + pfrag = frag_var (rs_org, 1, 1, (relax_substateT) 0, symbolP, (offsetT) temp, (char *) 0); *pfrag = 0; @@ -2094,7 +2090,7 @@ s_lcomm_internal (needs_align, bytes_p) #ifdef OBJ_COFF /* The symbol may already have been created with a preceding ".globl" directive -- be careful not to step on storage class - in that case. Otherwise, set it to static. */ + in that case. Otherwise, set it to static. */ if (S_GET_STORAGE_CLASS (symbolP) != C_EXT) { S_SET_STORAGE_CLASS (symbolP, C_STAT); @@ -2112,7 +2108,7 @@ s_lcomm_internal (needs_align, bytes_p) subseg_set (current_seg, current_subseg); demand_empty_rest_of_line (); -} /* s_lcomm_internal() */ +} void s_lcomm (needs_align) @@ -2121,13 +2117,14 @@ s_lcomm (needs_align) s_lcomm_internal (needs_align, 0); } -void s_lcomm_bytes (needs_align) +void +s_lcomm_bytes (needs_align) int needs_align; { s_lcomm_internal (needs_align, 1); } -void +void s_lsym (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -2137,12 +2134,13 @@ s_lsym (ignore) expressionS exp; register symbolS *symbolP; - /* we permit ANY defined expression: BSD4.2 demands constants */ + /* We permit ANY defined expression: BSD4.2 demands constants. */ name = input_line_pointer; c = get_symbol_end (); p = input_line_pointer; *p = c; SKIP_WHITESPACE (); + if (*input_line_pointer != ',') { *p = 0; @@ -2151,8 +2149,10 @@ s_lsym (ignore) ignore_rest_of_line (); return; } + input_line_pointer++; expression (&exp); + if (exp.X_op != O_constant && exp.X_op != O_register) { @@ -2160,6 +2160,7 @@ s_lsym (ignore) ignore_rest_of_line (); return; } + *p = 0; symbolP = symbol_find_or_make (name); @@ -2168,13 +2169,13 @@ s_lsym (ignore) those fields, and I can't see when they'd ever be tripped. I don't think I understand why they were here so I may have introduced a bug. As recently as 1.37 didn't have this test - anyway. xoxorich. */ + anyway. xoxorich. */ if (S_GET_SEGMENT (symbolP) == undefined_section && S_GET_VALUE (symbolP) == 0) { /* The name might be an undefined .global symbol; be sure to - keep the "external" bit. */ + keep the "external" bit. */ S_SET_SEGMENT (symbolP, (exp.X_op == O_constant ? absolute_section @@ -2185,9 +2186,10 @@ s_lsym (ignore) { as_bad (_("Symbol %s already defined"), name); } + *p = c; demand_empty_rest_of_line (); -} /* s_lsym() */ +} /* Read a line into an sb. */ @@ -2209,7 +2211,7 @@ get_line_sb (line) /* If app.c sets any other characters to LEX_IS_STRINGQUOTE, this code needs to be changed. */ - if (! flag_m68k_mri) + if (!flag_m68k_mri) quote1 = '"'; else quote1 = '\0'; @@ -2222,7 +2224,8 @@ get_line_sb (line) #endif inquote = '\0'; - while (! is_end_of_line[(unsigned char) *input_line_pointer] + + while (!is_end_of_line[(unsigned char) *input_line_pointer] || (inquote != '\0' && *input_line_pointer != '\n')) { if (inquote == *input_line_pointer) @@ -2234,8 +2237,10 @@ get_line_sb (line) else if (*input_line_pointer == quote2) inquote = quote2; } + sb_add_char (line, *input_line_pointer++); } + while (input_line_pointer < buffer_limit && is_end_of_line[(unsigned char) *input_line_pointer]) { @@ -2243,6 +2248,7 @@ get_line_sb (line) bump_line_counters (); ++input_line_pointer; } + return 1; } @@ -2263,7 +2269,7 @@ s_macro (ignore) as_where (&file, &line); sb_new (&s); - while (! is_end_of_line[(unsigned char) *input_line_pointer]) + while (!is_end_of_line[(unsigned char) *input_line_pointer]) sb_add_char (&s, *input_line_pointer++); sb_new (&label); @@ -2284,7 +2290,7 @@ s_macro (ignore) if (((NO_PSEUDO_DOT || flag_m68k_mri) && hash_find (po_hash, name) != NULL) - || (! flag_m68k_mri + || (!flag_m68k_mri && *name == '.' && hash_find (po_hash, name + 1) != NULL)) as_warn (_("attempt to redefine pseudo-op `%s' ignored"), @@ -2377,7 +2383,7 @@ do_org (segment, exp, fill) } } -void +void s_org (ignore) int ignore ATTRIBUTE_UNUSED; { @@ -2424,7 +2430,7 @@ s_org (ignore) do_org (segment, &exp, temp_fill); demand_empty_rest_of_line (); -} /* s_org() */ +} /* Handle parsing for the MRI SECT/SECTION pseudo-op. This should be called by the obj-format routine which handles section changing @@ -2444,9 +2450,9 @@ s_mri_sect (type) segT seg; SKIP_WHITESPACE (); - + name = input_line_pointer; - if (! isdigit ((unsigned char) *name)) + if (!isdigit ((unsigned char) *name)) c = get_symbol_end (); else { @@ -2455,6 +2461,7 @@ s_mri_sect (type) ++input_line_pointer; } while (isdigit ((unsigned char) *input_line_pointer)); + c = *input_line_pointer; *input_line_pointer = '\0'; } @@ -2498,7 +2505,7 @@ s_mri_sect (type) flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_READONLY | SEC_ROM; if (flags != SEC_NO_FLAGS) { - if (! bfd_set_section_flags (stdoutput, seg, flags)) + if (!bfd_set_section_flags (stdoutput, seg, flags)) as_warn (_("error setting flags for \"%s\": %s"), bfd_section_name (stdoutput, seg), bfd_errmsg (bfd_get_error ())); @@ -2584,7 +2591,7 @@ s_mri_sect (type) } } - demand_empty_rest_of_line (); + demand_empty_rest_of_line (); #else /* ! TC_I960 */ /* The MRI assembler seems to use different forms of .sect for @@ -2649,23 +2656,23 @@ s_rept (ignore) count = get_absolute_expression (); - do_repeat(count, "REPT", "ENDR"); + do_repeat (count, "REPT", "ENDR"); } /* This function provides a generic repeat block implementation. It allows - different directives to be used as the start/end keys. */ + different directives to be used as the start/end keys. */ void do_repeat (count, start, end) - int count; - const char *start; - const char *end; + int count; + const char *start; + const char *end; { sb one; sb many; sb_new (&one); - if (! buffer_and_nest (start, end, &one, get_line_sb)) + if (!buffer_and_nest (start, end, &one, get_line_sb)) { as_bad (_("%s without %s"), start, end); return; @@ -2684,15 +2691,15 @@ do_repeat (count, start, end) /* Skip to end of current repeat loop; EXTRA indicates how many additional input buffers to skip. Assumes that conditionals preceding the loop end - are properly nested. + are properly nested. This function makes it easier to implement a premature "break" out of the loop. The EXTRA arg accounts for other buffers we might have inserted, - such as line substitutions. */ + such as line substitutions. */ void end_repeat (extra) - int extra; + int extra; { cond_exit_macro (macro_nest); while (extra-- >= 0) @@ -2703,7 +2710,7 @@ end_repeat (extra) this is .equiv, and it is an error if the symbol is already defined. */ -void +void s_set (equiv) int equiv; { @@ -2712,11 +2719,9 @@ s_set (equiv) register char *end_name; register symbolS *symbolP; - /* - * Especial apologies for the random logic: - * this just grew, and could be parsed much more simply! - * Dean in haste. - */ + /* Especial apologies for the random logic: + this just grew, and could be parsed much more simply! + Dean in haste. */ name = input_line_pointer; delim = get_symbol_end (); end_name = input_line_pointer; @@ -2737,7 +2742,7 @@ s_set (equiv) if (name[0] == '.' && name[1] == '\0') { - /* Turn '. = mumble' into a .org mumble */ + /* Turn '. = mumble' into a .org mumble. */ register segT segment; expressionS exp; @@ -2760,8 +2765,8 @@ s_set (equiv) if (listing & LISTING_SYMBOLS) { extern struct list_info_struct *listing_tail; - fragS *dummy_frag = (fragS *) xmalloc (sizeof(fragS)); - memset (dummy_frag, 0, sizeof(fragS)); + fragS *dummy_frag = (fragS *) xmalloc (sizeof (fragS)); + memset (dummy_frag, 0, sizeof (fragS)); dummy_frag->fr_type = rs_fill; dummy_frag->line = listing_tail; symbolP = symbol_new (name, undefined_section, 0, dummy_frag); @@ -2769,14 +2774,13 @@ s_set (equiv) } else #endif - symbolP = symbol_new (name, undefined_section, 0, &zero_address_frag); - + symbolP = symbol_new (name, undefined_section, 0, &zero_address_frag); + #ifdef OBJ_COFF - /* "set" symbols are local unless otherwise specified. */ + /* "set" symbols are local unless otherwise specified. */ SF_SET_LOCAL (symbolP); #endif /* OBJ_COFF */ - - } /* make a new symbol */ + } symbol_table_insert (symbolP); @@ -2789,9 +2793,9 @@ s_set (equiv) pseudo_set (symbolP); demand_empty_rest_of_line (); -} /* s_set() */ +} -void +void s_space (mult) int mult; { @@ -2895,7 +2899,7 @@ s_space (mult) bytes = repeat; if (repeat <= 0) { - if (! flag_mri) + if (!flag_mri) as_warn (_(".space repeat count is zero, ignored")); else if (repeat < 0) as_warn (_(".space repeat count is negative, ignored")); @@ -2930,11 +2934,13 @@ s_space (mult) as_bad (_("space allocation too complex in absolute section")); subseg_set (text_section, 0); } + if (mri_common_symbol != NULL) { as_bad (_("space allocation too complex in common section")); mri_common_symbol = NULL; } + if (!need_pass_2) p = frag_var (rs_space, 1, 1, (relax_substateT) 0, make_expr_symbol (&exp), (offsetT) 0, (char *) 0); @@ -3071,27 +3077,24 @@ s_text (ignore) #ifdef OBJ_VMS const_flag &= ~IN_DEFAULT_SECTION; #endif -} /* s_text() */ +} - -void +void demand_empty_rest_of_line () { SKIP_WHITESPACE (); if (is_end_of_line[(unsigned char) *input_line_pointer]) - { - input_line_pointer++; - } + input_line_pointer++; else - { - ignore_rest_of_line (); - } - /* Return having already swallowed end-of-line. */ -} /* Return pointing just after end-of-line. */ + ignore_rest_of_line (); + + /* Return having already swallowed end-of-line. */ +} void -ignore_rest_of_line () /* For suspect lines: gives warning. */ +ignore_rest_of_line () { + /* For suspect lines: gives warning. */ if (!is_end_of_line[(unsigned char) *input_line_pointer]) { if (isprint ((unsigned char) *input_line_pointer)) @@ -3100,13 +3103,15 @@ ignore_rest_of_line () /* For suspect lines: gives warning. */ else as_bad (_("Rest of line ignored. First ignored character valued 0x%x."), *input_line_pointer); + while (input_line_pointer < buffer_limit && !is_end_of_line[(unsigned char) *input_line_pointer]) - { - input_line_pointer++; - } + input_line_pointer++; } - input_line_pointer++; /* Return pointing just after end-of-line. */ + + input_line_pointer++; + + /* Return pointing just after end-of-line. */ know (is_end_of_line[(unsigned char) input_line_pointer[-1]]); } @@ -3114,24 +3119,22 @@ void discard_rest_of_line () { while (input_line_pointer < buffer_limit - && !is_end_of_line[(unsigned char) *input_line_pointer]) - { - input_line_pointer++; - } - input_line_pointer++; /* Return pointing just after end-of-line. */ + && !is_end_of_line[(unsigned char) *input_line_pointer]) + input_line_pointer++; + + input_line_pointer++; + + /* Return pointing just after end-of-line. */ know (is_end_of_line[(unsigned char) input_line_pointer[-1]]); } -/* - * pseudo_set() - * - * In: Pointer to a symbol. - * Input_line_pointer->expression. - * - * Out: Input_line_pointer->just after any whitespace after expression. - * Tried to set symbol to value of expression. - * Will change symbols type, value, and frag; - */ +/* In: Pointer to a symbol. + Input_line_pointer->expression. + + Out: Input_line_pointer->just after any whitespace after expression. + Tried to set symbol to value of expression. + Will change symbols type, value, and frag; */ + void pseudo_set (symbolP) symbolS *symbolP; @@ -3141,7 +3144,7 @@ pseudo_set (symbolP) int ext; #endif /* OBJ_AOUT or OBJ_BOUT */ - know (symbolP); /* NULL pointer is logic error. */ + know (symbolP); /* NULL pointer is logic error. */ #if (defined (OBJ_AOUT) || defined (OBJ_BOUT)) && ! defined (BFD_ASSEMBLER) ext = S_IS_EXTERNAL (symbolP); #endif /* OBJ_AOUT or OBJ_BOUT */ @@ -3188,7 +3191,7 @@ pseudo_set (symbolP) #endif /* OBJ_AOUT or OBJ_BOUT */ S_SET_VALUE (symbolP, (valueT) exp.X_add_number); if (exp.X_op != O_constant) - symbol_set_frag (symbolP, &zero_address_frag); + symbol_set_frag (symbolP, &zero_address_frag); break; case O_register: @@ -3229,20 +3232,18 @@ pseudo_set (symbolP) } } -/* - * cons() - * - * CONStruct more frag of .bytes, or .words etc. - * Should need_pass_2 be 1 then emit no frag(s). - * This understands EXPRESSIONS. - * - * Bug (?) - * - * This has a split personality. We use expression() to read the - * value. We can detect if the value won't fit in a byte or word. - * But we can't detect if expression() discarded significant digits - * in the case of a long. Not worth the crocks required to fix it. - */ +/* cons() + + CONStruct more frag of .bytes, or .words etc. + Should need_pass_2 be 1 then emit no frag(s). + This understands EXPRESSIONS. + + Bug (?) + + This has a split personality. We use expression() to read the + value. We can detect if the value won't fit in a byte or word. + But we can't detect if expression() discarded significant digits + in the case of a long. Not worth the crocks required to fix it. */ /* Select a parser for cons expressions. */ @@ -3262,7 +3263,7 @@ parse_mri_cons PARAMS ((expressionS *exp, unsigned int nbytes)); #ifndef TC_PARSE_CONS_EXPRESSION #ifdef BITFIELD_CONS_EXPRESSIONS #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) parse_bitfield_cons (EXP, NBYTES) -static void +static void parse_bitfield_cons PARAMS ((expressionS *exp, unsigned int nbytes)); #endif #ifdef REPEAT_CONS_EXPRESSIONS @@ -3277,12 +3278,12 @@ parse_repeat_cons PARAMS ((expressionS *exp, unsigned int nbytes)); #endif #endif -/* worker to do .byte etc statements */ -/* clobbers input_line_pointer, checks */ -/* end-of-line. */ -static void +/* Worker to do .byte etc statements. + Clobbers input_line_pointer and checks end-of-line. */ + +static void cons_worker (nbytes, rva) - register int nbytes; /* 1=.byte, 2=.word, 4=.long */ + register int nbytes; /* 1=.byte, 2=.word, 4=.long. */ int rva; { int c; @@ -3337,7 +3338,7 @@ cons_worker (nbytes, rva) if (flag_mri && nbytes == 1 && (c & 1) != 0) mri_pending_align = 1; - input_line_pointer--; /* Put terminator back into stream. */ + input_line_pointer--; /* Put terminator back into stream. */ demand_empty_rest_of_line (); @@ -3345,7 +3346,6 @@ cons_worker (nbytes, rva) mri_comment_end (stop, stopc); } - void cons (size) int size; @@ -3353,7 +3353,7 @@ cons (size) cons_worker (size, 0); } -void +void s_rva (size) int size; { @@ -3471,7 +3471,7 @@ emit_expr (exp, nbytes) { unsigned long next; - next = (((~ (generic_bignum[i] & LITTLENUM_MASK)) + next = (((~(generic_bignum[i] & LITTLENUM_MASK)) & LITTLENUM_MASK) + carry); generic_bignum[i] = next & LITTLENUM_MASK; @@ -3536,7 +3536,7 @@ emit_expr (exp, nbytes) valueT val; int gencnt; - if (! exp->X_unsigned && exp->X_add_number < 0) + if (!exp->X_unsigned && exp->X_add_number < 0) extra_digit = (valueT) -1; val = (valueT) exp->X_add_number; gencnt = 0; @@ -3560,7 +3560,7 @@ emit_expr (exp, nbytes) register valueT unmask; /* JF << of >= number of bits in the object is undefined. In - particular SPARC (Sun 4) has problems */ + particular SPARC (Sun 4) has problems. */ if (nbytes >= sizeof (valueT)) { mask = 0; @@ -3571,16 +3571,16 @@ emit_expr (exp, nbytes) } else { - /* Don't store these bits. */ + /* Don't store these bits. */ mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes); hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1); } - unmask = ~mask; /* Do store these bits. */ + unmask = ~mask; /* Do store these bits. */ #ifdef NEVER "Do this mod if you want every overflow check to assume SIGNED 2's complement data."; - mask = ~(unmask >> 1); /* Includes sign bit now. */ + mask = ~(unmask >> 1); /* Includes sign bit now. */ #endif get = exp->X_add_number; @@ -3588,11 +3588,11 @@ emit_expr (exp, nbytes) if ((get & mask) != 0 && ((get & mask) != mask || (get & hibit) == 0)) - { /* Leading bits contain both 0s & 1s. */ + { /* Leading bits contain both 0s & 1s. */ as_warn (_("Value 0x%lx truncated to 0x%lx."), (unsigned long) get, (unsigned long) use); } - /* put bytes in right order. */ + /* Put bytes in right order. */ md_number_to_chars (p, use, (int) nbytes); } else if (op == O_big) @@ -3727,7 +3727,7 @@ emit_expr (exp, nbytes) To use this function the tc-XXX.h file should define BITFIELD_CONS_EXPRESSIONS. */ -static void +static void parse_bitfield_cons (exp, nbytes) expressionS *exp; unsigned int nbytes; @@ -3738,7 +3738,8 @@ parse_bitfield_cons (exp, nbytes) (void) expression (exp); if (*input_line_pointer == ':') - { /* bitfields */ + { + /* Bitfields. */ long value = 0; for (;;) @@ -3749,7 +3750,7 @@ parse_bitfield_cons (exp, nbytes) { input_line_pointer = hold; break; - } /* next piece is not a bitfield */ + } /* Next piece is not a bitfield. */ /* In the general case, we can't allow full expressions with symbol @@ -3767,14 +3768,14 @@ parse_bitfield_cons (exp, nbytes) backends. I'm lazy. I'll take any SEG_ABSOLUTE. I think that means that you can use a previous .set or - .equ type symbol. xoxorich. */ + .equ type symbol. xoxorich. */ if (exp->X_op == O_absent) { as_warn (_("using a bit field width of zero")); exp->X_add_number = 0; exp->X_op = O_constant; - } /* implied zero width bitfield */ + } /* Implied zero width bitfield. */ if (exp->X_op != O_constant) { @@ -3783,14 +3784,14 @@ parse_bitfield_cons (exp, nbytes) *input_line_pointer = ':'; demand_empty_rest_of_line (); return; - } /* too complex */ + } /* Too complex. */ if ((width = exp->X_add_number) > (BITS_PER_CHAR * nbytes)) { as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"), width, nbytes, (BITS_PER_CHAR * nbytes)); width = BITS_PER_CHAR * nbytes; - } /* too big */ + } /* Too big. */ if (width > bits_available) { @@ -3798,7 +3799,7 @@ parse_bitfield_cons (exp, nbytes) input_line_pointer = hold; exp->X_add_number = value; break; - } /* won't fit */ + } /* Won't fit. */ hold = ++input_line_pointer; /* skip ':' */ @@ -3812,7 +3813,7 @@ parse_bitfield_cons (exp, nbytes) *input_line_pointer = cache; demand_empty_rest_of_line (); return; - } /* too complex */ + } /* Too complex. */ value |= ((~(-1 << width) & exp->X_add_number) << ((BITS_PER_CHAR * nbytes) - bits_available)); @@ -3822,17 +3823,17 @@ parse_bitfield_cons (exp, nbytes) || *input_line_pointer != ',') { break; - } /* all the bitfields we're gonna get */ + } /* All the bitfields we're gonna get. */ hold = ++input_line_pointer; (void) expression (exp); - } /* forever loop */ + } exp->X_add_number = value; exp->X_op = O_constant; exp->X_unsigned = 1; - } /* if looks like a bitfield */ -} /* parse_bitfield_cons() */ + } +} #endif /* BITFIELD_CONS_EXPRESSIONS */ @@ -3880,16 +3881,18 @@ parse_mri_cons (exp, nbytes) result = (result << 8) | (*input_line_pointer++); } - /* Left justify */ + /* Left justify. */ while (scan < nbytes) { result <<= 8; scan++; } - /* Create correct expression */ + + /* Create correct expression. */ exp->X_op = O_constant; exp->X_add_number = result; - /* Fake it so that we can read the next char too */ + + /* Fake it so that we can read the next char too. */ if (input_line_pointer[0] != '\'' || (input_line_pointer[0] == '\'' && input_line_pointer[1] == '\'')) { @@ -3996,7 +3999,7 @@ hex_float (float_type, bytes) int d; /* The MRI assembler accepts arbitrary underscores strewn about - through the hex constant, so we ignore them as well. */ + through the hex constant, so we ignore them as well. */ if (*input_line_pointer == '_') { ++input_line_pointer; @@ -4035,34 +4038,31 @@ hex_float (float_type, bytes) return length; } -/* - * float_cons() - * - * CONStruct some more frag chars of .floats .ffloats etc. - * Makes 0 or more new frags. - * If need_pass_2 == 1, no frags are emitted. - * This understands only floating literals, not expressions. Sorry. - * - * A floating constant is defined by atof_generic(), except it is preceded - * by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its - * reading, I decided to be incompatible. This always tries to give you - * rounded bits to the precision of the pseudo-op. Former AS did premature - * truncatation, restored noisy bits instead of trailing 0s AND gave you - * a choice of 2 flavours of noise according to which of 2 floating-point - * scanners you directed AS to use. - * - * In: input_line_pointer->whitespace before, or '0' of flonum. - * - */ +/* float_cons() + + CONStruct some more frag chars of .floats .ffloats etc. + Makes 0 or more new frags. + If need_pass_2 == 1, no frags are emitted. + This understands only floating literals, not expressions. Sorry. + + A floating constant is defined by atof_generic(), except it is preceded + by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its + reading, I decided to be incompatible. This always tries to give you + rounded bits to the precision of the pseudo-op. Former AS did premature + truncatation, restored noisy bits instead of trailing 0s AND gave you + a choice of 2 flavours of noise according to which of 2 floating-point + scanners you directed AS to use. + + In: input_line_pointer->whitespace before, or '0' of flonum. */ void float_cons (float_type) - /* Clobbers input_line-pointer, checks end-of-line. */ - register int float_type; /* 'f':.ffloat ... 'F':.float ... */ + /* Clobbers input_line-pointer, checks end-of-line. */ + register int float_type; /* 'f':.ffloat ... 'F':.float ... */ { register char *p; - int length; /* Number of chars in an object. */ - register char *err; /* Error from scanning floating literal. */ + int length; /* Number of chars in an object. */ + register char *err; /* Error from scanning floating literal. */ char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT]; if (is_it_end_of_statement ()) @@ -4077,14 +4077,13 @@ float_cons (float_type) do { - /* input_line_pointer->1st char of a flonum (we hope!). */ + /* input_line_pointer->1st char of a flonum (we hope!). */ SKIP_WHITESPACE (); /* Skip any 0{letter} that may be present. Don't even check if the - * letter is legal. Someone may invent a "z" format and this routine - * has no use for such information. Lusers beware: you get - * diagnostics if your input is ill-conditioned. - */ + letter is legal. Someone may invent a "z" format and this routine + has no use for such information. Lusers beware: you get + diagnostics if your input is ill-conditioned. */ if (input_line_pointer[0] == '0' && isalpha ((unsigned char) input_line_pointer[1])) input_line_pointer += 2; @@ -4127,11 +4126,10 @@ float_cons (float_type) ++input_line_pointer; expression (&count_exp); + if (count_exp.X_op != O_constant || count_exp.X_add_number <= 0) - { - as_warn (_("unresolvable or nonpositive repeat count; using 1")); - } + as_warn (_("unresolvable or nonpositive repeat count; using 1")); else count = count_exp.X_add_number; } @@ -4147,11 +4145,12 @@ float_cons (float_type) } while (*input_line_pointer++ == ','); - --input_line_pointer; /* Put terminator back into stream. */ + /* Put terminator back into stream. */ + --input_line_pointer; demand_empty_rest_of_line (); -} /* float_cons() */ +} -/* Return the size of a LEB128 value */ +/* Return the size of a LEB128 value. */ static inline int sizeof_sleb128 (value) @@ -4285,7 +4284,7 @@ output_big_sleb128 (p, bignum, size) unsigned byte; /* Strip leading sign extensions off the bignum. */ - while (size > 0 && bignum[size-1] == (LITTLENUM_TYPE)-1) + while (size > 0 && bignum[size - 1] == (LITTLENUM_TYPE) -1) size--; do @@ -4305,7 +4304,7 @@ output_big_sleb128 (p, bignum, size) if (size == 0) { if ((val == 0 && (byte & 0x40) == 0) - || (~(val | ~(((valueT)1 << loaded) - 1)) == 0 + || (~(val | ~(((valueT) 1 << loaded) - 1)) == 0 && (byte & 0x40) != 0)) byte |= 0x80; } @@ -4332,7 +4331,7 @@ output_big_uleb128 (p, bignum, size) /* Strip leading zeros off the bignum. */ /* XXX: Is this needed? */ - while (size > 0 && bignum[size-1] == 0) + while (size > 0 && bignum[size - 1] == 0) size--; do @@ -4377,7 +4376,7 @@ output_big_leb128 (p, bignum, size, sign) leb128 value. */ void -emit_leb128_expr(exp, sign) +emit_leb128_expr (exp, sign) expressionS *exp; int sign; { @@ -4426,10 +4425,10 @@ emit_leb128_expr(exp, sign) } else { - /* Otherwise, we have to create a variable sized fragment and + /* Otherwise, we have to create a variable sized fragment and resolve things later. */ - frag_var (rs_leb128, sizeof_uleb128 (~(valueT)0), 0, sign, + frag_var (rs_leb128, sizeof_uleb128 (~(valueT) 0), 0, sign, make_expr_symbol (exp), 0, (char *) NULL); } } @@ -4442,28 +4441,25 @@ s_leb128 (sign) { expressionS exp; - do { - expression (&exp); - emit_leb128_expr (&exp, sign); - } while (*input_line_pointer++ == ','); + do + { + expression (&exp); + emit_leb128_expr (&exp, sign); + } + while (*input_line_pointer++ == ','); input_line_pointer--; demand_empty_rest_of_line (); } -/* - * stringer() - * - * We read 0 or more ',' separated, double-quoted strings. - * - * Caller should have checked need_pass_2 is FALSE because we don't check it. - */ - - -void -stringer (append_zero) /* Worker to do .ascii etc statements. */ - /* Checks end-of-line. */ - register int append_zero; /* 0: don't append '\0', else 1 */ +/* We read 0 or more ',' separated, double-quoted strings. + Caller should have checked need_pass_2 is FALSE because we don't + check it. */ + +void +stringer (append_zero) /* Worker to do .ascii etc statements. */ + /* Checks end-of-line. */ + register int append_zero; /* 0: don't append '\0', else 1. */ { register unsigned int c; char *start; @@ -4472,22 +4468,19 @@ stringer (append_zero) /* Worker to do .ascii etc statements. */ md_flush_pending_output (); #endif - /* - * The following awkward logic is to parse ZERO or more strings, - * comma separated. Recall a string expression includes spaces - * before the opening '\"' and spaces after the closing '\"'. - * We fake a leading ',' if there is (supposed to be) - * a 1st, expression. We keep demanding expressions for each - * ','. - */ + /* The following awkward logic is to parse ZERO or more strings, + comma separated. Recall a string expression includes spaces + before the opening '\"' and spaces after the closing '\"'. + We fake a leading ',' if there is (supposed to be) + a 1st, expression. We keep demanding expressions for each ','. */ if (is_it_end_of_statement ()) { - c = 0; /* Skip loop. */ - ++input_line_pointer; /* Compensate for end of loop. */ + c = 0; /* Skip loop. */ + ++input_line_pointer; /* Compensate for end of loop. */ } else { - c = ','; /* Do loop. */ + c = ','; /* Do loop. */ } while (c == ',' || c == '<' || c == '"') { @@ -4495,7 +4488,7 @@ stringer (append_zero) /* Worker to do .ascii etc statements. */ switch (*input_line_pointer) { case '\"': - ++input_line_pointer; /*->1st char of string. */ + ++input_line_pointer; /*->1st char of string. */ start = input_line_pointer; while (is_a_char (c = next_char_of_string ())) { @@ -4552,9 +4545,9 @@ stringer (append_zero) /* Worker to do .ascii etc statements. */ /* FIXME-SOMEDAY: I had trouble here on characters with the high bits set. We'll probably also have trouble with multibyte chars, wide chars, etc. Also be careful about - returning values bigger than 1 byte. xoxorich. */ + returning values bigger than 1 byte. xoxorich. */ -unsigned int +unsigned int next_char_of_string () { register unsigned int c; @@ -4601,7 +4594,7 @@ next_char_of_string () case '\\': case '"': - break; /* As itself. */ + break; /* As itself. */ case '0': case '1': @@ -4617,10 +4610,13 @@ next_char_of_string () long number; int i; - for (i = 0, number = 0; isdigit (c) && i < 3; c = *input_line_pointer++, i++) + for (i = 0, number = 0; + isdigit (c) && i < 3; + c = *input_line_pointer++, i++) { number = number * 8 + c - '0'; } + c = number & 0xff; } --input_line_pointer; @@ -4649,7 +4645,7 @@ next_char_of_string () break; case '\n': - /* To be compatible with BSD 4.2 as: give the luser a linefeed!! */ + /* To be compatible with BSD 4.2 as: give the luser a linefeed!! */ as_warn (_("Unterminated string: Newline inserted.")); c = '\n'; bump_line_counters (); @@ -4663,15 +4659,15 @@ next_char_of_string () #endif /* ONLY_STANDARD_ESCAPES */ break; - } /* switch on escaped char */ + } break; #endif /* ! defined (NO_STRING_ESCAPES) */ default: break; - } /* switch on char */ + } return (c); -} /* next_char_of_string() */ +} static segT get_segmented_expression (expP) @@ -4692,7 +4688,7 @@ get_segmented_expression (expP) return retval; } -static segT +static segT get_known_segmented_expression (expP) register expressionS *expP; { @@ -4714,7 +4710,7 @@ get_known_segmented_expression (expP) } know (retval == absolute_section || SEG_NORMAL (retval)); return (retval); -} /* get_known_segmented_expression() */ +} offsetT get_absolute_expression () @@ -4731,21 +4727,18 @@ get_absolute_expression () return exp.X_add_number; } -char /* return terminator */ +char /* Return terminator. */ get_absolute_expression_and_terminator (val_pointer) - long *val_pointer; /* return value of expression */ + long *val_pointer; /* Return value of expression. */ { /* FIXME: val_pointer should probably be offsetT *. */ *val_pointer = (long) get_absolute_expression (); return (*input_line_pointer++); } -/* - * demand_copy_C_string() - * - * Like demand_copy_string, but return NULL if the string contains any '\0's. - * Give a warning if that happens. - */ +/* Like demand_copy_string, but return NULL if the string contains any '\0's. + Give a warning if that happens. */ + char * demand_copy_C_string (len_pointer) int *len_pointer; @@ -4767,15 +4760,13 @@ demand_copy_C_string (len_pointer) } } } + return s; } -/* - * demand_copy_string() - * - * Demand string, but return a safe (=private) copy of the string. - * Return NULL if we can't read a string here. - */ +/* Demand string, but return a safe (=private) copy of the string. + Return NULL if we can't read a string here. */ + char * demand_copy_string (lenP) int *lenP; @@ -4788,7 +4779,7 @@ demand_copy_string (lenP) SKIP_WHITESPACE (); if (*input_line_pointer == '\"') { - input_line_pointer++; /* Skip opening quote. */ + input_line_pointer++; /* Skip opening quote. */ while (is_a_char (c = next_char_of_string ())) { @@ -4796,7 +4787,7 @@ demand_copy_string (lenP) len++; } /* JF this next line is so demand_copy_C_string will return a - null terminated string. */ + null terminated string. */ obstack_1grow (¬es, '\0'); retval = obstack_finish (¬es); } @@ -4808,30 +4799,27 @@ demand_copy_string (lenP) } *lenP = len; return (retval); -} /* demand_copy_string() */ +} -/* - * is_it_end_of_statement() - * - * In: Input_line_pointer->next character. - * - * Do: Skip input_line_pointer over all whitespace. - * - * Out: 1 if input_line_pointer->end-of-line. -*/ -int +/* In: Input_line_pointer->next character. + + Do: Skip input_line_pointer over all whitespace. + + Out: 1 if input_line_pointer->end-of-line. */ + +int is_it_end_of_statement () { SKIP_WHITESPACE (); return (is_end_of_line[(unsigned char) *input_line_pointer]); -} /* is_it_end_of_statement() */ +} -void +void equals (sym_name, reassign) char *sym_name; int reassign; { - register symbolS *symbolP; /* symbol we are working with */ + register symbolS *symbolP; /* Symbol we are working with. */ char *stop = NULL; char stopc; @@ -4847,7 +4835,7 @@ equals (sym_name, reassign) if (sym_name[0] == '.' && sym_name[1] == '\0') { - /* Turn '. = mumble' into a .org mumble */ + /* Turn '. = mumble' into a .org mumble. */ register segT segment; expressionS exp; @@ -4859,7 +4847,7 @@ equals (sym_name, reassign) { symbolP = symbol_find_or_make (sym_name); /* Permit register names to be redefined. */ - if (! reassign + if (!reassign && S_IS_DEFINED (symbolP) && S_GET_SEGMENT (symbolP) != reg_section) as_bad (_("symbol `%s' already defined"), S_GET_NAME (symbolP)); @@ -4867,16 +4855,16 @@ equals (sym_name, reassign) } if (flag_mri) - { - ignore_rest_of_line (); /* check garbage after the expression */ - mri_comment_end (stop, stopc); - } -} /* equals() */ + { + /* Check garbage after the expression. */ + ignore_rest_of_line (); + mri_comment_end (stop, stopc); + } +} -/* .include -- include a file at this point. */ +/* .include -- include a file at this point. */ -/* ARGSUSED */ -void +void s_include (arg) int arg ATTRIBUTE_UNUSED; { @@ -4885,7 +4873,7 @@ s_include (arg) FILE *try; char *path; - if (! flag_m68k_mri) + if (!flag_m68k_mri) { filename = demand_copy_string (&i); if (filename == NULL) @@ -4899,7 +4887,7 @@ s_include (arg) { SKIP_WHITESPACE (); i = 0; - while (! is_end_of_line[(unsigned char) *input_line_pointer] + while (!is_end_of_line[(unsigned char) *input_line_pointer] && *input_line_pointer != ' ' && *input_line_pointer != '\t') { @@ -4907,13 +4895,16 @@ s_include (arg) ++input_line_pointer; ++i; } + obstack_1grow (¬es, '\0'); filename = obstack_finish (¬es); - while (! is_end_of_line[(unsigned char) *input_line_pointer]) + while (!is_end_of_line[(unsigned char) *input_line_pointer]) ++input_line_pointer; } + demand_empty_rest_of_line (); path = xmalloc ((unsigned long) i + include_dir_maxlen + 5 /* slop */ ); + for (i = 0; i < include_dir_count; i++) { strcpy (path, include_dirs[i]); @@ -4925,15 +4916,16 @@ s_include (arg) goto gotit; } } + free (path); path = filename; gotit: - /* malloc Storage leak when file is found on path. FIXME-SOMEDAY. */ + /* malloc Storage leak when file is found on path. FIXME-SOMEDAY. */ register_dependency (path); input_scrub_insert_file (path); -} /* s_include() */ +} -void +void add_include_dir (path) char *path; { @@ -4942,22 +4934,23 @@ add_include_dir (path) if (include_dir_count == 0) { include_dirs = (char **) xmalloc (2 * sizeof (*include_dirs)); - include_dirs[0] = "."; /* Current dir */ + include_dirs[0] = "."; /* Current dir. */ include_dir_count = 2; } else { include_dir_count++; - include_dirs = (char **) realloc (include_dirs, - include_dir_count * sizeof (*include_dirs)); + include_dirs = + (char **) realloc (include_dirs, + include_dir_count * sizeof (*include_dirs)); } - include_dirs[include_dir_count - 1] = path; /* New one */ + include_dirs[include_dir_count - 1] = path; /* New one. */ i = strlen (path); if (i > include_dir_maxlen) include_dir_maxlen = i; -} /* add_include_dir() */ +} /* Output debugging information to denote the source file. */ @@ -4974,12 +4967,12 @@ void generate_lineno_debug () { #ifdef ECOFF_DEBUGGING - /* ECOFF assemblers automatically generate debugging information. + /* ECOFF assemblers automatically generate debugging information. FIXME: This should probably be handled elsewhere. */ if (debug_type == DEBUG_UNSPECIFIED) { if (ECOFF_DEBUGGING && ecoff_no_current_file ()) - debug_type = DEBUG_ECOFF; + debug_type = DEBUG_ECOFF; else debug_type = DEBUG_NONE; } @@ -5043,8 +5036,8 @@ do_s_func (end_p, default_prefix) } else /* ! end_p */ { - char *name,*label; - char delim1,delim2; + char *name, *label; + char delim1, delim2; if (current_name != NULL) { @@ -5096,7 +5089,7 @@ do_s_func (end_p, default_prefix) demand_empty_rest_of_line (); } -void +void s_ignore (arg) int arg ATTRIBUTE_UNUSED; { @@ -5107,7 +5100,6 @@ s_ignore (arg) ++input_line_pointer; } - void read_print_statistics (file) FILE *file; @@ -5115,8 +5107,8 @@ read_print_statistics (file) hash_print_statistics (file, "pseudo-op table", po_hash); } -/* Inserts the given line into the input stream. - +/* Inserts the given line into the input stream. + This call avoids macro/conditionals nesting checking, since the contents of the line are assumed to replace the contents of a line already scanned. @@ -5126,7 +5118,7 @@ read_print_statistics (file) void input_scrub_insert_line (line) - const char *line; + const char *line; { sb newline; sb_new (&newline); @@ -5137,14 +5129,12 @@ input_scrub_insert_line (line) } /* Insert a file into the input stream; the path must resolve to an actual - file; no include path searching or dependency registering is performed. */ + file; no include path searching or dependency registering is performed. */ void input_scrub_insert_file (path) - char *path; + char *path; { input_scrub_include_file (path, input_line_pointer); buffer_limit = input_scrub_next_buffer (&input_line_pointer); } - -/* end of read.c */ |