1 /* read.c - read a source file -
2 Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
3 2000 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #define MASK_CHAR (0xFF) /* If your chars aren't 8 bits, you will
24 change this a bit. But then, GNU isn't
25 spozed to run on your machine anyway.
26 (RMS is so shortsighted sometimes.)
29 #define MASK_CHAR ((int)(unsigned char)-1)
33 /* This is the largest known floating point format (for now). It will
34 grow when we do 4361 style flonums. */
36 #define MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT (16)
38 /* Routines that read assembler source text to build spagetti in memory.
39 Another group of these functions is in the expr.c module. */
52 #ifndef TC_START_LABEL
53 #define TC_START_LABEL(x,y) (x==':')
56 /* The NOP_OPCODE is for the alignment fill value.
57 * fill it a nop instruction so that the disassembler does not choke
61 #define NOP_OPCODE 0x00
64 char *input_line_pointer; /*->next char of source file to parse. */
66 #if BITS_PER_CHAR != 8
67 /* The following table is indexed by[(char)] and will break if
68 a char does not have exactly 256 states (hopefully 0:255!)! */
73 /* The m88k unfortunately uses @ as a label beginner. */
78 /* The RS/6000 assembler uses {,},[,] as parts of symbol names. */
83 /* The Delta 68k assembler permits % inside label names. */
88 /* The PowerPC Windows NT assemblers permits ? inside label names. */
97 /* The a29k assembler does not permits labels to start with $. */
102 /* The Delta 68k assembler permits ~ at start of label names. */
106 /* used by is_... macros. our ctype[] */
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* @ABCDEFGHIJKLMNO */
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ[\]^_ */
111 0, 0, 0, LEX_HASH, LEX_DOLLAR, LEX_PCT, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, /* _!"#$%&'()*+,-./ */
112 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, LEX_QM, /* 0123456789:;<=>? */
113 LEX_AT, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* @ABCDEFGHIJKLMNO */
114 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, 0, 3, /* PQRSTUVWXYZ[\]^_ */
115 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* `abcdefghijklmno */
116 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, LEX_TILDE, 0, /* pqrstuvwxyz{|}~. */
117 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
118 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
119 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
120 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
121 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
122 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
123 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
124 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
130 * Out: 1 if this character ends a line.
133 char is_end_of_line[256] =
136 99, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, 99, Z_, Z_, 99, Z_, Z_, /* @abcdefghijklmno */
138 99, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, 99, Z_, Z_, Z_, Z_, Z_, /* @abcdefghijklmno */
140 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
142 Z_,99, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* _!"#$%&'()*+,-./ */
143 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* 0123456789:;<=>? */
145 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
146 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, 99, Z_, Z_, Z_, Z_, /* 0123456789:;<=>? */
148 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
149 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
150 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
151 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
152 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
153 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
154 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
155 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
156 Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, Z_, /* */
160 /* Functions private to this file. */
162 static char *buffer; /* 1st char of each buffer of lines is here. */
163 static char *buffer_limit; /*->1 + last char in buffer. */
165 /* TARGET_BYTES_BIG_ENDIAN is required to be defined to either 0 or 1 in the
166 tc-<CPU>.h file. See the "Porting GAS" section of the internals manual. */
167 int target_big_endian = TARGET_BYTES_BIG_ENDIAN;
169 static char *old_buffer; /* JF a hack */
170 static char *old_input;
171 static char *old_limit;
173 /* Variables for handling include file directory table. */
175 char **include_dirs; /* Table of pointers to directories to
176 search for .include's */
177 int include_dir_count; /* How many are in the table */
178 int include_dir_maxlen = 1;/* Length of longest in table */
180 #ifndef WORKING_DOT_WORD
181 struct broken_word *broken_words;
182 int new_broken_words;
185 /* The current offset into the absolute section. We don't try to
186 build frags in the absolute section, since no data can be stored
187 there. We just keep track of the current offset. */
188 addressT abs_section_offset;
190 /* If this line had an MRI style label, it is stored in this variable.
191 This is used by some of the MRI pseudo-ops. */
194 /* This global variable is used to support MRI common sections. We
195 translate such sections into a common symbol. This variable is
196 non-NULL when we are in an MRI common section. */
197 symbolS *mri_common_symbol;
199 /* In MRI mode, after a dc.b pseudo-op with an odd number of bytes, we
200 need to align to an even byte boundary unless the next pseudo-op is
201 dc.b, ds.b, or dcb.b. This variable is set to 1 if an alignment
203 static int mri_pending_align;
207 /* This variable is set to be non-zero if the next string we see might
208 be the name of the source file in DWARF debugging information. See
209 the comment in emit_expr for the format we look for. */
210 static int dwarf_file_string;
214 static void cons_worker PARAMS ((int, int));
215 static int scrub_from_string PARAMS ((char *, int));
216 static void do_align PARAMS ((int, char *, int, int));
217 static void s_align PARAMS ((int, int));
218 static void s_lcomm_internal PARAMS ((int, int));
219 static int hex_float PARAMS ((int, char *));
220 static inline int sizeof_sleb128 PARAMS ((offsetT));
221 static inline int sizeof_uleb128 PARAMS ((valueT));
222 static inline int output_sleb128 PARAMS ((char *, offsetT));
223 static inline int output_uleb128 PARAMS ((char *, valueT));
224 static inline int output_big_sleb128 PARAMS ((char *, LITTLENUM_TYPE *, int));
225 static inline int output_big_uleb128 PARAMS ((char *, LITTLENUM_TYPE *, int));
226 static int output_big_leb128 PARAMS ((char *, LITTLENUM_TYPE *, int, int));
227 static void do_org PARAMS ((segT, expressionS *, int));
228 char *demand_copy_string PARAMS ((int *lenP));
229 static segT get_segmented_expression PARAMS ((expressionS *expP));
230 static segT get_known_segmented_expression PARAMS ((expressionS * expP));
231 static void pobegin PARAMS ((void));
232 static int get_line_sb PARAMS ((sb *));
233 static void generate_file_debug PARAMS ((void));
242 obj_read_begin_hook ();
244 /* Something close -- but not too close -- to a multiple of 1024.
245 The debugging malloc I'm using has 24 bytes of overhead. */
246 obstack_begin (¬es, chunksize);
247 obstack_begin (&cond_obstack, chunksize);
249 /* Use machine dependent syntax */
250 for (p = line_separator_chars; *p; p++)
251 is_end_of_line[(unsigned char) *p] = 1;
252 /* Use more. FIXME-SOMEDAY. */
258 /* set up pseudo-op tables */
260 static struct hash_control *po_hash;
262 static const pseudo_typeS potable[] =
264 {"abort", s_abort, 0},
265 {"align", s_align_ptwo, 0},
266 {"ascii", stringer, 0},
267 {"asciz", stringer, 1},
268 {"balign", s_align_bytes, 0},
269 {"balignw", s_align_bytes, -2},
270 {"balignl", s_align_bytes, -4},
274 {"common", s_mri_common, 0},
275 {"common.s", s_mri_common, 1},
279 {"dc.d", float_cons, 'd'},
281 {"dc.s", float_cons, 'f'},
283 {"dc.x", float_cons, 'x'},
285 {"dcb.b", s_space, 1},
286 {"dcb.d", s_float_space, 'd'},
287 {"dcb.l", s_space, 4},
288 {"dcb.s", s_float_space, 'f'},
289 {"dcb.w", s_space, 2},
290 {"dcb.x", s_float_space, 'x'},
292 {"ds.b", s_space, 1},
293 {"ds.d", s_space, 8},
294 {"ds.l", s_space, 4},
295 {"ds.p", s_space, 12},
296 {"ds.s", s_space, 4},
297 {"ds.w", s_space, 2},
298 {"ds.x", s_space, 12},
299 {"debug", s_ignore, 0},
304 {"double", float_cons, 'd'},
306 {"eject", listing_eject, 0}, /* Formfeed listing */
308 {"elsec", s_else, 0},
309 {"elseif", s_elseif, (int) O_ne},
311 {"endc", s_endif, 0},
312 {"endfunc", s_func, 1},
313 {"endif", s_endif, 0},
318 {"exitm", s_mexit, 0},
320 {"extern", s_ignore, 0}, /* We treat all undef as ext */
321 {"appfile", s_app_file, 1},
322 {"appline", s_app_line, 0},
324 {"file", s_app_file, 0},
326 {"float", float_cons, 'f'},
327 {"format", s_ignore, 0},
329 {"global", s_globl, 0},
330 {"globl", s_globl, 0},
332 {"if", s_if, (int) O_ne},
334 {"ifdef", s_ifdef, 0},
335 {"ifeq", s_if, (int) O_eq},
336 {"ifeqs", s_ifeqs, 0},
337 {"ifge", s_if, (int) O_ge},
338 {"ifgt", s_if, (int) O_gt},
339 {"ifle", s_if, (int) O_le},
340 {"iflt", s_if, (int) O_lt},
342 {"ifndef", s_ifdef, 1},
343 {"ifne", s_if, (int) O_ne},
344 {"ifnes", s_ifeqs, 1},
345 {"ifnotdef", s_ifdef, 1},
346 {"include", s_include, 0},
352 {"lcomm", s_lcomm, 0},
353 {"lflags", listing_flags, 0}, /* Listing flags */
354 {"linkonce", s_linkonce, 0},
355 {"list", listing_list, 1}, /* Turn listing on */
356 {"llen", listing_psize, 1},
359 {"macro", s_macro, 0},
360 {"mexit", s_mexit, 0},
362 {".mri", s_mri, 0}, /* Special case so .mri works in MRI mode. */
363 {"name", s_ignore, 0},
364 {"noformat", s_ignore, 0},
365 {"nolist", listing_list, 0}, /* Turn listing off */
366 {"nopage", listing_nopage, 0},
368 {"offset", s_struct, 0},
370 {"p2align", s_align_ptwo, 0},
371 {"p2alignw", s_align_ptwo, -2},
372 {"p2alignl", s_align_ptwo, -4},
373 {"page", listing_eject, 0},
374 {"plen", listing_psize, 0},
375 {"print", s_print, 0},
376 {"psize", listing_psize, 0}, /* set paper size */
377 {"purgem", s_purgem, 0},
382 {"sbttl", listing_title, 1}, /* Subtitle of listing */
387 {"single", float_cons, 'f'},
389 {"space", s_space, 0},
390 {"skip", s_space, 0},
391 {"sleb128", s_leb128, 1},
392 {"spc", s_ignore, 0},
393 {"stabd", s_stab, 'd'},
394 {"stabn", s_stab, 'n'},
395 {"stabs", s_stab, 's'},
396 {"string", stringer, 1},
397 {"struct", s_struct, 0},
401 /* This is for gcc to use. It's only just been added (2/94), so gcc
402 won't be able to use it for a while -- probably a year or more.
403 But once this has been released, check with gcc maintainers
404 before deleting it or even changing the spelling. */
405 {"this_GCC_requires_the_GNU_assembler", s_ignore, 0},
406 /* If we're folding case -- done for some targets, not necessarily
407 all -- the above string in an input file will be converted to
408 this one. Match it either way... */
409 {"this_gcc_requires_the_gnu_assembler", s_ignore, 0},
411 {"title", listing_title, 0}, /* Listing title */
412 {"ttl", listing_title, 0},
414 {"uleb128", s_leb128, 0},
418 {"xdef", s_globl, 0},
419 {"xref", s_ignore, 0},
420 {"xstabs", s_xstab, 's'},
422 {"zero", s_space, 0},
423 {NULL, NULL, 0} /* end sentinel */
426 static int pop_override_ok = 0;
427 static const char *pop_table_name;
431 const pseudo_typeS *table;
434 const pseudo_typeS *pop;
435 for (pop = table; pop->poc_name; pop++)
437 errtxt = hash_insert (po_hash, pop->poc_name, (char *) pop);
438 if (errtxt && (!pop_override_ok || strcmp (errtxt, "exists")))
439 as_fatal (_("error constructing %s pseudo-op table: %s"), pop_table_name,
444 #ifndef md_pop_insert
445 #define md_pop_insert() pop_insert(md_pseudo_table)
448 #ifndef obj_pop_insert
449 #define obj_pop_insert() pop_insert(obj_pseudo_table)
455 po_hash = hash_new ();
457 /* Do the target-specific pseudo ops. */
458 pop_table_name = "md";
461 /* Now object specific. Skip any that were in the target table. */
462 pop_table_name = "obj";
466 /* Now portable ones. Skip any that we've seen already. */
467 pop_table_name = "standard";
468 pop_insert (potable);
471 #define HANDLE_CONDITIONAL_ASSEMBLY() \
472 if (ignore_input ()) \
474 while (! is_end_of_line[(unsigned char) *input_line_pointer++]) \
475 if (input_line_pointer == buffer_limit) \
481 /* This function is used when scrubbing the characters between #APP
484 static char *scrub_string;
485 static char *scrub_string_end;
488 scrub_from_string (buf, buflen)
494 copy = scrub_string_end - scrub_string;
497 memcpy (buf, scrub_string, copy);
498 scrub_string += copy;
502 /* read_a_source_file()
504 * We read the file, putting things into a web that
505 * represents what we have been reading.
508 read_a_source_file (name)
512 register char *s; /* string of symbol, '\0' appended */
516 buffer = input_scrub_new_file (name);
519 listing_newline (NULL);
520 register_dependency (name);
522 /* Generate debugging information before we've read anything in to denote
523 this file as the "main" source file and not a subordinate one
524 (e.g. N_SO vs N_SOL in stabs). */
525 generate_file_debug ();
527 while ((buffer_limit = input_scrub_next_buffer (&input_line_pointer)) != 0)
528 { /* We have another line to parse. */
529 know (buffer_limit[-1] == '\n'); /* Must have a sentinel. */
530 contin: /* JF this goto is my fault I admit it.
531 Someone brave please re-write the whole
532 input section here? Pleeze??? */
533 while (input_line_pointer < buffer_limit)
535 /* We have more of this buffer to parse. */
538 * We now have input_line_pointer->1st char of next line.
539 * If input_line_pointer [-1] == '\n' then we just
540 * scanned another line: so bump line counters.
542 if (is_end_of_line[(unsigned char) input_line_pointer[-1]])
544 #ifdef md_start_line_hook
545 md_start_line_hook ();
548 if (input_line_pointer[-1] == '\n')
549 bump_line_counters ();
554 #ifdef LABELS_WITHOUT_COLONS
559 /* Text at the start of a line must be a label, we
560 run down and stick a colon in. */
561 if (is_name_beginner (*input_line_pointer))
563 char *line_start = input_line_pointer;
568 HANDLE_CONDITIONAL_ASSEMBLY ();
570 c = get_symbol_end ();
572 /* In MRI mode, the EQU and MACRO pseudoops must
573 be handled specially. */
577 char *rest = input_line_pointer + 1;
581 if (*rest == ' ' || *rest == '\t')
583 if ((strncasecmp (rest, "EQU", 3) == 0
584 || strncasecmp (rest, "SET", 3) == 0)
585 && (rest[3] == ' ' || rest[3] == '\t'))
587 input_line_pointer = rest + 3;
589 strncasecmp (rest, "SET", 3) == 0);
592 if (strncasecmp (rest, "MACRO", 5) == 0
595 || is_end_of_line[(unsigned char) rest[5]]))
599 /* In MRI mode, we need to handle the MACRO
600 pseudo-op specially: we don't want to put the
601 symbol in the symbol table. */
603 #ifdef TC_START_LABEL_WITHOUT_COLON
604 && TC_START_LABEL_WITHOUT_COLON(c,
608 line_label = colon (line_start);
610 line_label = symbol_create (line_start,
615 *input_line_pointer = c;
617 input_line_pointer++;
623 * We are at the begining of a line, or similar place.
624 * We expect a well-formed assembler statement.
625 * A "symbol-name:" is a statement.
627 * Depending on what compiler is used, the order of these tests
628 * may vary to catch most common case 1st.
629 * Each test is independent of all other tests at the (top) level.
630 * PLEASE make a compiler that doesn't use this assembler.
631 * It is crufty to waste a compiler's time encoding things for this
632 * assembler, which then wastes more time decoding it.
633 * (And communicating via (linear) files is silly!
634 * If you must pass stuff, please pass a tree!)
636 if ((c = *input_line_pointer++) == '\t'
641 c = *input_line_pointer++;
643 know (c != ' '); /* No further leading whitespace. */
646 /* If listing is on, and we are expanding a macro, then give
647 the listing code the contents of the expanded line. */
650 if ((listing & LISTING_MACEXP) && macro_nest > 0)
655 /* Find the end of the current expanded macro line. */
656 for (s = input_line_pointer-1; *s ; ++s)
657 if (is_end_of_line[(unsigned char) *s])
660 /* Copy it for safe keeping. Also give an indication of
661 how much macro nesting is involved at this point. */
662 len = s - (input_line_pointer-1);
663 copy = (char *) xmalloc (len + macro_nest + 2);
664 memset (copy, '>', macro_nest);
665 copy[macro_nest] = ' ';
666 memcpy (copy + macro_nest + 1, input_line_pointer-1, len);
667 copy[macro_nest+1+len] = '\0';
669 /* Install the line with the listing facility. */
670 listing_newline (copy);
673 listing_newline (NULL);
678 * C is the 1st significant character.
679 * Input_line_pointer points after that character.
681 if (is_name_beginner (c))
683 /* want user-defined label or pseudo/opcode */
684 HANDLE_CONDITIONAL_ASSEMBLY ();
686 s = --input_line_pointer;
687 c = get_symbol_end (); /* name's delimiter */
689 * C is character after symbol.
690 * That character's place in the input line is now '\0'.
691 * S points to the beginning of the symbol.
692 * [In case of pseudo-op, s->'.'.]
693 * Input_line_pointer->'\0' where c was.
695 if (TC_START_LABEL(c, input_line_pointer))
699 char *rest = input_line_pointer + 1;
701 /* In MRI mode, \tsym: set 0 is permitted. */
705 if (*rest == ' ' || *rest == '\t')
707 if ((strncasecmp (rest, "EQU", 3) == 0
708 || strncasecmp (rest, "SET", 3) == 0)
709 && (rest[3] == ' ' || rest[3] == '\t'))
711 input_line_pointer = rest + 3;
717 line_label = colon (s); /* user-defined label */
718 *input_line_pointer++ = ':'; /* Put ':' back for error messages' sake. */
719 /* Input_line_pointer->after ':'. */
725 || ((c == ' ' || c == '\t')
726 && input_line_pointer[1] == '='
727 #ifdef TC_EQUAL_IN_INSN
728 && ! TC_EQUAL_IN_INSN (c, input_line_pointer)
733 demand_empty_rest_of_line ();
736 { /* expect pseudo-op or machine instruction */
739 #define IGNORE_OPCODE_CASE
740 #ifdef IGNORE_OPCODE_CASE
745 if (isupper ((unsigned char) *s2))
758 /* The MRI assembler and the m88k use pseudo-ops
760 pop = (pseudo_typeS *) hash_find (po_hash, s);
761 if (pop != NULL && pop->poc_handler == NULL)
766 || (! flag_m68k_mri && *s == '.'))
771 * WARNING: c has next char, which may be end-of-line.
772 * We lookup the pseudo-op table with s+1 because we
773 * already know that the pseudo-op begins with a '.'.
777 pop = (pseudo_typeS *) hash_find (po_hash, s + 1);
779 /* In MRI mode, we may need to insert an
780 automatic alignment directive. What a hack
782 if (mri_pending_align
784 || ! ((pop->poc_handler == cons
785 && pop->poc_val == 1)
786 || (pop->poc_handler == s_space
787 && pop->poc_val == 1)
788 #ifdef tc_conditional_pseudoop
789 || tc_conditional_pseudoop (pop)
791 || pop->poc_handler == s_if
792 || pop->poc_handler == s_ifdef
793 || pop->poc_handler == s_ifc
794 || pop->poc_handler == s_ifeqs
795 || pop->poc_handler == s_else
796 || pop->poc_handler == s_endif
797 || pop->poc_handler == s_globl
798 || pop->poc_handler == s_ignore)))
800 do_align (1, (char *) NULL, 0, 0);
801 mri_pending_align = 0;
802 if (line_label != NULL)
804 symbol_set_frag (line_label, frag_now);
805 S_SET_VALUE (line_label, frag_now_fix ());
809 /* Print the error msg now, while we still can */
812 as_bad (_("Unknown pseudo-op: `%s'"), s);
813 *input_line_pointer = c;
818 /* Put it back for error messages etc. */
819 *input_line_pointer = c;
820 /* The following skip of whitespace is compulsory.
821 A well shaped space is sometimes all that separates
822 keyword from operands. */
823 if (c == ' ' || c == '\t')
824 input_line_pointer++;
826 * Input_line is restored.
827 * Input_line_pointer->1st non-blank char
828 * after pseudo-operation.
830 (*pop->poc_handler) (pop->poc_val);
832 /* If that was .end, just get out now. */
833 if (pop->poc_handler == s_end)
839 #ifdef QUOTES_IN_INSN
843 /* WARNING: c has char, which may be end-of-line. */
844 /* Also: input_line_pointer->`\0` where c was. */
845 *input_line_pointer = c;
846 while (!is_end_of_line[(unsigned char) *input_line_pointer]
848 #ifdef TC_EOL_IN_INSN
849 || TC_EOL_IN_INSN (input_line_pointer)
853 if (flag_m68k_mri && *input_line_pointer == '\'')
855 #ifdef QUOTES_IN_INSN
858 else if (*input_line_pointer == '"')
860 else if (*input_line_pointer == '\\')
863 input_line_pointer++;
866 c = *input_line_pointer;
867 *input_line_pointer = '\0';
869 generate_lineno_debug ();
876 if (check_macro (s, &out, '\0', &err))
880 *input_line_pointer++ = c;
881 input_scrub_include_sb (&out,
885 input_scrub_next_buffer (&input_line_pointer);
890 if (mri_pending_align)
892 do_align (1, (char *) NULL, 0, 0);
893 mri_pending_align = 0;
894 if (line_label != NULL)
896 symbol_set_frag (line_label, frag_now);
897 S_SET_VALUE (line_label, frag_now_fix ());
901 md_assemble (s); /* Assemble 1 instruction. */
903 *input_line_pointer++ = c;
905 /* We resume loop AFTER the end-of-line from
910 } /* if (is_name_beginner(c) */
913 /* Empty statement? */
914 if (is_end_of_line[(unsigned char) c])
917 if ((LOCAL_LABELS_DOLLAR || LOCAL_LABELS_FB)
918 && isdigit ((unsigned char) c))
920 /* local label ("4:") */
921 char *backup = input_line_pointer;
923 HANDLE_CONDITIONAL_ASSEMBLY ();
927 while (isdigit ((unsigned char) *input_line_pointer))
929 temp = (temp * 10) + *input_line_pointer - '0';
930 ++input_line_pointer;
931 } /* read the whole number */
933 if (LOCAL_LABELS_DOLLAR
934 && *input_line_pointer == '$'
935 && *(input_line_pointer + 1) == ':')
937 input_line_pointer += 2;
939 if (dollar_label_defined (temp))
941 as_fatal (_("label \"%d$\" redefined"), temp);
944 define_dollar_label (temp);
945 colon (dollar_label_name (temp, 0));
950 && *input_line_pointer++ == ':')
952 fb_label_instance_inc (temp);
953 colon (fb_label_name (temp, 0));
957 input_line_pointer = backup;
958 } /* local label ("4:") */
960 if (c && strchr (line_comment_chars, c))
961 { /* Its a comment. Better say APP or NO_APP */
965 unsigned int new_length;
968 bump_line_counters ();
969 s = input_line_pointer;
970 if (strncmp (s, "APP\n", 4))
971 continue; /* We ignore it */
974 ends = strstr (s, "#NO_APP\n");
978 unsigned int tmp_len;
981 /* The end of the #APP wasn't in this buffer. We
982 keep reading in buffers until we find the #NO_APP
983 that goes with this #APP There is one. The specs
985 tmp_len = buffer_limit - s;
986 tmp_buf = xmalloc (tmp_len + 1);
987 memcpy (tmp_buf, s, tmp_len);
990 new_tmp = input_scrub_next_buffer (&buffer);
994 buffer_limit = new_tmp;
995 input_line_pointer = buffer;
996 ends = strstr (buffer, "#NO_APP\n");
1000 num = buffer_limit - buffer;
1002 tmp_buf = xrealloc (tmp_buf, tmp_len + num);
1003 memcpy (tmp_buf + tmp_len, buffer, num);
1008 input_line_pointer = ends ? ends + 8 : NULL;
1016 input_line_pointer = ends + 8;
1020 scrub_string_end = ends;
1022 new_length = ends - s;
1023 new_buf = (char *) xmalloc (new_length);
1030 space = (new_buf + new_length) - new_tmp;
1031 size = do_scrub_chars (scrub_from_string, new_tmp, space);
1039 new_buf = xrealloc (new_buf, new_length + 100);
1040 new_tmp = new_buf + new_length;
1046 old_buffer = buffer;
1047 old_input = input_line_pointer;
1048 old_limit = buffer_limit;
1050 input_line_pointer = new_buf;
1051 buffer_limit = new_tmp;
1055 HANDLE_CONDITIONAL_ASSEMBLY ();
1057 #ifdef tc_unrecognized_line
1058 if (tc_unrecognized_line (c))
1062 /* as_warn("Junk character %d.",c); Now done by ignore_rest */
1063 input_line_pointer--; /* Report unknown char as ignored. */
1064 ignore_rest_of_line ();
1065 } /* while (input_line_pointer<buffer_limit) */
1067 #ifdef md_after_pass_hook
1068 md_after_pass_hook ();
1074 bump_line_counters ();
1077 buffer = old_buffer;
1078 input_line_pointer = old_input;
1079 buffer_limit = old_limit;
1084 } /* while (more buffers to scan) */
1091 input_scrub_close (); /* Close the input file */
1094 /* For most MRI pseudo-ops, the line actually ends at the first
1095 nonquoted space. This function looks for that point, stuffs a null
1096 in, and sets *STOPCP to the character that used to be there, and
1097 returns the location.
1099 Until I hear otherwise, I am going to assume that this is only true
1100 for the m68k MRI assembler. */
1103 mri_comment_field (stopcp)
1111 know (flag_m68k_mri);
1113 for (s = input_line_pointer;
1114 ((! is_end_of_line[(unsigned char) *s] && *s != ' ' && *s != '\t')
1119 inquote = ! inquote;
1129 for (s = input_line_pointer; ! is_end_of_line[(unsigned char) *s]; s++)
1139 /* Skip to the end of an MRI comment field. */
1142 mri_comment_end (stop, stopc)
1148 input_line_pointer = stop;
1150 while (! is_end_of_line[(unsigned char) *input_line_pointer])
1151 ++input_line_pointer;
1156 int ignore ATTRIBUTE_UNUSED;
1158 as_fatal (_(".abort detected. Abandoning ship."));
1161 /* Guts of .align directive. N is the power of two to which to align.
1162 FILL may be NULL, or it may point to the bytes of the fill pattern.
1163 LEN is the length of whatever FILL points to, if anything. MAX is
1164 the maximum number of characters to skip when doing the alignment,
1165 or 0 if there is no maximum. */
1168 do_align (n, fill, len, max)
1177 md_do_align (n, fill, len, max, just_record_alignment);
1182 if (subseg_text_p (now_seg))
1183 default_fill = NOP_OPCODE;
1186 fill = &default_fill;
1190 /* Only make a frag if we HAVE to. . . */
1191 if (n != 0 && !need_pass_2)
1194 frag_align (n, *fill, max);
1196 frag_align_pattern (n, fill, len, max);
1200 just_record_alignment:
1203 record_alignment (now_seg, n - OCTETS_PER_BYTE_POWER);
1206 /* Handle the .align pseudo-op. A positive ARG is a default alignment
1207 (in bytes). A negative ARG is the negative of the length of the
1208 fill pattern. BYTES_P is non-zero if the alignment value should be
1209 interpreted as the byte boundary, rather than the power of 2. */
1212 s_align (arg, bytes_p)
1216 register unsigned int align;
1224 stop = mri_comment_field (&stopc);
1226 if (is_end_of_line[(unsigned char) *input_line_pointer])
1231 align = arg; /* Default value from pseudo-op table */
1235 align = get_absolute_expression ();
1241 /* Convert to a power of 2. */
1246 for (i = 0; (align & 1) == 0; align >>= 1, ++i)
1249 as_bad (_("Alignment not a power of 2"));
1257 as_bad (_("Alignment too large: %u assumed"), align);
1260 if (*input_line_pointer != ',')
1267 ++input_line_pointer;
1268 if (*input_line_pointer == ',')
1272 fill = get_absolute_expression ();
1277 if (*input_line_pointer != ',')
1281 ++input_line_pointer;
1282 max = get_absolute_expression ();
1289 as_warn (_("expected fill pattern missing"));
1290 do_align (align, (char *) NULL, 0, max);
1305 do_align (align, &fill_char, fill_len, max);
1311 if ((size_t) fill_len > sizeof ab)
1313 md_number_to_chars (ab, fill, fill_len);
1314 do_align (align, ab, fill_len, max);
1318 demand_empty_rest_of_line ();
1321 mri_comment_end (stop, stopc);
1324 /* Handle the .align pseudo-op on machines where ".align 4" means
1325 align to a 4 byte boundary. */
1334 /* Handle the .align pseudo-op on machines where ".align 4" means align
1335 to a 2**4 boundary. */
1346 int ignore ATTRIBUTE_UNUSED;
1348 register char *name;
1352 register symbolS *symbolP;
1357 stop = mri_comment_field (&stopc);
1359 name = input_line_pointer;
1360 c = get_symbol_end ();
1361 /* just after name is now '\0' */
1362 p = input_line_pointer;
1365 if (*input_line_pointer != ',')
1367 as_bad (_("Expected comma after symbol-name: rest of line ignored."));
1368 ignore_rest_of_line ();
1370 mri_comment_end (stop, stopc);
1373 input_line_pointer++; /* skip ',' */
1374 if ((temp = get_absolute_expression ()) < 0)
1376 as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) temp);
1377 ignore_rest_of_line ();
1379 mri_comment_end (stop, stopc);
1383 symbolP = symbol_find_or_make (name);
1385 if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP))
1387 as_bad (_("Ignoring attempt to re-define symbol `%s'."),
1388 S_GET_NAME (symbolP));
1389 ignore_rest_of_line ();
1391 mri_comment_end (stop, stopc);
1394 if (S_GET_VALUE (symbolP))
1396 if (S_GET_VALUE (symbolP) != (valueT) temp)
1397 as_bad (_("Length of .comm \"%s\" is already %ld. Not changed to %ld."),
1398 S_GET_NAME (symbolP),
1399 (long) S_GET_VALUE (symbolP),
1404 S_SET_VALUE (symbolP, (valueT) temp);
1405 S_SET_EXTERNAL (symbolP);
1409 extern int flag_one;
1410 if ( (!temp) || !flag_one)
1411 S_GET_OTHER(symbolP) = const_flag;
1413 #endif /* not OBJ_VMS */
1414 know (symbolP->sy_frag == &zero_address_frag);
1416 demand_empty_rest_of_line ();
1419 mri_comment_end (stop, stopc);
1422 /* The MRI COMMON pseudo-op. We handle this by creating a common
1423 symbol with the appropriate name. We make s_space do the right
1424 thing by increasing the size. */
1427 s_mri_common (small)
1428 int small ATTRIBUTE_UNUSED;
1444 stop = mri_comment_field (&stopc);
1448 name = input_line_pointer;
1449 if (! isdigit ((unsigned char) *name))
1450 c = get_symbol_end ();
1455 ++input_line_pointer;
1457 while (isdigit ((unsigned char) *input_line_pointer));
1458 c = *input_line_pointer;
1459 *input_line_pointer = '\0';
1461 if (line_label != NULL)
1463 alc = (char *) xmalloc (strlen (S_GET_NAME (line_label))
1464 + (input_line_pointer - name)
1466 sprintf (alc, "%s%s", name, S_GET_NAME (line_label));
1471 sym = symbol_find_or_make (name);
1472 *input_line_pointer = c;
1476 if (*input_line_pointer != ',')
1480 ++input_line_pointer;
1481 align = get_absolute_expression ();
1484 if (S_IS_DEFINED (sym) && ! S_IS_COMMON (sym))
1486 as_bad (_("attempt to re-define symbol `%s'"), S_GET_NAME (sym));
1487 ignore_rest_of_line ();
1488 mri_comment_end (stop, stopc);
1492 S_SET_EXTERNAL (sym);
1493 mri_common_symbol = sym;
1497 S_SET_ALIGN (sym, align);
1500 if (line_label != NULL)
1503 exp.X_op = O_symbol;
1504 exp.X_add_symbol = sym;
1505 exp.X_add_number = 0;
1506 symbol_set_value_expression (line_label, &exp);
1507 symbol_set_frag (line_label, &zero_address_frag);
1508 S_SET_SEGMENT (line_label, expr_section);
1511 /* FIXME: We just ignore the small argument, which distinguishes
1512 COMMON and COMMON.S. I don't know what we can do about it. */
1514 /* Ignore the type and hptype. */
1515 if (*input_line_pointer == ',')
1516 input_line_pointer += 2;
1517 if (*input_line_pointer == ',')
1518 input_line_pointer += 2;
1520 demand_empty_rest_of_line ();
1522 mri_comment_end (stop, stopc);
1527 int ignore ATTRIBUTE_UNUSED;
1532 temp = get_absolute_expression ();
1533 if (flag_readonly_data_in_text)
1535 section = text_section;
1539 section = data_section;
1541 subseg_set (section, (subsegT) temp);
1546 demand_empty_rest_of_line ();
1549 /* Handle the .appfile pseudo-op. This is automatically generated by
1550 do_scrub_chars when a preprocessor # line comment is seen with a
1551 file name. This default definition may be overridden by the object
1552 or CPU specific pseudo-ops. This function is also the default
1553 definition for .file; the APPFILE argument is 1 for .appfile, 0 for
1557 s_app_file (appfile)
1563 /* Some assemblers tolerate immediately following '"' */
1564 if ((s = demand_copy_string (&length)) != 0)
1566 /* If this is a fake .appfile, a fake newline was inserted into
1567 the buffer. Passing -2 to new_logical_line tells it to
1570 = (! new_logical_line (s, appfile ? -2 : -1) && appfile);
1572 /* In MRI mode, the preprocessor may have inserted an extraneous
1575 && *input_line_pointer == '\''
1576 && is_end_of_line[(unsigned char) input_line_pointer[1]])
1577 ++input_line_pointer;
1579 demand_empty_rest_of_line ();
1584 listing_source_file (s);
1586 register_dependency (s);
1594 /* Handle the .appline pseudo-op. This is automatically generated by
1595 do_scrub_chars when a preprocessor # line comment is seen. This
1596 default definition may be overridden by the object or CPU specific
1601 int ignore ATTRIBUTE_UNUSED;
1605 /* The given number is that of the next line. */
1606 l = get_absolute_expression () - 1;
1608 /* Some of the back ends can't deal with non-positive line numbers.
1609 Besides, it's silly. */
1610 as_warn (_("Line numbers must be positive; line number %d rejected."), l+1);
1613 new_logical_line ((char *) NULL, l);
1616 listing_source_line (l);
1619 demand_empty_rest_of_line ();
1622 /* Handle the .end pseudo-op. Actually, the real work is done in
1623 read_a_source_file. */
1627 int ignore ATTRIBUTE_UNUSED;
1631 /* The MRI assembler permits the start symbol to follow .end,
1632 but we don't support that. */
1634 if (! is_end_of_line[(unsigned char) *input_line_pointer]
1635 && *input_line_pointer != '*'
1636 && *input_line_pointer != '!')
1637 as_warn (_("start address not supported"));
1641 /* Handle the .err pseudo-op. */
1645 int ignore ATTRIBUTE_UNUSED;
1647 as_bad (_(".err encountered"));
1648 demand_empty_rest_of_line ();
1651 /* Handle the MRI fail pseudo-op. */
1655 int ignore ATTRIBUTE_UNUSED;
1662 stop = mri_comment_field (&stopc);
1664 temp = get_absolute_expression ();
1666 as_warn (_(".fail %ld encountered"), (long) temp);
1668 as_bad (_(".fail %ld encountered"), (long) temp);
1670 demand_empty_rest_of_line ();
1673 mri_comment_end (stop, stopc);
1678 int ignore ATTRIBUTE_UNUSED;
1680 expressionS rep_exp;
1682 register long fill = 0;
1685 #ifdef md_flush_pending_output
1686 md_flush_pending_output ();
1689 get_known_segmented_expression (&rep_exp);
1690 if (*input_line_pointer == ',')
1692 input_line_pointer++;
1693 size = get_absolute_expression ();
1694 if (*input_line_pointer == ',')
1696 input_line_pointer++;
1697 fill = get_absolute_expression ();
1701 /* This is to be compatible with BSD 4.2 AS, not for any rational reason. */
1702 #define BSD_FILL_SIZE_CROCK_8 (8)
1703 if (size > BSD_FILL_SIZE_CROCK_8)
1705 as_warn (_(".fill size clamped to %d."), BSD_FILL_SIZE_CROCK_8);
1706 size = BSD_FILL_SIZE_CROCK_8;
1710 as_warn (_("Size negative: .fill ignored."));
1713 else if (rep_exp.X_op == O_constant && rep_exp.X_add_number <= 0)
1715 if (rep_exp.X_add_number < 0)
1716 as_warn (_("Repeat < 0, .fill ignored"));
1720 if (size && !need_pass_2)
1722 if (rep_exp.X_op == O_constant)
1724 p = frag_var (rs_fill, (int) size, (int) size,
1725 (relax_substateT) 0, (symbolS *) 0,
1726 (offsetT) rep_exp.X_add_number,
1731 /* We don't have a constant repeat count, so we can't use
1732 rs_fill. We can get the same results out of rs_space,
1733 but its argument is in bytes, so we must multiply the
1734 repeat count by size. */
1737 rep_sym = make_expr_symbol (&rep_exp);
1740 expressionS size_exp;
1741 size_exp.X_op = O_constant;
1742 size_exp.X_add_number = size;
1744 rep_exp.X_op = O_multiply;
1745 rep_exp.X_add_symbol = rep_sym;
1746 rep_exp.X_op_symbol = make_expr_symbol (&size_exp);
1747 rep_exp.X_add_number = 0;
1748 rep_sym = make_expr_symbol (&rep_exp);
1751 p = frag_var (rs_space, (int) size, (int) size,
1752 (relax_substateT) 0, rep_sym, (offsetT) 0, (char *) 0);
1754 memset (p, 0, (unsigned int) size);
1755 /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX
1756 * flavoured AS. The following bizzare behaviour is to be
1757 * compatible with above. I guess they tried to take up to 8
1758 * bytes from a 4-byte expression and they forgot to sign
1759 * extend. Un*x Sux. */
1760 #define BSD_FILL_SIZE_CROCK_4 (4)
1761 md_number_to_chars (p, (valueT) fill,
1762 (size > BSD_FILL_SIZE_CROCK_4
1763 ? BSD_FILL_SIZE_CROCK_4
1765 /* Note: .fill (),0 emits no frag (since we are asked to .fill 0 bytes)
1766 * but emits no error message because it seems a legal thing to do.
1767 * It is a degenerate case of .fill but could be emitted by a compiler.
1770 demand_empty_rest_of_line ();
1775 int ignore ATTRIBUTE_UNUSED;
1784 stop = mri_comment_field (&stopc);
1788 name = input_line_pointer;
1789 c = get_symbol_end ();
1790 symbolP = symbol_find_or_make (name);
1791 S_SET_EXTERNAL (symbolP);
1793 *input_line_pointer = c;
1795 c = *input_line_pointer;
1798 input_line_pointer++;
1800 if (*input_line_pointer == '\n')
1806 demand_empty_rest_of_line ();
1809 mri_comment_end (stop, stopc);
1812 /* Handle the MRI IRP and IRPC pseudo-ops. */
1824 as_where (&file, &line);
1827 while (! is_end_of_line[(unsigned char) *input_line_pointer])
1828 sb_add_char (&s, *input_line_pointer++);
1832 err = expand_irp (irpc, 0, &s, &out, get_line_sb, '\0');
1834 as_bad_where (file, line, "%s", err);
1838 input_scrub_include_sb (&out, input_line_pointer);
1840 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
1843 /* Handle the .linkonce pseudo-op. This tells the assembler to mark
1844 the section to only be linked once. However, this is not supported
1845 by most object file formats. This takes an optional argument,
1846 which is what to do about duplicates. */
1850 int ignore ATTRIBUTE_UNUSED;
1852 enum linkonce_type type;
1856 type = LINKONCE_DISCARD;
1858 if (! is_end_of_line[(unsigned char) *input_line_pointer])
1863 s = input_line_pointer;
1864 c = get_symbol_end ();
1865 if (strcasecmp (s, "discard") == 0)
1866 type = LINKONCE_DISCARD;
1867 else if (strcasecmp (s, "one_only") == 0)
1868 type = LINKONCE_ONE_ONLY;
1869 else if (strcasecmp (s, "same_size") == 0)
1870 type = LINKONCE_SAME_SIZE;
1871 else if (strcasecmp (s, "same_contents") == 0)
1872 type = LINKONCE_SAME_CONTENTS;
1874 as_warn (_("unrecognized .linkonce type `%s'"), s);
1876 *input_line_pointer = c;
1879 #ifdef obj_handle_link_once
1880 obj_handle_link_once (type);
1881 #else /* ! defined (obj_handle_link_once) */
1882 #ifdef BFD_ASSEMBLER
1886 if ((bfd_applicable_section_flags (stdoutput) & SEC_LINK_ONCE) == 0)
1887 as_warn (_(".linkonce is not supported for this object file format"));
1889 flags = bfd_get_section_flags (stdoutput, now_seg);
1890 flags |= SEC_LINK_ONCE;
1895 case LINKONCE_DISCARD:
1896 flags |= SEC_LINK_DUPLICATES_DISCARD;
1898 case LINKONCE_ONE_ONLY:
1899 flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
1901 case LINKONCE_SAME_SIZE:
1902 flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
1904 case LINKONCE_SAME_CONTENTS:
1905 flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
1908 if (! bfd_set_section_flags (stdoutput, now_seg, flags))
1909 as_bad (_("bfd_set_section_flags: %s"),
1910 bfd_errmsg (bfd_get_error ()));
1912 #else /* ! defined (BFD_ASSEMBLER) */
1913 as_warn (_(".linkonce is not supported for this object file format"));
1914 #endif /* ! defined (BFD_ASSEMBLER) */
1915 #endif /* ! defined (obj_handle_link_once) */
1917 demand_empty_rest_of_line ();
1921 s_lcomm_internal (needs_align, bytes_p)
1922 /* 1 if this was a ".bss" directive, which may require a 3rd argument
1923 (alignment); 0 if it was an ".lcomm" (2 args only) */
1925 /* 1 if the alignment value should be interpreted as the byte boundary,
1926 rather than the power of 2. */
1929 register char *name;
1933 register symbolS *symbolP;
1934 segT current_seg = now_seg;
1935 subsegT current_subseg = now_subseg;
1936 const int max_alignment = 15;
1938 segT bss_seg = bss_section;
1940 name = input_line_pointer;
1941 c = get_symbol_end ();
1942 p = input_line_pointer;
1946 /* Accept an optional comma after the name. The comma used to be
1947 required, but Irix 5 cc does not generate it. */
1948 if (*input_line_pointer == ',')
1950 ++input_line_pointer;
1954 if (*input_line_pointer == '\n')
1956 as_bad (_("Missing size expression"));
1960 if ((temp = get_absolute_expression ()) < 0)
1962 as_warn (_("BSS length (%d.) <0! Ignored."), temp);
1963 ignore_rest_of_line ();
1967 #if defined (TC_MIPS) || defined (TC_ALPHA)
1968 if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour
1969 || OUTPUT_FLAVOR == bfd_target_elf_flavour)
1971 /* For MIPS and Alpha ECOFF or ELF, small objects are put in .sbss. */
1972 if (temp <= bfd_get_gp_size (stdoutput))
1974 bss_seg = subseg_new (".sbss", 1);
1975 seg_info (bss_seg)->bss = 1;
1976 #ifdef BFD_ASSEMBLER
1977 if (! bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC))
1978 as_warn (_("error setting flags for \".sbss\": %s"),
1979 bfd_errmsg (bfd_get_error ()));
1986 /* FIXME. This needs to be machine independent. */
1997 /* FIXME: This needs to be done in a more general fashion. */
2001 record_alignment(bss_seg, align);
2008 if (*input_line_pointer != ',')
2010 as_bad (_("Expected comma after size"));
2011 ignore_rest_of_line ();
2014 input_line_pointer++;
2016 if (*input_line_pointer == '\n')
2018 as_bad (_("Missing alignment"));
2021 align = get_absolute_expression ();
2024 /* Convert to a power of 2. */
2029 for (i = 0; (align & 1) == 0; align >>= 1, ++i)
2032 as_bad (_("Alignment not a power of 2"));
2036 if (align > max_alignment)
2038 align = max_alignment;
2039 as_warn (_("Alignment too large: %d. assumed."), align);
2044 as_warn (_("Alignment negative. 0 assumed."));
2046 record_alignment (bss_seg, align);
2047 } /* if needs align */
2050 /* Assume some objects may require alignment on some systems. */
2051 #if defined (TC_ALPHA) && ! defined (VMS)
2054 align = ffs (temp) - 1;
2055 if (temp % (1 << align))
2062 symbolP = symbol_find_or_make (name);
2066 #if (defined (OBJ_AOUT) || defined (OBJ_MAYBE_AOUT) \
2067 || defined (OBJ_BOUT) || defined (OBJ_MAYBE_BOUT))
2068 #ifdef BFD_ASSEMBLER
2069 (OUTPUT_FLAVOR != bfd_target_aout_flavour
2070 || (S_GET_OTHER (symbolP) == 0 && S_GET_DESC (symbolP) == 0)) &&
2072 (S_GET_OTHER (symbolP) == 0 && S_GET_DESC (symbolP) == 0) &&
2075 (S_GET_SEGMENT (symbolP) == bss_seg
2076 || (!S_IS_DEFINED (symbolP) && S_GET_VALUE (symbolP) == 0)))
2080 subseg_set (bss_seg, 1);
2083 frag_align (align, 0, 0);
2084 /* detach from old frag */
2085 if (S_GET_SEGMENT (symbolP) == bss_seg)
2086 symbol_get_frag (symbolP)->fr_symbol = NULL;
2088 symbol_set_frag (symbolP, frag_now);
2089 pfrag = frag_var (rs_org, 1, 1, (relax_substateT)0, symbolP,
2090 (offsetT) temp, (char *) 0);
2093 S_SET_SEGMENT (symbolP, bss_seg);
2096 /* The symbol may already have been created with a preceding
2097 ".globl" directive -- be careful not to step on storage class
2098 in that case. Otherwise, set it to static. */
2099 if (S_GET_STORAGE_CLASS (symbolP) != C_EXT)
2101 S_SET_STORAGE_CLASS (symbolP, C_STAT);
2103 #endif /* OBJ_COFF */
2106 S_SET_SIZE (symbolP, temp);
2110 as_bad (_("Ignoring attempt to re-define symbol `%s'."),
2111 S_GET_NAME (symbolP));
2113 subseg_set (current_seg, current_subseg);
2115 demand_empty_rest_of_line ();
2116 } /* s_lcomm_internal() */
2119 s_lcomm (needs_align)
2122 s_lcomm_internal (needs_align, 0);
2125 void s_lcomm_bytes (needs_align)
2128 s_lcomm_internal (needs_align, 1);
2133 int ignore ATTRIBUTE_UNUSED;
2135 register char *name;
2139 register symbolS *symbolP;
2141 /* we permit ANY defined expression: BSD4.2 demands constants */
2142 name = input_line_pointer;
2143 c = get_symbol_end ();
2144 p = input_line_pointer;
2147 if (*input_line_pointer != ',')
2150 as_bad (_("Expected comma after name \"%s\""), name);
2152 ignore_rest_of_line ();
2155 input_line_pointer++;
2157 if (exp.X_op != O_constant
2158 && exp.X_op != O_register)
2160 as_bad (_("bad expression"));
2161 ignore_rest_of_line ();
2165 symbolP = symbol_find_or_make (name);
2167 /* FIXME-SOON I pulled a (&& symbolP->sy_other == 0 &&
2168 symbolP->sy_desc == 0) out of this test because coff doesn't have
2169 those fields, and I can't see when they'd ever be tripped. I
2170 don't think I understand why they were here so I may have
2171 introduced a bug. As recently as 1.37 didn't have this test
2172 anyway. xoxorich. */
2174 if (S_GET_SEGMENT (symbolP) == undefined_section
2175 && S_GET_VALUE (symbolP) == 0)
2177 /* The name might be an undefined .global symbol; be sure to
2178 keep the "external" bit. */
2179 S_SET_SEGMENT (symbolP,
2180 (exp.X_op == O_constant
2183 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
2187 as_bad (_("Symbol %s already defined"), name);
2190 demand_empty_rest_of_line ();
2193 /* Read a line into an sb. */
2199 char quote1, quote2, inquote;
2201 if (input_line_pointer[-1] == '\n')
2202 bump_line_counters ();
2204 if (input_line_pointer >= buffer_limit)
2206 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2207 if (buffer_limit == 0)
2211 /* If app.c sets any other characters to LEX_IS_STRINGQUOTE, this
2212 code needs to be changed. */
2213 if (! flag_m68k_mri)
2221 #ifdef LEX_IS_STRINGQUOTE
2226 while (! is_end_of_line[(unsigned char) *input_line_pointer]
2227 || (inquote != '\0' && *input_line_pointer != '\n'))
2229 if (inquote == *input_line_pointer)
2231 else if (inquote == '\0')
2233 if (*input_line_pointer == quote1)
2235 else if (*input_line_pointer == quote2)
2238 sb_add_char (line, *input_line_pointer++);
2240 while (input_line_pointer < buffer_limit
2241 && is_end_of_line[(unsigned char) *input_line_pointer])
2243 if (input_line_pointer[-1] == '\n')
2244 bump_line_counters ();
2245 ++input_line_pointer;
2250 /* Define a macro. This is an interface to macro.c, which is shared
2251 between gas and gasp. */
2255 int ignore ATTRIBUTE_UNUSED;
2264 as_where (&file, &line);
2267 while (! is_end_of_line[(unsigned char) *input_line_pointer])
2268 sb_add_char (&s, *input_line_pointer++);
2271 if (line_label != NULL)
2272 sb_add_string (&label, S_GET_NAME (line_label));
2274 err = define_macro (0, &s, &label, get_line_sb, &name);
2276 as_bad_where (file, line, "%s", err);
2279 if (line_label != NULL)
2281 S_SET_SEGMENT (line_label, undefined_section);
2282 S_SET_VALUE (line_label, 0);
2283 symbol_set_frag (line_label, &zero_address_frag);
2287 #ifdef NO_PSEUDO_DOT
2291 && hash_find (po_hash, name) != NULL)
2294 && hash_find (po_hash, name + 1) != NULL))
2295 as_warn (_("attempt to redefine pseudo-op `%s' ignored"),
2302 /* Handle the .mexit pseudo-op, which immediately exits a macro
2307 int ignore ATTRIBUTE_UNUSED;
2309 cond_exit_macro (macro_nest);
2310 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2313 /* Switch in and out of MRI mode. */
2317 int ignore ATTRIBUTE_UNUSED;
2321 on = get_absolute_expression ();
2322 old_flag = flag_mri;
2338 /* Operator precedence changes in m68k MRI mode, so we need to
2339 update the operator rankings. */
2340 expr_set_precedence ();
2342 #ifdef MRI_MODE_CHANGE
2344 MRI_MODE_CHANGE (on);
2347 demand_empty_rest_of_line ();
2350 /* Handle changing the location counter. */
2353 do_org (segment, exp, fill)
2358 if (segment != now_seg && segment != absolute_section)
2359 as_bad (_("invalid segment \"%s\"; segment \"%s\" assumed"),
2360 segment_name (segment), segment_name (now_seg));
2362 if (now_seg == absolute_section)
2365 as_warn (_("ignoring fill value in absolute section"));
2366 if (exp->X_op != O_constant)
2368 as_bad (_("only constant offsets supported in absolute section"));
2369 exp->X_add_number = 0;
2371 abs_section_offset = exp->X_add_number;
2377 p = frag_var (rs_org, 1, 1, (relax_substateT) 0, exp->X_add_symbol,
2378 exp->X_add_number * OCTETS_PER_BYTE, (char *) NULL);
2385 int ignore ATTRIBUTE_UNUSED;
2387 register segT segment;
2389 register long temp_fill;
2391 #ifdef md_flush_pending_output
2392 md_flush_pending_output ();
2395 /* The m68k MRI assembler has a different meaning for .org. It
2396 means to create an absolute section at a given address. We can't
2397 support that--use a linker script instead. */
2400 as_bad (_("MRI style ORG pseudo-op not supported"));
2401 ignore_rest_of_line ();
2405 /* Don't believe the documentation of BSD 4.2 AS. There is no such
2406 thing as a sub-segment-relative origin. Any absolute origin is
2407 given a warning, then assumed to be segment-relative. Any
2408 segmented origin expression ("foo+42") had better be in the right
2409 segment or the .org is ignored.
2411 BSD 4.2 AS warns if you try to .org backwards. We cannot because
2412 we never know sub-segment sizes when we are reading code. BSD
2413 will crash trying to emit negative numbers of filler bytes in
2414 certain .orgs. We don't crash, but see as-write for that code.
2416 Don't make frag if need_pass_2==1. */
2417 segment = get_known_segmented_expression (&exp);
2418 if (*input_line_pointer == ',')
2420 input_line_pointer++;
2421 temp_fill = get_absolute_expression ();
2427 do_org (segment, &exp, temp_fill);
2429 demand_empty_rest_of_line ();
2432 /* Handle parsing for the MRI SECT/SECTION pseudo-op. This should be
2433 called by the obj-format routine which handles section changing
2434 when in MRI mode. It will create a new section, and return it. It
2435 will set *TYPE to the section type: one of 'C' (code), 'D' (data),
2436 'M' (mixed), or 'R' (romable). If BFD_ASSEMBLER is defined, the
2437 flags will be set in the section. */
2441 char *type ATTRIBUTE_UNUSED;
2451 name = input_line_pointer;
2452 if (! isdigit ((unsigned char) *name))
2453 c = get_symbol_end ();
2458 ++input_line_pointer;
2460 while (isdigit ((unsigned char) *input_line_pointer));
2461 c = *input_line_pointer;
2462 *input_line_pointer = '\0';
2465 name = xstrdup (name);
2467 *input_line_pointer = c;
2469 seg = subseg_new (name, 0);
2471 if (*input_line_pointer == ',')
2475 ++input_line_pointer;
2476 align = get_absolute_expression ();
2477 record_alignment (seg, align);
2481 if (*input_line_pointer == ',')
2483 c = *++input_line_pointer;
2484 c = toupper ((unsigned char) c);
2485 if (c == 'C' || c == 'D' || c == 'M' || c == 'R')
2488 as_bad (_("unrecognized section type"));
2489 ++input_line_pointer;
2491 #ifdef BFD_ASSEMBLER
2495 flags = SEC_NO_FLAGS;
2497 flags = SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE;
2498 else if (*type == 'D' || *type == 'M')
2499 flags = SEC_ALLOC | SEC_LOAD | SEC_DATA;
2500 else if (*type == 'R')
2501 flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_READONLY | SEC_ROM;
2502 if (flags != SEC_NO_FLAGS)
2504 if (! bfd_set_section_flags (stdoutput, seg, flags))
2505 as_warn (_("error setting flags for \"%s\": %s"),
2506 bfd_section_name (stdoutput, seg),
2507 bfd_errmsg (bfd_get_error ()));
2513 /* Ignore the HP type. */
2514 if (*input_line_pointer == ',')
2515 input_line_pointer += 2;
2517 demand_empty_rest_of_line ();
2519 #else /* ! TC_M68K */
2528 name = input_line_pointer;
2529 c = get_symbol_end ();
2531 name = xstrdup (name);
2533 *input_line_pointer = c;
2535 seg = subseg_new (name, 0);
2537 if (*input_line_pointer != ',')
2543 ++input_line_pointer;
2545 sectype = input_line_pointer;
2546 c = get_symbol_end ();
2547 if (*sectype == '\0')
2549 else if (strcasecmp (sectype, "text") == 0)
2551 else if (strcasecmp (sectype, "data") == 0)
2553 else if (strcasecmp (sectype, "romdata") == 0)
2556 as_warn (_("unrecognized section type `%s'"), sectype);
2557 *input_line_pointer = c;
2560 if (*input_line_pointer == ',')
2564 ++input_line_pointer;
2566 seccmd = input_line_pointer;
2567 c = get_symbol_end ();
2568 if (strcasecmp (seccmd, "absolute") == 0)
2570 as_bad (_("absolute sections are not supported"));
2571 *input_line_pointer = c;
2572 ignore_rest_of_line ();
2575 else if (strcasecmp (seccmd, "align") == 0)
2579 *input_line_pointer = c;
2580 align = get_absolute_expression ();
2581 record_alignment (seg, align);
2585 as_warn (_("unrecognized section command `%s'"), seccmd);
2586 *input_line_pointer = c;
2590 demand_empty_rest_of_line ();
2592 #else /* ! TC_I960 */
2593 /* The MRI assembler seems to use different forms of .sect for
2594 different targets. */
2595 as_bad ("MRI mode not supported for this target");
2596 ignore_rest_of_line ();
2597 #endif /* ! TC_I960 */
2598 #endif /* ! TC_M68K */
2601 /* Handle the .print pseudo-op. */
2605 int ignore ATTRIBUTE_UNUSED;
2610 s = demand_copy_C_string (&len);
2612 demand_empty_rest_of_line ();
2615 /* Handle the .purgem pseudo-op. */
2619 int ignore ATTRIBUTE_UNUSED;
2621 if (is_it_end_of_statement ())
2623 demand_empty_rest_of_line ();
2633 name = input_line_pointer;
2634 c = get_symbol_end ();
2635 delete_macro (name);
2636 *input_line_pointer = c;
2639 while (*input_line_pointer++ == ',');
2641 --input_line_pointer;
2642 demand_empty_rest_of_line ();
2645 /* Handle the .rept pseudo-op. */
2649 int ignore ATTRIBUTE_UNUSED;
2653 count = get_absolute_expression ();
2655 do_repeat(count, "REPT", "ENDR");
2658 /* This function provides a generic repeat block implementation. It allows
2659 different directives to be used as the start/end keys. */
2662 do_repeat (count, start, end)
2671 if (! buffer_and_nest (start, end, &one, get_line_sb))
2673 as_bad (_("%s without %s"), start, end);
2679 sb_add_sb (&many, &one);
2683 input_scrub_include_sb (&many, input_line_pointer);
2685 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2688 /* Skip to end of current repeat loop; EXTRA indicates how many additional
2689 input buffers to skip. Assumes that conditionals preceding the loop end
2690 are properly nested.
2692 This function makes it easier to implement a premature "break" out of the
2693 loop. The EXTRA arg accounts for other buffers we might have inserted,
2694 such as line substitutions. */
2700 cond_exit_macro (macro_nest);
2701 while (extra-- >= 0)
2702 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2705 /* Handle the .equ, .equiv and .set directives. If EQUIV is 1, then
2706 this is .equiv, and it is an error if the symbol is already
2713 register char *name;
2714 register char delim;
2715 register char *end_name;
2716 register symbolS *symbolP;
2719 * Especial apologies for the random logic:
2720 * this just grew, and could be parsed much more simply!
2723 name = input_line_pointer;
2724 delim = get_symbol_end ();
2725 end_name = input_line_pointer;
2729 if (*input_line_pointer != ',')
2732 as_bad (_("Expected comma after name \"%s\""), name);
2734 ignore_rest_of_line ();
2738 input_line_pointer++;
2741 if (name[0] == '.' && name[1] == '\0')
2743 /* Turn '. = mumble' into a .org mumble */
2744 register segT segment;
2747 segment = get_known_segmented_expression (&exp);
2750 do_org (segment, &exp, 0);
2756 if ((symbolP = symbol_find (name)) == NULL
2757 && (symbolP = md_undefined_symbol (name)) == NULL)
2760 /* When doing symbol listings, play games with dummy fragments living
2761 outside the normal fragment chain to record the file and line info
2763 if (listing & LISTING_SYMBOLS)
2765 extern struct list_info_struct *listing_tail;
2766 fragS *dummy_frag = (fragS *) xmalloc (sizeof(fragS));
2767 memset (dummy_frag, 0, sizeof(fragS));
2768 dummy_frag->fr_type = rs_fill;
2769 dummy_frag->line = listing_tail;
2770 symbolP = symbol_new (name, undefined_section, 0, dummy_frag);
2771 dummy_frag->fr_symbol = symbolP;
2775 symbolP = symbol_new (name, undefined_section, 0, &zero_address_frag);
2778 /* "set" symbols are local unless otherwise specified. */
2779 SF_SET_LOCAL (symbolP);
2780 #endif /* OBJ_COFF */
2782 } /* make a new symbol */
2784 symbol_table_insert (symbolP);
2789 && S_IS_DEFINED (symbolP)
2790 && S_GET_SEGMENT (symbolP) != reg_section)
2791 as_bad (_("symbol `%s' already defined"), S_GET_NAME (symbolP));
2793 pseudo_set (symbolP);
2794 demand_empty_rest_of_line ();
2808 #ifdef md_flush_pending_output
2809 md_flush_pending_output ();
2813 stop = mri_comment_field (&stopc);
2815 /* In m68k MRI mode, we need to align to a word boundary, unless
2817 if (flag_m68k_mri && mult > 1)
2819 if (now_seg == absolute_section)
2821 abs_section_offset += abs_section_offset & 1;
2822 if (line_label != NULL)
2823 S_SET_VALUE (line_label, abs_section_offset);
2825 else if (mri_common_symbol != NULL)
2829 val = S_GET_VALUE (mri_common_symbol);
2832 S_SET_VALUE (mri_common_symbol, val + 1);
2833 if (line_label != NULL)
2835 expressionS *symexp;
2837 symexp = symbol_get_value_expression (line_label);
2838 know (symexp->X_op == O_symbol);
2839 know (symexp->X_add_symbol == mri_common_symbol);
2840 symexp->X_add_number += 1;
2846 do_align (1, (char *) NULL, 0, 0);
2847 if (line_label != NULL)
2849 symbol_set_frag (line_label, frag_now);
2850 S_SET_VALUE (line_label, frag_now_fix ());
2860 if (*input_line_pointer == ',')
2862 ++input_line_pointer;
2867 val.X_op = O_constant;
2868 val.X_add_number = 0;
2871 if (val.X_op != O_constant
2872 || val.X_add_number < - 0x80
2873 || val.X_add_number > 0xff
2874 || (mult != 0 && mult != 1 && val.X_add_number != 0))
2876 if (exp.X_op != O_constant)
2877 as_bad (_("Unsupported variable size or fill value"));
2884 bytes = mult * exp.X_add_number;
2885 for (i = 0; i < exp.X_add_number; i++)
2886 emit_expr (&val, mult);
2891 if (exp.X_op == O_constant)
2895 repeat = exp.X_add_number;
2902 as_warn (_(".space repeat count is zero, ignored"));
2903 else if (repeat < 0)
2904 as_warn (_(".space repeat count is negative, ignored"));
2908 /* If we are in the absolute section, just bump the offset. */
2909 if (now_seg == absolute_section)
2911 abs_section_offset += repeat;
2915 /* If we are secretly in an MRI common section, then
2916 creating space just increases the size of the common
2918 if (mri_common_symbol != NULL)
2920 S_SET_VALUE (mri_common_symbol,
2921 S_GET_VALUE (mri_common_symbol) + repeat);
2926 p = frag_var (rs_fill, 1, 1, (relax_substateT) 0, (symbolS *) 0,
2927 (offsetT) repeat, (char *) 0);
2931 if (now_seg == absolute_section)
2933 as_bad (_("space allocation too complex in absolute section"));
2934 subseg_set (text_section, 0);
2936 if (mri_common_symbol != NULL)
2938 as_bad (_("space allocation too complex in common section"));
2939 mri_common_symbol = NULL;
2942 p = frag_var (rs_space, 1, 1, (relax_substateT) 0,
2943 make_expr_symbol (&exp), (offsetT) 0, (char *) 0);
2947 *p = val.X_add_number;
2952 /* In MRI mode, after an odd number of bytes, we must align to an
2953 even word boundary, unless the next instruction is a dc.b, ds.b
2955 if (flag_mri && (bytes & 1) != 0)
2956 mri_pending_align = 1;
2958 demand_empty_rest_of_line ();
2961 mri_comment_end (stop, stopc);
2964 /* This is like s_space, but the value is a floating point number with
2965 the given precision. This is for the MRI dcb.s pseudo-op and
2969 s_float_space (float_type)
2974 char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
2979 stop = mri_comment_field (&stopc);
2981 count = get_absolute_expression ();
2984 if (*input_line_pointer != ',')
2986 as_bad (_("missing value"));
2987 ignore_rest_of_line ();
2989 mri_comment_end (stop, stopc);
2993 ++input_line_pointer;
2997 /* Skip any 0{letter} that may be present. Don't even check if the
2998 * letter is legal. */
2999 if (input_line_pointer[0] == '0'
3000 && isalpha ((unsigned char) input_line_pointer[1]))
3001 input_line_pointer += 2;
3003 /* Accept :xxxx, where the x's are hex digits, for a floating point
3004 with the exact digits specified. */
3005 if (input_line_pointer[0] == ':')
3007 flen = hex_float (float_type, temp);
3010 ignore_rest_of_line ();
3012 mri_comment_end (stop, stopc);
3020 err = md_atof (float_type, temp, &flen);
3021 know (flen <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
3025 as_bad (_("Bad floating literal: %s"), err);
3026 ignore_rest_of_line ();
3028 mri_comment_end (stop, stopc);
3033 while (--count >= 0)
3037 p = frag_more (flen);
3038 memcpy (p, temp, (unsigned int) flen);
3041 demand_empty_rest_of_line ();
3044 mri_comment_end (stop, stopc);
3047 /* Handle the .struct pseudo-op, as found in MIPS assemblers. */
3051 int ignore ATTRIBUTE_UNUSED;
3057 stop = mri_comment_field (&stopc);
3058 abs_section_offset = get_absolute_expression ();
3059 subseg_set (absolute_section, 0);
3060 demand_empty_rest_of_line ();
3062 mri_comment_end (stop, stopc);
3067 int ignore ATTRIBUTE_UNUSED;
3071 temp = get_absolute_expression ();
3072 subseg_set (text_section, (subsegT) temp);
3073 demand_empty_rest_of_line ();
3075 const_flag &= ~IN_DEFAULT_SECTION;
3081 demand_empty_rest_of_line ()
3084 if (is_end_of_line[(unsigned char) *input_line_pointer])
3086 input_line_pointer++;
3090 ignore_rest_of_line ();
3092 /* Return having already swallowed end-of-line. */
3093 } /* Return pointing just after end-of-line. */
3096 ignore_rest_of_line () /* For suspect lines: gives warning. */
3098 if (!is_end_of_line[(unsigned char) *input_line_pointer])
3100 if (isprint ((unsigned char) *input_line_pointer))
3101 as_bad (_("Rest of line ignored. First ignored character is `%c'."),
3102 *input_line_pointer);
3104 as_bad (_("Rest of line ignored. First ignored character valued 0x%x."),
3105 *input_line_pointer);
3106 while (input_line_pointer < buffer_limit
3107 && !is_end_of_line[(unsigned char) *input_line_pointer])
3109 input_line_pointer++;
3112 input_line_pointer++; /* Return pointing just after end-of-line. */
3113 know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3117 discard_rest_of_line ()
3119 while (input_line_pointer < buffer_limit
3120 && !is_end_of_line[(unsigned char) *input_line_pointer])
3122 input_line_pointer++;
3124 input_line_pointer++; /* Return pointing just after end-of-line. */
3125 know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3131 * In: Pointer to a symbol.
3132 * Input_line_pointer->expression.
3134 * Out: Input_line_pointer->just after any whitespace after expression.
3135 * Tried to set symbol to value of expression.
3136 * Will change symbols type, value, and frag;
3139 pseudo_set (symbolP)
3143 #if (defined (OBJ_AOUT) || defined (OBJ_BOUT)) && ! defined (BFD_ASSEMBLER)
3145 #endif /* OBJ_AOUT or OBJ_BOUT */
3147 know (symbolP); /* NULL pointer is logic error. */
3148 #if (defined (OBJ_AOUT) || defined (OBJ_BOUT)) && ! defined (BFD_ASSEMBLER)
3149 ext = S_IS_EXTERNAL (symbolP);
3150 #endif /* OBJ_AOUT or OBJ_BOUT */
3152 (void) expression (&exp);
3154 if (exp.X_op == O_illegal)
3155 as_bad (_("illegal expression; zero assumed"));
3156 else if (exp.X_op == O_absent)
3157 as_bad (_("missing expression; zero assumed"));
3158 else if (exp.X_op == O_big)
3160 if (exp.X_add_number > 0)
3161 as_bad (_("bignum invalid; zero assumed"));
3163 as_bad (_("floating point number invalid; zero assumed"));
3165 else if (exp.X_op == O_subtract
3166 && (S_GET_SEGMENT (exp.X_add_symbol)
3167 == S_GET_SEGMENT (exp.X_op_symbol))
3168 && SEG_NORMAL (S_GET_SEGMENT (exp.X_add_symbol))
3169 && (symbol_get_frag (exp.X_add_symbol)
3170 == symbol_get_frag (exp.X_op_symbol)))
3172 exp.X_op = O_constant;
3173 exp.X_add_number = (S_GET_VALUE (exp.X_add_symbol)
3174 - S_GET_VALUE (exp.X_op_symbol));
3182 exp.X_add_number = 0;
3185 S_SET_SEGMENT (symbolP, absolute_section);
3186 #if (defined (OBJ_AOUT) || defined (OBJ_BOUT)) && ! defined (BFD_ASSEMBLER)
3188 S_SET_EXTERNAL (symbolP);
3190 S_CLEAR_EXTERNAL (symbolP);
3191 #endif /* OBJ_AOUT or OBJ_BOUT */
3192 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3193 if (exp.X_op != O_constant)
3194 symbol_set_frag (symbolP, &zero_address_frag);
3198 S_SET_SEGMENT (symbolP, reg_section);
3199 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3200 symbol_set_frag (symbolP, &zero_address_frag);
3204 if (S_GET_SEGMENT (exp.X_add_symbol) == undefined_section
3205 || exp.X_add_number != 0)
3206 symbol_set_value_expression (symbolP, &exp);
3207 else if (symbol_section_p (symbolP))
3208 as_bad ("invalid attempt to set value of section symbol");
3211 symbolS *s = exp.X_add_symbol;
3213 S_SET_SEGMENT (symbolP, S_GET_SEGMENT (s));
3214 #if (defined (OBJ_AOUT) || defined (OBJ_BOUT)) && ! defined (BFD_ASSEMBLER)
3216 S_SET_EXTERNAL (symbolP);
3218 S_CLEAR_EXTERNAL (symbolP);
3219 #endif /* OBJ_AOUT or OBJ_BOUT */
3220 S_SET_VALUE (symbolP,
3221 exp.X_add_number + S_GET_VALUE (s));
3222 symbol_set_frag (symbolP, symbol_get_frag (s));
3223 copy_symbol_attributes (symbolP, s);
3228 /* The value is some complex expression.
3229 FIXME: Should we set the segment to anything? */
3230 symbol_set_value_expression (symbolP, &exp);
3238 * CONStruct more frag of .bytes, or .words etc.
3239 * Should need_pass_2 be 1 then emit no frag(s).
3240 * This understands EXPRESSIONS.
3244 * This has a split personality. We use expression() to read the
3245 * value. We can detect if the value won't fit in a byte or word.
3246 * But we can't detect if expression() discarded significant digits
3247 * in the case of a long. Not worth the crocks required to fix it.
3250 /* Select a parser for cons expressions. */
3252 /* Some targets need to parse the expression in various fancy ways.
3253 You can define TC_PARSE_CONS_EXPRESSION to do whatever you like
3254 (for example, the HPPA does this). Otherwise, you can define
3255 BITFIELD_CONS_EXPRESSIONS to permit bitfields to be specified, or
3256 REPEAT_CONS_EXPRESSIONS to permit repeat counts. If none of these
3257 are defined, which is the normal case, then only simple expressions
3261 parse_mri_cons PARAMS ((expressionS *exp, unsigned int nbytes));
3263 #ifndef TC_PARSE_CONS_EXPRESSION
3264 #ifdef BITFIELD_CONS_EXPRESSIONS
3265 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) parse_bitfield_cons (EXP, NBYTES)
3267 parse_bitfield_cons PARAMS ((expressionS *exp, unsigned int nbytes));
3269 #ifdef REPEAT_CONS_EXPRESSIONS
3270 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) parse_repeat_cons (EXP, NBYTES)
3272 parse_repeat_cons PARAMS ((expressionS *exp, unsigned int nbytes));
3275 /* If we haven't gotten one yet, just call expression. */
3276 #ifndef TC_PARSE_CONS_EXPRESSION
3277 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) expression (EXP)
3281 /* worker to do .byte etc statements */
3282 /* clobbers input_line_pointer, checks */
3285 cons_worker (nbytes, rva)
3286 register int nbytes; /* 1=.byte, 2=.word, 4=.long */
3294 #ifdef md_flush_pending_output
3295 md_flush_pending_output ();
3299 stop = mri_comment_field (&stopc);
3301 if (is_it_end_of_statement ())
3303 demand_empty_rest_of_line ();
3305 mri_comment_end (stop, stopc);
3309 #ifdef md_cons_align
3310 md_cons_align (nbytes);
3317 parse_mri_cons (&exp, (unsigned int) nbytes);
3319 TC_PARSE_CONS_EXPRESSION (&exp, (unsigned int) nbytes);
3323 if (exp.X_op == O_symbol)
3324 exp.X_op = O_symbol_rva;
3326 as_fatal (_("rva without symbol"));
3328 emit_expr (&exp, (unsigned int) nbytes);
3331 while (*input_line_pointer++ == ',');
3333 /* In MRI mode, after an odd number of bytes, we must align to an
3334 even word boundary, unless the next instruction is a dc.b, ds.b
3336 if (flag_mri && nbytes == 1 && (c & 1) != 0)
3337 mri_pending_align = 1;
3339 input_line_pointer--; /* Put terminator back into stream. */
3341 demand_empty_rest_of_line ();
3344 mri_comment_end (stop, stopc);
3352 cons_worker (size, 0);
3359 cons_worker (size, 1);
3362 /* Put the contents of expression EXP into the object file using
3363 NBYTES bytes. If need_pass_2 is 1, this does nothing. */
3366 emit_expr (exp, nbytes)
3368 unsigned int nbytes;
3372 valueT extra_digit = 0;
3374 /* Don't do anything if we are going to make another pass. */
3380 /* When gcc emits DWARF 1 debugging pseudo-ops, a line number will
3381 appear as a four byte positive constant in the .line section,
3382 followed by a 2 byte 0xffff. Look for that case here. */
3384 static int dwarf_line = -1;
3386 if (strcmp (segment_name (now_seg), ".line") != 0)
3388 else if (dwarf_line >= 0
3390 && exp->X_op == O_constant
3391 && (exp->X_add_number == -1 || exp->X_add_number == 0xffff))
3392 listing_source_line ((unsigned int) dwarf_line);
3393 else if (nbytes == 4
3394 && exp->X_op == O_constant
3395 && exp->X_add_number >= 0)
3396 dwarf_line = exp->X_add_number;
3401 /* When gcc emits DWARF 1 debugging pseudo-ops, a file name will
3402 appear as a 2 byte TAG_compile_unit (0x11) followed by a 2 byte
3403 AT_sibling (0x12) followed by a four byte address of the sibling
3404 followed by a 2 byte AT_name (0x38) followed by the name of the
3405 file. We look for that case here. */
3407 static int dwarf_file = 0;
3409 if (strcmp (segment_name (now_seg), ".debug") != 0)
3411 else if (dwarf_file == 0
3413 && exp->X_op == O_constant
3414 && exp->X_add_number == 0x11)
3416 else if (dwarf_file == 1
3418 && exp->X_op == O_constant
3419 && exp->X_add_number == 0x12)
3421 else if (dwarf_file == 2
3424 else if (dwarf_file == 3
3426 && exp->X_op == O_constant
3427 && exp->X_add_number == 0x38)
3432 /* The variable dwarf_file_string tells stringer that the string
3433 may be the name of the source file. */
3434 if (dwarf_file == 4)
3435 dwarf_file_string = 1;
3437 dwarf_file_string = 0;
3442 if (check_eh_frame (exp, &nbytes))
3447 /* Allow `.word 0' in the absolute section. */
3448 if (now_seg == absolute_section)
3450 if (op != O_constant || exp->X_add_number != 0)
3451 as_bad (_("attempt to store value in absolute section"));
3452 abs_section_offset += nbytes;
3456 /* Handle a negative bignum. */
3458 && exp->X_add_number == 0
3459 && symbol_get_value_expression (exp->X_add_symbol)->X_op == O_big
3460 && symbol_get_value_expression (exp->X_add_symbol)->X_add_number > 0)
3463 unsigned long carry;
3465 exp = symbol_get_value_expression (exp->X_add_symbol);
3467 /* Negate the bignum: one's complement each digit and add 1. */
3469 for (i = 0; i < exp->X_add_number; i++)
3473 next = (((~ (generic_bignum[i] & LITTLENUM_MASK))
3476 generic_bignum[i] = next & LITTLENUM_MASK;
3477 carry = next >> LITTLENUM_NUMBER_OF_BITS;
3480 /* We can ignore any carry out, because it will be handled by
3481 extra_digit if it is needed. */
3483 extra_digit = (valueT) -1;
3487 if (op == O_absent || op == O_illegal)
3489 as_warn (_("zero assumed for missing expression"));
3490 exp->X_add_number = 0;
3493 else if (op == O_big && exp->X_add_number <= 0)
3495 as_bad (_("floating point number invalid; zero assumed"));
3496 exp->X_add_number = 0;
3499 else if (op == O_register)
3501 as_warn (_("register value used as expression"));
3505 p = frag_more ((int) nbytes);
3507 #ifndef WORKING_DOT_WORD
3508 /* If we have the difference of two symbols in a word, save it on
3509 the broken_words list. See the code in write.c. */
3510 if (op == O_subtract && nbytes == 2)
3512 struct broken_word *x;
3514 x = (struct broken_word *) xmalloc (sizeof (struct broken_word));
3515 x->next_broken_word = broken_words;
3518 x->subseg = now_subseg;
3520 x->word_goes_here = p;
3522 x->add = exp->X_add_symbol;
3523 x->sub = exp->X_op_symbol;
3524 x->addnum = exp->X_add_number;
3531 /* If we have an integer, but the number of bytes is too large to
3532 pass to md_number_to_chars, handle it as a bignum. */
3533 if (op == O_constant && nbytes > sizeof (valueT))
3538 if (! exp->X_unsigned && exp->X_add_number < 0)
3539 extra_digit = (valueT) -1;
3540 val = (valueT) exp->X_add_number;
3544 generic_bignum[gencnt] = val & LITTLENUM_MASK;
3545 val >>= LITTLENUM_NUMBER_OF_BITS;
3549 op = exp->X_op = O_big;
3550 exp->X_add_number = gencnt;
3553 if (op == O_constant)
3555 register valueT get;
3556 register valueT use;
3557 register valueT mask;
3559 register valueT unmask;
3561 /* JF << of >= number of bits in the object is undefined. In
3562 particular SPARC (Sun 4) has problems */
3563 if (nbytes >= sizeof (valueT))
3566 if (nbytes > sizeof (valueT))
3569 hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
3573 /* Don't store these bits. */
3574 mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes);
3575 hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
3578 unmask = ~mask; /* Do store these bits. */
3581 "Do this mod if you want every overflow check to assume SIGNED 2's complement data.";
3582 mask = ~(unmask >> 1); /* Includes sign bit now. */
3585 get = exp->X_add_number;
3587 if ((get & mask) != 0
3588 && ((get & mask) != mask
3589 || (get & hibit) == 0))
3590 { /* Leading bits contain both 0s & 1s. */
3591 as_warn (_("Value 0x%lx truncated to 0x%lx."),
3592 (unsigned long) get, (unsigned long) use);
3594 /* put bytes in right order. */
3595 md_number_to_chars (p, use, (int) nbytes);
3597 else if (op == O_big)
3600 LITTLENUM_TYPE *nums;
3602 know (nbytes % CHARS_PER_LITTLENUM == 0);
3604 size = exp->X_add_number * CHARS_PER_LITTLENUM;
3607 as_warn (_("Bignum truncated to %d bytes"), nbytes);
3611 if (target_big_endian)
3613 while (nbytes > size)
3615 md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
3616 nbytes -= CHARS_PER_LITTLENUM;
3617 p += CHARS_PER_LITTLENUM;
3620 nums = generic_bignum + size / CHARS_PER_LITTLENUM;
3624 md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
3625 size -= CHARS_PER_LITTLENUM;
3626 p += CHARS_PER_LITTLENUM;
3631 nums = generic_bignum;
3634 md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
3636 size -= CHARS_PER_LITTLENUM;
3637 p += CHARS_PER_LITTLENUM;
3638 nbytes -= CHARS_PER_LITTLENUM;
3643 md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
3644 nbytes -= CHARS_PER_LITTLENUM;
3645 p += CHARS_PER_LITTLENUM;
3651 memset (p, 0, nbytes);
3653 /* Now we need to generate a fixS to record the symbol value.
3654 This is easy for BFD. For other targets it can be more
3655 complex. For very complex cases (currently, the HPPA and
3656 NS32K), you can define TC_CONS_FIX_NEW to do whatever you
3657 want. For simpler cases, you can define TC_CONS_RELOC to be
3658 the name of the reloc code that should be stored in the fixS.
3659 If neither is defined, the code uses NO_RELOC if it is
3660 defined, and otherwise uses 0. */
3662 #ifdef BFD_ASSEMBLER
3663 #ifdef TC_CONS_FIX_NEW
3664 TC_CONS_FIX_NEW (frag_now, p - frag_now->fr_literal, nbytes, exp);
3667 bfd_reloc_code_real_type r;
3684 as_bad (_("unsupported BFD relocation size %u"), nbytes);
3688 fix_new_exp (frag_now, p - frag_now->fr_literal, (int) nbytes, exp,
3693 #ifdef TC_CONS_FIX_NEW
3694 TC_CONS_FIX_NEW (frag_now, p - frag_now->fr_literal, nbytes, exp);
3696 /* Figure out which reloc number to use. Use TC_CONS_RELOC if
3697 it is defined, otherwise use NO_RELOC if it is defined,
3699 #ifndef TC_CONS_RELOC
3701 #define TC_CONS_RELOC NO_RELOC
3703 #define TC_CONS_RELOC 0
3706 fix_new_exp (frag_now, p - frag_now->fr_literal, (int) nbytes, exp, 0,
3708 #endif /* TC_CONS_FIX_NEW */
3709 #endif /* BFD_ASSEMBLER */
3713 #ifdef BITFIELD_CONS_EXPRESSIONS
3715 /* i960 assemblers, (eg, asm960), allow bitfields after ".byte" as
3716 w:x,y:z, where w and y are bitwidths and x and y are values. They
3717 then pack them all together. We do a little better in that we allow
3718 them in words, longs, etc. and we'll pack them in target byte order
3721 The rules are: pack least significat bit first, if a field doesn't
3722 entirely fit, put it in the next unit. Overflowing the bitfield is
3723 explicitly *not* even a warning. The bitwidth should be considered
3726 To use this function the tc-XXX.h file should define
3727 BITFIELD_CONS_EXPRESSIONS. */
3730 parse_bitfield_cons (exp, nbytes)
3732 unsigned int nbytes;
3734 unsigned int bits_available = BITS_PER_CHAR * nbytes;
3735 char *hold = input_line_pointer;
3737 (void) expression (exp);
3739 if (*input_line_pointer == ':')
3745 unsigned long width;
3747 if (*input_line_pointer != ':')
3749 input_line_pointer = hold;
3751 } /* next piece is not a bitfield */
3753 /* In the general case, we can't allow
3754 full expressions with symbol
3755 differences and such. The relocation
3756 entries for symbols not defined in this
3757 assembly would require arbitrary field
3758 widths, positions, and masks which most
3759 of our current object formats don't
3762 In the specific case where a symbol
3763 *is* defined in this assembly, we
3764 *could* build fixups and track it, but
3765 this could lead to confusion for the
3766 backends. I'm lazy. I'll take any
3767 SEG_ABSOLUTE. I think that means that
3768 you can use a previous .set or
3769 .equ type symbol. xoxorich. */
3771 if (exp->X_op == O_absent)
3773 as_warn (_("using a bit field width of zero"));
3774 exp->X_add_number = 0;
3775 exp->X_op = O_constant;
3776 } /* implied zero width bitfield */
3778 if (exp->X_op != O_constant)
3780 *input_line_pointer = '\0';
3781 as_bad (_("field width \"%s\" too complex for a bitfield"), hold);
3782 *input_line_pointer = ':';
3783 demand_empty_rest_of_line ();
3787 if ((width = exp->X_add_number) > (BITS_PER_CHAR * nbytes))
3789 as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"),
3790 width, nbytes, (BITS_PER_CHAR * nbytes));
3791 width = BITS_PER_CHAR * nbytes;
3794 if (width > bits_available)
3796 /* FIXME-SOMEDAY: backing up and reparsing is wasteful. */
3797 input_line_pointer = hold;
3798 exp->X_add_number = value;
3802 hold = ++input_line_pointer; /* skip ':' */
3804 (void) expression (exp);
3805 if (exp->X_op != O_constant)
3807 char cache = *input_line_pointer;
3809 *input_line_pointer = '\0';
3810 as_bad (_("field value \"%s\" too complex for a bitfield"), hold);
3811 *input_line_pointer = cache;
3812 demand_empty_rest_of_line ();
3816 value |= ((~(-1 << width) & exp->X_add_number)
3817 << ((BITS_PER_CHAR * nbytes) - bits_available));
3819 if ((bits_available -= width) == 0
3820 || is_it_end_of_statement ()
3821 || *input_line_pointer != ',')
3824 } /* all the bitfields we're gonna get */
3826 hold = ++input_line_pointer;
3827 (void) expression (exp);
3828 } /* forever loop */
3830 exp->X_add_number = value;
3831 exp->X_op = O_constant;
3832 exp->X_unsigned = 1;
3833 } /* if looks like a bitfield */
3834 } /* parse_bitfield_cons() */
3836 #endif /* BITFIELD_CONS_EXPRESSIONS */
3838 /* Handle an MRI style string expression. */
3841 parse_mri_cons (exp, nbytes)
3843 unsigned int nbytes;
3845 if (*input_line_pointer != '\''
3846 && (input_line_pointer[1] != '\''
3847 || (*input_line_pointer != 'A'
3848 && *input_line_pointer != 'E')))
3849 TC_PARSE_CONS_EXPRESSION (exp, nbytes);
3853 unsigned int result = 0;
3855 /* An MRI style string. Cut into as many bytes as will fit into
3856 a nbyte chunk, left justify if necessary, and separate with
3857 commas so we can try again later. */
3858 if (*input_line_pointer == 'A')
3859 ++input_line_pointer;
3860 else if (*input_line_pointer == 'E')
3862 as_bad (_("EBCDIC constants are not supported"));
3863 ++input_line_pointer;
3866 input_line_pointer++;
3867 for (scan = 0; scan < nbytes; scan++)
3869 if (*input_line_pointer == '\'')
3871 if (input_line_pointer[1] == '\'')
3873 input_line_pointer++;
3878 result = (result << 8) | (*input_line_pointer++);
3882 while (scan < nbytes)
3887 /* Create correct expression */
3888 exp->X_op = O_constant;
3889 exp->X_add_number = result;
3890 /* Fake it so that we can read the next char too */
3891 if (input_line_pointer[0] != '\'' ||
3892 (input_line_pointer[0] == '\'' && input_line_pointer[1] == '\''))
3894 input_line_pointer -= 2;
3895 input_line_pointer[0] = ',';
3896 input_line_pointer[1] = '\'';
3899 input_line_pointer++;
3903 #ifdef REPEAT_CONS_EXPRESSIONS
3905 /* Parse a repeat expression for cons. This is used by the MIPS
3906 assembler. The format is NUMBER:COUNT; NUMBER appears in the
3907 object file COUNT times.
3909 To use this for a target, define REPEAT_CONS_EXPRESSIONS. */
3912 parse_repeat_cons (exp, nbytes)
3914 unsigned int nbytes;
3921 if (*input_line_pointer != ':')
3923 /* No repeat count. */
3927 ++input_line_pointer;
3928 expression (&count);
3929 if (count.X_op != O_constant
3930 || count.X_add_number <= 0)
3932 as_warn (_("Unresolvable or nonpositive repeat count; using 1"));
3936 /* The cons function is going to output this expression once. So we
3937 output it count - 1 times. */
3938 for (i = count.X_add_number - 1; i > 0; i--)
3939 emit_expr (exp, nbytes);
3942 #endif /* REPEAT_CONS_EXPRESSIONS */
3944 /* Parse a floating point number represented as a hex constant. This
3945 permits users to specify the exact bits they want in the floating
3949 hex_float (float_type, bytes)
3983 as_bad (_("Unknown floating type type '%c'"), float_type);
3987 /* It would be nice if we could go through expression to parse the
3988 hex constant, but if we get a bignum it's a pain to sort it into
3989 the buffer correctly. */
3991 while (hex_p (*input_line_pointer) || *input_line_pointer == '_')
3995 /* The MRI assembler accepts arbitrary underscores strewn about
3996 through the hex constant, so we ignore them as well. */
3997 if (*input_line_pointer == '_')
3999 ++input_line_pointer;
4005 as_warn (_("Floating point constant too large"));
4008 d = hex_value (*input_line_pointer) << 4;
4009 ++input_line_pointer;
4010 while (*input_line_pointer == '_')
4011 ++input_line_pointer;
4012 if (hex_p (*input_line_pointer))
4014 d += hex_value (*input_line_pointer);
4015 ++input_line_pointer;
4017 if (target_big_endian)
4020 bytes[length - i - 1] = d;
4026 if (target_big_endian)
4027 memset (bytes + i, 0, length - i);
4029 memset (bytes, 0, length - i);
4038 * CONStruct some more frag chars of .floats .ffloats etc.
4039 * Makes 0 or more new frags.
4040 * If need_pass_2 == 1, no frags are emitted.
4041 * This understands only floating literals, not expressions. Sorry.
4043 * A floating constant is defined by atof_generic(), except it is preceded
4044 * by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its
4045 * reading, I decided to be incompatible. This always tries to give you
4046 * rounded bits to the precision of the pseudo-op. Former AS did premature
4047 * truncatation, restored noisy bits instead of trailing 0s AND gave you
4048 * a choice of 2 flavours of noise according to which of 2 floating-point
4049 * scanners you directed AS to use.
4051 * In: input_line_pointer->whitespace before, or '0' of flonum.
4056 float_cons (float_type)
4057 /* Clobbers input_line-pointer, checks end-of-line. */
4058 register int float_type; /* 'f':.ffloat ... 'F':.float ... */
4061 int length; /* Number of chars in an object. */
4062 register char *err; /* Error from scanning floating literal. */
4063 char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
4065 if (is_it_end_of_statement ())
4067 demand_empty_rest_of_line ();
4071 #ifdef md_flush_pending_output
4072 md_flush_pending_output ();
4077 /* input_line_pointer->1st char of a flonum (we hope!). */
4080 /* Skip any 0{letter} that may be present. Don't even check if the
4081 * letter is legal. Someone may invent a "z" format and this routine
4082 * has no use for such information. Lusers beware: you get
4083 * diagnostics if your input is ill-conditioned.
4085 if (input_line_pointer[0] == '0'
4086 && isalpha ((unsigned char) input_line_pointer[1]))
4087 input_line_pointer += 2;
4089 /* Accept :xxxx, where the x's are hex digits, for a floating
4090 point with the exact digits specified. */
4091 if (input_line_pointer[0] == ':')
4093 ++input_line_pointer;
4094 length = hex_float (float_type, temp);
4097 ignore_rest_of_line ();
4103 err = md_atof (float_type, temp, &length);
4104 know (length <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
4108 as_bad (_("Bad floating literal: %s"), err);
4109 ignore_rest_of_line ();
4120 #ifdef REPEAT_CONS_EXPRESSIONS
4121 if (*input_line_pointer == ':')
4123 expressionS count_exp;
4125 ++input_line_pointer;
4126 expression (&count_exp);
4127 if (count_exp.X_op != O_constant
4128 || count_exp.X_add_number <= 0)
4130 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4133 count = count_exp.X_add_number;
4137 while (--count >= 0)
4139 p = frag_more (length);
4140 memcpy (p, temp, (unsigned int) length);
4145 while (*input_line_pointer++ == ',');
4147 --input_line_pointer; /* Put terminator back into stream. */
4148 demand_empty_rest_of_line ();
4149 } /* float_cons() */
4151 /* Return the size of a LEB128 value */
4154 sizeof_sleb128 (value)
4157 register int size = 0;
4158 register unsigned byte;
4162 byte = (value & 0x7f);
4163 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
4164 Fortunately, we can structure things so that the extra work reduces
4165 to a noop on systems that do things "properly". */
4166 value = (value >> 7) | ~(-(offsetT)1 >> 7);
4169 while (!(((value == 0) && ((byte & 0x40) == 0))
4170 || ((value == -1) && ((byte & 0x40) != 0))));
4176 sizeof_uleb128 (value)
4179 register int size = 0;
4180 register unsigned byte;
4184 byte = (value & 0x7f);
4194 sizeof_leb128 (value, sign)
4199 return sizeof_sleb128 ((offsetT) value);
4201 return sizeof_uleb128 (value);
4204 /* Output a LEB128 value. */
4207 output_sleb128 (p, value)
4211 register char *orig = p;
4216 unsigned byte = (value & 0x7f);
4218 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
4219 Fortunately, we can structure things so that the extra work reduces
4220 to a noop on systems that do things "properly". */
4221 value = (value >> 7) | ~(-(offsetT)1 >> 7);
4223 more = !((((value == 0) && ((byte & 0x40) == 0))
4224 || ((value == -1) && ((byte & 0x40) != 0))));
4236 output_uleb128 (p, value)
4244 unsigned byte = (value & 0x7f);
4247 /* More bytes to follow. */
4258 output_leb128 (p, value, sign)
4264 return output_sleb128 (p, (offsetT) value);
4266 return output_uleb128 (p, value);
4269 /* Do the same for bignums. We combine sizeof with output here in that
4270 we don't output for NULL values of P. It isn't really as critical as
4271 for "normal" values that this be streamlined. */
4274 output_big_sleb128 (p, bignum, size)
4276 LITTLENUM_TYPE *bignum;
4284 /* Strip leading sign extensions off the bignum. */
4285 while (size > 0 && bignum[size-1] == (LITTLENUM_TYPE)-1)
4290 if (loaded < 7 && size > 0)
4292 val |= (*bignum << loaded);
4293 loaded += 8 * CHARS_PER_LITTLENUM;
4304 if ((val == 0 && (byte & 0x40) == 0)
4305 || (~(val | ~(((valueT)1 << loaded) - 1)) == 0
4306 && (byte & 0x40) != 0))
4314 while (byte & 0x80);
4320 output_big_uleb128 (p, bignum, size)
4322 LITTLENUM_TYPE *bignum;
4330 /* Strip leading zeros off the bignum. */
4331 /* XXX: Is this needed? */
4332 while (size > 0 && bignum[size-1] == 0)
4337 if (loaded < 7 && size > 0)
4339 val |= (*bignum << loaded);
4340 loaded += 8 * CHARS_PER_LITTLENUM;
4349 if (size > 0 || val)
4356 while (byte & 0x80);
4362 output_big_leb128 (p, bignum, size, sign)
4364 LITTLENUM_TYPE *bignum;
4368 return output_big_sleb128 (p, bignum, size);
4370 return output_big_uleb128 (p, bignum, size);
4373 /* Generate the appropriate fragments for a given expression to emit a
4377 emit_leb128_expr(exp, sign)
4381 operatorT op = exp->X_op;
4383 if (op == O_absent || op == O_illegal)
4385 as_warn (_("zero assumed for missing expression"));
4386 exp->X_add_number = 0;
4389 else if (op == O_big && exp->X_add_number <= 0)
4391 as_bad (_("floating point number invalid; zero assumed"));
4392 exp->X_add_number = 0;
4395 else if (op == O_register)
4397 as_warn (_("register value used as expression"));
4401 if (op == O_constant)
4403 /* If we've got a constant, emit the thing directly right now. */
4405 valueT value = exp->X_add_number;
4409 size = sizeof_leb128 (value, sign);
4410 p = frag_more (size);
4411 output_leb128 (p, value, sign);
4413 else if (op == O_big)
4415 /* O_big is a different sort of constant. */
4420 size = output_big_leb128 (NULL, generic_bignum, exp->X_add_number, sign);
4421 p = frag_more (size);
4422 output_big_leb128 (p, generic_bignum, exp->X_add_number, sign);
4426 /* Otherwise, we have to create a variable sized fragment and
4427 resolve things later. */
4429 frag_var (rs_leb128, sizeof_uleb128 (~(valueT)0), 0, sign,
4430 make_expr_symbol (exp), 0, (char *) NULL);
4434 /* Parse the .sleb128 and .uleb128 pseudos. */
4444 emit_leb128_expr (&exp, sign);
4445 } while (*input_line_pointer++ == ',');
4447 input_line_pointer--;
4448 demand_empty_rest_of_line ();
4454 * We read 0 or more ',' separated, double-quoted strings.
4456 * Caller should have checked need_pass_2 is FALSE because we don't check it.
4461 stringer (append_zero) /* Worker to do .ascii etc statements. */
4462 /* Checks end-of-line. */
4463 register int append_zero; /* 0: don't append '\0', else 1 */
4465 register unsigned int c;
4468 #ifdef md_flush_pending_output
4469 md_flush_pending_output ();
4473 * The following awkward logic is to parse ZERO or more strings,
4474 * comma separated. Recall a string expression includes spaces
4475 * before the opening '\"' and spaces after the closing '\"'.
4476 * We fake a leading ',' if there is (supposed to be)
4477 * a 1st, expression. We keep demanding expressions for each
4480 if (is_it_end_of_statement ())
4482 c = 0; /* Skip loop. */
4483 ++input_line_pointer; /* Compensate for end of loop. */
4487 c = ','; /* Do loop. */
4489 while (c == ',' || c == '<' || c == '"')
4492 switch (*input_line_pointer)
4495 ++input_line_pointer; /*->1st char of string. */
4496 start = input_line_pointer;
4497 while (is_a_char (c = next_char_of_string ()))
4499 FRAG_APPEND_1_CHAR (c);
4503 FRAG_APPEND_1_CHAR (0);
4505 know (input_line_pointer[-1] == '\"');
4509 /* In ELF, when gcc is emitting DWARF 1 debugging output, it
4510 will emit .string with a filename in the .debug section
4511 after a sequence of constants. See the comment in
4512 emit_expr for the sequence. emit_expr will set
4513 dwarf_file_string to non-zero if this string might be a
4514 source file name. */
4515 if (strcmp (segment_name (now_seg), ".debug") != 0)
4516 dwarf_file_string = 0;
4517 else if (dwarf_file_string)
4519 c = input_line_pointer[-1];
4520 input_line_pointer[-1] = '\0';
4521 listing_source_file (start);
4522 input_line_pointer[-1] = c;
4529 input_line_pointer++;
4530 c = get_single_number ();
4531 FRAG_APPEND_1_CHAR (c);
4532 if (*input_line_pointer != '>')
4534 as_bad (_("Expected <nn>"));
4536 input_line_pointer++;
4539 input_line_pointer++;
4543 c = *input_line_pointer;
4546 demand_empty_rest_of_line ();
4549 /* FIXME-SOMEDAY: I had trouble here on characters with the
4550 high bits set. We'll probably also have trouble with
4551 multibyte chars, wide chars, etc. Also be careful about
4552 returning values bigger than 1 byte. xoxorich. */
4555 next_char_of_string ()
4557 register unsigned int c;
4559 c = *input_line_pointer++ & CHAR_MASK;
4567 as_warn (_("Unterminated string: Newline inserted."));
4568 bump_line_counters ();
4571 #ifndef NO_STRING_ESCAPES
4573 switch (c = *input_line_pointer++)
4601 break; /* As itself. */
4617 for (i = 0, number = 0; isdigit (c) && i < 3; c = *input_line_pointer++, i++)
4619 number = number * 8 + c - '0';
4623 --input_line_pointer;
4632 c = *input_line_pointer++;
4633 while (isxdigit (c))
4636 number = number * 16 + c - '0';
4637 else if (isupper (c))
4638 number = number * 16 + c - 'A' + 10;
4640 number = number * 16 + c - 'a' + 10;
4641 c = *input_line_pointer++;
4644 --input_line_pointer;
4649 /* To be compatible with BSD 4.2 as: give the luser a linefeed!! */
4650 as_warn (_("Unterminated string: Newline inserted."));
4652 bump_line_counters ();
4657 #ifdef ONLY_STANDARD_ESCAPES
4658 as_bad (_("Bad escaped character in string, '?' assumed"));
4660 #endif /* ONLY_STANDARD_ESCAPES */
4663 } /* switch on escaped char */
4665 #endif /* ! defined (NO_STRING_ESCAPES) */
4669 } /* switch on char */
4671 } /* next_char_of_string() */
4674 get_segmented_expression (expP)
4675 register expressionS *expP;
4677 register segT retval;
4679 retval = expression (expP);
4680 if (expP->X_op == O_illegal
4681 || expP->X_op == O_absent
4682 || expP->X_op == O_big)
4684 as_bad (_("expected address expression; zero assumed"));
4685 expP->X_op = O_constant;
4686 expP->X_add_number = 0;
4687 retval = absolute_section;
4693 get_known_segmented_expression (expP)
4694 register expressionS *expP;
4696 register segT retval;
4698 if ((retval = get_segmented_expression (expP)) == undefined_section)
4700 /* There is no easy way to extract the undefined symbol from the
4702 if (expP->X_add_symbol != NULL
4703 && S_GET_SEGMENT (expP->X_add_symbol) != expr_section)
4704 as_warn (_("symbol \"%s\" undefined; zero assumed"),
4705 S_GET_NAME (expP->X_add_symbol));
4707 as_warn (_("some symbol undefined; zero assumed"));
4708 retval = absolute_section;
4709 expP->X_op = O_constant;
4710 expP->X_add_number = 0;
4712 know (retval == absolute_section || SEG_NORMAL (retval));
4714 } /* get_known_segmented_expression() */
4717 get_absolute_expression ()
4722 if (exp.X_op != O_constant)
4724 if (exp.X_op != O_absent)
4725 as_bad (_("bad or irreducible absolute expression; zero assumed"));
4726 exp.X_add_number = 0;
4728 return exp.X_add_number;
4731 char /* return terminator */
4732 get_absolute_expression_and_terminator (val_pointer)
4733 long *val_pointer; /* return value of expression */
4735 /* FIXME: val_pointer should probably be offsetT *. */
4736 *val_pointer = (long) get_absolute_expression ();
4737 return (*input_line_pointer++);
4741 * demand_copy_C_string()
4743 * Like demand_copy_string, but return NULL if the string contains any '\0's.
4744 * Give a warning if that happens.
4747 demand_copy_C_string (len_pointer)
4752 if ((s = demand_copy_string (len_pointer)) != 0)
4756 for (len = *len_pointer; len > 0; len--)
4763 as_bad (_("This string may not contain \'\\0\'"));
4771 * demand_copy_string()
4773 * Demand string, but return a safe (=private) copy of the string.
4774 * Return NULL if we can't read a string here.
4777 demand_copy_string (lenP)
4780 register unsigned int c;
4786 if (*input_line_pointer == '\"')
4788 input_line_pointer++; /* Skip opening quote. */
4790 while (is_a_char (c = next_char_of_string ()))
4792 obstack_1grow (¬es, c);
4795 /* JF this next line is so demand_copy_C_string will return a
4796 null terminated string. */
4797 obstack_1grow (¬es, '\0');
4798 retval = obstack_finish (¬es);
4802 as_warn (_("Missing string"));
4804 ignore_rest_of_line ();
4808 } /* demand_copy_string() */
4811 * is_it_end_of_statement()
4813 * In: Input_line_pointer->next character.
4815 * Do: Skip input_line_pointer over all whitespace.
4817 * Out: 1 if input_line_pointer->end-of-line.
4820 is_it_end_of_statement ()
4823 return (is_end_of_line[(unsigned char) *input_line_pointer]);
4824 } /* is_it_end_of_statement() */
4827 equals (sym_name, reassign)
4831 register symbolS *symbolP; /* symbol we are working with */
4835 input_line_pointer++;
4836 if (*input_line_pointer == '=')
4837 input_line_pointer++;
4839 while (*input_line_pointer == ' ' || *input_line_pointer == '\t')
4840 input_line_pointer++;
4843 stop = mri_comment_field (&stopc);
4845 if (sym_name[0] == '.' && sym_name[1] == '\0')
4847 /* Turn '. = mumble' into a .org mumble */
4848 register segT segment;
4851 segment = get_known_segmented_expression (&exp);
4853 do_org (segment, &exp, 0);
4857 symbolP = symbol_find_or_make (sym_name);
4858 /* Permit register names to be redefined. */
4860 && S_IS_DEFINED (symbolP)
4861 && S_GET_SEGMENT (symbolP) != reg_section)
4862 as_bad (_("symbol `%s' already defined"), S_GET_NAME (symbolP));
4863 pseudo_set (symbolP);
4868 ignore_rest_of_line (); /* check garbage after the expression */
4869 mri_comment_end (stop, stopc);
4873 /* .include -- include a file at this point. */
4878 int arg ATTRIBUTE_UNUSED;
4886 if (! flag_m68k_mri)
4888 filename = demand_copy_string (&i);
4889 if (filename == NULL)
4891 /* demand_copy_string has already printed an error and
4892 called ignore_rest_of_line. */
4900 while (! is_end_of_line[(unsigned char) *input_line_pointer]
4901 && *input_line_pointer != ' '
4902 && *input_line_pointer != '\t')
4904 obstack_1grow (¬es, *input_line_pointer);
4905 ++input_line_pointer;
4908 obstack_1grow (¬es, '\0');
4909 filename = obstack_finish (¬es);
4910 while (! is_end_of_line[(unsigned char) *input_line_pointer])
4911 ++input_line_pointer;
4913 demand_empty_rest_of_line ();
4914 path = xmalloc ((unsigned long) i + include_dir_maxlen + 5 /* slop */ );
4915 for (i = 0; i < include_dir_count; i++)
4917 strcpy (path, include_dirs[i]);
4919 strcat (path, filename);
4920 if (0 != (try = fopen (path, "r")))
4929 /* malloc Storage leak when file is found on path. FIXME-SOMEDAY. */
4930 register_dependency (path);
4931 newbuf = input_scrub_include_file (path, input_line_pointer);
4932 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
4936 add_include_dir (path)
4941 if (include_dir_count == 0)
4943 include_dirs = (char **) xmalloc (2 * sizeof (*include_dirs));
4944 include_dirs[0] = "."; /* Current dir */
4945 include_dir_count = 2;
4949 include_dir_count++;
4950 include_dirs = (char **) realloc (include_dirs,
4951 include_dir_count * sizeof (*include_dirs));
4954 include_dirs[include_dir_count - 1] = path; /* New one */
4957 if (i > include_dir_maxlen)
4958 include_dir_maxlen = i;
4959 } /* add_include_dir() */
4961 /* Output debugging information to denote the source file. */
4964 generate_file_debug ()
4966 if (debug_type == DEBUG_STABS)
4967 stabs_generate_asm_file ();
4970 /* Output line number debugging information for the current source line. */
4973 generate_lineno_debug ()
4975 #ifdef ECOFF_DEBUGGING
4976 /* ECOFF assemblers automatically generate debugging information.
4977 FIXME: This should probably be handled elsewhere. */
4978 if (debug_type == DEBUG_UNSPECIFIED)
4980 if (ECOFF_DEBUGGING && ecoff_no_current_file ())
4981 debug_type = DEBUG_ECOFF;
4983 debug_type = DEBUG_NONE;
4989 case DEBUG_UNSPECIFIED:
4993 stabs_generate_asm_lineno ();
4996 ecoff_generate_asm_lineno ();
5005 /* Output debugging information to mark a function entry point or end point.
5006 END_P is zero for .func, and non-zero for .endfunc. */
5012 do_s_func (end_p, NULL);
5015 /* Subroutine of s_func so targets can choose a different default prefix.
5016 If DEFAULT_PREFIX is NULL, use the target's "leading char". */
5019 do_s_func (end_p, default_prefix)
5021 const char *default_prefix;
5023 /* Record the current function so that we can issue an error message for
5024 misplaced .func,.endfunc, and also so that .endfunc needs no
5026 static char *current_name;
5027 static char *current_label;
5031 if (current_name == NULL)
5033 as_bad (_("missing .func"));
5034 ignore_rest_of_line ();
5038 if (debug_type == DEBUG_STABS)
5039 stabs_generate_asm_endfunc (current_name, current_label);
5041 current_name = current_label = NULL;
5048 if (current_name != NULL)
5050 as_bad (_(".endfunc missing for previous .func"));
5051 ignore_rest_of_line ();
5055 name = input_line_pointer;
5056 delim1 = get_symbol_end ();
5057 name = xstrdup (name);
5058 *input_line_pointer = delim1;
5060 if (*input_line_pointer != ',')
5063 asprintf (&label, "%s%s", default_prefix, name);
5066 char leading_char = 0;
5067 #ifdef BFD_ASSEMBLER
5068 leading_char = bfd_get_symbol_leading_char (stdoutput);
5070 /* Missing entry point, use function's name with the leading
5073 asprintf (&label, "%c%s", leading_char, name);
5080 ++input_line_pointer;
5082 label = input_line_pointer;
5083 delim2 = get_symbol_end ();
5084 label = xstrdup (label);
5085 *input_line_pointer = delim2;
5088 if (debug_type == DEBUG_STABS)
5089 stabs_generate_asm_func (name, label);
5091 current_name = name;
5092 current_label = label;
5095 demand_empty_rest_of_line ();
5100 int arg ATTRIBUTE_UNUSED;
5102 while (!is_end_of_line[(unsigned char) *input_line_pointer])
5104 ++input_line_pointer;
5106 ++input_line_pointer;
5111 read_print_statistics (file)
5114 hash_print_statistics (file, "pseudo-op table", po_hash);