1 /* read.c - read a source file -
2 Copyright (C) 1986-2015 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
11 GAS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GAS; see the file COPYING. If not, write to the Free
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21 /* If your chars aren't 8 bits, you will change this a bit (eg. to 0xFF).
22 But then, GNU isn't spozed to run on your machine anyway.
23 (RMS is so shortsighted sometimes.) */
24 #define MASK_CHAR ((int)(unsigned char) -1)
26 /* This is the largest known floating point format (for now). It will
27 grow when we do 4361 style flonums. */
28 #define MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT (16)
30 /* Routines that read assembler source text to build spaghetti in memory.
31 Another group of these functions is in the expr.c module. */
34 #include "safe-ctype.h"
40 #include "dw2gencfi.h"
43 #ifndef TC_START_LABEL
44 #define TC_START_LABEL(STR, NUL_CHAR, NEXT_CHAR) (NEXT_CHAR == ':')
47 /* Set by the object-format or the target. */
48 #ifndef TC_IMPLICIT_LCOMM_ALIGNMENT
49 #define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \
54 else if ((SIZE) >= 4) \
56 else if ((SIZE) >= 2) \
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!)! */
77 /* The RS/6000 assembler uses {,},[,] as parts of symbol names. */
82 /* The Delta 68k assembler permits % inside label names. */
87 /* The PowerPC Windows NT assemblers permits ? inside label names. */
92 /* The IA-64 assembler uses # as a suffix designating a symbol. We include
93 it in the symbol and strip it out in tc_canonicalize_symbol_name. */
102 /* The Delta 68k assembler permits ~ at start of label names. */
106 /* Used by is_... macros. our ctype[]. */
107 char lex_type[256] = {
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* @ABCDEFGHIJKLMNO */
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ[\]^_ */
110 0, 0, 0, LEX_HASH, LEX_DOLLAR, LEX_PCT, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, /* _!"#$%&'()*+,-./ */
111 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, LEX_QM, /* 0123456789:;<=>? */
112 LEX_AT, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* @ABCDEFGHIJKLMNO */
113 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, 0, 3, /* PQRSTUVWXYZ[\]^_ */
114 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* `abcdefghijklmno */
115 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR, 0, LEX_BR, LEX_TILDE, 0, /* pqrstuvwxyz{|}~. */
116 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
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
127 Out: 1 if this character ends a line.
128 2 if this character is a line separator. */
129 char is_end_of_line[256] = {
131 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, /* @abcdefghijklmno */
133 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* @abcdefghijklmno */
135 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
136 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* _!"#$%&'()*+,-./ */
137 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0123456789:;<=>? */
138 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
140 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* */
152 #ifndef TC_CASE_SENSITIVE
153 char original_case_string[128];
156 /* Functions private to this file. */
158 static char *buffer; /* 1st char of each buffer of lines is here. */
159 static char *buffer_limit; /*->1 + last char in buffer. */
161 /* TARGET_BYTES_BIG_ENDIAN is required to be defined to either 0 or 1
162 in the tc-<CPU>.h file. See the "Porting GAS" section of the
164 int target_big_endian = TARGET_BYTES_BIG_ENDIAN;
166 /* Variables for handling include file directory table. */
168 /* Table of pointers to directories to search for .include's. */
171 /* How many are in the table. */
172 int include_dir_count;
174 /* Length of longest in table. */
175 int include_dir_maxlen = 1;
177 #ifndef WORKING_DOT_WORD
178 struct broken_word *broken_words;
179 int new_broken_words;
182 /* The current offset into the absolute section. We don't try to
183 build frags in the absolute section, since no data can be stored
184 there. We just keep track of the current offset. */
185 addressT abs_section_offset;
187 /* If this line had an MRI style label, it is stored in this variable.
188 This is used by some of the MRI pseudo-ops. */
191 /* This global variable is used to support MRI common sections. We
192 translate such sections into a common symbol. This variable is
193 non-NULL when we are in an MRI common section. */
194 symbolS *mri_common_symbol;
196 /* In MRI mode, after a dc.b pseudo-op with an odd number of bytes, we
197 need to align to an even byte boundary unless the next pseudo-op is
198 dc.b, ds.b, or dcb.b. This variable is set to 1 if an alignment
200 static int mri_pending_align;
204 /* This variable is set to be non-zero if the next string we see might
205 be the name of the source file in DWARF debugging information. See
206 the comment in emit_expr for the format we look for. */
207 static int dwarf_file_string;
211 /* If the target defines the md_frag_max_var hook then we know
212 enough to implement the .bundle_align_mode features. */
213 #ifdef md_frag_max_var
214 # define HANDLE_BUNDLE
218 /* .bundle_align_mode sets this. Normally it's zero. When nonzero,
219 it's the exponent of the bundle size, and aligned instruction bundle
220 mode is in effect. */
221 static unsigned int bundle_align_p2;
223 /* These are set by .bundle_lock and .bundle_unlock. .bundle_lock sets
224 bundle_lock_frag to frag_now and then starts a new frag with
225 frag_align_code. At the same time, bundle_lock_frain gets frchain_now,
226 so that .bundle_unlock can verify that we didn't change segments.
227 .bundle_unlock resets both to NULL. If we detect a bundling violation,
228 then we reset bundle_lock_frchain to NULL as an indicator that we've
229 already diagnosed the error with as_bad and don't need a cascade of
230 redundant errors, but bundle_lock_frag remains set to indicate that
231 we are expecting to see .bundle_unlock. */
232 static fragS *bundle_lock_frag;
233 static frchainS *bundle_lock_frchain;
235 /* This is incremented by .bundle_lock and decremented by .bundle_unlock,
237 static unsigned int bundle_lock_depth;
240 static void do_s_func (int end_p, const char *default_prefix);
241 static void do_align (int, char *, int, int);
242 static void s_align (int, int);
243 static void s_altmacro (int);
244 static void s_bad_end (int);
245 static void s_reloc (int);
246 static int hex_float (int, char *);
247 static segT get_known_segmented_expression (expressionS * expP);
248 static void pobegin (void);
249 static size_t get_non_macro_line_sb (sb *);
250 static void generate_file_debug (void);
251 static char *_find_end_of_line (char *, int, int, int);
259 obj_read_begin_hook ();
261 /* Something close -- but not too close -- to a multiple of 1024.
262 The debugging malloc I'm using has 24 bytes of overhead. */
263 obstack_begin (¬es, chunksize);
264 obstack_begin (&cond_obstack, chunksize);
266 #ifndef tc_line_separator_chars
267 #define tc_line_separator_chars line_separator_chars
269 /* Use machine dependent syntax. */
270 for (p = tc_line_separator_chars; *p; p++)
271 is_end_of_line[(unsigned char) *p] = 2;
272 /* Use more. FIXME-SOMEDAY. */
278 #ifndef TC_ADDRESS_BYTES
279 #define TC_ADDRESS_BYTES address_bytes
284 /* Choose smallest of 1, 2, 4, 8 bytes that is large enough to
285 contain an address. */
286 int n = (stdoutput->arch_info->bits_per_address - 1) / 8;
294 /* Set up pseudo-op tables. */
296 static struct hash_control *po_hash;
298 static const pseudo_typeS potable[] = {
299 {"abort", s_abort, 0},
300 {"align", s_align_ptwo, 0},
301 {"altmacro", s_altmacro, 1},
302 {"ascii", stringer, 8+0},
303 {"asciz", stringer, 8+1},
304 {"balign", s_align_bytes, 0},
305 {"balignw", s_align_bytes, -2},
306 {"balignl", s_align_bytes, -4},
309 {"bundle_align_mode", s_bundle_align_mode, 0},
310 {"bundle_lock", s_bundle_lock, 0},
311 {"bundle_unlock", s_bundle_unlock, 0},
315 {"common", s_mri_common, 0},
316 {"common.s", s_mri_common, 1},
319 #ifdef TC_ADDRESS_BYTES
323 {"dc.d", float_cons, 'd'},
325 {"dc.s", float_cons, 'f'},
327 {"dc.x", float_cons, 'x'},
329 {"dcb.b", s_space, 1},
330 {"dcb.d", s_float_space, 'd'},
331 {"dcb.l", s_space, 4},
332 {"dcb.s", s_float_space, 'f'},
333 {"dcb.w", s_space, 2},
334 {"dcb.x", s_float_space, 'x'},
336 {"ds.b", s_space, 1},
337 {"ds.d", s_space, 8},
338 {"ds.l", s_space, 4},
339 {"ds.p", s_space, 12},
340 {"ds.s", s_space, 4},
341 {"ds.w", s_space, 2},
342 {"ds.x", s_space, 12},
343 {"debug", s_ignore, 0},
348 {"double", float_cons, 'd'},
350 {"eject", listing_eject, 0}, /* Formfeed listing. */
352 {"elsec", s_else, 0},
353 {"elseif", s_elseif, (int) O_ne},
355 {"endc", s_endif, 0},
356 {"endfunc", s_func, 1},
357 {"endif", s_endif, 0},
358 {"endm", s_bad_end, 0},
359 {"endr", s_bad_end, 1},
365 {"error", s_errwarn, 1},
366 {"exitm", s_mexit, 0},
368 {"extern", s_ignore, 0}, /* We treat all undef as ext. */
369 {"appfile", s_app_file, 1},
370 {"appline", s_app_line, 1},
372 {"file", s_app_file, 0},
374 {"float", float_cons, 'f'},
375 {"format", s_ignore, 0},
377 {"global", s_globl, 0},
378 {"globl", s_globl, 0},
380 {"if", s_if, (int) O_ne},
383 {"ifdef", s_ifdef, 0},
384 {"ifeq", s_if, (int) O_eq},
385 {"ifeqs", s_ifeqs, 0},
386 {"ifge", s_if, (int) O_ge},
387 {"ifgt", s_if, (int) O_gt},
388 {"ifle", s_if, (int) O_le},
389 {"iflt", s_if, (int) O_lt},
392 {"ifndef", s_ifdef, 1},
393 {"ifne", s_if, (int) O_ne},
394 {"ifnes", s_ifeqs, 1},
395 {"ifnotdef", s_ifdef, 1},
396 {"incbin", s_incbin, 0},
397 {"include", s_include, 0},
403 {"lcomm", s_lcomm, 0},
404 {"lflags", s_ignore, 0}, /* Listing flags. */
405 {"linefile", s_app_line, 0},
406 {"linkonce", s_linkonce, 0},
407 {"list", listing_list, 1}, /* Turn listing on. */
408 {"llen", listing_psize, 1},
411 {"macro", s_macro, 0},
412 {"mexit", s_mexit, 0},
414 {".mri", s_mri, 0}, /* Special case so .mri works in MRI mode. */
415 {"name", s_ignore, 0},
416 {"noaltmacro", s_altmacro, 0},
417 {"noformat", s_ignore, 0},
418 {"nolist", listing_list, 0}, /* Turn listing off. */
419 {"nopage", listing_nopage, 0},
421 {"offset", s_struct, 0},
423 {"p2align", s_align_ptwo, 0},
424 {"p2alignw", s_align_ptwo, -2},
425 {"p2alignl", s_align_ptwo, -4},
426 {"page", listing_eject, 0},
427 {"plen", listing_psize, 0},
428 {"print", s_print, 0},
429 {"psize", listing_psize, 0}, /* Set paper size. */
430 {"purgem", s_purgem, 0},
432 {"reloc", s_reloc, 0},
436 {"sbttl", listing_title, 1}, /* Subtitle of listing. */
441 {"single", float_cons, 'f'},
443 {"space", s_space, 0},
444 {"skip", s_space, 0},
445 {"sleb128", s_leb128, 1},
446 {"spc", s_ignore, 0},
447 {"stabd", s_stab, 'd'},
448 {"stabn", s_stab, 'n'},
449 {"stabs", s_stab, 's'},
450 {"string", stringer, 8+1},
451 {"string8", stringer, 8+1},
452 {"string16", stringer, 16+1},
453 {"string32", stringer, 32+1},
454 {"string64", stringer, 64+1},
455 {"struct", s_struct, 0},
459 /* This is for gcc to use. It's only just been added (2/94), so gcc
460 won't be able to use it for a while -- probably a year or more.
461 But once this has been released, check with gcc maintainers
462 before deleting it or even changing the spelling. */
463 {"this_GCC_requires_the_GNU_assembler", s_ignore, 0},
464 /* If we're folding case -- done for some targets, not necessarily
465 all -- the above string in an input file will be converted to
466 this one. Match it either way... */
467 {"this_gcc_requires_the_gnu_assembler", s_ignore, 0},
469 {"title", listing_title, 0}, /* Listing title. */
470 {"ttl", listing_title, 0},
472 {"uleb128", s_leb128, 0},
476 {"xdef", s_globl, 0},
477 {"xref", s_ignore, 0},
478 {"xstabs", s_xstab, 's'},
479 {"warning", s_errwarn, 0},
480 {"weakref", s_weakref, 0},
482 {"zero", s_space, 0},
483 {NULL, NULL, 0} /* End sentinel. */
487 get_absolute_expr (expressionS *exp)
489 expression_and_evaluate (exp);
490 if (exp->X_op != O_constant)
492 if (exp->X_op != O_absent)
493 as_bad (_("bad or irreducible absolute expression"));
494 exp->X_add_number = 0;
496 return exp->X_add_number;
500 get_absolute_expression (void)
504 return get_absolute_expr (&exp);
507 static int pop_override_ok = 0;
508 static const char *pop_table_name;
511 pop_insert (const pseudo_typeS *table)
514 const pseudo_typeS *pop;
515 for (pop = table; pop->poc_name; pop++)
517 errtxt = hash_insert (po_hash, pop->poc_name, (char *) pop);
518 if (errtxt && (!pop_override_ok || strcmp (errtxt, "exists")))
519 as_fatal (_("error constructing %s pseudo-op table: %s"), pop_table_name,
524 #ifndef md_pop_insert
525 #define md_pop_insert() pop_insert(md_pseudo_table)
528 #ifndef obj_pop_insert
529 #define obj_pop_insert() pop_insert(obj_pseudo_table)
532 #ifndef cfi_pop_insert
533 #define cfi_pop_insert() pop_insert(cfi_pseudo_table)
539 po_hash = hash_new ();
541 /* Do the target-specific pseudo ops. */
542 pop_table_name = "md";
545 /* Now object specific. Skip any that were in the target table. */
546 pop_table_name = "obj";
550 /* Now portable ones. Skip any that we've seen already. */
551 pop_table_name = "standard";
552 pop_insert (potable);
555 pop_table_name = "cfi";
560 #define HANDLE_CONDITIONAL_ASSEMBLY(num_read) \
561 if (ignore_input ()) \
563 char *eol = find_end_of_line (input_line_pointer - (num_read), \
565 input_line_pointer = (input_line_pointer <= buffer_limit \
566 && eol >= buffer_limit) \
572 /* This function is used when scrubbing the characters between #APP
575 static char *scrub_string;
576 static char *scrub_string_end;
579 scrub_from_string (char *buf, size_t buflen)
583 copy = scrub_string_end - scrub_string;
586 memcpy (buf, scrub_string, copy);
587 scrub_string += copy;
591 /* Helper function of read_a_source_file, which tries to expand a macro. */
593 try_macro (char term, const char *line)
599 if (check_macro (line, &out, &err, ¯o))
603 *input_line_pointer++ = term;
604 input_scrub_include_sb (&out,
605 input_line_pointer, 1);
608 input_scrub_next_buffer (&input_line_pointer);
610 md_macro_info (macro);
618 /* Start a new instruction bundle. Returns the rs_align_code frag that
619 will be used to align the new bundle. */
623 fragS *frag = frag_now;
625 frag_align_code (0, 0);
627 while (frag->fr_type != rs_align_code)
628 frag = frag->fr_next;
630 gas_assert (frag != frag_now);
635 /* Calculate the maximum size after relaxation of the region starting
636 at the given frag and extending through frag_now (which is unfinished). */
638 pending_bundle_size (fragS *frag)
640 unsigned int offset = frag->fr_fix;
641 unsigned int size = 0;
643 gas_assert (frag != frag_now);
644 gas_assert (frag->fr_type == rs_align_code);
646 while (frag != frag_now)
648 /* This should only happen in what will later become an error case. */
652 size += frag->fr_fix;
653 if (frag->fr_type == rs_machine_dependent)
654 size += md_frag_max_var (frag);
656 frag = frag->fr_next;
659 gas_assert (frag == frag_now);
660 size += frag_now_fix ();
661 if (frag->fr_type == rs_machine_dependent)
662 size += md_frag_max_var (frag);
664 gas_assert (size >= offset);
666 return size - offset;
669 /* Finish off the frag created to ensure bundle alignment. */
671 finish_bundle (fragS *frag, unsigned int size)
673 gas_assert (bundle_align_p2 > 0);
674 gas_assert (frag->fr_type == rs_align_code);
678 /* If there is more than a single byte, then we need to set up the
679 alignment frag. Otherwise we leave it at its initial state from
680 calling frag_align_code (0, 0), so that it does nothing. */
681 frag->fr_offset = bundle_align_p2;
682 frag->fr_subtype = size - 1;
685 /* We do this every time rather than just in s_bundle_align_mode
686 so that we catch any affected section without needing hooks all
687 over for all paths that do section changes. It's cheap enough. */
688 record_alignment (now_seg, bundle_align_p2 - OCTETS_PER_BYTE_POWER);
691 /* Assemble one instruction. This takes care of the bundle features
692 around calling md_assemble. */
694 assemble_one (char *line)
696 fragS *insn_start_frag = NULL;
698 if (bundle_lock_frchain != NULL && bundle_lock_frchain != frchain_now)
700 as_bad (_("cannot change section or subsection inside .bundle_lock"));
701 /* Clearing this serves as a marker that we have already complained. */
702 bundle_lock_frchain = NULL;
705 if (bundle_lock_frchain == NULL && bundle_align_p2 > 0)
706 insn_start_frag = start_bundle ();
710 if (bundle_lock_frchain != NULL)
712 /* Make sure this hasn't pushed the locked sequence
713 past the bundle size. */
714 unsigned int bundle_size = pending_bundle_size (bundle_lock_frag);
715 if (bundle_size > (1U << bundle_align_p2))
717 .bundle_lock sequence at %u bytes but .bundle_align_mode limit is %u bytes"),
718 bundle_size, 1U << bundle_align_p2);
720 else if (bundle_align_p2 > 0)
722 unsigned int insn_size = pending_bundle_size (insn_start_frag);
724 if (insn_size > (1U << bundle_align_p2))
726 single instruction is %u bytes long but .bundle_align_mode limit is %u"),
727 (unsigned int) insn_size, 1U << bundle_align_p2);
729 finish_bundle (insn_start_frag, insn_size);
733 #else /* !HANDLE_BUNDLE */
735 # define assemble_one(line) md_assemble(line)
737 #endif /* HANDLE_BUNDLE */
739 /* We read the file, putting things into a web that represents what we
740 have been reading. */
742 read_a_source_file (char *name)
746 char *s; /* String of symbol, '\0' appended. */
754 buffer = input_scrub_new_file (name);
757 listing_newline (NULL);
758 register_dependency (name);
760 /* Generate debugging information before we've read anything in to denote
761 this file as the "main" source file and not a subordinate one
762 (e.g. N_SO vs N_SOL in stabs). */
763 generate_file_debug ();
765 while ((buffer_limit = input_scrub_next_buffer (&input_line_pointer)) != 0)
766 { /* We have another line to parse. */
768 /* In order to avoid listing macro expansion lines with labels
769 multiple times, keep track of which line was last issued. */
770 static char *last_eol;
774 while (input_line_pointer < buffer_limit)
776 bfd_boolean was_new_line;
777 /* We have more of this buffer to parse. */
779 /* We now have input_line_pointer->1st char of next line.
780 If input_line_pointer [-1] == '\n' then we just
781 scanned another line: so bump line counters. */
782 was_new_line = is_end_of_line[(unsigned char) input_line_pointer[-1]];
785 symbol_set_value_now (&dot_symbol);
786 #ifdef md_start_line_hook
787 md_start_line_hook ();
789 if (input_line_pointer[-1] == '\n')
790 bump_line_counters ();
794 /* If listing is on, and we are expanding a macro, then give
795 the listing code the contents of the expanded line. */
798 if ((listing & LISTING_MACEXP) && macro_nest > 0)
800 /* Find the end of the current expanded macro line. */
801 s = find_end_of_line (input_line_pointer, flag_m68k_mri);
809 /* Copy it for safe keeping. Also give an indication of
810 how much macro nesting is involved at this point. */
811 len = s - input_line_pointer;
812 copy = (char *) xmalloc (len + macro_nest + 2);
813 memset (copy, '>', macro_nest);
814 copy[macro_nest] = ' ';
815 memcpy (copy + macro_nest + 1, input_line_pointer, len);
816 copy[macro_nest + 1 + len] = '\0';
818 /* Install the line with the listing facility. */
819 listing_newline (copy);
823 listing_newline (NULL);
830 if (LABELS_WITHOUT_COLONS || flag_m68k_mri)
832 next_char = * input_line_pointer;
833 /* Text at the start of a line must be a label, we
834 run down and stick a colon in. */
835 if (is_name_beginner (next_char) || next_char == '"')
840 HANDLE_CONDITIONAL_ASSEMBLY (0);
842 nul_char = get_symbol_name (& line_start);
843 next_char = (nul_char == '"' ? input_line_pointer[1] : nul_char);
845 /* In MRI mode, the EQU and MACRO pseudoops must
846 be handled specially. */
850 char *rest = input_line_pointer + 1;
854 if (*rest == ' ' || *rest == '\t')
856 if ((strncasecmp (rest, "EQU", 3) == 0
857 || strncasecmp (rest, "SET", 3) == 0)
858 && (rest[3] == ' ' || rest[3] == '\t'))
860 input_line_pointer = rest + 3;
862 strncasecmp (rest, "SET", 3) == 0);
865 if (strncasecmp (rest, "MACRO", 5) == 0
868 || is_end_of_line[(unsigned char) rest[5]]))
872 /* In MRI mode, we need to handle the MACRO
873 pseudo-op specially: we don't want to put the
874 symbol in the symbol table. */
876 #ifdef TC_START_LABEL_WITHOUT_COLON
877 && TC_START_LABEL_WITHOUT_COLON (nul_char, next_char)
880 line_label = colon (line_start);
882 line_label = symbol_create (line_start,
887 next_char = restore_line_pointer (nul_char);
888 if (next_char == ':')
889 input_line_pointer++;
894 /* We are at the beginning of a line, or similar place.
895 We expect a well-formed assembler statement.
896 A "symbol-name:" is a statement.
898 Depending on what compiler is used, the order of these tests
899 may vary to catch most common case 1st.
900 Each test is independent of all other tests at the (top)
903 nul_char = next_char = *input_line_pointer++;
904 while (next_char == '\t' || next_char == ' ' || next_char == '\f');
906 /* C is the 1st significant character.
907 Input_line_pointer points after that character. */
908 if (is_name_beginner (next_char) || next_char == '"')
912 /* Want user-defined label or pseudo/opcode. */
913 HANDLE_CONDITIONAL_ASSEMBLY (1);
915 --input_line_pointer;
916 nul_char = get_symbol_name (& s); /* name's delimiter. */
917 next_char = (nul_char == '"' ? input_line_pointer[1] : nul_char);
918 rest = input_line_pointer + (nul_char == '"' ? 2 : 1);
920 /* NEXT_CHAR is character after symbol.
921 The end of symbol in the input line is now '\0'.
922 S points to the beginning of the symbol.
923 [In case of pseudo-op, s->'.'.]
924 Input_line_pointer->'\0' where NUL_CHAR was. */
925 if (TC_START_LABEL (s, nul_char, next_char))
929 /* In MRI mode, \tsym: set 0 is permitted. */
933 if (*rest == ' ' || *rest == '\t')
936 if ((strncasecmp (rest, "EQU", 3) == 0
937 || strncasecmp (rest, "SET", 3) == 0)
938 && (rest[3] == ' ' || rest[3] == '\t'))
940 input_line_pointer = rest + 3;
946 line_label = colon (s); /* User-defined label. */
947 restore_line_pointer (nul_char);
948 ++ input_line_pointer;
949 #ifdef tc_check_label
950 tc_check_label (line_label);
952 /* Input_line_pointer->after ':'. */
955 else if ((next_char == '=' && *rest == '=')
956 || ((next_char == ' ' || next_char == '\t')
961 demand_empty_rest_of_line ();
963 else if ((next_char == '='
964 || ((next_char == ' ' || next_char == '\t')
966 #ifdef TC_EQUAL_IN_INSN
967 && !TC_EQUAL_IN_INSN (next_char, s)
972 demand_empty_rest_of_line ();
976 /* Expect pseudo-op or machine instruction. */
979 #ifndef TC_CASE_SENSITIVE
983 strncpy (original_case_string, s2, sizeof (original_case_string));
984 original_case_string[sizeof (original_case_string) - 1] = 0;
993 if (NO_PSEUDO_DOT || flag_m68k_mri)
995 /* The MRI assembler uses pseudo-ops without
997 pop = (pseudo_typeS *) hash_find (po_hash, s);
998 if (pop != NULL && pop->poc_handler == NULL)
1003 || (!flag_m68k_mri && *s == '.'))
1007 WARNING: next_char may be end-of-line.
1008 We lookup the pseudo-op table with s+1 because we
1009 already know that the pseudo-op begins with a '.'. */
1012 pop = (pseudo_typeS *) hash_find (po_hash, s + 1);
1013 if (pop && !pop->poc_handler)
1016 /* In MRI mode, we may need to insert an
1017 automatic alignment directive. What a hack
1019 if (mri_pending_align
1021 || !((pop->poc_handler == cons
1022 && pop->poc_val == 1)
1023 || (pop->poc_handler == s_space
1024 && pop->poc_val == 1)
1025 #ifdef tc_conditional_pseudoop
1026 || tc_conditional_pseudoop (pop)
1028 || pop->poc_handler == s_if
1029 || pop->poc_handler == s_ifdef
1030 || pop->poc_handler == s_ifc
1031 || pop->poc_handler == s_ifeqs
1032 || pop->poc_handler == s_else
1033 || pop->poc_handler == s_endif
1034 || pop->poc_handler == s_globl
1035 || pop->poc_handler == s_ignore)))
1037 do_align (1, (char *) NULL, 0, 0);
1038 mri_pending_align = 0;
1040 if (line_label != NULL)
1042 symbol_set_frag (line_label, frag_now);
1043 S_SET_VALUE (line_label, frag_now_fix ());
1047 /* Print the error msg now, while we still can. */
1050 char *end = input_line_pointer;
1052 (void) restore_line_pointer (nul_char);
1054 nul_char = next_char = *--input_line_pointer;
1055 *input_line_pointer = '\0';
1056 if (! macro_defined || ! try_macro (next_char, s))
1059 as_bad (_("unknown pseudo-op: `%s'"), s);
1060 *input_line_pointer++ = nul_char;
1065 /* Put it back for error messages etc. */
1066 next_char = restore_line_pointer (nul_char);
1067 /* The following skip of whitespace is compulsory.
1068 A well shaped space is sometimes all that separates
1069 keyword from operands. */
1070 if (next_char == ' ' || next_char == '\t')
1071 input_line_pointer++;
1073 /* Input_line is restored.
1074 Input_line_pointer->1st non-blank char
1075 after pseudo-operation. */
1076 (*pop->poc_handler) (pop->poc_val);
1078 /* If that was .end, just get out now. */
1079 if (pop->poc_handler == s_end)
1084 /* WARNING: next_char may be end-of-line. */
1085 /* Also: input_line_pointer->`\0` where nul_char was. */
1086 (void) restore_line_pointer (nul_char);
1087 input_line_pointer = _find_end_of_line (input_line_pointer, flag_m68k_mri, 1, 0);
1088 next_char = nul_char = *input_line_pointer;
1089 *input_line_pointer = '\0';
1091 generate_lineno_debug ();
1093 if (macro_defined && try_macro (next_char, s))
1096 if (mri_pending_align)
1098 do_align (1, (char *) NULL, 0, 0);
1099 mri_pending_align = 0;
1100 if (line_label != NULL)
1102 symbol_set_frag (line_label, frag_now);
1103 S_SET_VALUE (line_label, frag_now_fix ());
1107 assemble_one (s); /* Assemble 1 instruction. */
1109 *input_line_pointer++ = nul_char;
1111 /* We resume loop AFTER the end-of-line from
1112 this instruction. */
1118 /* Empty statement? */
1119 if (is_end_of_line[(unsigned char) next_char])
1122 if ((LOCAL_LABELS_DOLLAR || LOCAL_LABELS_FB) && ISDIGIT (next_char))
1124 /* local label ("4:") */
1125 char *backup = input_line_pointer;
1127 HANDLE_CONDITIONAL_ASSEMBLY (1);
1129 temp = next_char - '0';
1131 if (nul_char == '"')
1132 ++ input_line_pointer;
1134 /* Read the whole number. */
1135 while (ISDIGIT (*input_line_pointer))
1137 temp = (temp * 10) + *input_line_pointer - '0';
1138 ++input_line_pointer;
1141 if (LOCAL_LABELS_DOLLAR
1142 && *input_line_pointer == '$'
1143 && *(input_line_pointer + 1) == ':')
1145 input_line_pointer += 2;
1147 if (dollar_label_defined (temp))
1149 as_fatal (_("label \"%d$\" redefined"), temp);
1152 define_dollar_label (temp);
1153 colon (dollar_label_name (temp, 0));
1158 && *input_line_pointer++ == ':')
1160 fb_label_instance_inc (temp);
1161 colon (fb_label_name (temp, 0));
1165 input_line_pointer = backup;
1168 if (next_char && strchr (line_comment_chars, next_char))
1169 { /* Its a comment. Better say APP or NO_APP. */
1174 unsigned int new_length;
1177 s = input_line_pointer;
1178 if (strncmp (s, "APP\n", 4))
1181 ignore_rest_of_line ();
1184 bump_line_counters ();
1187 ends = strstr (s, "#NO_APP\n");
1191 unsigned int tmp_len;
1194 /* The end of the #APP wasn't in this buffer. We
1195 keep reading in buffers until we find the #NO_APP
1196 that goes with this #APP There is one. The specs
1198 tmp_len = buffer_limit - s;
1199 tmp_buf = (char *) xmalloc (tmp_len + 1);
1200 memcpy (tmp_buf, s, tmp_len);
1203 new_tmp = input_scrub_next_buffer (&buffer);
1207 buffer_limit = new_tmp;
1208 input_line_pointer = buffer;
1209 ends = strstr (buffer, "#NO_APP\n");
1211 num = ends - buffer;
1213 num = buffer_limit - buffer;
1215 tmp_buf = (char *) xrealloc (tmp_buf, tmp_len + num);
1216 memcpy (tmp_buf + tmp_len, buffer, num);
1221 input_line_pointer = ends ? ends + 8 : NULL;
1229 input_line_pointer = ends + 8;
1233 scrub_string_end = ends;
1235 new_length = ends - s;
1236 new_buf = (char *) xmalloc (new_length);
1243 space = (new_buf + new_length) - new_tmp;
1244 size = do_scrub_chars (scrub_from_string, new_tmp, space);
1252 new_buf = (char *) xrealloc (new_buf, new_length + 100);
1253 new_tmp = new_buf + new_length;
1260 /* We've "scrubbed" input to the preferred format. In the
1261 process we may have consumed the whole of the remaining
1262 file (and included files). We handle this formatted
1263 input similar to that of macro expansion, letting
1264 actual macro expansion (possibly nested) and other
1265 input expansion work. Beware that in messages, line
1266 numbers and possibly file names will be incorrect. */
1267 new_length = strlen (new_buf);
1268 sb_build (&sbuf, new_length);
1269 sb_add_buffer (&sbuf, new_buf, new_length);
1270 input_scrub_include_sb (&sbuf, input_line_pointer, 0);
1272 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
1277 HANDLE_CONDITIONAL_ASSEMBLY (1);
1279 #ifdef tc_unrecognized_line
1280 if (tc_unrecognized_line (next_char))
1283 input_line_pointer--;
1284 /* Report unknown char as error. */
1285 demand_empty_rest_of_line ();
1290 symbol_set_value_now (&dot_symbol);
1292 #ifdef HANDLE_BUNDLE
1293 if (bundle_lock_frag != NULL)
1295 as_bad_where (bundle_lock_frag->fr_file, bundle_lock_frag->fr_line,
1296 _(".bundle_lock with no matching .bundle_unlock"));
1297 bundle_lock_frag = NULL;
1298 bundle_lock_frchain = NULL;
1299 bundle_lock_depth = 0;
1306 /* Close the input file. */
1307 input_scrub_close ();
1308 #ifdef WARN_COMMENTS
1310 if (warn_comment && found_comment)
1311 as_warn_where (found_comment_file, found_comment,
1312 "first comment found here");
1317 /* Convert O_constant expression EXP into the equivalent O_big representation.
1318 Take the sign of the number from SIGN rather than X_add_number. */
1321 convert_to_bignum (expressionS *exp, int sign)
1326 value = exp->X_add_number;
1327 for (i = 0; i < sizeof (exp->X_add_number) / CHARS_PER_LITTLENUM; i++)
1329 generic_bignum[i] = value & LITTLENUM_MASK;
1330 value >>= LITTLENUM_NUMBER_OF_BITS;
1332 /* Add a sequence of sign bits if the top bit of X_add_number is not
1333 the sign of the original value. */
1334 if ((exp->X_add_number < 0) == !sign)
1335 generic_bignum[i++] = sign ? LITTLENUM_MASK : 0;
1337 exp->X_add_number = i;
1340 /* For most MRI pseudo-ops, the line actually ends at the first
1341 nonquoted space. This function looks for that point, stuffs a null
1342 in, and sets *STOPCP to the character that used to be there, and
1343 returns the location.
1345 Until I hear otherwise, I am going to assume that this is only true
1346 for the m68k MRI assembler. */
1349 mri_comment_field (char *stopcp)
1355 know (flag_m68k_mri);
1357 for (s = input_line_pointer;
1358 ((!is_end_of_line[(unsigned char) *s] && *s != ' ' && *s != '\t')
1366 for (s = input_line_pointer;
1367 !is_end_of_line[(unsigned char) *s];
1377 /* Skip to the end of an MRI comment field. */
1380 mri_comment_end (char *stop, int stopc)
1384 input_line_pointer = stop;
1386 while (!is_end_of_line[(unsigned char) *input_line_pointer])
1387 ++input_line_pointer;
1391 s_abort (int ignore ATTRIBUTE_UNUSED)
1393 as_fatal (_(".abort detected. Abandoning ship."));
1396 /* Guts of .align directive. N is the power of two to which to align.
1397 FILL may be NULL, or it may point to the bytes of the fill pattern.
1398 LEN is the length of whatever FILL points to, if anything. MAX is
1399 the maximum number of characters to skip when doing the alignment,
1400 or 0 if there is no maximum. */
1403 do_align (int n, char *fill, int len, int max)
1405 if (now_seg == absolute_section)
1409 if (*fill++ != '\0')
1411 as_warn (_("ignoring fill value in absolute section"));
1418 #ifdef md_flush_pending_output
1419 md_flush_pending_output ();
1422 md_do_align (n, fill, len, max, just_record_alignment);
1425 /* Only make a frag if we HAVE to... */
1426 if (n != 0 && !need_pass_2)
1430 if (subseg_text_p (now_seg))
1431 frag_align_code (n, max);
1433 frag_align (n, 0, max);
1436 frag_align (n, *fill, max);
1438 frag_align_pattern (n, fill, len, max);
1442 just_record_alignment: ATTRIBUTE_UNUSED_LABEL
1445 record_alignment (now_seg, n - OCTETS_PER_BYTE_POWER);
1448 /* Handle the .align pseudo-op. A positive ARG is a default alignment
1449 (in bytes). A negative ARG is the negative of the length of the
1450 fill pattern. BYTES_P is non-zero if the alignment value should be
1451 interpreted as the byte boundary, rather than the power of 2. */
1452 #ifndef TC_ALIGN_LIMIT
1453 #define TC_ALIGN_LIMIT (stdoutput->arch_info->bits_per_address - 1)
1457 s_align (int arg, int bytes_p)
1459 unsigned int align_limit = TC_ALIGN_LIMIT;
1468 stop = mri_comment_field (&stopc);
1470 if (is_end_of_line[(unsigned char) *input_line_pointer])
1475 align = arg; /* Default value from pseudo-op table. */
1479 align = get_absolute_expression ();
1482 #ifdef TC_ALIGN_ZERO_IS_DEFAULT
1483 if (arg > 0 && align == 0)
1490 /* Convert to a power of 2. */
1495 for (i = 0; (align & 1) == 0; align >>= 1, ++i)
1498 as_bad (_("alignment not a power of 2"));
1504 if (align > align_limit)
1506 align = align_limit;
1507 as_warn (_("alignment too large: %u assumed"), align);
1510 if (*input_line_pointer != ',')
1517 ++input_line_pointer;
1518 if (*input_line_pointer == ',')
1522 fill = get_absolute_expression ();
1527 if (*input_line_pointer != ',')
1531 ++input_line_pointer;
1532 max = get_absolute_expression ();
1539 as_warn (_("expected fill pattern missing"));
1540 do_align (align, (char *) NULL, 0, max);
1555 do_align (align, &fill_char, fill_len, max);
1561 if ((size_t) fill_len > sizeof ab)
1563 md_number_to_chars (ab, fill, fill_len);
1564 do_align (align, ab, fill_len, max);
1568 demand_empty_rest_of_line ();
1571 mri_comment_end (stop, stopc);
1574 /* Handle the .align pseudo-op on machines where ".align 4" means
1575 align to a 4 byte boundary. */
1578 s_align_bytes (int arg)
1583 /* Handle the .align pseudo-op on machines where ".align 4" means align
1584 to a 2**4 boundary. */
1587 s_align_ptwo (int arg)
1592 /* Switch in and out of alternate macro mode. */
1597 demand_empty_rest_of_line ();
1598 macro_set_alternate (on);
1601 /* Read a symbol name from input_line_pointer.
1603 Stores the symbol name in a buffer and returns a pointer to this buffer.
1604 The buffer is xalloc'ed. It is the caller's responsibility to free
1607 The name is not left in the i_l_p buffer as it may need processing
1608 to handle escape characters.
1610 Advances i_l_p to the next non-whitespace character.
1612 If a symbol name could not be read, the routine issues an error
1613 messages, skips to the end of the line and returns NULL. */
1616 read_symbol_name (void)
1622 c = *input_line_pointer++;
1626 #define SYM_NAME_CHUNK_LEN 128
1627 ptrdiff_t len = SYM_NAME_CHUNK_LEN;
1631 start = name = xmalloc (len + 1);
1633 name_end = name + SYM_NAME_CHUNK_LEN;
1635 while (is_a_char (C = next_char_of_string ()))
1637 if (name >= name_end)
1641 sofar = name - start;
1642 len += SYM_NAME_CHUNK_LEN;
1643 start = xrealloc (start, len + 1);
1644 name_end = start + len;
1645 name = start + sofar;
1652 /* Since quoted symbol names can contain non-ASCII characters,
1653 check the string and warn if it cannot be recognised by the
1654 current character set. */
1655 if (mbstowcs (NULL, name, len) == (size_t) -1)
1656 as_warn (_("symbol name not recognised in the current locale"));
1658 else if (is_name_beginner (c) || c == '\001')
1662 name = input_line_pointer - 1;
1664 /* We accept \001 in a name in case this is
1665 being called with a constructed string. */
1666 while (is_part_of_name (c = *input_line_pointer++)
1670 len = (input_line_pointer - name) - 1;
1671 start = xmalloc (len + 1);
1673 memcpy (start, name, len);
1676 /* Skip a name ender char if one is present. */
1677 if (! is_name_ender (c))
1678 --input_line_pointer;
1681 name = start = NULL;
1685 as_bad (_("expected symbol name"));
1686 ignore_rest_of_line ();
1697 s_comm_internal (int param,
1698 symbolS *(*comm_parse_extra) (int, symbolS *, addressT))
1702 symbolS *symbolP = NULL;
1708 stop = mri_comment_field (&stopc);
1710 if ((name = read_symbol_name ()) == NULL)
1713 /* Accept an optional comma after the name. The comma used to be
1714 required, but Irix 5 cc does not generate it for .lcomm. */
1715 if (*input_line_pointer == ',')
1716 input_line_pointer++;
1718 temp = get_absolute_expr (&exp);
1720 size &= ((addressT) 2 << (stdoutput->arch_info->bits_per_address - 1)) - 1;
1721 if (exp.X_op == O_absent)
1723 as_bad (_("missing size expression"));
1724 ignore_rest_of_line ();
1727 else if (temp != size || !exp.X_unsigned)
1729 as_warn (_("size (%ld) out of range, ignored"), (long) temp);
1730 ignore_rest_of_line ();
1734 symbolP = symbol_find_or_make (name);
1735 if ((S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
1736 && !S_IS_COMMON (symbolP))
1738 if (!S_IS_VOLATILE (symbolP))
1741 as_bad (_("symbol `%s' is already defined"), name);
1742 ignore_rest_of_line ();
1745 symbolP = symbol_clone (symbolP, 1);
1746 S_SET_SEGMENT (symbolP, undefined_section);
1747 S_SET_VALUE (symbolP, 0);
1748 symbol_set_frag (symbolP, &zero_address_frag);
1749 S_CLEAR_VOLATILE (symbolP);
1752 size = S_GET_VALUE (symbolP);
1755 else if (size != temp)
1756 as_warn (_("size of \"%s\" is already %ld; not changing to %ld"),
1757 name, (long) size, (long) temp);
1759 if (comm_parse_extra != NULL)
1760 symbolP = (*comm_parse_extra) (param, symbolP, size);
1763 S_SET_VALUE (symbolP, (valueT) size);
1764 S_SET_EXTERNAL (symbolP);
1765 S_SET_SEGMENT (symbolP, bfd_com_section_ptr);
1768 demand_empty_rest_of_line ();
1771 mri_comment_end (stop, stopc);
1780 s_comm_internal (ignore, NULL);
1783 /* The MRI COMMON pseudo-op. We handle this by creating a common
1784 symbol with the appropriate name. We make s_space do the right
1785 thing by increasing the size. */
1788 s_mri_common (int small ATTRIBUTE_UNUSED)
1804 stop = mri_comment_field (&stopc);
1808 name = input_line_pointer;
1809 if (!ISDIGIT (*name))
1810 c = get_symbol_name (& name);
1815 ++input_line_pointer;
1817 while (ISDIGIT (*input_line_pointer));
1819 c = *input_line_pointer;
1820 *input_line_pointer = '\0';
1822 if (line_label != NULL)
1824 alc = (char *) xmalloc (strlen (S_GET_NAME (line_label))
1825 + (input_line_pointer - name)
1827 sprintf (alc, "%s%s", name, S_GET_NAME (line_label));
1832 sym = symbol_find_or_make (name);
1833 c = restore_line_pointer (c);
1837 if (*input_line_pointer != ',')
1841 ++input_line_pointer;
1842 align = get_absolute_expression ();
1845 if (S_IS_DEFINED (sym) && !S_IS_COMMON (sym))
1847 as_bad (_("symbol `%s' is already defined"), S_GET_NAME (sym));
1848 ignore_rest_of_line ();
1849 mri_comment_end (stop, stopc);
1853 S_SET_EXTERNAL (sym);
1854 S_SET_SEGMENT (sym, bfd_com_section_ptr);
1855 mri_common_symbol = sym;
1859 S_SET_ALIGN (sym, align);
1864 if (line_label != NULL)
1867 exp.X_op = O_symbol;
1868 exp.X_add_symbol = sym;
1869 exp.X_add_number = 0;
1870 symbol_set_value_expression (line_label, &exp);
1871 symbol_set_frag (line_label, &zero_address_frag);
1872 S_SET_SEGMENT (line_label, expr_section);
1875 /* FIXME: We just ignore the small argument, which distinguishes
1876 COMMON and COMMON.S. I don't know what we can do about it. */
1878 /* Ignore the type and hptype. */
1879 if (*input_line_pointer == ',')
1880 input_line_pointer += 2;
1881 if (*input_line_pointer == ',')
1882 input_line_pointer += 2;
1884 demand_empty_rest_of_line ();
1886 mri_comment_end (stop, stopc);
1890 s_data (int ignore ATTRIBUTE_UNUSED)
1895 temp = get_absolute_expression ();
1896 if (flag_readonly_data_in_text)
1898 section = text_section;
1902 section = data_section;
1904 subseg_set (section, (subsegT) temp);
1906 demand_empty_rest_of_line ();
1909 /* Handle the .appfile pseudo-op. This is automatically generated by
1910 do_scrub_chars when a preprocessor # line comment is seen with a
1911 file name. This default definition may be overridden by the object
1912 or CPU specific pseudo-ops. This function is also the default
1913 definition for .file; the APPFILE argument is 1 for .appfile, 0 for
1917 s_app_file_string (char *file, int appfile ATTRIBUTE_UNUSED)
1921 listing_source_file (file);
1923 register_dependency (file);
1925 obj_app_file (file, appfile);
1930 s_app_file (int appfile)
1935 /* Some assemblers tolerate immediately following '"'. */
1936 if ((s = demand_copy_string (&length)) != 0)
1939 = (!new_logical_line_flags (s, -1, 1) && appfile);
1941 /* In MRI mode, the preprocessor may have inserted an extraneous
1944 && *input_line_pointer == '\''
1945 && is_end_of_line[(unsigned char) input_line_pointer[1]])
1946 ++input_line_pointer;
1948 demand_empty_rest_of_line ();
1950 s_app_file_string (s, appfile);
1955 get_linefile_number (int *flag)
1959 if (*input_line_pointer < '0' || *input_line_pointer > '9')
1962 *flag = get_absolute_expression ();
1967 /* Handle the .appline pseudo-op. This is automatically generated by
1968 do_scrub_chars when a preprocessor # line comment is seen. This
1969 default definition may be overridden by the object or CPU specific
1973 s_app_line (int appline)
1978 /* The given number is that of the next line. */
1980 l = get_absolute_expression ();
1981 else if (!get_linefile_number (&l))
1983 ignore_rest_of_line ();
1990 /* Some of the back ends can't deal with non-positive line numbers.
1991 Besides, it's silly. GCC however will generate a line number of
1992 zero when it is pre-processing builtins for assembler-with-cpp files:
1996 We do not want to barf on this, especially since such files are used
1997 in the GCC and GDB testsuites. So we check for negative line numbers
1998 rather than non-positive line numbers. */
1999 as_warn (_("line numbers must be positive; line number %d rejected"),
2010 if (*input_line_pointer == '"')
2011 file = demand_copy_string (&length);
2017 while (get_linefile_number (&this_flag))
2020 /* From GCC's cpp documentation:
2021 1: start of a new file.
2022 2: returning to a file after having included
2024 3: following text comes from a system header file.
2025 4: following text should be treated as extern "C".
2027 4 is nonsensical for the assembler; 3, we don't
2028 care about, so we ignore it just in case a
2029 system header file is included while
2030 preprocessing assembly. So 1 and 2 are all we
2031 care about, and they are mutually incompatible.
2032 new_logical_line_flags() demands this. */
2035 if (flags && flags != (1 << this_flag))
2036 as_warn (_("incompatible flag %i in line directive"),
2039 flags |= 1 << this_flag;
2044 /* We ignore these. */
2048 as_warn (_("unsupported flag %i in line directive"),
2053 if (!is_end_of_line[(unsigned char)*input_line_pointer])
2058 if (appline || file)
2060 new_logical_line_flags (file, l, flags);
2063 listing_source_line (l);
2067 if (appline || file)
2068 demand_empty_rest_of_line ();
2070 ignore_rest_of_line ();
2073 /* Handle the .end pseudo-op. Actually, the real work is done in
2074 read_a_source_file. */
2077 s_end (int ignore ATTRIBUTE_UNUSED)
2081 /* The MRI assembler permits the start symbol to follow .end,
2082 but we don't support that. */
2084 if (!is_end_of_line[(unsigned char) *input_line_pointer]
2085 && *input_line_pointer != '*'
2086 && *input_line_pointer != '!')
2087 as_warn (_("start address not supported"));
2091 /* Handle the .err pseudo-op. */
2094 s_err (int ignore ATTRIBUTE_UNUSED)
2096 as_bad (_(".err encountered"));
2097 demand_empty_rest_of_line ();
2100 /* Handle the .error and .warning pseudo-ops. */
2106 /* The purpose for the conditional assignment is not to
2107 internationalize the directive itself, but that we need a
2108 self-contained message, one that can be passed like the
2109 demand_copy_C_string return value, and with no assumption on the
2110 location of the name of the directive within the message. */
2112 = (err ? _(".error directive invoked in source file")
2113 : _(".warning directive invoked in source file"));
2115 if (!is_it_end_of_statement ())
2117 if (*input_line_pointer != '\"')
2119 as_bad (_("%s argument must be a string"),
2120 err ? ".error" : ".warning");
2121 ignore_rest_of_line ();
2125 msg = demand_copy_C_string (&len);
2133 as_warn ("%s", msg);
2134 demand_empty_rest_of_line ();
2137 /* Handle the MRI fail pseudo-op. */
2140 s_fail (int ignore ATTRIBUTE_UNUSED)
2147 stop = mri_comment_field (&stopc);
2149 temp = get_absolute_expression ();
2151 as_warn (_(".fail %ld encountered"), (long) temp);
2153 as_bad (_(".fail %ld encountered"), (long) temp);
2155 demand_empty_rest_of_line ();
2158 mri_comment_end (stop, stopc);
2162 s_fill (int ignore ATTRIBUTE_UNUSED)
2164 expressionS rep_exp;
2169 #ifdef md_flush_pending_output
2170 md_flush_pending_output ();
2173 #ifdef md_cons_align
2177 get_known_segmented_expression (&rep_exp);
2178 if (*input_line_pointer == ',')
2180 input_line_pointer++;
2181 size = get_absolute_expression ();
2182 if (*input_line_pointer == ',')
2184 input_line_pointer++;
2185 fill = get_absolute_expression ();
2189 /* This is to be compatible with BSD 4.2 AS, not for any rational reason. */
2190 #define BSD_FILL_SIZE_CROCK_8 (8)
2191 if (size > BSD_FILL_SIZE_CROCK_8)
2193 as_warn (_(".fill size clamped to %d"), BSD_FILL_SIZE_CROCK_8);
2194 size = BSD_FILL_SIZE_CROCK_8;
2198 as_warn (_("size negative; .fill ignored"));
2201 else if (rep_exp.X_op == O_constant && rep_exp.X_add_number <= 0)
2203 if (rep_exp.X_add_number < 0)
2204 as_warn (_("repeat < 0; .fill ignored"));
2208 if (size && !need_pass_2)
2210 if (rep_exp.X_op == O_constant)
2212 p = frag_var (rs_fill, (int) size, (int) size,
2213 (relax_substateT) 0, (symbolS *) 0,
2214 (offsetT) rep_exp.X_add_number,
2219 /* We don't have a constant repeat count, so we can't use
2220 rs_fill. We can get the same results out of rs_space,
2221 but its argument is in bytes, so we must multiply the
2222 repeat count by size. */
2225 rep_sym = make_expr_symbol (&rep_exp);
2228 expressionS size_exp;
2229 size_exp.X_op = O_constant;
2230 size_exp.X_add_number = size;
2232 rep_exp.X_op = O_multiply;
2233 rep_exp.X_add_symbol = rep_sym;
2234 rep_exp.X_op_symbol = make_expr_symbol (&size_exp);
2235 rep_exp.X_add_number = 0;
2236 rep_sym = make_expr_symbol (&rep_exp);
2239 p = frag_var (rs_space, (int) size, (int) size,
2240 (relax_substateT) 0, rep_sym, (offsetT) 0, (char *) 0);
2243 memset (p, 0, (unsigned int) size);
2245 /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX
2246 flavoured AS. The following bizarre behaviour is to be
2247 compatible with above. I guess they tried to take up to 8
2248 bytes from a 4-byte expression and they forgot to sign
2250 #define BSD_FILL_SIZE_CROCK_4 (4)
2251 md_number_to_chars (p, (valueT) fill,
2252 (size > BSD_FILL_SIZE_CROCK_4
2253 ? BSD_FILL_SIZE_CROCK_4
2255 /* Note: .fill (),0 emits no frag (since we are asked to .fill 0 bytes)
2256 but emits no error message because it seems a legal thing to do.
2257 It is a degenerate case of .fill but could be emitted by a
2260 demand_empty_rest_of_line ();
2264 s_globl (int ignore ATTRIBUTE_UNUSED)
2273 stop = mri_comment_field (&stopc);
2277 if ((name = read_symbol_name ()) == NULL)
2280 symbolP = symbol_find_or_make (name);
2281 S_SET_EXTERNAL (symbolP);
2284 c = *input_line_pointer;
2287 input_line_pointer++;
2289 if (is_end_of_line[(unsigned char) *input_line_pointer])
2297 demand_empty_rest_of_line ();
2300 mri_comment_end (stop, stopc);
2303 /* Handle the MRI IRP and IRPC pseudo-ops. */
2314 as_where (&file, &line);
2316 eol = find_end_of_line (input_line_pointer, 0);
2317 sb_build (&s, eol - input_line_pointer);
2318 sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
2319 input_line_pointer = eol;
2323 err = expand_irp (irpc, 0, &s, &out, get_non_macro_line_sb);
2325 as_bad_where (file, line, "%s", err);
2329 input_scrub_include_sb (&out, input_line_pointer, 1);
2331 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2334 /* Handle the .linkonce pseudo-op. This tells the assembler to mark
2335 the section to only be linked once. However, this is not supported
2336 by most object file formats. This takes an optional argument,
2337 which is what to do about duplicates. */
2340 s_linkonce (int ignore ATTRIBUTE_UNUSED)
2342 enum linkonce_type type;
2346 type = LINKONCE_DISCARD;
2348 if (!is_end_of_line[(unsigned char) *input_line_pointer])
2353 c = get_symbol_name (& s);
2354 if (strcasecmp (s, "discard") == 0)
2355 type = LINKONCE_DISCARD;
2356 else if (strcasecmp (s, "one_only") == 0)
2357 type = LINKONCE_ONE_ONLY;
2358 else if (strcasecmp (s, "same_size") == 0)
2359 type = LINKONCE_SAME_SIZE;
2360 else if (strcasecmp (s, "same_contents") == 0)
2361 type = LINKONCE_SAME_CONTENTS;
2363 as_warn (_("unrecognized .linkonce type `%s'"), s);
2365 (void) restore_line_pointer (c);
2368 #ifdef obj_handle_link_once
2369 obj_handle_link_once (type);
2370 #else /* ! defined (obj_handle_link_once) */
2374 if ((bfd_applicable_section_flags (stdoutput) & SEC_LINK_ONCE) == 0)
2375 as_warn (_(".linkonce is not supported for this object file format"));
2377 flags = bfd_get_section_flags (stdoutput, now_seg);
2378 flags |= SEC_LINK_ONCE;
2383 case LINKONCE_DISCARD:
2384 flags |= SEC_LINK_DUPLICATES_DISCARD;
2386 case LINKONCE_ONE_ONLY:
2387 flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
2389 case LINKONCE_SAME_SIZE:
2390 flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
2392 case LINKONCE_SAME_CONTENTS:
2393 flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
2396 if (!bfd_set_section_flags (stdoutput, now_seg, flags))
2397 as_bad (_("bfd_set_section_flags: %s"),
2398 bfd_errmsg (bfd_get_error ()));
2400 #endif /* ! defined (obj_handle_link_once) */
2402 demand_empty_rest_of_line ();
2406 bss_alloc (symbolS *symbolP, addressT size, int align)
2409 segT current_seg = now_seg;
2410 subsegT current_subseg = now_subseg;
2411 segT bss_seg = bss_section;
2413 #if defined (TC_MIPS) || defined (TC_ALPHA)
2414 if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour
2415 || OUTPUT_FLAVOR == bfd_target_elf_flavour)
2417 /* For MIPS and Alpha ECOFF or ELF, small objects are put in .sbss. */
2418 if (size <= bfd_get_gp_size (stdoutput))
2420 bss_seg = subseg_new (".sbss", 1);
2421 seg_info (bss_seg)->bss = 1;
2422 if (!bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC))
2423 as_warn (_("error setting flags for \".sbss\": %s"),
2424 bfd_errmsg (bfd_get_error ()));
2428 subseg_set (bss_seg, 1);
2432 record_alignment (bss_seg, align);
2433 frag_align (align, 0, 0);
2436 /* Detach from old frag. */
2437 if (S_GET_SEGMENT (symbolP) == bss_seg)
2438 symbol_get_frag (symbolP)->fr_symbol = NULL;
2440 symbol_set_frag (symbolP, frag_now);
2441 pfrag = frag_var (rs_org, 1, 1, 0, symbolP, size, NULL);
2445 S_SET_SIZE (symbolP, size);
2447 S_SET_SEGMENT (symbolP, bss_seg);
2450 /* The symbol may already have been created with a preceding
2451 ".globl" directive -- be careful not to step on storage class
2452 in that case. Otherwise, set it to static. */
2453 if (S_GET_STORAGE_CLASS (symbolP) != C_EXT)
2454 S_SET_STORAGE_CLASS (symbolP, C_STAT);
2455 #endif /* OBJ_COFF */
2457 subseg_set (current_seg, current_subseg);
2461 parse_align (int align_bytes)
2467 if (*input_line_pointer != ',')
2470 as_bad (_("expected alignment after size"));
2471 ignore_rest_of_line ();
2475 input_line_pointer++;
2478 align = get_absolute_expr (&exp);
2479 if (exp.X_op == O_absent)
2482 if (!exp.X_unsigned)
2484 as_warn (_("alignment negative; 0 assumed"));
2488 if (align_bytes && align != 0)
2490 /* convert to a power of 2 alignment */
2491 unsigned int alignp2 = 0;
2492 while ((align & 1) == 0)
2493 align >>= 1, ++alignp2;
2496 as_bad (_("alignment not a power of 2"));
2497 ignore_rest_of_line ();
2505 /* Called from s_comm_internal after symbol name and size have been
2506 parsed. NEEDS_ALIGN is 0 if it was an ".lcomm" (2 args only),
2507 1 if this was a ".bss" directive which has a 3rd argument
2508 (alignment as a power of 2), or 2 if this was a ".bss" directive
2509 with alignment in bytes. */
2512 s_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
2518 align = parse_align (needs_align - 1);
2519 if (align == (addressT) -1)
2523 /* Assume some objects may require alignment on some systems. */
2524 TC_IMPLICIT_LCOMM_ALIGNMENT (size, align);
2526 bss_alloc (symbolP, size, align);
2531 s_lcomm (int needs_align)
2533 s_comm_internal (needs_align, s_lcomm_internal);
2537 s_lcomm_bytes (int needs_align)
2539 s_comm_internal (needs_align * 2, s_lcomm_internal);
2543 s_lsym (int ignore ATTRIBUTE_UNUSED)
2549 /* We permit ANY defined expression: BSD4.2 demands constants. */
2550 if ((name = read_symbol_name ()) == NULL)
2553 if (*input_line_pointer != ',')
2555 as_bad (_("expected comma after \"%s\""), name);
2559 input_line_pointer++;
2560 expression_and_evaluate (&exp);
2562 if (exp.X_op != O_constant
2563 && exp.X_op != O_register)
2565 as_bad (_("bad expression"));
2569 symbolP = symbol_find_or_make (name);
2571 if (S_GET_SEGMENT (symbolP) == undefined_section)
2573 /* The name might be an undefined .global symbol; be sure to
2574 keep the "external" bit. */
2575 S_SET_SEGMENT (symbolP,
2576 (exp.X_op == O_constant
2579 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
2583 as_bad (_("symbol `%s' is already defined"), name);
2586 demand_empty_rest_of_line ();
2591 ignore_rest_of_line ();
2596 /* Read a line into an sb. Returns the character that ended the line
2597 or zero if there are no more lines. */
2600 get_line_sb (sb *line, int in_macro)
2604 if (input_line_pointer[-1] == '\n')
2605 bump_line_counters ();
2607 if (input_line_pointer >= buffer_limit)
2609 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2610 if (buffer_limit == 0)
2614 eol = _find_end_of_line (input_line_pointer, flag_m68k_mri, 0, in_macro);
2615 sb_add_buffer (line, input_line_pointer, eol - input_line_pointer);
2616 input_line_pointer = eol;
2618 /* Don't skip multiple end-of-line characters, because that breaks support
2619 for the IA-64 stop bit (;;) which looks like two consecutive end-of-line
2620 characters but isn't. Instead just skip one end of line character and
2621 return the character skipped so that the caller can re-insert it if
2623 return *input_line_pointer++;
2627 get_non_macro_line_sb (sb *line)
2629 return get_line_sb (line, 0);
2633 get_macro_line_sb (sb *line)
2635 return get_line_sb (line, 1);
2638 /* Define a macro. This is an interface to macro.c. */
2641 s_macro (int ignore ATTRIBUTE_UNUSED)
2649 as_where (&file, &line);
2651 eol = find_end_of_line (input_line_pointer, 0);
2652 sb_build (&s, eol - input_line_pointer);
2653 sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
2654 input_line_pointer = eol;
2656 if (line_label != NULL)
2661 name = S_GET_NAME (line_label);
2662 len = strlen (name);
2663 sb_build (&label, len);
2664 sb_add_buffer (&label, name, len);
2665 err = define_macro (0, &s, &label, get_macro_line_sb, file, line, &name);
2669 err = define_macro (0, &s, NULL, get_macro_line_sb, file, line, &name);
2671 as_bad_where (file, line, err, name);
2674 if (line_label != NULL)
2676 S_SET_SEGMENT (line_label, absolute_section);
2677 S_SET_VALUE (line_label, 0);
2678 symbol_set_frag (line_label, &zero_address_frag);
2681 if (((NO_PSEUDO_DOT || flag_m68k_mri)
2682 && hash_find (po_hash, name) != NULL)
2685 && hash_find (po_hash, name + 1) != NULL))
2686 as_warn_where (file,
2688 _("attempt to redefine pseudo-op `%s' ignored"),
2695 /* Handle the .mexit pseudo-op, which immediately exits a macro
2699 s_mexit (int ignore ATTRIBUTE_UNUSED)
2703 cond_exit_macro (macro_nest);
2704 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2707 as_warn (_("ignoring macro exit outside a macro definition."));
2710 /* Switch in and out of MRI mode. */
2713 s_mri (int ignore ATTRIBUTE_UNUSED)
2716 #ifdef MRI_MODE_CHANGE
2720 on = get_absolute_expression ();
2721 #ifdef MRI_MODE_CHANGE
2722 old_flag = flag_mri;
2741 /* Operator precedence changes in m68k MRI mode, so we need to
2742 update the operator rankings. */
2743 expr_set_precedence ();
2745 #ifdef MRI_MODE_CHANGE
2747 MRI_MODE_CHANGE (on);
2750 demand_empty_rest_of_line ();
2753 /* Handle changing the location counter. */
2756 do_org (segT segment, expressionS *exp, int fill)
2758 if (segment != now_seg
2759 && segment != absolute_section
2760 && segment != expr_section)
2761 as_bad (_("invalid segment \"%s\""), segment_name (segment));
2763 if (now_seg == absolute_section)
2766 as_warn (_("ignoring fill value in absolute section"));
2767 if (exp->X_op != O_constant)
2769 as_bad (_("only constant offsets supported in absolute section"));
2770 exp->X_add_number = 0;
2772 abs_section_offset = exp->X_add_number;
2777 symbolS *sym = exp->X_add_symbol;
2778 offsetT off = exp->X_add_number * OCTETS_PER_BYTE;
2780 if (exp->X_op != O_constant && exp->X_op != O_symbol)
2782 /* Handle complex expressions. */
2783 sym = make_expr_symbol (exp);
2787 p = frag_var (rs_org, 1, 1, (relax_substateT) 0, sym, off, (char *) 0);
2793 s_org (int ignore ATTRIBUTE_UNUSED)
2799 #ifdef md_flush_pending_output
2800 md_flush_pending_output ();
2803 /* The m68k MRI assembler has a different meaning for .org. It
2804 means to create an absolute section at a given address. We can't
2805 support that--use a linker script instead. */
2808 as_bad (_("MRI style ORG pseudo-op not supported"));
2809 ignore_rest_of_line ();
2813 /* Don't believe the documentation of BSD 4.2 AS. There is no such
2814 thing as a sub-segment-relative origin. Any absolute origin is
2815 given a warning, then assumed to be segment-relative. Any
2816 segmented origin expression ("foo+42") had better be in the right
2817 segment or the .org is ignored.
2819 BSD 4.2 AS warns if you try to .org backwards. We cannot because
2820 we never know sub-segment sizes when we are reading code. BSD
2821 will crash trying to emit negative numbers of filler bytes in
2822 certain .orgs. We don't crash, but see as-write for that code.
2824 Don't make frag if need_pass_2==1. */
2825 segment = get_known_segmented_expression (&exp);
2826 if (*input_line_pointer == ',')
2828 input_line_pointer++;
2829 temp_fill = get_absolute_expression ();
2835 do_org (segment, &exp, temp_fill);
2837 demand_empty_rest_of_line ();
2840 /* Handle parsing for the MRI SECT/SECTION pseudo-op. This should be
2841 called by the obj-format routine which handles section changing
2842 when in MRI mode. It will create a new section, and return it. It
2843 will set *TYPE to the section type: one of 'C' (code), 'D' (data),
2844 'M' (mixed), or 'R' (romable). The flags will be set in the section. */
2847 s_mri_sect (char *type ATTRIBUTE_UNUSED)
2857 name = input_line_pointer;
2858 if (!ISDIGIT (*name))
2859 c = get_symbol_name (& name);
2864 ++input_line_pointer;
2866 while (ISDIGIT (*input_line_pointer));
2868 c = *input_line_pointer;
2869 *input_line_pointer = '\0';
2872 name = xstrdup (name);
2874 c = restore_line_pointer (c);
2876 seg = subseg_new (name, 0);
2882 ++input_line_pointer;
2883 align = get_absolute_expression ();
2884 record_alignment (seg, align);
2888 if (*input_line_pointer == ',')
2890 c = *++input_line_pointer;
2892 if (c == 'C' || c == 'D' || c == 'M' || c == 'R')
2895 as_bad (_("unrecognized section type"));
2896 ++input_line_pointer;
2901 flags = SEC_NO_FLAGS;
2903 flags = SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE;
2904 else if (*type == 'D' || *type == 'M')
2905 flags = SEC_ALLOC | SEC_LOAD | SEC_DATA;
2906 else if (*type == 'R')
2907 flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_READONLY | SEC_ROM;
2908 if (flags != SEC_NO_FLAGS)
2910 if (!bfd_set_section_flags (stdoutput, seg, flags))
2911 as_warn (_("error setting flags for \"%s\": %s"),
2912 bfd_section_name (stdoutput, seg),
2913 bfd_errmsg (bfd_get_error ()));
2918 /* Ignore the HP type. */
2919 if (*input_line_pointer == ',')
2920 input_line_pointer += 2;
2922 demand_empty_rest_of_line ();
2924 #else /* ! TC_M68K */
2933 c = get_symbol_name (& name);
2935 name = xstrdup (name);
2937 c = restore_line_pointer (c);
2939 seg = subseg_new (name, 0);
2947 ++input_line_pointer;
2949 c = get_symbol_name (& sectype);
2950 if (*sectype == '\0')
2952 else if (strcasecmp (sectype, "text") == 0)
2954 else if (strcasecmp (sectype, "data") == 0)
2956 else if (strcasecmp (sectype, "romdata") == 0)
2959 as_warn (_("unrecognized section type `%s'"), sectype);
2960 (void) restore_line_pointer (c);
2963 if (*input_line_pointer == ',')
2967 ++input_line_pointer;
2969 c = get_symbol_name (& seccmd);
2970 if (strcasecmp (seccmd, "absolute") == 0)
2972 as_bad (_("absolute sections are not supported"));
2973 *input_line_pointer = c;
2974 ignore_rest_of_line ();
2977 else if (strcasecmp (seccmd, "align") == 0)
2981 (void) restore_line_pointer (c);
2982 align = get_absolute_expression ();
2983 record_alignment (seg, align);
2987 as_warn (_("unrecognized section command `%s'"), seccmd);
2988 (void) restore_line_pointer (c);
2992 demand_empty_rest_of_line ();
2994 #else /* ! TC_I960 */
2995 /* The MRI assembler seems to use different forms of .sect for
2996 different targets. */
2997 as_bad ("MRI mode not supported for this target");
2998 ignore_rest_of_line ();
2999 #endif /* ! TC_I960 */
3000 #endif /* ! TC_M68K */
3003 /* Handle the .print pseudo-op. */
3006 s_print (int ignore ATTRIBUTE_UNUSED)
3011 s = demand_copy_C_string (&len);
3014 demand_empty_rest_of_line ();
3017 /* Handle the .purgem pseudo-op. */
3020 s_purgem (int ignore ATTRIBUTE_UNUSED)
3022 if (is_it_end_of_statement ())
3024 demand_empty_rest_of_line ();
3034 c = get_symbol_name (& name);
3035 delete_macro (name);
3036 *input_line_pointer = c;
3037 SKIP_WHITESPACE_AFTER_NAME ();
3039 while (*input_line_pointer++ == ',');
3041 --input_line_pointer;
3042 demand_empty_rest_of_line ();
3045 /* Handle the .endm/.endr pseudo-ops. */
3048 s_bad_end (int endr)
3050 as_warn (_(".end%c encountered without preceding %s"),
3052 endr ? ".rept, .irp, or .irpc" : ".macro");
3053 demand_empty_rest_of_line ();
3056 /* Handle the .rept pseudo-op. */
3059 s_rept (int ignore ATTRIBUTE_UNUSED)
3063 count = get_absolute_expression ();
3065 do_repeat (count, "REPT", "ENDR");
3068 /* This function provides a generic repeat block implementation. It allows
3069 different directives to be used as the start/end keys. */
3072 do_repeat (int count, const char *start, const char *end)
3078 if (!buffer_and_nest (start, end, &one, get_non_macro_line_sb))
3080 as_bad (_("%s without %s"), start, end);
3084 sb_build (&many, count * one.len);
3086 sb_add_sb (&many, &one);
3090 input_scrub_include_sb (&many, input_line_pointer, 1);
3092 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3095 /* Like do_repeat except that any text matching EXPANDER in the
3096 block is replaced by the itteration count. */
3099 do_repeat_with_expander (int count,
3102 const char * expander)
3108 if (!buffer_and_nest (start, end, &one, get_non_macro_line_sb))
3110 as_bad (_("%s without %s"), start, end);
3116 if (expander != NULL && strstr (one.ptr, expander) != NULL)
3118 while (count -- > 0)
3124 sb_build (& processed, one.len);
3125 sb_add_sb (& processed, & one);
3126 sub = strstr (processed.ptr, expander);
3127 len = sprintf (sub, "%d", count);
3128 gas_assert (len < 8);
3129 strcpy (sub + len, sub + 8);
3130 processed.len -= (8 - len);
3131 sb_add_sb (& many, & processed);
3132 sb_kill (& processed);
3137 sb_add_sb (&many, &one);
3141 input_scrub_include_sb (&many, input_line_pointer, 1);
3143 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3146 /* Skip to end of current repeat loop; EXTRA indicates how many additional
3147 input buffers to skip. Assumes that conditionals preceding the loop end
3148 are properly nested.
3150 This function makes it easier to implement a premature "break" out of the
3151 loop. The EXTRA arg accounts for other buffers we might have inserted,
3152 such as line substitutions. */
3155 end_repeat (int extra)
3157 cond_exit_macro (macro_nest);
3158 while (extra-- >= 0)
3159 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3163 assign_symbol (char *name, int mode)
3167 if (name[0] == '.' && name[1] == '\0')
3169 /* Turn '. = mumble' into a .org mumble. */
3173 segment = get_known_segmented_expression (&exp);
3176 do_org (segment, &exp, 0);
3181 if ((symbolP = symbol_find (name)) == NULL
3182 && (symbolP = md_undefined_symbol (name)) == NULL)
3184 symbolP = symbol_find_or_make (name);
3186 /* When doing symbol listings, play games with dummy fragments living
3187 outside the normal fragment chain to record the file and line info
3189 if (listing & LISTING_SYMBOLS)
3191 extern struct list_info_struct *listing_tail;
3192 fragS *dummy_frag = (fragS *) xcalloc (1, sizeof (fragS));
3193 dummy_frag->line = listing_tail;
3194 dummy_frag->fr_symbol = symbolP;
3195 symbol_set_frag (symbolP, dummy_frag);
3198 #if defined (OBJ_COFF) && !defined (TE_PE)
3199 /* "set" symbols are local unless otherwise specified. */
3200 SF_SET_LOCAL (symbolP);
3204 if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
3206 if ((mode != 0 || !S_IS_VOLATILE (symbolP))
3207 && !S_CAN_BE_REDEFINED (symbolP))
3209 as_bad (_("symbol `%s' is already defined"), name);
3210 symbolP = symbol_clone (symbolP, 0);
3212 /* If the symbol is volatile, copy the symbol and replace the
3213 original with the copy, so that previous uses of the symbol will
3214 retain the value of the symbol at the point of use. */
3215 else if (S_IS_VOLATILE (symbolP))
3216 symbolP = symbol_clone (symbolP, 1);
3220 S_SET_VOLATILE (symbolP);
3222 S_SET_FORWARD_REF (symbolP);
3224 pseudo_set (symbolP);
3227 /* Handle the .equ, .equiv, .eqv, and .set directives. If EQUIV is 1,
3228 then this is .equiv, and it is an error if the symbol is already
3229 defined. If EQUIV is -1, the symbol additionally is a forward
3237 /* Especial apologies for the random logic:
3238 this just grew, and could be parsed much more simply!
3240 if ((name = read_symbol_name ()) == NULL)
3243 if (*input_line_pointer != ',')
3245 as_bad (_("expected comma after \"%s\""), name);
3246 ignore_rest_of_line ();
3251 input_line_pointer++;
3252 assign_symbol (name, equiv);
3253 demand_empty_rest_of_line ();
3267 #ifdef md_flush_pending_output
3268 md_flush_pending_output ();
3271 #ifdef md_cons_align
3276 stop = mri_comment_field (&stopc);
3278 /* In m68k MRI mode, we need to align to a word boundary, unless
3280 if (flag_m68k_mri && mult > 1)
3282 if (now_seg == absolute_section)
3284 abs_section_offset += abs_section_offset & 1;
3285 if (line_label != NULL)
3286 S_SET_VALUE (line_label, abs_section_offset);
3288 else if (mri_common_symbol != NULL)
3292 mri_val = S_GET_VALUE (mri_common_symbol);
3293 if ((mri_val & 1) != 0)
3295 S_SET_VALUE (mri_common_symbol, mri_val + 1);
3296 if (line_label != NULL)
3298 expressionS *symexp;
3300 symexp = symbol_get_value_expression (line_label);
3301 know (symexp->X_op == O_symbol);
3302 know (symexp->X_add_symbol == mri_common_symbol);
3303 symexp->X_add_number += 1;
3309 do_align (1, (char *) NULL, 0, 0);
3310 if (line_label != NULL)
3312 symbol_set_frag (line_label, frag_now);
3313 S_SET_VALUE (line_label, frag_now_fix ());
3323 if (*input_line_pointer == ',')
3325 ++input_line_pointer;
3330 val.X_op = O_constant;
3331 val.X_add_number = 0;
3334 if (val.X_op != O_constant
3335 || val.X_add_number < - 0x80
3336 || val.X_add_number > 0xff
3337 || (mult != 0 && mult != 1 && val.X_add_number != 0))
3339 resolve_expression (&exp);
3340 if (exp.X_op != O_constant)
3341 as_bad (_("unsupported variable size or fill value"));
3348 bytes = mult * exp.X_add_number;
3349 for (i = 0; i < exp.X_add_number; i++)
3350 emit_expr (&val, mult);
3355 if (now_seg == absolute_section || mri_common_symbol != NULL)
3356 resolve_expression (&exp);
3358 if (exp.X_op == O_constant)
3362 repeat = exp.X_add_number;
3369 as_warn (_(".space repeat count is zero, ignored"));
3370 else if (repeat < 0)
3371 as_warn (_(".space repeat count is negative, ignored"));
3375 /* If we are in the absolute section, just bump the offset. */
3376 if (now_seg == absolute_section)
3378 abs_section_offset += repeat;
3382 /* If we are secretly in an MRI common section, then
3383 creating space just increases the size of the common
3385 if (mri_common_symbol != NULL)
3387 S_SET_VALUE (mri_common_symbol,
3388 S_GET_VALUE (mri_common_symbol) + repeat);
3393 p = frag_var (rs_fill, 1, 1, (relax_substateT) 0, (symbolS *) 0,
3394 (offsetT) repeat, (char *) 0);
3398 if (now_seg == absolute_section)
3400 as_bad (_("space allocation too complex in absolute section"));
3401 subseg_set (text_section, 0);
3404 if (mri_common_symbol != NULL)
3406 as_bad (_("space allocation too complex in common section"));
3407 mri_common_symbol = NULL;
3411 p = frag_var (rs_space, 1, 1, (relax_substateT) 0,
3412 make_expr_symbol (&exp), (offsetT) 0, (char *) 0);
3416 *p = val.X_add_number;
3421 /* In MRI mode, after an odd number of bytes, we must align to an
3422 even word boundary, unless the next instruction is a dc.b, ds.b
3424 if (flag_mri && (bytes & 1) != 0)
3425 mri_pending_align = 1;
3427 demand_empty_rest_of_line ();
3430 mri_comment_end (stop, stopc);
3433 /* This is like s_space, but the value is a floating point number with
3434 the given precision. This is for the MRI dcb.s pseudo-op and
3438 s_float_space (int float_type)
3442 char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
3446 #ifdef md_cons_align
3451 stop = mri_comment_field (&stopc);
3453 count = get_absolute_expression ();
3456 if (*input_line_pointer != ',')
3458 as_bad (_("missing value"));
3459 ignore_rest_of_line ();
3461 mri_comment_end (stop, stopc);
3465 ++input_line_pointer;
3469 /* Skip any 0{letter} that may be present. Don't even check if the
3470 * letter is legal. */
3471 if (input_line_pointer[0] == '0'
3472 && ISALPHA (input_line_pointer[1]))
3473 input_line_pointer += 2;
3475 /* Accept :xxxx, where the x's are hex digits, for a floating point
3476 with the exact digits specified. */
3477 if (input_line_pointer[0] == ':')
3479 flen = hex_float (float_type, temp);
3482 ignore_rest_of_line ();
3484 mri_comment_end (stop, stopc);
3492 err = md_atof (float_type, temp, &flen);
3493 know (flen <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
3494 know (err != NULL || flen > 0);
3497 as_bad (_("bad floating literal: %s"), err);
3498 ignore_rest_of_line ();
3500 mri_comment_end (stop, stopc);
3505 while (--count >= 0)
3509 p = frag_more (flen);
3510 memcpy (p, temp, (unsigned int) flen);
3513 demand_empty_rest_of_line ();
3516 mri_comment_end (stop, stopc);
3519 /* Handle the .struct pseudo-op, as found in MIPS assemblers. */
3522 s_struct (int ignore ATTRIBUTE_UNUSED)
3528 stop = mri_comment_field (&stopc);
3529 abs_section_offset = get_absolute_expression ();
3530 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3531 /* The ELF backend needs to know that we are changing sections, so
3532 that .previous works correctly. */
3534 obj_elf_section_change_hook ();
3536 subseg_set (absolute_section, 0);
3537 demand_empty_rest_of_line ();
3539 mri_comment_end (stop, stopc);
3543 s_text (int ignore ATTRIBUTE_UNUSED)
3547 temp = get_absolute_expression ();
3548 subseg_set (text_section, (subsegT) temp);
3549 demand_empty_rest_of_line ();
3552 /* .weakref x, y sets x as an alias to y that, as long as y is not
3553 referenced directly, will cause y to become a weak symbol. */
3555 s_weakref (int ignore ATTRIBUTE_UNUSED)
3562 if ((name = read_symbol_name ()) == NULL)
3565 symbolP = symbol_find_or_make (name);
3567 if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
3569 if (!S_IS_VOLATILE (symbolP))
3571 as_bad (_("symbol `%s' is already defined"), name);
3574 symbolP = symbol_clone (symbolP, 1);
3575 S_CLEAR_VOLATILE (symbolP);
3580 if (*input_line_pointer != ',')
3582 as_bad (_("expected comma after \"%s\""), name);
3586 input_line_pointer++;
3591 if ((name = read_symbol_name ()) == NULL)
3594 if ((symbolP2 = symbol_find_noref (name, 1)) == NULL
3595 && (symbolP2 = md_undefined_symbol (name)) == NULL)
3597 symbolP2 = symbol_find_or_make (name);
3598 S_SET_WEAKREFD (symbolP2);
3602 symbolS *symp = symbolP2;
3604 while (S_IS_WEAKREFR (symp) && symp != symbolP)
3606 expressionS *expP = symbol_get_value_expression (symp);
3608 gas_assert (expP->X_op == O_symbol
3609 && expP->X_add_number == 0);
3610 symp = expP->X_add_symbol;
3612 if (symp == symbolP)
3616 loop = concat (S_GET_NAME (symbolP),
3617 " => ", S_GET_NAME (symbolP2), (const char *) NULL);
3620 while (symp != symbolP)
3622 char *old_loop = loop;
3624 symp = symbol_get_value_expression (symp)->X_add_symbol;
3625 loop = concat (loop, " => ", S_GET_NAME (symp),
3626 (const char *) NULL);
3630 as_bad (_("%s: would close weakref loop: %s"),
3631 S_GET_NAME (symbolP), loop);
3635 ignore_rest_of_line ();
3639 /* Short-circuiting instead of just checking here might speed
3640 things up a tiny little bit, but loop error messages would
3641 miss intermediate links. */
3642 /* symbolP2 = symp; */
3645 memset (&exp, 0, sizeof (exp));
3646 exp.X_op = O_symbol;
3647 exp.X_add_symbol = symbolP2;
3649 S_SET_SEGMENT (symbolP, undefined_section);
3650 symbol_set_value_expression (symbolP, &exp);
3651 symbol_set_frag (symbolP, &zero_address_frag);
3652 S_SET_WEAKREFR (symbolP);
3654 demand_empty_rest_of_line ();
3659 ignore_rest_of_line ();
3665 /* Verify that we are at the end of a line. If not, issue an error and
3669 demand_empty_rest_of_line (void)
3672 if (is_end_of_line[(unsigned char) *input_line_pointer])
3673 input_line_pointer++;
3676 if (ISPRINT (*input_line_pointer))
3677 as_bad (_("junk at end of line, first unrecognized character is `%c'"),
3678 *input_line_pointer);
3680 as_bad (_("junk at end of line, first unrecognized character valued 0x%x"),
3681 *input_line_pointer);
3682 ignore_rest_of_line ();
3685 /* Return pointing just after end-of-line. */
3686 know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3689 /* Silently advance to the end of line. Use this after already having
3690 issued an error about something bad. */
3693 ignore_rest_of_line (void)
3695 while (input_line_pointer < buffer_limit
3696 && !is_end_of_line[(unsigned char) *input_line_pointer])
3697 input_line_pointer++;
3699 input_line_pointer++;
3701 /* Return pointing just after end-of-line. */
3702 know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3705 /* Sets frag for given symbol to zero_address_frag, except when the
3706 symbol frag is already set to a dummy listing frag. */
3709 set_zero_frag (symbolS *symbolP)
3711 if (symbol_get_frag (symbolP)->fr_type != rs_dummy)
3712 symbol_set_frag (symbolP, &zero_address_frag);
3715 /* In: Pointer to a symbol.
3716 Input_line_pointer->expression.
3718 Out: Input_line_pointer->just after any whitespace after expression.
3719 Tried to set symbol to value of expression.
3720 Will change symbols type, value, and frag; */
3723 pseudo_set (symbolS *symbolP)
3728 know (symbolP); /* NULL pointer is logic error. */
3730 if (!S_IS_FORWARD_REF (symbolP))
3731 (void) expression (&exp);
3733 (void) deferred_expression (&exp);
3735 if (exp.X_op == O_illegal)
3736 as_bad (_("illegal expression"));
3737 else if (exp.X_op == O_absent)
3738 as_bad (_("missing expression"));
3739 else if (exp.X_op == O_big)
3741 if (exp.X_add_number > 0)
3742 as_bad (_("bignum invalid"));
3744 as_bad (_("floating point number invalid"));
3746 else if (exp.X_op == O_subtract
3747 && !S_IS_FORWARD_REF (symbolP)
3748 && SEG_NORMAL (S_GET_SEGMENT (exp.X_add_symbol))
3749 && (symbol_get_frag (exp.X_add_symbol)
3750 == symbol_get_frag (exp.X_op_symbol)))
3752 exp.X_op = O_constant;
3753 exp.X_add_number = (S_GET_VALUE (exp.X_add_symbol)
3754 - S_GET_VALUE (exp.X_op_symbol));
3757 if (symbol_section_p (symbolP))
3759 as_bad ("attempt to set value of section symbol");
3768 exp.X_add_number = 0;
3771 S_SET_SEGMENT (symbolP, absolute_section);
3772 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3773 set_zero_frag (symbolP);
3777 #ifndef TC_GLOBAL_REGISTER_SYMBOL_OK
3778 if (S_IS_EXTERNAL (symbolP))
3780 as_bad ("can't equate global symbol `%s' with register name",
3781 S_GET_NAME (symbolP));
3785 S_SET_SEGMENT (symbolP, reg_section);
3786 S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3787 set_zero_frag (symbolP);
3788 symbol_get_value_expression (symbolP)->X_op = O_register;
3792 seg = S_GET_SEGMENT (exp.X_add_symbol);
3793 /* For x=undef+const, create an expression symbol.
3794 For x=x+const, just update x except when x is an undefined symbol
3795 For x=defined+const, evaluate x. */
3796 if (symbolP == exp.X_add_symbol
3797 && (seg != undefined_section
3798 || !symbol_constant_p (symbolP)))
3800 *symbol_X_add_number (symbolP) += exp.X_add_number;
3803 else if (!S_IS_FORWARD_REF (symbolP) && seg != undefined_section)
3805 symbolS *s = exp.X_add_symbol;
3807 if (S_IS_COMMON (s))
3808 as_bad (_("`%s' can't be equated to common symbol '%s'"),
3809 S_GET_NAME (symbolP), S_GET_NAME (s));
3811 S_SET_SEGMENT (symbolP, seg);
3812 S_SET_VALUE (symbolP, exp.X_add_number + S_GET_VALUE (s));
3813 symbol_set_frag (symbolP, symbol_get_frag (s));
3814 copy_symbol_attributes (symbolP, s);
3817 S_SET_SEGMENT (symbolP, undefined_section);
3818 symbol_set_value_expression (symbolP, &exp);
3819 copy_symbol_attributes (symbolP, exp.X_add_symbol);
3820 set_zero_frag (symbolP);
3824 /* The value is some complex expression. */
3825 S_SET_SEGMENT (symbolP, expr_section);
3826 symbol_set_value_expression (symbolP, &exp);
3827 set_zero_frag (symbolP);
3834 CONStruct more frag of .bytes, or .words etc.
3835 Should need_pass_2 be 1 then emit no frag(s).
3836 This understands EXPRESSIONS.
3840 This has a split personality. We use expression() to read the
3841 value. We can detect if the value won't fit in a byte or word.
3842 But we can't detect if expression() discarded significant digits
3843 in the case of a long. Not worth the crocks required to fix it. */
3845 /* Select a parser for cons expressions. */
3847 /* Some targets need to parse the expression in various fancy ways.
3848 You can define TC_PARSE_CONS_EXPRESSION to do whatever you like
3849 (for example, the HPPA does this). Otherwise, you can define
3850 BITFIELD_CONS_EXPRESSIONS to permit bitfields to be specified, or
3851 REPEAT_CONS_EXPRESSIONS to permit repeat counts. If none of these
3852 are defined, which is the normal case, then only simple expressions
3857 parse_mri_cons (expressionS *exp, unsigned int nbytes);
3860 #ifndef TC_PARSE_CONS_EXPRESSION
3861 #ifdef BITFIELD_CONS_EXPRESSIONS
3862 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3863 (parse_bitfield_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3865 parse_bitfield_cons (expressionS *exp, unsigned int nbytes);
3867 #ifdef REPEAT_CONS_EXPRESSIONS
3868 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3869 (parse_repeat_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3871 parse_repeat_cons (expressionS *exp, unsigned int nbytes);
3874 /* If we haven't gotten one yet, just call expression. */
3875 #ifndef TC_PARSE_CONS_EXPRESSION
3876 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3877 (expression (EXP), TC_PARSE_CONS_RETURN_NONE)
3882 do_parse_cons_expression (expressionS *exp,
3883 int nbytes ATTRIBUTE_UNUSED)
3885 (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
3889 /* Worker to do .byte etc statements.
3890 Clobbers input_line_pointer and checks end-of-line. */
3893 cons_worker (int nbytes, /* 1=.byte, 2=.word, 4=.long. */
3901 #ifdef md_flush_pending_output
3902 md_flush_pending_output ();
3906 stop = mri_comment_field (&stopc);
3908 if (is_it_end_of_statement ())
3910 demand_empty_rest_of_line ();
3912 mri_comment_end (stop, stopc);
3916 #ifdef TC_ADDRESS_BYTES
3918 nbytes = TC_ADDRESS_BYTES ();
3921 #ifdef md_cons_align
3922 md_cons_align (nbytes);
3928 TC_PARSE_CONS_RETURN_TYPE ret = TC_PARSE_CONS_RETURN_NONE;
3929 #ifdef TC_CONS_FIX_CHECK
3930 fixS **cur_fix = &frchain_now->fix_tail;
3932 if (*cur_fix != NULL)
3933 cur_fix = &(*cur_fix)->fx_next;
3938 parse_mri_cons (&exp, (unsigned int) nbytes);
3943 if (*input_line_pointer == '"')
3945 as_bad (_("unexpected `\"' in expression"));
3946 ignore_rest_of_line ();
3950 ret = TC_PARSE_CONS_EXPRESSION (&exp, (unsigned int) nbytes);
3955 if (exp.X_op == O_symbol)
3956 exp.X_op = O_symbol_rva;
3958 as_fatal (_("rva without symbol"));
3960 emit_expr_with_reloc (&exp, (unsigned int) nbytes, ret);
3961 #ifdef TC_CONS_FIX_CHECK
3962 TC_CONS_FIX_CHECK (&exp, nbytes, *cur_fix);
3966 while (*input_line_pointer++ == ',');
3968 /* In MRI mode, after an odd number of bytes, we must align to an
3969 even word boundary, unless the next instruction is a dc.b, ds.b
3971 if (flag_mri && nbytes == 1 && (c & 1) != 0)
3972 mri_pending_align = 1;
3974 input_line_pointer--; /* Put terminator back into stream. */
3976 demand_empty_rest_of_line ();
3979 mri_comment_end (stop, stopc);
3985 cons_worker (size, 0);
3991 cons_worker (size, 1);
3994 /* .reloc offset, reloc_name, symbol+addend. */
3997 s_reloc (int ignore ATTRIBUTE_UNUSED)
4004 struct reloc_list *reloc;
4005 struct _bfd_rel { char *name; bfd_reloc_code_real_type code; };
4006 static struct _bfd_rel bfd_relocs[] = {
4007 { "NONE", BFD_RELOC_NONE },
4008 { "8", BFD_RELOC_8 },
4009 { "16", BFD_RELOC_16 },
4010 { "32", BFD_RELOC_32 },
4011 { "64", BFD_RELOC_64 }
4014 reloc = (struct reloc_list *) xmalloc (sizeof (*reloc));
4017 stop = mri_comment_field (&stopc);
4026 as_bad (_("missing or bad offset expression"));
4029 exp.X_add_symbol = section_symbol (now_seg);
4030 exp.X_op = O_symbol;
4033 if (exp.X_add_number == 0)
4035 reloc->u.a.offset_sym = exp.X_add_symbol;
4040 reloc->u.a.offset_sym = make_expr_symbol (&exp);
4045 if (*input_line_pointer != ',')
4047 as_bad (_("missing reloc type"));
4051 ++input_line_pointer;
4053 c = get_symbol_name (& r_name);
4054 if (strncasecmp (r_name, "BFD_RELOC_", 10) == 0)
4058 for (reloc->u.a.howto = NULL, i = 0; i < ARRAY_SIZE (bfd_relocs); i++)
4059 if (strcasecmp (r_name + 10, bfd_relocs[i].name) == 0)
4061 reloc->u.a.howto = bfd_reloc_type_lookup (stdoutput,
4062 bfd_relocs[i].code);
4067 reloc->u.a.howto = bfd_reloc_name_lookup (stdoutput, r_name);
4068 *input_line_pointer = c;
4069 if (reloc->u.a.howto == NULL)
4071 as_bad (_("unrecognized reloc type"));
4075 exp.X_op = O_absent;
4076 SKIP_WHITESPACE_AFTER_NAME ();
4077 if (*input_line_pointer == ',')
4079 ++input_line_pointer;
4087 as_bad (_("bad reloc expression"));
4089 ignore_rest_of_line ();
4092 mri_comment_end (stop, stopc);
4095 reloc->u.a.sym = NULL;
4096 reloc->u.a.addend = 0;
4099 reloc->u.a.sym = NULL;
4100 reloc->u.a.addend = exp.X_add_number;
4103 reloc->u.a.sym = exp.X_add_symbol;
4104 reloc->u.a.addend = exp.X_add_number;
4107 reloc->u.a.sym = make_expr_symbol (&exp);
4108 reloc->u.a.addend = 0;
4112 as_where (&reloc->file, &reloc->line);
4113 reloc->next = reloc_list;
4116 demand_empty_rest_of_line ();
4118 mri_comment_end (stop, stopc);
4121 /* Put the contents of expression EXP into the object file using
4122 NBYTES bytes. If need_pass_2 is 1, this does nothing. */
4125 emit_expr (expressionS *exp, unsigned int nbytes)
4127 emit_expr_with_reloc (exp, nbytes, TC_PARSE_CONS_RETURN_NONE);
4131 emit_expr_with_reloc (expressionS *exp,
4132 unsigned int nbytes,
4133 TC_PARSE_CONS_RETURN_TYPE reloc)
4137 valueT extra_digit = 0;
4139 /* Don't do anything if we are going to make another pass. */
4144 dot_value = frag_now_fix ();
4145 dot_frag = frag_now;
4149 /* When gcc emits DWARF 1 debugging pseudo-ops, a line number will
4150 appear as a four byte positive constant in the .line section,
4151 followed by a 2 byte 0xffff. Look for that case here. */
4153 static int dwarf_line = -1;
4155 if (strcmp (segment_name (now_seg), ".line") != 0)
4157 else if (dwarf_line >= 0
4159 && exp->X_op == O_constant
4160 && (exp->X_add_number == -1 || exp->X_add_number == 0xffff))
4161 listing_source_line ((unsigned int) dwarf_line);
4162 else if (nbytes == 4
4163 && exp->X_op == O_constant
4164 && exp->X_add_number >= 0)
4165 dwarf_line = exp->X_add_number;
4170 /* When gcc emits DWARF 1 debugging pseudo-ops, a file name will
4171 appear as a 2 byte TAG_compile_unit (0x11) followed by a 2 byte
4172 AT_sibling (0x12) followed by a four byte address of the sibling
4173 followed by a 2 byte AT_name (0x38) followed by the name of the
4174 file. We look for that case here. */
4176 static int dwarf_file = 0;
4178 if (strcmp (segment_name (now_seg), ".debug") != 0)
4180 else if (dwarf_file == 0
4182 && exp->X_op == O_constant
4183 && exp->X_add_number == 0x11)
4185 else if (dwarf_file == 1
4187 && exp->X_op == O_constant
4188 && exp->X_add_number == 0x12)
4190 else if (dwarf_file == 2
4193 else if (dwarf_file == 3
4195 && exp->X_op == O_constant
4196 && exp->X_add_number == 0x38)
4201 /* The variable dwarf_file_string tells stringer that the string
4202 may be the name of the source file. */
4203 if (dwarf_file == 4)
4204 dwarf_file_string = 1;
4206 dwarf_file_string = 0;
4211 if (check_eh_frame (exp, &nbytes))
4216 /* Allow `.word 0' in the absolute section. */
4217 if (now_seg == absolute_section)
4219 if (op != O_constant || exp->X_add_number != 0)
4220 as_bad (_("attempt to store value in absolute section"));
4221 abs_section_offset += nbytes;
4225 /* Handle a negative bignum. */
4227 && exp->X_add_number == 0
4228 && symbol_get_value_expression (exp->X_add_symbol)->X_op == O_big
4229 && symbol_get_value_expression (exp->X_add_symbol)->X_add_number > 0)
4232 unsigned long carry;
4234 exp = symbol_get_value_expression (exp->X_add_symbol);
4236 /* Negate the bignum: one's complement each digit and add 1. */
4238 for (i = 0; i < exp->X_add_number; i++)
4242 next = (((~(generic_bignum[i] & LITTLENUM_MASK))
4245 generic_bignum[i] = next & LITTLENUM_MASK;
4246 carry = next >> LITTLENUM_NUMBER_OF_BITS;
4249 /* We can ignore any carry out, because it will be handled by
4250 extra_digit if it is needed. */
4252 extra_digit = (valueT) -1;
4256 if (op == O_absent || op == O_illegal)
4258 as_warn (_("zero assumed for missing expression"));
4259 exp->X_add_number = 0;
4262 else if (op == O_big && exp->X_add_number <= 0)
4264 as_bad (_("floating point number invalid"));
4265 exp->X_add_number = 0;
4268 else if (op == O_register)
4270 as_warn (_("register value used as expression"));
4274 p = frag_more ((int) nbytes);
4276 if (reloc != TC_PARSE_CONS_RETURN_NONE)
4278 emit_expr_fix (exp, nbytes, frag_now, p, reloc);
4282 #ifndef WORKING_DOT_WORD
4283 /* If we have the difference of two symbols in a word, save it on
4284 the broken_words list. See the code in write.c. */
4285 if (op == O_subtract && nbytes == 2)
4287 struct broken_word *x;
4289 x = (struct broken_word *) xmalloc (sizeof (struct broken_word));
4290 x->next_broken_word = broken_words;
4293 x->subseg = now_subseg;
4295 x->word_goes_here = p;
4297 x->add = exp->X_add_symbol;
4298 x->sub = exp->X_op_symbol;
4299 x->addnum = exp->X_add_number;
4307 /* If we have an integer, but the number of bytes is too large to
4308 pass to md_number_to_chars, handle it as a bignum. */
4309 if (op == O_constant && nbytes > sizeof (valueT))
4311 extra_digit = exp->X_unsigned ? 0 : -1;
4312 convert_to_bignum (exp, !exp->X_unsigned);
4316 if (op == O_constant)
4324 /* JF << of >= number of bits in the object is undefined. In
4325 particular SPARC (Sun 4) has problems. */
4326 if (nbytes >= sizeof (valueT))
4329 if (nbytes > sizeof (valueT))
4332 hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
4336 /* Don't store these bits. */
4337 mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes);
4338 hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
4341 unmask = ~mask; /* Do store these bits. */
4344 "Do this mod if you want every overflow check to assume SIGNED 2's complement data.";
4345 mask = ~(unmask >> 1); /* Includes sign bit now. */
4348 get = exp->X_add_number;
4350 if ((get & mask) != 0
4351 && ((get & mask) != mask
4352 || (get & hibit) == 0))
4353 { /* Leading bits contain both 0s & 1s. */
4354 #if defined (BFD64) && BFD_HOST_64BIT_LONG_LONG
4356 as_warn (_("value 0x%llx truncated to 0x%llx"),
4357 (unsigned long long) get, (unsigned long long) use);
4359 as_warn (_("value 0x%I64x truncated to 0x%I64x"),
4360 (unsigned long long) get, (unsigned long long) use);
4363 as_warn (_("value 0x%lx truncated to 0x%lx"),
4364 (unsigned long) get, (unsigned long) use);
4367 /* Put bytes in right order. */
4368 md_number_to_chars (p, use, (int) nbytes);
4370 else if (op == O_big)
4373 LITTLENUM_TYPE *nums;
4375 size = exp->X_add_number * CHARS_PER_LITTLENUM;
4378 int i = nbytes / CHARS_PER_LITTLENUM;
4381 LITTLENUM_TYPE sign = 0;
4382 if ((generic_bignum[--i]
4383 & (1 << (LITTLENUM_NUMBER_OF_BITS - 1))) != 0)
4384 sign = ~(LITTLENUM_TYPE) 0;
4385 while (++i < exp->X_add_number)
4386 if (generic_bignum[i] != sign)
4389 if (i < exp->X_add_number)
4390 as_warn (_("bignum truncated to %d bytes"), nbytes);
4396 md_number_to_chars (p, (valueT) generic_bignum[0], 1);
4399 know (nbytes % CHARS_PER_LITTLENUM == 0);
4401 if (target_big_endian)
4403 while (nbytes > size)
4405 md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
4406 nbytes -= CHARS_PER_LITTLENUM;
4407 p += CHARS_PER_LITTLENUM;
4410 nums = generic_bignum + size / CHARS_PER_LITTLENUM;
4411 while (size >= CHARS_PER_LITTLENUM)
4414 md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
4415 size -= CHARS_PER_LITTLENUM;
4416 p += CHARS_PER_LITTLENUM;
4421 nums = generic_bignum;
4422 while (size >= CHARS_PER_LITTLENUM)
4424 md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
4426 size -= CHARS_PER_LITTLENUM;
4427 p += CHARS_PER_LITTLENUM;
4428 nbytes -= CHARS_PER_LITTLENUM;
4431 while (nbytes >= CHARS_PER_LITTLENUM)
4433 md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
4434 nbytes -= CHARS_PER_LITTLENUM;
4435 p += CHARS_PER_LITTLENUM;
4440 emit_expr_fix (exp, nbytes, frag_now, p, TC_PARSE_CONS_RETURN_NONE);
4444 emit_expr_fix (expressionS *exp, unsigned int nbytes, fragS *frag, char *p,
4445 TC_PARSE_CONS_RETURN_TYPE r ATTRIBUTE_UNUSED)
4448 unsigned int size = nbytes;
4450 memset (p, 0, size);
4452 /* Generate a fixS to record the symbol value. */
4454 #ifdef TC_CONS_FIX_NEW
4455 TC_CONS_FIX_NEW (frag, p - frag->fr_literal + offset, size, exp, r);
4457 if (r != TC_PARSE_CONS_RETURN_NONE)
4459 reloc_howto_type *reloc_howto;
4461 reloc_howto = bfd_reloc_type_lookup (stdoutput, r);
4462 size = bfd_get_reloc_size (reloc_howto);
4466 as_bad (_("%s relocations do not fit in %u bytes\n"),
4467 reloc_howto->name, nbytes);
4470 else if (target_big_endian)
4471 offset = nbytes - size;
4492 as_bad (_("unsupported BFD relocation size %u"), size);
4495 fix_new_exp (frag, p - frag->fr_literal + offset, size,
4500 #ifdef BITFIELD_CONS_EXPRESSIONS
4502 /* i960 assemblers, (eg, asm960), allow bitfields after ".byte" as
4503 w:x,y:z, where w and y are bitwidths and x and y are values. They
4504 then pack them all together. We do a little better in that we allow
4505 them in words, longs, etc. and we'll pack them in target byte order
4508 The rules are: pack least significant bit first, if a field doesn't
4509 entirely fit, put it in the next unit. Overflowing the bitfield is
4510 explicitly *not* even a warning. The bitwidth should be considered
4513 To use this function the tc-XXX.h file should define
4514 BITFIELD_CONS_EXPRESSIONS. */
4517 parse_bitfield_cons (exp, nbytes)
4519 unsigned int nbytes;
4521 unsigned int bits_available = BITS_PER_CHAR * nbytes;
4522 char *hold = input_line_pointer;
4524 (void) expression (exp);
4526 if (*input_line_pointer == ':')
4533 unsigned long width;
4535 if (*input_line_pointer != ':')
4537 input_line_pointer = hold;
4539 } /* Next piece is not a bitfield. */
4541 /* In the general case, we can't allow
4542 full expressions with symbol
4543 differences and such. The relocation
4544 entries for symbols not defined in this
4545 assembly would require arbitrary field
4546 widths, positions, and masks which most
4547 of our current object formats don't
4550 In the specific case where a symbol
4551 *is* defined in this assembly, we
4552 *could* build fixups and track it, but
4553 this could lead to confusion for the
4554 backends. I'm lazy. I'll take any
4555 SEG_ABSOLUTE. I think that means that
4556 you can use a previous .set or
4557 .equ type symbol. xoxorich. */
4559 if (exp->X_op == O_absent)
4561 as_warn (_("using a bit field width of zero"));
4562 exp->X_add_number = 0;
4563 exp->X_op = O_constant;
4564 } /* Implied zero width bitfield. */
4566 if (exp->X_op != O_constant)
4568 *input_line_pointer = '\0';
4569 as_bad (_("field width \"%s\" too complex for a bitfield"), hold);
4570 *input_line_pointer = ':';
4571 demand_empty_rest_of_line ();
4573 } /* Too complex. */
4575 if ((width = exp->X_add_number) > (BITS_PER_CHAR * nbytes))
4577 as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"),
4578 width, nbytes, (BITS_PER_CHAR * nbytes));
4579 width = BITS_PER_CHAR * nbytes;
4582 if (width > bits_available)
4584 /* FIXME-SOMEDAY: backing up and reparsing is wasteful. */
4585 input_line_pointer = hold;
4586 exp->X_add_number = value;
4591 hold = ++input_line_pointer;
4593 (void) expression (exp);
4594 if (exp->X_op != O_constant)
4596 char cache = *input_line_pointer;
4598 *input_line_pointer = '\0';
4599 as_bad (_("field value \"%s\" too complex for a bitfield"), hold);
4600 *input_line_pointer = cache;
4601 demand_empty_rest_of_line ();
4603 } /* Too complex. */
4605 value |= ((~(-(1 << width)) & exp->X_add_number)
4606 << ((BITS_PER_CHAR * nbytes) - bits_available));
4608 if ((bits_available -= width) == 0
4609 || is_it_end_of_statement ()
4610 || *input_line_pointer != ',')
4613 } /* All the bitfields we're gonna get. */
4615 hold = ++input_line_pointer;
4616 (void) expression (exp);
4619 exp->X_add_number = value;
4620 exp->X_op = O_constant;
4621 exp->X_unsigned = 1;
4622 exp->X_extrabit = 0;
4626 #endif /* BITFIELD_CONS_EXPRESSIONS */
4628 /* Handle an MRI style string expression. */
4632 parse_mri_cons (expressionS *exp, unsigned int nbytes)
4634 if (*input_line_pointer != '\''
4635 && (input_line_pointer[1] != '\''
4636 || (*input_line_pointer != 'A'
4637 && *input_line_pointer != 'E')))
4638 (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
4642 unsigned int result = 0;
4644 /* An MRI style string. Cut into as many bytes as will fit into
4645 a nbyte chunk, left justify if necessary, and separate with
4646 commas so we can try again later. */
4647 if (*input_line_pointer == 'A')
4648 ++input_line_pointer;
4649 else if (*input_line_pointer == 'E')
4651 as_bad (_("EBCDIC constants are not supported"));
4652 ++input_line_pointer;
4655 input_line_pointer++;
4656 for (scan = 0; scan < nbytes; scan++)
4658 if (*input_line_pointer == '\'')
4660 if (input_line_pointer[1] == '\'')
4662 input_line_pointer++;
4667 result = (result << 8) | (*input_line_pointer++);
4671 while (scan < nbytes)
4677 /* Create correct expression. */
4678 exp->X_op = O_constant;
4679 exp->X_add_number = result;
4681 /* Fake it so that we can read the next char too. */
4682 if (input_line_pointer[0] != '\'' ||
4683 (input_line_pointer[0] == '\'' && input_line_pointer[1] == '\''))
4685 input_line_pointer -= 2;
4686 input_line_pointer[0] = ',';
4687 input_line_pointer[1] = '\'';
4690 input_line_pointer++;
4693 #endif /* TC_M68K */
4695 #ifdef REPEAT_CONS_EXPRESSIONS
4697 /* Parse a repeat expression for cons. This is used by the MIPS
4698 assembler. The format is NUMBER:COUNT; NUMBER appears in the
4699 object file COUNT times.
4701 To use this for a target, define REPEAT_CONS_EXPRESSIONS. */
4704 parse_repeat_cons (exp, nbytes)
4706 unsigned int nbytes;
4713 if (*input_line_pointer != ':')
4715 /* No repeat count. */
4719 ++input_line_pointer;
4720 expression (&count);
4721 if (count.X_op != O_constant
4722 || count.X_add_number <= 0)
4724 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4728 /* The cons function is going to output this expression once. So we
4729 output it count - 1 times. */
4730 for (i = count.X_add_number - 1; i > 0; i--)
4731 emit_expr (exp, nbytes);
4734 #endif /* REPEAT_CONS_EXPRESSIONS */
4736 /* Parse a floating point number represented as a hex constant. This
4737 permits users to specify the exact bits they want in the floating
4741 hex_float (int float_type, char *bytes)
4773 as_bad (_("unknown floating type type '%c'"), float_type);
4777 /* It would be nice if we could go through expression to parse the
4778 hex constant, but if we get a bignum it's a pain to sort it into
4779 the buffer correctly. */
4781 while (hex_p (*input_line_pointer) || *input_line_pointer == '_')
4785 /* The MRI assembler accepts arbitrary underscores strewn about
4786 through the hex constant, so we ignore them as well. */
4787 if (*input_line_pointer == '_')
4789 ++input_line_pointer;
4795 as_warn (_("floating point constant too large"));
4798 d = hex_value (*input_line_pointer) << 4;
4799 ++input_line_pointer;
4800 while (*input_line_pointer == '_')
4801 ++input_line_pointer;
4802 if (hex_p (*input_line_pointer))
4804 d += hex_value (*input_line_pointer);
4805 ++input_line_pointer;
4807 if (target_big_endian)
4810 bytes[length - i - 1] = d;
4816 if (target_big_endian)
4817 memset (bytes + i, 0, length - i);
4819 memset (bytes, 0, length - i);
4827 CONStruct some more frag chars of .floats .ffloats etc.
4828 Makes 0 or more new frags.
4829 If need_pass_2 == 1, no frags are emitted.
4830 This understands only floating literals, not expressions. Sorry.
4832 A floating constant is defined by atof_generic(), except it is preceded
4833 by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its
4834 reading, I decided to be incompatible. This always tries to give you
4835 rounded bits to the precision of the pseudo-op. Former AS did premature
4836 truncation, restored noisy bits instead of trailing 0s AND gave you
4837 a choice of 2 flavours of noise according to which of 2 floating-point
4838 scanners you directed AS to use.
4840 In: input_line_pointer->whitespace before, or '0' of flonum. */
4843 float_cons (/* Clobbers input_line-pointer, checks end-of-line. */
4844 int float_type /* 'f':.ffloat ... 'F':.float ... */)
4847 int length; /* Number of chars in an object. */
4848 char *err; /* Error from scanning floating literal. */
4849 char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
4851 if (is_it_end_of_statement ())
4853 demand_empty_rest_of_line ();
4857 #ifdef md_flush_pending_output
4858 md_flush_pending_output ();
4861 #ifdef md_cons_align
4867 /* input_line_pointer->1st char of a flonum (we hope!). */
4870 /* Skip any 0{letter} that may be present. Don't even check if the
4871 letter is legal. Someone may invent a "z" format and this routine
4872 has no use for such information. Lusers beware: you get
4873 diagnostics if your input is ill-conditioned. */
4874 if (input_line_pointer[0] == '0'
4875 && ISALPHA (input_line_pointer[1]))
4876 input_line_pointer += 2;
4878 /* Accept :xxxx, where the x's are hex digits, for a floating
4879 point with the exact digits specified. */
4880 if (input_line_pointer[0] == ':')
4882 ++input_line_pointer;
4883 length = hex_float (float_type, temp);
4886 ignore_rest_of_line ();
4892 err = md_atof (float_type, temp, &length);
4893 know (length <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
4894 know (err != NULL || length > 0);
4897 as_bad (_("bad floating literal: %s"), err);
4898 ignore_rest_of_line ();
4909 #ifdef REPEAT_CONS_EXPRESSIONS
4910 if (*input_line_pointer == ':')
4912 expressionS count_exp;
4914 ++input_line_pointer;
4915 expression (&count_exp);
4917 if (count_exp.X_op != O_constant
4918 || count_exp.X_add_number <= 0)
4919 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4921 count = count_exp.X_add_number;
4925 while (--count >= 0)
4927 p = frag_more (length);
4928 memcpy (p, temp, (unsigned int) length);
4933 while (*input_line_pointer++ == ',');
4935 /* Put terminator back into stream. */
4936 --input_line_pointer;
4937 demand_empty_rest_of_line ();
4940 /* Return the size of a LEB128 value. */
4943 sizeof_sleb128 (offsetT value)
4950 byte = (value & 0x7f);
4951 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
4952 Fortunately, we can structure things so that the extra work reduces
4953 to a noop on systems that do things "properly". */
4954 value = (value >> 7) | ~(-(offsetT)1 >> 7);
4957 while (!(((value == 0) && ((byte & 0x40) == 0))
4958 || ((value == -1) && ((byte & 0x40) != 0))));
4964 sizeof_uleb128 (valueT value)
4979 sizeof_leb128 (valueT value, int sign)
4982 return sizeof_sleb128 ((offsetT) value);
4984 return sizeof_uleb128 (value);
4987 /* Output a LEB128 value. */
4990 output_sleb128 (char *p, offsetT value)
4997 unsigned byte = (value & 0x7f);
4999 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
5000 Fortunately, we can structure things so that the extra work reduces
5001 to a noop on systems that do things "properly". */
5002 value = (value >> 7) | ~(-(offsetT)1 >> 7);
5004 more = !((((value == 0) && ((byte & 0x40) == 0))
5005 || ((value == -1) && ((byte & 0x40) != 0))));
5017 output_uleb128 (char *p, valueT value)
5023 unsigned byte = (value & 0x7f);
5026 /* More bytes to follow. */
5037 output_leb128 (char *p, valueT value, int sign)
5040 return output_sleb128 (p, (offsetT) value);
5042 return output_uleb128 (p, value);
5045 /* Do the same for bignums. We combine sizeof with output here in that
5046 we don't output for NULL values of P. It isn't really as critical as
5047 for "normal" values that this be streamlined. */
5050 output_big_sleb128 (char *p, LITTLENUM_TYPE *bignum, int size)
5057 /* Strip leading sign extensions off the bignum. */
5059 && bignum[size - 1] == LITTLENUM_MASK
5060 && bignum[size - 2] > LITTLENUM_MASK / 2)
5065 /* OR in the next part of the littlenum. */
5066 val |= (*bignum << loaded);
5067 loaded += LITTLENUM_NUMBER_OF_BITS;
5071 /* Add bytes until there are less than 7 bits left in VAL
5072 or until every non-sign bit has been written. */
5079 || val != ((byte & 0x40) == 0 ? 0 : ((valueT) 1 << loaded) - 1))
5086 while ((byte & 0x80) != 0 && loaded >= 7);
5090 /* Mop up any left-over bits (of which there will be less than 7). */
5091 if ((byte & 0x80) != 0)
5093 /* Sign-extend VAL. */
5094 if (val & (1 << (loaded - 1)))
5095 val |= ~0U << loaded;
5105 output_big_uleb128 (char *p, LITTLENUM_TYPE *bignum, int size)
5112 /* Strip leading zeros off the bignum. */
5113 /* XXX: Is this needed? */
5114 while (size > 0 && bignum[size - 1] == 0)
5119 if (loaded < 7 && size > 0)
5121 val |= (*bignum << loaded);
5122 loaded += 8 * CHARS_PER_LITTLENUM;
5131 if (size > 0 || val)
5138 while (byte & 0x80);
5144 output_big_leb128 (char *p, LITTLENUM_TYPE *bignum, int size, int sign)
5147 return output_big_sleb128 (p, bignum, size);
5149 return output_big_uleb128 (p, bignum, size);
5152 /* Generate the appropriate fragments for a given expression to emit a
5156 emit_leb128_expr (expressionS *exp, int sign)
5158 operatorT op = exp->X_op;
5159 unsigned int nbytes;
5161 if (op == O_absent || op == O_illegal)
5163 as_warn (_("zero assumed for missing expression"));
5164 exp->X_add_number = 0;
5167 else if (op == O_big && exp->X_add_number <= 0)
5169 as_bad (_("floating point number invalid"));
5170 exp->X_add_number = 0;
5173 else if (op == O_register)
5175 as_warn (_("register value used as expression"));
5178 else if (op == O_constant
5180 && (exp->X_add_number < 0) == !exp->X_extrabit)
5182 /* We're outputting a signed leb128 and the sign of X_add_number
5183 doesn't reflect the sign of the original value. Convert EXP
5184 to a correctly-extended bignum instead. */
5185 convert_to_bignum (exp, exp->X_extrabit);
5189 /* Let check_eh_frame know that data is being emitted. nbytes == -1 is
5190 a signal that this is leb128 data. It shouldn't optimize this away. */
5191 nbytes = (unsigned int) -1;
5192 if (check_eh_frame (exp, &nbytes))
5195 /* Let the backend know that subsequent data may be byte aligned. */
5196 #ifdef md_cons_align
5200 if (op == O_constant)
5202 /* If we've got a constant, emit the thing directly right now. */
5204 valueT value = exp->X_add_number;
5208 size = sizeof_leb128 (value, sign);
5209 p = frag_more (size);
5210 output_leb128 (p, value, sign);
5212 else if (op == O_big)
5214 /* O_big is a different sort of constant. */
5219 size = output_big_leb128 (NULL, generic_bignum, exp->X_add_number, sign);
5220 p = frag_more (size);
5221 output_big_leb128 (p, generic_bignum, exp->X_add_number, sign);
5225 /* Otherwise, we have to create a variable sized fragment and
5226 resolve things later. */
5228 frag_var (rs_leb128, sizeof_uleb128 (~(valueT) 0), 0, sign,
5229 make_expr_symbol (exp), 0, (char *) NULL);
5233 /* Parse the .sleb128 and .uleb128 pseudos. */
5240 #ifdef md_flush_pending_output
5241 md_flush_pending_output ();
5247 emit_leb128_expr (&exp, sign);
5249 while (*input_line_pointer++ == ',');
5251 input_line_pointer--;
5252 demand_empty_rest_of_line ();
5256 stringer_append_char (int c, int bitsize)
5258 if (!target_big_endian)
5259 FRAG_APPEND_1_CHAR (c);
5264 FRAG_APPEND_1_CHAR (0);
5265 FRAG_APPEND_1_CHAR (0);
5266 FRAG_APPEND_1_CHAR (0);
5267 FRAG_APPEND_1_CHAR (0);
5270 FRAG_APPEND_1_CHAR (0);
5271 FRAG_APPEND_1_CHAR (0);
5274 FRAG_APPEND_1_CHAR (0);
5279 /* Called with invalid bitsize argument. */
5283 if (target_big_endian)
5284 FRAG_APPEND_1_CHAR (c);
5287 /* Worker to do .ascii etc statements.
5288 Reads 0 or more ',' separated, double-quoted strings.
5289 Caller should have checked need_pass_2 is FALSE because we don't
5291 Checks for end-of-line.
5292 BITS_APPENDZERO says how many bits are in a target char.
5293 The bottom bit is set if a NUL char should be appended to the strings. */
5296 stringer (int bits_appendzero)
5298 const int bitsize = bits_appendzero & ~7;
5299 const int append_zero = bits_appendzero & 1;
5301 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5305 #ifdef md_flush_pending_output
5306 md_flush_pending_output ();
5309 #ifdef md_cons_align
5313 /* The following awkward logic is to parse ZERO or more strings,
5314 comma separated. Recall a string expression includes spaces
5315 before the opening '\"' and spaces after the closing '\"'.
5316 We fake a leading ',' if there is (supposed to be)
5317 a 1st, expression. We keep demanding expressions for each ','. */
5318 if (is_it_end_of_statement ())
5320 c = 0; /* Skip loop. */
5321 ++input_line_pointer; /* Compensate for end of loop. */
5325 c = ','; /* Do loop. */
5327 /* If we have been switched into the abs_section then we
5328 will not have an obstack onto which we can hang strings. */
5329 if (now_seg == absolute_section)
5331 as_bad (_("strings must be placed into a section"));
5333 ignore_rest_of_line ();
5336 while (c == ',' || c == '<' || c == '"')
5339 switch (*input_line_pointer)
5342 ++input_line_pointer; /*->1st char of string. */
5343 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5344 start = input_line_pointer;
5347 while (is_a_char (c = next_char_of_string ()))
5348 stringer_append_char (c, bitsize);
5351 stringer_append_char (0, bitsize);
5353 know (input_line_pointer[-1] == '\"');
5355 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5356 /* In ELF, when gcc is emitting DWARF 1 debugging output, it
5357 will emit .string with a filename in the .debug section
5358 after a sequence of constants. See the comment in
5359 emit_expr for the sequence. emit_expr will set
5360 dwarf_file_string to non-zero if this string might be a
5361 source file name. */
5362 if (strcmp (segment_name (now_seg), ".debug") != 0)
5363 dwarf_file_string = 0;
5364 else if (dwarf_file_string)
5366 c = input_line_pointer[-1];
5367 input_line_pointer[-1] = '\0';
5368 listing_source_file (start);
5369 input_line_pointer[-1] = c;
5375 input_line_pointer++;
5376 c = get_single_number ();
5377 stringer_append_char (c, bitsize);
5378 if (*input_line_pointer != '>')
5379 as_bad (_("expected <nn>"));
5381 input_line_pointer++;
5384 input_line_pointer++;
5388 c = *input_line_pointer;
5391 demand_empty_rest_of_line ();
5394 /* FIXME-SOMEDAY: I had trouble here on characters with the
5395 high bits set. We'll probably also have trouble with
5396 multibyte chars, wide chars, etc. Also be careful about
5397 returning values bigger than 1 byte. xoxorich. */
5400 next_char_of_string (void)
5404 c = *input_line_pointer++ & CHAR_MASK;
5412 as_warn (_("unterminated string; newline inserted"));
5413 bump_line_counters ();
5416 #ifndef NO_STRING_ESCAPES
5418 switch (c = *input_line_pointer++ & CHAR_MASK)
5446 break; /* As itself. */
5462 for (i = 0, number = 0;
5463 ISDIGIT (c) && i < 3;
5464 c = *input_line_pointer++, i++)
5466 number = number * 8 + c - '0';
5469 c = number & CHAR_MASK;
5471 --input_line_pointer;
5480 c = *input_line_pointer++;
5481 while (ISXDIGIT (c))
5484 number = number * 16 + c - '0';
5485 else if (ISUPPER (c))
5486 number = number * 16 + c - 'A' + 10;
5488 number = number * 16 + c - 'a' + 10;
5489 c = *input_line_pointer++;
5491 c = number & CHAR_MASK;
5492 --input_line_pointer;
5497 /* To be compatible with BSD 4.2 as: give the luser a linefeed!! */
5498 as_warn (_("unterminated string; newline inserted"));
5500 bump_line_counters ();
5505 #ifdef ONLY_STANDARD_ESCAPES
5506 as_bad (_("bad escaped character in string"));
5508 #endif /* ONLY_STANDARD_ESCAPES */
5513 #endif /* ! defined (NO_STRING_ESCAPES) */
5522 get_segmented_expression (expressionS *expP)
5526 retval = expression (expP);
5527 if (expP->X_op == O_illegal
5528 || expP->X_op == O_absent
5529 || expP->X_op == O_big)
5531 as_bad (_("expected address expression"));
5532 expP->X_op = O_constant;
5533 expP->X_add_number = 0;
5534 retval = absolute_section;
5540 get_known_segmented_expression (expressionS *expP)
5542 segT retval = get_segmented_expression (expP);
5544 if (retval == undefined_section)
5546 /* There is no easy way to extract the undefined symbol from the
5548 if (expP->X_add_symbol != NULL
5549 && S_GET_SEGMENT (expP->X_add_symbol) != expr_section)
5550 as_warn (_("symbol \"%s\" undefined; zero assumed"),
5551 S_GET_NAME (expP->X_add_symbol));
5553 as_warn (_("some symbol undefined; zero assumed"));
5554 retval = absolute_section;
5555 expP->X_op = O_constant;
5556 expP->X_add_number = 0;
5561 char /* Return terminator. */
5562 get_absolute_expression_and_terminator (long *val_pointer /* Return value of expression. */)
5564 /* FIXME: val_pointer should probably be offsetT *. */
5565 *val_pointer = (long) get_absolute_expression ();
5566 return (*input_line_pointer++);
5569 /* Like demand_copy_string, but return NULL if the string contains any '\0's.
5570 Give a warning if that happens. */
5573 demand_copy_C_string (int *len_pointer)
5577 if ((s = demand_copy_string (len_pointer)) != 0)
5581 for (len = *len_pointer; len > 0; len--)
5588 as_bad (_("this string may not contain \'\\0\'"));
5596 /* Demand string, but return a safe (=private) copy of the string.
5597 Return NULL if we can't read a string here. */
5600 demand_copy_string (int *lenP)
5608 if (*input_line_pointer == '\"')
5610 input_line_pointer++; /* Skip opening quote. */
5612 while (is_a_char (c = next_char_of_string ()))
5614 obstack_1grow (¬es, c);
5617 /* JF this next line is so demand_copy_C_string will return a
5618 null terminated string. */
5619 obstack_1grow (¬es, '\0');
5620 retval = (char *) obstack_finish (¬es);
5624 as_bad (_("missing string"));
5626 ignore_rest_of_line ();
5632 /* In: Input_line_pointer->next character.
5634 Do: Skip input_line_pointer over all whitespace.
5636 Out: 1 if input_line_pointer->end-of-line. */
5639 is_it_end_of_statement (void)
5642 return (is_end_of_line[(unsigned char) *input_line_pointer]);
5646 equals (char *sym_name, int reassign)
5651 input_line_pointer++;
5652 if (*input_line_pointer == '=')
5653 input_line_pointer++;
5654 if (reassign < 0 && *input_line_pointer == '=')
5655 input_line_pointer++;
5657 while (*input_line_pointer == ' ' || *input_line_pointer == '\t')
5658 input_line_pointer++;
5661 stop = mri_comment_field (&stopc);
5663 assign_symbol (sym_name, reassign >= 0 ? !reassign : reassign);
5667 demand_empty_rest_of_line ();
5668 mri_comment_end (stop, stopc);
5672 /* .incbin -- include a file verbatim at the current location. */
5675 s_incbin (int x ATTRIBUTE_UNUSED)
5686 #ifdef md_flush_pending_output
5687 md_flush_pending_output ();
5690 #ifdef md_cons_align
5695 filename = demand_copy_string (& len);
5696 if (filename == NULL)
5701 /* Look for optional skip and count. */
5702 if (* input_line_pointer == ',')
5704 ++ input_line_pointer;
5705 skip = get_absolute_expression ();
5709 if (* input_line_pointer == ',')
5711 ++ input_line_pointer;
5713 count = get_absolute_expression ();
5715 as_warn (_(".incbin count zero, ignoring `%s'"), filename);
5721 demand_empty_rest_of_line ();
5723 /* Try opening absolute path first, then try include dirs. */
5724 binfile = fopen (filename, FOPEN_RB);
5725 if (binfile == NULL)
5729 path = (char *) xmalloc ((unsigned long) len + include_dir_maxlen + 5);
5731 for (i = 0; i < include_dir_count; i++)
5733 sprintf (path, "%s/%s", include_dirs[i], filename);
5735 binfile = fopen (path, FOPEN_RB);
5736 if (binfile != NULL)
5740 if (binfile == NULL)
5741 as_bad (_("file not found: %s"), filename);
5744 path = xstrdup (filename);
5750 register_dependency (path);
5752 /* Compute the length of the file. */
5753 if (fseek (binfile, 0, SEEK_END) != 0)
5755 as_bad (_("seek to end of .incbin file failed `%s'"), path);
5758 file_len = ftell (binfile);
5760 /* If a count was not specified use the remainder of the file. */
5762 count = file_len - skip;
5764 if (skip < 0 || count < 0 || file_len < 0 || skip + count > file_len)
5766 as_bad (_("skip (%ld) or count (%ld) invalid for file size (%ld)"),
5767 skip, count, file_len);
5771 if (fseek (binfile, skip, SEEK_SET) != 0)
5773 as_bad (_("could not skip to %ld in file `%s'"), skip, path);
5777 /* Allocate frag space and store file contents in it. */
5778 binfrag = frag_more (count);
5780 bytes = fread (binfrag, 1, count, binfile);
5782 as_warn (_("truncated file `%s', %ld of %ld bytes read"),
5783 path, bytes, count);
5786 if (binfile != NULL)
5792 /* .include -- include a file at this point. */
5795 s_include (int arg ATTRIBUTE_UNUSED)
5804 filename = demand_copy_string (&i);
5805 if (filename == NULL)
5807 /* demand_copy_string has already printed an error and
5808 called ignore_rest_of_line. */
5816 while (!is_end_of_line[(unsigned char) *input_line_pointer]
5817 && *input_line_pointer != ' '
5818 && *input_line_pointer != '\t')
5820 obstack_1grow (¬es, *input_line_pointer);
5821 ++input_line_pointer;
5825 obstack_1grow (¬es, '\0');
5826 filename = (char *) obstack_finish (¬es);
5827 while (!is_end_of_line[(unsigned char) *input_line_pointer])
5828 ++input_line_pointer;
5831 demand_empty_rest_of_line ();
5832 path = (char *) xmalloc ((unsigned long) i
5833 + include_dir_maxlen + 5 /* slop */ );
5835 for (i = 0; i < include_dir_count; i++)
5837 strcpy (path, include_dirs[i]);
5839 strcat (path, filename);
5840 if (0 != (try_file = fopen (path, FOPEN_RT)))
5850 /* malloc Storage leak when file is found on path. FIXME-SOMEDAY. */
5851 register_dependency (path);
5852 input_scrub_insert_file (path);
5856 add_include_dir (char *path)
5860 if (include_dir_count == 0)
5862 include_dirs = (char **) xmalloc (2 * sizeof (*include_dirs));
5863 include_dirs[0] = "."; /* Current dir. */
5864 include_dir_count = 2;
5868 include_dir_count++;
5870 (char **) xrealloc (include_dirs,
5871 include_dir_count * sizeof (*include_dirs));
5874 include_dirs[include_dir_count - 1] = path; /* New one. */
5877 if (i > include_dir_maxlen)
5878 include_dir_maxlen = i;
5881 /* Output debugging information to denote the source file. */
5884 generate_file_debug (void)
5886 if (debug_type == DEBUG_STABS)
5887 stabs_generate_asm_file ();
5890 /* Output line number debugging information for the current source line. */
5893 generate_lineno_debug (void)
5897 case DEBUG_UNSPECIFIED:
5902 stabs_generate_asm_lineno ();
5905 ecoff_generate_asm_lineno ();
5908 /* ??? We could here indicate to dwarf2dbg.c that something
5909 has changed. However, since there is additional backend
5910 support that is required (calling dwarf2_emit_insn), we
5911 let dwarf2dbg.c call as_where on its own. */
5916 /* Output debugging information to mark a function entry point or end point.
5917 END_P is zero for .func, and non-zero for .endfunc. */
5922 do_s_func (end_p, NULL);
5925 /* Subroutine of s_func so targets can choose a different default prefix.
5926 If DEFAULT_PREFIX is NULL, use the target's "leading char". */
5929 do_s_func (int end_p, const char *default_prefix)
5931 /* Record the current function so that we can issue an error message for
5932 misplaced .func,.endfunc, and also so that .endfunc needs no
5934 static char *current_name;
5935 static char *current_label;
5939 if (current_name == NULL)
5941 as_bad (_("missing .func"));
5942 ignore_rest_of_line ();
5946 if (debug_type == DEBUG_STABS)
5947 stabs_generate_asm_endfunc (current_name, current_label);
5949 current_name = current_label = NULL;
5954 char delim1, delim2;
5956 if (current_name != NULL)
5958 as_bad (_(".endfunc missing for previous .func"));
5959 ignore_rest_of_line ();
5963 delim1 = get_symbol_name (& name);
5964 name = xstrdup (name);
5965 *input_line_pointer = delim1;
5966 SKIP_WHITESPACE_AFTER_NAME ();
5967 if (*input_line_pointer != ',')
5971 if (asprintf (&label, "%s%s", default_prefix, name) == -1)
5972 as_fatal ("%s", xstrerror (errno));
5976 char leading_char = bfd_get_symbol_leading_char (stdoutput);
5977 /* Missing entry point, use function's name with the leading
5981 if (asprintf (&label, "%c%s", leading_char, name) == -1)
5982 as_fatal ("%s", xstrerror (errno));
5990 ++input_line_pointer;
5992 delim2 = get_symbol_name (& label);
5993 label = xstrdup (label);
5994 restore_line_pointer (delim2);
5997 if (debug_type == DEBUG_STABS)
5998 stabs_generate_asm_func (name, label);
6000 current_name = name;
6001 current_label = label;
6004 demand_empty_rest_of_line ();
6007 #ifdef HANDLE_BUNDLE
6010 s_bundle_align_mode (int arg ATTRIBUTE_UNUSED)
6012 unsigned int align = get_absolute_expression ();
6014 demand_empty_rest_of_line ();
6016 if (align > (unsigned int) TC_ALIGN_LIMIT)
6017 as_fatal (_(".bundle_align_mode alignment too large (maximum %u)"),
6018 (unsigned int) TC_ALIGN_LIMIT);
6020 if (bundle_lock_frag != NULL)
6022 as_bad (_("cannot change .bundle_align_mode inside .bundle_lock"));
6026 bundle_align_p2 = align;
6030 s_bundle_lock (int arg ATTRIBUTE_UNUSED)
6032 demand_empty_rest_of_line ();
6034 if (bundle_align_p2 == 0)
6036 as_bad (_(".bundle_lock is meaningless without .bundle_align_mode"));
6040 if (bundle_lock_depth == 0)
6042 bundle_lock_frchain = frchain_now;
6043 bundle_lock_frag = start_bundle ();
6045 ++bundle_lock_depth;
6049 s_bundle_unlock (int arg ATTRIBUTE_UNUSED)
6053 demand_empty_rest_of_line ();
6055 if (bundle_lock_frag == NULL)
6057 as_bad (_(".bundle_unlock without preceding .bundle_lock"));
6061 gas_assert (bundle_align_p2 > 0);
6063 gas_assert (bundle_lock_depth > 0);
6064 if (--bundle_lock_depth > 0)
6067 size = pending_bundle_size (bundle_lock_frag);
6069 if (size > (1U << bundle_align_p2))
6070 as_bad (_(".bundle_lock sequence is %u bytes, but bundle size only %u"),
6071 size, 1 << bundle_align_p2);
6073 finish_bundle (bundle_lock_frag, size);
6075 bundle_lock_frag = NULL;
6076 bundle_lock_frchain = NULL;
6079 #endif /* HANDLE_BUNDLE */
6082 s_ignore (int arg ATTRIBUTE_UNUSED)
6084 ignore_rest_of_line ();
6088 read_print_statistics (FILE *file)
6090 hash_print_statistics (file, "pseudo-op table", po_hash);
6093 /* Inserts the given line into the input stream.
6095 This call avoids macro/conditionals nesting checking, since the contents of
6096 the line are assumed to replace the contents of a line already scanned.
6098 An appropriate use of this function would be substitution of input lines when
6099 called by md_start_line_hook(). The given line is assumed to already be
6100 properly scrubbed. */
6103 input_scrub_insert_line (const char *line)
6106 size_t len = strlen (line);
6107 sb_build (&newline, len);
6108 sb_add_buffer (&newline, line, len);
6109 input_scrub_include_sb (&newline, input_line_pointer, 0);
6111 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
6114 /* Insert a file into the input stream; the path must resolve to an actual
6115 file; no include path searching or dependency registering is performed. */
6118 input_scrub_insert_file (char *path)
6120 input_scrub_include_file (path, input_line_pointer);
6121 buffer_limit = input_scrub_next_buffer (&input_line_pointer);
6124 /* Find the end of a line, considering quotation and escaping of quotes. */
6126 #if !defined(TC_SINGLE_QUOTE_STRINGS) && defined(SINGLE_QUOTE_STRINGS)
6127 # define TC_SINGLE_QUOTE_STRINGS 1
6131 _find_end_of_line (char *s, int mri_string, int insn ATTRIBUTE_UNUSED,
6134 char inquote = '\0';
6137 while (!is_end_of_line[(unsigned char) *s]
6138 || (inquote && !ISCNTRL (*s))
6139 || (inquote == '\'' && flag_mri)
6140 #ifdef TC_EOL_IN_INSN
6141 || (insn && TC_EOL_IN_INSN (s))
6143 /* PR 6926: When we are parsing the body of a macro the sequence
6144 \@ is special - it refers to the invocation count. If the @
6145 character happens to be registered as a line-separator character
6146 by the target, then the is_end_of_line[] test above will have
6147 returned true, but we need to ignore the line separating
6148 semantics in this particular case. */
6149 || (in_macro && inescape && *s == '@')
6152 if (mri_string && *s == '\'')
6156 else if (*s == '\\')
6160 #ifdef TC_SINGLE_QUOTE_STRINGS
6161 || (TC_SINGLE_QUOTE_STRINGS && *s == '\'')
6168 as_warn (_("missing closing `%c'"), inquote);
6169 if (inescape && !ignore_input ())
6170 as_warn (_("stray `\\'"));
6175 find_end_of_line (char *s, int mri_string)
6177 return _find_end_of_line (s, mri_string, 0, 0);