Avoid setting or recording negative alignments when the target stores multiple octets...
[external/binutils.git] / gas / read.c
1 /* read.c - read a source file -
2    Copyright (C) 1986-2016 Free Software Foundation, Inc.
3
4    This file is part of GAS, the GNU Assembler.
5
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)
9    any later version.
10
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.
15
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
19    02110-1301, USA.  */
20
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)
25
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)
29
30 /* Routines that read assembler source text to build spaghetti in memory.
31    Another group of these functions is in the expr.c module.  */
32
33 #include "as.h"
34 #include "safe-ctype.h"
35 #include "subsegs.h"
36 #include "sb.h"
37 #include "macro.h"
38 #include "obstack.h"
39 #include "ecoff.h"
40 #include "dw2gencfi.h"
41 #include "wchar.h"
42
43 #ifndef TC_START_LABEL
44 #define TC_START_LABEL(STR, NUL_CHAR, NEXT_CHAR) (NEXT_CHAR == ':')
45 #endif
46
47 /* Set by the object-format or the target.  */
48 #ifndef TC_IMPLICIT_LCOMM_ALIGNMENT
49 #define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR)                \
50   do                                                            \
51     {                                                           \
52       if ((SIZE) >= 8)                                          \
53         (P2VAR) = 3;                                            \
54       else if ((SIZE) >= 4)                                     \
55         (P2VAR) = 2;                                            \
56       else if ((SIZE) >= 2)                                     \
57         (P2VAR) = 1;                                            \
58       else                                                      \
59         (P2VAR) = 0;                                            \
60     }                                                           \
61   while (0)
62 #endif
63
64 char *input_line_pointer;       /*->next char of source file to parse.  */
65
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!)!  */
69 die horribly;
70 #endif
71
72 #ifndef LEX_AT
73 #define LEX_AT 0
74 #endif
75
76 #ifndef LEX_BR
77 /* The RS/6000 assembler uses {,},[,] as parts of symbol names.  */
78 #define LEX_BR 0
79 #endif
80
81 #ifndef LEX_PCT
82 /* The Delta 68k assembler permits % inside label names.  */
83 #define LEX_PCT 0
84 #endif
85
86 #ifndef LEX_QM
87 /* The PowerPC Windows NT assemblers permits ? inside label names.  */
88 #define LEX_QM 0
89 #endif
90
91 #ifndef LEX_HASH
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.  */
94 #define LEX_HASH 0
95 #endif
96
97 #ifndef LEX_DOLLAR
98 #define LEX_DOLLAR 3
99 #endif
100
101 #ifndef LEX_TILDE
102 /* The Delta 68k assembler permits ~ at start of label names.  */
103 #define LEX_TILDE 0
104 #endif
105
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
124 };
125
126 /* In: a character.
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] = {
130 #ifdef CR_EOL
131   1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,       /* @abcdefghijklmno */
132 #else
133   1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,       /* @abcdefghijklmno */
134 #endif
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        /* */
150 };
151
152 #ifndef TC_CASE_SENSITIVE
153 char original_case_string[128];
154 #endif
155
156 /* Functions private to this file.  */
157
158 static char *buffer;    /* 1st char of each buffer of lines is here.  */
159 static char *buffer_limit;      /*->1 + last char in buffer.  */
160
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
163    internals manual.  */
164 int target_big_endian = TARGET_BYTES_BIG_ENDIAN;
165
166 /* Variables for handling include file directory table.  */
167
168 /* Table of pointers to directories to search for .include's.  */
169 char **include_dirs;
170
171 /* How many are in the table.  */
172 int include_dir_count;
173
174 /* Length of longest in table.  */
175 int include_dir_maxlen = 1;
176
177 #ifndef WORKING_DOT_WORD
178 struct broken_word *broken_words;
179 int new_broken_words;
180 #endif
181
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;
186
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.  */
189 symbolS *line_label;
190
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;
195
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
199    may be needed.  */
200 static int mri_pending_align;
201
202 #ifndef NO_LISTING
203 #ifdef OBJ_ELF
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;
208 #endif
209 #endif
210
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
215 #endif
216
217 #ifdef 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;
222
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;
234
235 /* This is incremented by .bundle_lock and decremented by .bundle_unlock,
236    to allow nesting.  */
237 static unsigned int bundle_lock_depth;
238 #endif
239
240 static void do_s_func (int end_p, const char *default_prefix);
241 static void s_align (int, int);
242 static void s_altmacro (int);
243 static void s_bad_end (int);
244 static void s_reloc (int);
245 static int hex_float (int, char *);
246 static segT get_known_segmented_expression (expressionS * expP);
247 static void pobegin (void);
248 static size_t get_non_macro_line_sb (sb *);
249 static void generate_file_debug (void);
250 static char *_find_end_of_line (char *, int, int, int);
251 \f
252 void
253 read_begin (void)
254 {
255   const char *p;
256
257   pobegin ();
258   obj_read_begin_hook ();
259
260   /* Something close -- but not too close -- to a multiple of 1024.
261      The debugging malloc I'm using has 24 bytes of overhead.  */
262   obstack_begin (&notes, chunksize);
263   obstack_begin (&cond_obstack, chunksize);
264
265 #ifndef tc_line_separator_chars
266 #define tc_line_separator_chars line_separator_chars
267 #endif
268   /* Use machine dependent syntax.  */
269   for (p = tc_line_separator_chars; *p; p++)
270     is_end_of_line[(unsigned char) *p] = 2;
271   /* Use more.  FIXME-SOMEDAY.  */
272
273   if (flag_mri)
274     lex_type['?'] = 3;
275 }
276 \f
277 #ifndef TC_ADDRESS_BYTES
278 #define TC_ADDRESS_BYTES address_bytes
279
280 static inline int
281 address_bytes (void)
282 {
283   /* Choose smallest of 1, 2, 4, 8 bytes that is large enough to
284      contain an address.  */
285   int n = (stdoutput->arch_info->bits_per_address - 1) / 8;
286   n |= n >> 1;
287   n |= n >> 2;
288   n += 1;
289   return n;
290 }
291 #endif
292
293 /* Set up pseudo-op tables.  */
294
295 static struct hash_control *po_hash;
296
297 static const pseudo_typeS potable[] = {
298   {"abort", s_abort, 0},
299   {"align", s_align_ptwo, 0},
300   {"altmacro", s_altmacro, 1},
301   {"ascii", stringer, 8+0},
302   {"asciz", stringer, 8+1},
303   {"balign", s_align_bytes, 0},
304   {"balignw", s_align_bytes, -2},
305   {"balignl", s_align_bytes, -4},
306 /* block  */
307 #ifdef HANDLE_BUNDLE
308   {"bundle_align_mode", s_bundle_align_mode, 0},
309   {"bundle_lock", s_bundle_lock, 0},
310   {"bundle_unlock", s_bundle_unlock, 0},
311 #endif
312   {"byte", cons, 1},
313   {"comm", s_comm, 0},
314   {"common", s_mri_common, 0},
315   {"common.s", s_mri_common, 1},
316   {"data", s_data, 0},
317   {"dc", cons, 2},
318 #ifdef TC_ADDRESS_BYTES
319   {"dc.a", cons, 0},
320 #endif
321   {"dc.b", cons, 1},
322   {"dc.d", float_cons, 'd'},
323   {"dc.l", cons, 4},
324   {"dc.s", float_cons, 'f'},
325   {"dc.w", cons, 2},
326   {"dc.x", float_cons, 'x'},
327   {"dcb", s_space, 2},
328   {"dcb.b", s_space, 1},
329   {"dcb.d", s_float_space, 'd'},
330   {"dcb.l", s_space, 4},
331   {"dcb.s", s_float_space, 'f'},
332   {"dcb.w", s_space, 2},
333   {"dcb.x", s_float_space, 'x'},
334   {"ds", s_space, 2},
335   {"ds.b", s_space, 1},
336   {"ds.d", s_space, 8},
337   {"ds.l", s_space, 4},
338   {"ds.p", s_space, 12},
339   {"ds.s", s_space, 4},
340   {"ds.w", s_space, 2},
341   {"ds.x", s_space, 12},
342   {"debug", s_ignore, 0},
343 #ifdef S_SET_DESC
344   {"desc", s_desc, 0},
345 #endif
346 /* dim  */
347   {"double", float_cons, 'd'},
348 /* dsect  */
349   {"eject", listing_eject, 0},  /* Formfeed listing.  */
350   {"else", s_else, 0},
351   {"elsec", s_else, 0},
352   {"elseif", s_elseif, (int) O_ne},
353   {"end", s_end, 0},
354   {"endc", s_endif, 0},
355   {"endfunc", s_func, 1},
356   {"endif", s_endif, 0},
357   {"endm", s_bad_end, 0},
358   {"endr", s_bad_end, 1},
359 /* endef  */
360   {"equ", s_set, 0},
361   {"equiv", s_set, 1},
362   {"eqv", s_set, -1},
363   {"err", s_err, 0},
364   {"error", s_errwarn, 1},
365   {"exitm", s_mexit, 0},
366 /* extend  */
367   {"extern", s_ignore, 0},      /* We treat all undef as ext.  */
368   {"appfile", s_app_file, 1},
369   {"appline", s_app_line, 1},
370   {"fail", s_fail, 0},
371   {"file", s_app_file, 0},
372   {"fill", s_fill, 0},
373   {"float", float_cons, 'f'},
374   {"format", s_ignore, 0},
375   {"func", s_func, 0},
376   {"global", s_globl, 0},
377   {"globl", s_globl, 0},
378   {"hword", cons, 2},
379   {"if", s_if, (int) O_ne},
380   {"ifb", s_ifb, 1},
381   {"ifc", s_ifc, 0},
382   {"ifdef", s_ifdef, 0},
383   {"ifeq", s_if, (int) O_eq},
384   {"ifeqs", s_ifeqs, 0},
385   {"ifge", s_if, (int) O_ge},
386   {"ifgt", s_if, (int) O_gt},
387   {"ifle", s_if, (int) O_le},
388   {"iflt", s_if, (int) O_lt},
389   {"ifnb", s_ifb, 0},
390   {"ifnc", s_ifc, 1},
391   {"ifndef", s_ifdef, 1},
392   {"ifne", s_if, (int) O_ne},
393   {"ifnes", s_ifeqs, 1},
394   {"ifnotdef", s_ifdef, 1},
395   {"incbin", s_incbin, 0},
396   {"include", s_include, 0},
397   {"int", cons, 4},
398   {"irp", s_irp, 0},
399   {"irep", s_irp, 0},
400   {"irpc", s_irp, 1},
401   {"irepc", s_irp, 1},
402   {"lcomm", s_lcomm, 0},
403   {"lflags", s_ignore, 0},      /* Listing flags.  */
404   {"linefile", s_app_line, 0},
405   {"linkonce", s_linkonce, 0},
406   {"list", listing_list, 1},    /* Turn listing on.  */
407   {"llen", listing_psize, 1},
408   {"long", cons, 4},
409   {"lsym", s_lsym, 0},
410   {"macro", s_macro, 0},
411   {"mexit", s_mexit, 0},
412   {"mri", s_mri, 0},
413   {".mri", s_mri, 0},   /* Special case so .mri works in MRI mode.  */
414   {"name", s_ignore, 0},
415   {"noaltmacro", s_altmacro, 0},
416   {"noformat", s_ignore, 0},
417   {"nolist", listing_list, 0},  /* Turn listing off.  */
418   {"nopage", listing_nopage, 0},
419   {"octa", cons, 16},
420   {"offset", s_struct, 0},
421   {"org", s_org, 0},
422   {"p2align", s_align_ptwo, 0},
423   {"p2alignw", s_align_ptwo, -2},
424   {"p2alignl", s_align_ptwo, -4},
425   {"page", listing_eject, 0},
426   {"plen", listing_psize, 0},
427   {"print", s_print, 0},
428   {"psize", listing_psize, 0},  /* Set paper size.  */
429   {"purgem", s_purgem, 0},
430   {"quad", cons, 8},
431   {"reloc", s_reloc, 0},
432   {"rep", s_rept, 0},
433   {"rept", s_rept, 0},
434   {"rva", s_rva, 4},
435   {"sbttl", listing_title, 1},  /* Subtitle of listing.  */
436 /* scl  */
437 /* sect  */
438   {"set", s_set, 0},
439   {"short", cons, 2},
440   {"single", float_cons, 'f'},
441 /* size  */
442   {"space", s_space, 0},
443   {"skip", s_space, 0},
444   {"sleb128", s_leb128, 1},
445   {"spc", s_ignore, 0},
446   {"stabd", s_stab, 'd'},
447   {"stabn", s_stab, 'n'},
448   {"stabs", s_stab, 's'},
449   {"string", stringer, 8+1},
450   {"string8", stringer, 8+1},
451   {"string16", stringer, 16+1},
452   {"string32", stringer, 32+1},
453   {"string64", stringer, 64+1},
454   {"struct", s_struct, 0},
455 /* tag  */
456   {"text", s_text, 0},
457
458   /* This is for gcc to use.  It's only just been added (2/94), so gcc
459      won't be able to use it for a while -- probably a year or more.
460      But once this has been released, check with gcc maintainers
461      before deleting it or even changing the spelling.  */
462   {"this_GCC_requires_the_GNU_assembler", s_ignore, 0},
463   /* If we're folding case -- done for some targets, not necessarily
464      all -- the above string in an input file will be converted to
465      this one.  Match it either way...  */
466   {"this_gcc_requires_the_gnu_assembler", s_ignore, 0},
467
468   {"title", listing_title, 0},  /* Listing title.  */
469   {"ttl", listing_title, 0},
470 /* type  */
471   {"uleb128", s_leb128, 0},
472 /* use  */
473 /* val  */
474   {"xcom", s_comm, 0},
475   {"xdef", s_globl, 0},
476   {"xref", s_ignore, 0},
477   {"xstabs", s_xstab, 's'},
478   {"warning", s_errwarn, 0},
479   {"weakref", s_weakref, 0},
480   {"word", cons, 2},
481   {"zero", s_space, 0},
482   {NULL, NULL, 0}                       /* End sentinel.  */
483 };
484
485 static offsetT
486 get_absolute_expr (expressionS *exp)
487 {
488   expression_and_evaluate (exp);
489
490   if (exp->X_op != O_constant)
491     {
492       if (exp->X_op != O_absent)
493         as_bad (_("bad or irreducible absolute expression"));
494       exp->X_add_number = 0;
495     }
496   return exp->X_add_number;
497 }
498
499 offsetT
500 get_absolute_expression (void)
501 {
502   expressionS exp;
503
504   return get_absolute_expr (&exp);
505 }
506
507 static int pop_override_ok = 0;
508 static const char *pop_table_name;
509
510 void
511 pop_insert (const pseudo_typeS *table)
512 {
513   const char *errtxt;
514   const pseudo_typeS *pop;
515   for (pop = table; pop->poc_name; pop++)
516     {
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,
520                   errtxt);
521     }
522 }
523
524 #ifndef md_pop_insert
525 #define md_pop_insert()         pop_insert(md_pseudo_table)
526 #endif
527
528 #ifndef obj_pop_insert
529 #define obj_pop_insert()        pop_insert(obj_pseudo_table)
530 #endif
531
532 #ifndef cfi_pop_insert
533 #define cfi_pop_insert()        pop_insert(cfi_pseudo_table)
534 #endif
535
536 static void
537 pobegin (void)
538 {
539   po_hash = hash_new ();
540
541   /* Do the target-specific pseudo ops.  */
542   pop_table_name = "md";
543   md_pop_insert ();
544
545   /* Now object specific.  Skip any that were in the target table.  */
546   pop_table_name = "obj";
547   pop_override_ok = 1;
548   obj_pop_insert ();
549
550   /* Now portable ones.  Skip any that we've seen already.  */
551   pop_table_name = "standard";
552   pop_insert (potable);
553
554   /* Now CFI ones.  */
555   pop_table_name = "cfi";
556   pop_override_ok = 1;
557   cfi_pop_insert ();
558 }
559 \f
560 #define HANDLE_CONDITIONAL_ASSEMBLY(num_read)                           \
561   if (ignore_input ())                                                  \
562     {                                                                   \
563       char *eol = find_end_of_line (input_line_pointer - (num_read),    \
564                                     flag_m68k_mri);                     \
565       input_line_pointer = (input_line_pointer <= buffer_limit          \
566                             && eol >= buffer_limit)                     \
567                            ? buffer_limit                               \
568                            : eol + 1;                                   \
569       continue;                                                         \
570     }
571
572 /* This function is used when scrubbing the characters between #APP
573    and #NO_APP.  */
574
575 static char *scrub_string;
576 static char *scrub_string_end;
577
578 static size_t
579 scrub_from_string (char *buf, size_t buflen)
580 {
581   size_t copy;
582
583   copy = scrub_string_end - scrub_string;
584   if (copy > buflen)
585     copy = buflen;
586   memcpy (buf, scrub_string, copy);
587   scrub_string += copy;
588   return copy;
589 }
590
591 /* Helper function of read_a_source_file, which tries to expand a macro.  */
592 static int
593 try_macro (char term, const char *line)
594 {
595   sb out;
596   const char *err;
597   macro_entry *macro;
598
599   if (check_macro (line, &out, &err, &macro))
600     {
601       if (err != NULL)
602         as_bad ("%s", err);
603       *input_line_pointer++ = term;
604       input_scrub_include_sb (&out,
605                               input_line_pointer, 1);
606       sb_kill (&out);
607       buffer_limit =
608         input_scrub_next_buffer (&input_line_pointer);
609 #ifdef md_macro_info
610       md_macro_info (macro);
611 #endif
612       return 1;
613     }
614   return 0;
615 }
616
617 #ifdef HANDLE_BUNDLE
618 /* Start a new instruction bundle.  Returns the rs_align_code frag that
619    will be used to align the new bundle.  */
620 static fragS *
621 start_bundle (void)
622 {
623   fragS *frag = frag_now;
624
625   frag_align_code (0, 0);
626
627   while (frag->fr_type != rs_align_code)
628     frag = frag->fr_next;
629
630   gas_assert (frag != frag_now);
631
632   return frag;
633 }
634
635 /* Calculate the maximum size after relaxation of the region starting
636    at the given frag and extending through frag_now (which is unfinished).  */
637 static unsigned int
638 pending_bundle_size (fragS *frag)
639 {
640   unsigned int offset = frag->fr_fix;
641   unsigned int size = 0;
642
643   gas_assert (frag != frag_now);
644   gas_assert (frag->fr_type == rs_align_code);
645
646   while (frag != frag_now)
647     {
648       /* This should only happen in what will later become an error case.  */
649       if (frag == NULL)
650         return 0;
651
652       size += frag->fr_fix;
653       if (frag->fr_type == rs_machine_dependent)
654         size += md_frag_max_var (frag);
655
656       frag = frag->fr_next;
657     }
658
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);
663
664   gas_assert (size >= offset);
665
666   return size - offset;
667 }
668
669 /* Finish off the frag created to ensure bundle alignment.  */
670 static void
671 finish_bundle (fragS *frag, unsigned int size)
672 {
673   gas_assert (bundle_align_p2 > 0);
674   gas_assert (frag->fr_type == rs_align_code);
675
676   if (size > 1)
677     {
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;
683     }
684
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   if (bundle_align_p2 > OCTETS_PER_BYTE_POWER)
689     record_alignment (now_seg, bundle_align_p2 - OCTETS_PER_BYTE_POWER);
690 }
691
692 /* Assemble one instruction.  This takes care of the bundle features
693    around calling md_assemble.  */
694 static void
695 assemble_one (char *line)
696 {
697   fragS *insn_start_frag = NULL;
698
699   if (bundle_lock_frchain != NULL && bundle_lock_frchain != frchain_now)
700     {
701       as_bad (_("cannot change section or subsection inside .bundle_lock"));
702       /* Clearing this serves as a marker that we have already complained.  */
703       bundle_lock_frchain = NULL;
704     }
705
706   if (bundle_lock_frchain == NULL && bundle_align_p2 > 0)
707     insn_start_frag = start_bundle ();
708
709   md_assemble (line);
710
711   if (bundle_lock_frchain != NULL)
712     {
713       /* Make sure this hasn't pushed the locked sequence
714          past the bundle size.  */
715       unsigned int bundle_size = pending_bundle_size (bundle_lock_frag);
716       if (bundle_size > (1U << bundle_align_p2))
717         as_bad (_("\
718 .bundle_lock sequence at %u bytes but .bundle_align_mode limit is %u bytes"),
719                 bundle_size, 1U << bundle_align_p2);
720     }
721   else if (bundle_align_p2 > 0)
722     {
723       unsigned int insn_size = pending_bundle_size (insn_start_frag);
724
725       if (insn_size > (1U << bundle_align_p2))
726         as_bad (_("\
727 single instruction is %u bytes long but .bundle_align_mode limit is %u"),
728                 (unsigned int) insn_size, 1U << bundle_align_p2);
729
730       finish_bundle (insn_start_frag, insn_size);
731     }
732 }
733
734 #else  /* !HANDLE_BUNDLE */
735
736 # define assemble_one(line) md_assemble(line)
737
738 #endif  /* HANDLE_BUNDLE */
739
740 static bfd_boolean
741 in_bss (void)
742 {
743   flagword flags = bfd_get_section_flags (stdoutput, now_seg);
744
745   return (flags & SEC_ALLOC) && !(flags & (SEC_LOAD | SEC_HAS_CONTENTS));
746 }
747
748 /* Guts of .align directive:
749    N is the power of two to which to align.  A value of zero is accepted but
750     ignored: the default alignment of the section will be at least this.
751    FILL may be NULL, or it may point to the bytes of the fill pattern.
752    LEN is the length of whatever FILL points to, if anything.  If LEN is zero
753     but FILL is not NULL then LEN is treated as if it were one.
754    MAX is the maximum number of characters to skip when doing the alignment,
755     or 0 if there is no maximum.  */
756
757 static void
758 do_align (unsigned int n, char *fill, unsigned int len, unsigned int max)
759 {
760   if (now_seg == absolute_section || in_bss ())
761     {
762       if (fill != NULL)
763         while (len-- > 0)
764           if (*fill++ != '\0')
765             {
766               if (now_seg == absolute_section)
767                 as_warn (_("ignoring fill value in absolute section"));
768               else
769                 as_warn (_("ignoring fill value in section `%s'"),
770                          segment_name (now_seg));
771               break;
772             }
773       fill = NULL;
774       len = 0;
775     }
776
777 #ifdef md_flush_pending_output
778   md_flush_pending_output ();
779 #endif
780
781 #ifdef md_do_align
782   md_do_align (n, fill, len, max, just_record_alignment);
783 #endif
784
785   /* Only make a frag if we HAVE to...  */
786   if ((n > OCTETS_PER_BYTE_POWER) && !need_pass_2)
787     {
788       if (fill == NULL)
789         {
790           if (subseg_text_p (now_seg))
791             frag_align_code (n, max);
792           else
793             frag_align (n, 0, max);
794         }
795       else if (len <= 1)
796         frag_align (n, *fill, max);
797       else
798         frag_align_pattern (n, fill, len, max);
799     }
800
801 #ifdef md_do_align
802  just_record_alignment: ATTRIBUTE_UNUSED_LABEL
803 #endif
804
805   if (n > OCTETS_PER_BYTE_POWER)
806     record_alignment (now_seg, n - OCTETS_PER_BYTE_POWER);
807 }
808
809 /* We read the file, putting things into a web that represents what we
810    have been reading.  */
811 void
812 read_a_source_file (char *name)
813 {
814   char nul_char;
815   char next_char;
816   char *s;              /* String of symbol, '\0' appended.  */
817   int temp;
818   pseudo_typeS *pop;
819
820 #ifdef WARN_COMMENTS
821   found_comment = 0;
822 #endif
823
824   buffer = input_scrub_new_file (name);
825
826   listing_file (name);
827   listing_newline (NULL);
828   register_dependency (name);
829
830   /* Generate debugging information before we've read anything in to denote
831      this file as the "main" source file and not a subordinate one
832      (e.g. N_SO vs N_SOL in stabs).  */
833   generate_file_debug ();
834
835   while ((buffer_limit = input_scrub_next_buffer (&input_line_pointer)) != 0)
836     {                           /* We have another line to parse.  */
837 #ifndef NO_LISTING
838       /* In order to avoid listing macro expansion lines with labels
839          multiple times, keep track of which line was last issued.  */
840       static char *last_eol;
841
842       last_eol = NULL;
843 #endif
844       while (input_line_pointer < buffer_limit)
845         {
846           bfd_boolean was_new_line;
847           /* We have more of this buffer to parse.  */
848
849           /* We now have input_line_pointer->1st char of next line.
850              If input_line_pointer [-1] == '\n' then we just
851              scanned another line: so bump line counters.  */
852           was_new_line = is_end_of_line[(unsigned char) input_line_pointer[-1]];
853           if (was_new_line)
854             {
855               symbol_set_value_now (&dot_symbol);
856 #ifdef md_start_line_hook
857               md_start_line_hook ();
858 #endif
859               if (input_line_pointer[-1] == '\n')
860                 bump_line_counters ();
861             }
862
863 #ifndef NO_LISTING
864           /* If listing is on, and we are expanding a macro, then give
865              the listing code the contents of the expanded line.  */
866           if (listing)
867             {
868               if ((listing & LISTING_MACEXP) && macro_nest > 0)
869                 {
870                   /* Find the end of the current expanded macro line.  */
871                   s = find_end_of_line (input_line_pointer, flag_m68k_mri);
872
873                   if (s != last_eol)
874                     {
875                       char *copy;
876                       int len;
877
878                       last_eol = s;
879                       /* Copy it for safe keeping.  Also give an indication of
880                          how much macro nesting is involved at this point.  */
881                       len = s - input_line_pointer;
882                       copy = (char *) xmalloc (len + macro_nest + 2);
883                       memset (copy, '>', macro_nest);
884                       copy[macro_nest] = ' ';
885                       memcpy (copy + macro_nest + 1, input_line_pointer, len);
886                       copy[macro_nest + 1 + len] = '\0';
887
888                       /* Install the line with the listing facility.  */
889                       listing_newline (copy);
890                     }
891                 }
892               else
893                 listing_newline (NULL);
894             }
895 #endif
896           if (was_new_line)
897             {
898               line_label = NULL;
899
900               if (LABELS_WITHOUT_COLONS || flag_m68k_mri)
901                 {
902                   next_char = * input_line_pointer;
903                   /* Text at the start of a line must be a label, we
904                      run down and stick a colon in.  */
905                   if (is_name_beginner (next_char) || next_char == '"')
906                     {
907                       char *line_start;
908                       int mri_line_macro;
909
910                       HANDLE_CONDITIONAL_ASSEMBLY (0);
911
912                       nul_char = get_symbol_name (& line_start);
913                       next_char = (nul_char == '"' ? input_line_pointer[1] : nul_char);
914
915                       /* In MRI mode, the EQU and MACRO pseudoops must
916                          be handled specially.  */
917                       mri_line_macro = 0;
918                       if (flag_m68k_mri)
919                         {
920                           char *rest = input_line_pointer + 1;
921
922                           if (*rest == ':')
923                             ++rest;
924                           if (*rest == ' ' || *rest == '\t')
925                             ++rest;
926                           if ((strncasecmp (rest, "EQU", 3) == 0
927                                || strncasecmp (rest, "SET", 3) == 0)
928                               && (rest[3] == ' ' || rest[3] == '\t'))
929                             {
930                               input_line_pointer = rest + 3;
931                               equals (line_start,
932                                       strncasecmp (rest, "SET", 3) == 0);
933                               continue;
934                             }
935                           if (strncasecmp (rest, "MACRO", 5) == 0
936                               && (rest[5] == ' '
937                                   || rest[5] == '\t'
938                                   || is_end_of_line[(unsigned char) rest[5]]))
939                             mri_line_macro = 1;
940                         }
941
942                       /* In MRI mode, we need to handle the MACRO
943                          pseudo-op specially: we don't want to put the
944                          symbol in the symbol table.  */
945                       if (!mri_line_macro
946 #ifdef TC_START_LABEL_WITHOUT_COLON
947                           && TC_START_LABEL_WITHOUT_COLON (nul_char, next_char)
948 #endif
949                           )
950                         line_label = colon (line_start);
951                       else
952                         line_label = symbol_create (line_start,
953                                                     absolute_section,
954                                                     (valueT) 0,
955                                                     &zero_address_frag);
956
957                       next_char = restore_line_pointer (nul_char);
958                       if (next_char == ':')
959                         input_line_pointer++;
960                     }
961                 }
962             }
963
964           /* We are at the beginning of a line, or similar place.
965              We expect a well-formed assembler statement.
966              A "symbol-name:" is a statement.
967
968              Depending on what compiler is used, the order of these tests
969              may vary to catch most common case 1st.
970              Each test is independent of all other tests at the (top)
971              level.  */
972           do
973             nul_char = next_char = *input_line_pointer++;
974           while (next_char == '\t' || next_char == ' ' || next_char == '\f');
975
976           /* C is the 1st significant character.
977              Input_line_pointer points after that character.  */
978           if (is_name_beginner (next_char) || next_char == '"')
979             {
980               char *rest;
981
982               /* Want user-defined label or pseudo/opcode.  */
983               HANDLE_CONDITIONAL_ASSEMBLY (1);
984
985               --input_line_pointer;
986               nul_char = get_symbol_name (& s); /* name's delimiter.  */
987               next_char = (nul_char == '"' ? input_line_pointer[1] : nul_char);
988               rest = input_line_pointer + (nul_char == '"' ? 2 : 1);
989
990               /* NEXT_CHAR is character after symbol.
991                  The end of symbol in the input line is now '\0'.
992                  S points to the beginning of the symbol.
993                    [In case of pseudo-op, s->'.'.]
994                  Input_line_pointer->'\0' where NUL_CHAR was.  */
995               if (TC_START_LABEL (s, nul_char, next_char))
996                 {
997                   if (flag_m68k_mri)
998                     {
999                       /* In MRI mode, \tsym: set 0 is permitted.  */
1000                       if (*rest == ':')
1001                         ++rest;
1002
1003                       if (*rest == ' ' || *rest == '\t')
1004                         ++rest;
1005
1006                       if ((strncasecmp (rest, "EQU", 3) == 0
1007                            || strncasecmp (rest, "SET", 3) == 0)
1008                           && (rest[3] == ' ' || rest[3] == '\t'))
1009                         {
1010                           input_line_pointer = rest + 3;
1011                           equals (s, 1);
1012                           continue;
1013                         }
1014                     }
1015
1016                   line_label = colon (s);       /* User-defined label.  */
1017                   restore_line_pointer (nul_char);
1018                   ++ input_line_pointer;
1019 #ifdef tc_check_label
1020                   tc_check_label (line_label);
1021 #endif
1022                   /* Input_line_pointer->after ':'.  */
1023                   SKIP_WHITESPACE ();
1024                 }
1025               else if ((next_char == '=' && *rest == '=')
1026                        || ((next_char == ' ' || next_char == '\t')
1027                            && rest[0] == '='
1028                            && rest[1] == '='))
1029                 {
1030                   equals (s, -1);
1031                   demand_empty_rest_of_line ();
1032                 }
1033               else if ((next_char == '='
1034                        || ((next_char == ' ' || next_char == '\t')
1035                             && *rest == '='))
1036 #ifdef TC_EQUAL_IN_INSN
1037                            && !TC_EQUAL_IN_INSN (next_char, s)
1038 #endif
1039                            )
1040                 {
1041                   equals (s, 1);
1042                   demand_empty_rest_of_line ();
1043                 }
1044               else
1045                 {
1046                   /* Expect pseudo-op or machine instruction.  */
1047                   pop = NULL;
1048
1049 #ifndef TC_CASE_SENSITIVE
1050                   {
1051                     char *s2 = s;
1052
1053                     strncpy (original_case_string, s2, sizeof (original_case_string));
1054                     original_case_string[sizeof (original_case_string) - 1] = 0;
1055
1056                     while (*s2)
1057                       {
1058                         *s2 = TOLOWER (*s2);
1059                         s2++;
1060                       }
1061                   }
1062 #endif
1063                   if (NO_PSEUDO_DOT || flag_m68k_mri)
1064                     {
1065                       /* The MRI assembler uses pseudo-ops without
1066                          a period.  */
1067                       pop = (pseudo_typeS *) hash_find (po_hash, s);
1068                       if (pop != NULL && pop->poc_handler == NULL)
1069                         pop = NULL;
1070                     }
1071
1072                   if (pop != NULL
1073                       || (!flag_m68k_mri && *s == '.'))
1074                     {
1075                       /* PSEUDO - OP.
1076
1077                          WARNING: next_char may be end-of-line.
1078                          We lookup the pseudo-op table with s+1 because we
1079                          already know that the pseudo-op begins with a '.'.  */
1080
1081                       if (pop == NULL)
1082                         pop = (pseudo_typeS *) hash_find (po_hash, s + 1);
1083                       if (pop && !pop->poc_handler)
1084                         pop = NULL;
1085
1086                       /* In MRI mode, we may need to insert an
1087                          automatic alignment directive.  What a hack
1088                          this is.  */
1089                       if (mri_pending_align
1090                           && (pop == NULL
1091                               || !((pop->poc_handler == cons
1092                                     && pop->poc_val == 1)
1093                                    || (pop->poc_handler == s_space
1094                                        && pop->poc_val == 1)
1095 #ifdef tc_conditional_pseudoop
1096                                    || tc_conditional_pseudoop (pop)
1097 #endif
1098                                    || pop->poc_handler == s_if
1099                                    || pop->poc_handler == s_ifdef
1100                                    || pop->poc_handler == s_ifc
1101                                    || pop->poc_handler == s_ifeqs
1102                                    || pop->poc_handler == s_else
1103                                    || pop->poc_handler == s_endif
1104                                    || pop->poc_handler == s_globl
1105                                    || pop->poc_handler == s_ignore)))
1106                         {
1107                           do_align (1, (char *) NULL, 0, 0);
1108                           mri_pending_align = 0;
1109
1110                           if (line_label != NULL)
1111                             {
1112                               symbol_set_frag (line_label, frag_now);
1113                               S_SET_VALUE (line_label, frag_now_fix ());
1114                             }
1115                         }
1116
1117                       /* Print the error msg now, while we still can.  */
1118                       if (pop == NULL)
1119                         {
1120                           char *end = input_line_pointer;
1121
1122                           (void) restore_line_pointer (nul_char);
1123                           s_ignore (0);
1124                           nul_char = next_char = *--input_line_pointer;
1125                           *input_line_pointer = '\0';
1126                           if (! macro_defined || ! try_macro (next_char, s))
1127                             {
1128                               *end = '\0';
1129                               as_bad (_("unknown pseudo-op: `%s'"), s);
1130                               *input_line_pointer++ = nul_char;
1131                             }
1132                           continue;
1133                         }
1134
1135                       /* Put it back for error messages etc.  */
1136                       next_char = restore_line_pointer (nul_char);
1137                       /* The following skip of whitespace is compulsory.
1138                          A well shaped space is sometimes all that separates
1139                          keyword from operands.  */
1140                       if (next_char == ' ' || next_char == '\t')
1141                         input_line_pointer++;
1142
1143                       /* Input_line is restored.
1144                          Input_line_pointer->1st non-blank char
1145                          after pseudo-operation.  */
1146                       (*pop->poc_handler) (pop->poc_val);
1147
1148                       /* If that was .end, just get out now.  */
1149                       if (pop->poc_handler == s_end)
1150                         goto quit;
1151                     }
1152                   else
1153                     {
1154                       /* WARNING: next_char may be end-of-line.  */
1155                       /* Also: input_line_pointer->`\0` where nul_char was.  */
1156                       (void) restore_line_pointer (nul_char);
1157                       input_line_pointer = _find_end_of_line (input_line_pointer, flag_m68k_mri, 1, 0);
1158                       next_char = nul_char = *input_line_pointer;
1159                       *input_line_pointer = '\0';
1160
1161                       generate_lineno_debug ();
1162
1163                       if (macro_defined && try_macro (next_char, s))
1164                         continue;
1165
1166                       if (mri_pending_align)
1167                         {
1168                           do_align (1, (char *) NULL, 0, 0);
1169                           mri_pending_align = 0;
1170                           if (line_label != NULL)
1171                             {
1172                               symbol_set_frag (line_label, frag_now);
1173                               S_SET_VALUE (line_label, frag_now_fix ());
1174                             }
1175                         }
1176
1177                       assemble_one (s); /* Assemble 1 instruction.  */
1178
1179                       *input_line_pointer++ = nul_char;
1180
1181                       /* We resume loop AFTER the end-of-line from
1182                          this instruction.  */
1183                     }
1184                 }
1185               continue;
1186             }
1187
1188           /* Empty statement?  */
1189           if (is_end_of_line[(unsigned char) next_char])
1190             continue;
1191
1192           if ((LOCAL_LABELS_DOLLAR || LOCAL_LABELS_FB) && ISDIGIT (next_char))
1193             {
1194               /* local label  ("4:")  */
1195               char *backup = input_line_pointer;
1196
1197               HANDLE_CONDITIONAL_ASSEMBLY (1);
1198
1199               temp = next_char - '0';
1200
1201               if (nul_char == '"')
1202                 ++ input_line_pointer;
1203
1204               /* Read the whole number.  */
1205               while (ISDIGIT (*input_line_pointer))
1206                 {
1207                   temp = (temp * 10) + *input_line_pointer - '0';
1208                   ++input_line_pointer;
1209                 }
1210
1211               if (LOCAL_LABELS_DOLLAR
1212                   && *input_line_pointer == '$'
1213                   && *(input_line_pointer + 1) == ':')
1214                 {
1215                   input_line_pointer += 2;
1216
1217                   if (dollar_label_defined (temp))
1218                     {
1219                       as_fatal (_("label \"%d$\" redefined"), temp);
1220                     }
1221
1222                   define_dollar_label (temp);
1223                   colon (dollar_label_name (temp, 0));
1224                   continue;
1225                 }
1226
1227               if (LOCAL_LABELS_FB
1228                   && *input_line_pointer++ == ':')
1229                 {
1230                   fb_label_instance_inc (temp);
1231                   colon (fb_label_name (temp, 0));
1232                   continue;
1233                 }
1234
1235               input_line_pointer = backup;
1236             }
1237
1238           if (next_char && strchr (line_comment_chars, next_char))
1239             {                   /* Its a comment.  Better say APP or NO_APP.  */
1240               sb sbuf;
1241               char *ends;
1242               char *new_buf;
1243               char *new_tmp;
1244               unsigned int new_length;
1245               char *tmp_buf = 0;
1246
1247               s = input_line_pointer;
1248               if (strncmp (s, "APP\n", 4))
1249                 {
1250                   /* We ignore it.  */
1251                   ignore_rest_of_line ();
1252                   continue;
1253                 }
1254               bump_line_counters ();
1255               s += 4;
1256
1257               ends = strstr (s, "#NO_APP\n");
1258
1259               if (!ends)
1260                 {
1261                   unsigned int tmp_len;
1262                   unsigned int num;
1263
1264                   /* The end of the #APP wasn't in this buffer.  We
1265                      keep reading in buffers until we find the #NO_APP
1266                      that goes with this #APP  There is one.  The specs
1267                      guarantee it...  */
1268                   tmp_len = buffer_limit - s;
1269                   tmp_buf = (char *) xmalloc (tmp_len + 1);
1270                   memcpy (tmp_buf, s, tmp_len);
1271                   do
1272                     {
1273                       new_tmp = input_scrub_next_buffer (&buffer);
1274                       if (!new_tmp)
1275                         break;
1276                       else
1277                         buffer_limit = new_tmp;
1278                       input_line_pointer = buffer;
1279                       ends = strstr (buffer, "#NO_APP\n");
1280                       if (ends)
1281                         num = ends - buffer;
1282                       else
1283                         num = buffer_limit - buffer;
1284
1285                       tmp_buf = (char *) xrealloc (tmp_buf, tmp_len + num);
1286                       memcpy (tmp_buf + tmp_len, buffer, num);
1287                       tmp_len += num;
1288                     }
1289                   while (!ends);
1290
1291                   input_line_pointer = ends ? ends + 8 : NULL;
1292
1293                   s = tmp_buf;
1294                   ends = s + tmp_len;
1295
1296                 }
1297               else
1298                 {
1299                   input_line_pointer = ends + 8;
1300                 }
1301
1302               scrub_string = s;
1303               scrub_string_end = ends;
1304
1305               new_length = ends - s;
1306               new_buf = (char *) xmalloc (new_length);
1307               new_tmp = new_buf;
1308               for (;;)
1309                 {
1310                   size_t space;
1311                   size_t size;
1312
1313                   space = (new_buf + new_length) - new_tmp;
1314                   size = do_scrub_chars (scrub_from_string, new_tmp, space);
1315
1316                   if (size < space)
1317                     {
1318                       new_tmp[size] = 0;
1319                       break;
1320                     }
1321
1322                   new_buf = (char *) xrealloc (new_buf, new_length + 100);
1323                   new_tmp = new_buf + new_length;
1324                   new_length += 100;
1325                 }
1326
1327               if (tmp_buf)
1328                 free (tmp_buf);
1329
1330               /* We've "scrubbed" input to the preferred format.  In the
1331                  process we may have consumed the whole of the remaining
1332                  file (and included files).  We handle this formatted
1333                  input similar to that of macro expansion, letting
1334                  actual macro expansion (possibly nested) and other
1335                  input expansion work.  Beware that in messages, line
1336                  numbers and possibly file names will be incorrect.  */
1337               new_length = strlen (new_buf);
1338               sb_build (&sbuf, new_length);
1339               sb_add_buffer (&sbuf, new_buf, new_length);
1340               input_scrub_include_sb (&sbuf, input_line_pointer, 0);
1341               sb_kill (&sbuf);
1342               buffer_limit = input_scrub_next_buffer (&input_line_pointer);
1343               free (new_buf);
1344               continue;
1345             }
1346
1347           HANDLE_CONDITIONAL_ASSEMBLY (1);
1348
1349 #ifdef tc_unrecognized_line
1350           if (tc_unrecognized_line (next_char))
1351             continue;
1352 #endif
1353           input_line_pointer--;
1354           /* Report unknown char as error.  */
1355           demand_empty_rest_of_line ();
1356         }
1357     }
1358
1359  quit:
1360   symbol_set_value_now (&dot_symbol);
1361
1362 #ifdef HANDLE_BUNDLE
1363   if (bundle_lock_frag != NULL)
1364     {
1365       as_bad_where (bundle_lock_frag->fr_file, bundle_lock_frag->fr_line,
1366                     _(".bundle_lock with no matching .bundle_unlock"));
1367       bundle_lock_frag = NULL;
1368       bundle_lock_frchain = NULL;
1369       bundle_lock_depth = 0;
1370     }
1371 #endif
1372
1373 #ifdef md_cleanup
1374   md_cleanup ();
1375 #endif
1376   /* Close the input file.  */
1377   input_scrub_close ();
1378 #ifdef WARN_COMMENTS
1379   {
1380     if (warn_comment && found_comment)
1381       as_warn_where (found_comment_file, found_comment,
1382                      "first comment found here");
1383   }
1384 #endif
1385 }
1386
1387 /* Convert O_constant expression EXP into the equivalent O_big representation.
1388    Take the sign of the number from SIGN rather than X_add_number.  */
1389
1390 static void
1391 convert_to_bignum (expressionS *exp, int sign)
1392 {
1393   valueT value;
1394   unsigned int i;
1395
1396   value = exp->X_add_number;
1397   for (i = 0; i < sizeof (exp->X_add_number) / CHARS_PER_LITTLENUM; i++)
1398     {
1399       generic_bignum[i] = value & LITTLENUM_MASK;
1400       value >>= LITTLENUM_NUMBER_OF_BITS;
1401     }
1402   /* Add a sequence of sign bits if the top bit of X_add_number is not
1403      the sign of the original value.  */
1404   if ((exp->X_add_number < 0) == !sign)
1405     generic_bignum[i++] = sign ? LITTLENUM_MASK : 0;
1406   exp->X_op = O_big;
1407   exp->X_add_number = i;
1408 }
1409
1410 /* For most MRI pseudo-ops, the line actually ends at the first
1411    nonquoted space.  This function looks for that point, stuffs a null
1412    in, and sets *STOPCP to the character that used to be there, and
1413    returns the location.
1414
1415    Until I hear otherwise, I am going to assume that this is only true
1416    for the m68k MRI assembler.  */
1417
1418 char *
1419 mri_comment_field (char *stopcp)
1420 {
1421   char *s;
1422 #ifdef TC_M68K
1423   int inquote = 0;
1424
1425   know (flag_m68k_mri);
1426
1427   for (s = input_line_pointer;
1428        ((!is_end_of_line[(unsigned char) *s] && *s != ' ' && *s != '\t')
1429         || inquote);
1430        s++)
1431     {
1432       if (*s == '\'')
1433         inquote = !inquote;
1434     }
1435 #else
1436   for (s = input_line_pointer;
1437        !is_end_of_line[(unsigned char) *s];
1438        s++)
1439     ;
1440 #endif
1441   *stopcp = *s;
1442   *s = '\0';
1443
1444   return s;
1445 }
1446
1447 /* Skip to the end of an MRI comment field.  */
1448
1449 void
1450 mri_comment_end (char *stop, int stopc)
1451 {
1452   know (flag_mri);
1453
1454   input_line_pointer = stop;
1455   *stop = stopc;
1456   while (!is_end_of_line[(unsigned char) *input_line_pointer])
1457     ++input_line_pointer;
1458 }
1459
1460 void
1461 s_abort (int ignore ATTRIBUTE_UNUSED)
1462 {
1463   as_fatal (_(".abort detected.  Abandoning ship."));
1464 }
1465
1466 /* Handle the .align pseudo-op.  A positive ARG is a default alignment
1467    (in bytes).  A negative ARG is the negative of the length of the
1468    fill pattern.  BYTES_P is non-zero if the alignment value should be
1469    interpreted as the byte boundary, rather than the power of 2.  */
1470 #ifndef TC_ALIGN_LIMIT
1471 #define TC_ALIGN_LIMIT (stdoutput->arch_info->bits_per_address - 1)
1472 #endif
1473
1474 static void
1475 s_align (signed int arg, int bytes_p)
1476 {
1477   unsigned int align_limit = TC_ALIGN_LIMIT;
1478   unsigned int align;
1479   char *stop = NULL;
1480   char stopc = 0;
1481   offsetT fill = 0;
1482   unsigned int max;
1483   int fill_p;
1484
1485   if (flag_mri)
1486     stop = mri_comment_field (&stopc);
1487
1488   if (is_end_of_line[(unsigned char) *input_line_pointer])
1489     {
1490       if (arg < 0)
1491         align = 0;
1492       else
1493         align = arg;    /* Default value from pseudo-op table.  */
1494     }
1495   else
1496     {
1497       align = get_absolute_expression ();
1498       SKIP_WHITESPACE ();
1499
1500 #ifdef TC_ALIGN_ZERO_IS_DEFAULT
1501       if (arg > 0 && align == 0)
1502         align = arg;
1503 #endif
1504     }
1505
1506   if (bytes_p)
1507     {
1508       /* Convert to a power of 2.  */
1509       if (align != 0)
1510         {
1511           unsigned int i;
1512
1513           for (i = 0; (align & 1) == 0; align >>= 1, ++i)
1514             ;
1515           if (align != 1)
1516             as_bad (_("alignment not a power of 2"));
1517
1518           align = i;
1519         }
1520     }
1521
1522   if (align > align_limit)
1523     {
1524       align = align_limit;
1525       as_warn (_("alignment too large: %u assumed"), align);
1526     }
1527
1528   if (*input_line_pointer != ',')
1529     {
1530       fill_p = 0;
1531       max = 0;
1532     }
1533   else
1534     {
1535       ++input_line_pointer;
1536       if (*input_line_pointer == ',')
1537         fill_p = 0;
1538       else
1539         {
1540           fill = get_absolute_expression ();
1541           SKIP_WHITESPACE ();
1542           fill_p = 1;
1543         }
1544
1545       if (*input_line_pointer != ',')
1546         max = 0;
1547       else
1548         {
1549           ++input_line_pointer;
1550           max = get_absolute_expression ();
1551         }
1552     }
1553
1554   if (!fill_p)
1555     {
1556       if (arg < 0)
1557         as_warn (_("expected fill pattern missing"));
1558       do_align (align, (char *) NULL, 0, max);
1559     }
1560   else
1561     {
1562       unsigned int fill_len;
1563
1564       if (arg >= 0)
1565         fill_len = 1;
1566       else
1567         fill_len = -arg;
1568
1569       if (fill_len <= 1)
1570         {
1571           char fill_char = 0;
1572
1573           fill_char = fill;
1574           do_align (align, &fill_char, fill_len, max);
1575         }
1576       else
1577         {
1578           char ab[16];
1579
1580           if ((size_t) fill_len > sizeof ab)
1581             {
1582               as_warn (_("fill pattern too long, truncating to %u"),
1583                        (unsigned) sizeof ab);
1584               fill_len = sizeof ab;
1585             }
1586
1587           md_number_to_chars (ab, fill, fill_len);
1588           do_align (align, ab, fill_len, max);
1589         }
1590     }
1591
1592   demand_empty_rest_of_line ();
1593
1594   if (flag_mri)
1595     mri_comment_end (stop, stopc);
1596 }
1597
1598 /* Handle the .align pseudo-op on machines where ".align 4" means
1599    align to a 4 byte boundary.  */
1600
1601 void
1602 s_align_bytes (int arg)
1603 {
1604   s_align (arg, 1);
1605 }
1606
1607 /* Handle the .align pseudo-op on machines where ".align 4" means align
1608    to a 2**4 boundary.  */
1609
1610 void
1611 s_align_ptwo (int arg)
1612 {
1613   s_align (arg, 0);
1614 }
1615
1616 /* Switch in and out of alternate macro mode.  */
1617
1618 static void
1619 s_altmacro (int on)
1620 {
1621   demand_empty_rest_of_line ();
1622   macro_set_alternate (on);
1623 }
1624
1625 /* Read a symbol name from input_line_pointer.
1626
1627    Stores the symbol name in a buffer and returns a pointer to this buffer.
1628    The buffer is xalloc'ed.  It is the caller's responsibility to free
1629    this buffer.
1630
1631    The name is not left in the i_l_p buffer as it may need processing
1632    to handle escape characters.
1633
1634    Advances i_l_p to the next non-whitespace character.
1635
1636    If a symbol name could not be read, the routine issues an error
1637    messages, skips to the end of the line and returns NULL.  */
1638
1639 char *
1640 read_symbol_name (void)
1641 {
1642   char * name;
1643   char * start;
1644   char c;
1645
1646   c = *input_line_pointer++;
1647
1648   if (c == '"')
1649     {
1650 #define SYM_NAME_CHUNK_LEN 128
1651       ptrdiff_t len = SYM_NAME_CHUNK_LEN;
1652       char * name_end;
1653       unsigned int C;
1654
1655       start = name = xmalloc (len + 1);
1656
1657       name_end = name + SYM_NAME_CHUNK_LEN;
1658
1659       while (is_a_char (C = next_char_of_string ()))
1660         {
1661           if (name >= name_end)
1662             {
1663               ptrdiff_t sofar;
1664
1665               sofar = name - start;
1666               len += SYM_NAME_CHUNK_LEN;
1667               start = xrealloc (start, len + 1);
1668               name_end = start + len;
1669               name = start + sofar;
1670             }
1671
1672           *name++ = (char) C;
1673         }
1674       *name = 0;
1675
1676       /* Since quoted symbol names can contain non-ASCII characters,
1677          check the string and warn if it cannot be recognised by the
1678          current character set.  */
1679       if (mbstowcs (NULL, name, len) == (size_t) -1)
1680         as_warn (_("symbol name not recognised in the current locale"));
1681     }
1682   else if (is_name_beginner (c) || c == '\001')
1683     {
1684       ptrdiff_t len;
1685
1686       name = input_line_pointer - 1;
1687
1688       /* We accept \001 in a name in case this is
1689          being called with a constructed string.  */
1690       while (is_part_of_name (c = *input_line_pointer++)
1691              || c == '\001')
1692         ;
1693
1694       len = (input_line_pointer - name) - 1;
1695       start = xmalloc (len + 1);
1696
1697       memcpy (start, name, len);
1698       start[len] = 0;
1699
1700       /* Skip a name ender char if one is present.  */
1701       if (! is_name_ender (c))
1702         --input_line_pointer;
1703     }
1704   else
1705     name = start = NULL;
1706
1707   if (name == start)
1708     {
1709       as_bad (_("expected symbol name"));
1710       ignore_rest_of_line ();
1711       return NULL;
1712     }
1713
1714   SKIP_WHITESPACE ();
1715
1716   return start;
1717 }
1718
1719
1720 symbolS *
1721 s_comm_internal (int param,
1722                  symbolS *(*comm_parse_extra) (int, symbolS *, addressT))
1723 {
1724   char *name;
1725   offsetT temp, size;
1726   symbolS *symbolP = NULL;
1727   char *stop = NULL;
1728   char stopc = 0;
1729   expressionS exp;
1730
1731   if (flag_mri)
1732     stop = mri_comment_field (&stopc);
1733
1734   if ((name = read_symbol_name ()) == NULL)
1735     goto out;
1736
1737   /* Accept an optional comma after the name.  The comma used to be
1738      required, but Irix 5 cc does not generate it for .lcomm.  */
1739   if (*input_line_pointer == ',')
1740     input_line_pointer++;
1741
1742   temp = get_absolute_expr (&exp);
1743   size = temp;
1744   size &= ((addressT) 2 << (stdoutput->arch_info->bits_per_address - 1)) - 1;
1745   if (exp.X_op == O_absent)
1746     {
1747       as_bad (_("missing size expression"));
1748       ignore_rest_of_line ();
1749       goto out;
1750     }
1751   else if (temp != size || !exp.X_unsigned)
1752     {
1753       as_warn (_("size (%ld) out of range, ignored"), (long) temp);
1754       ignore_rest_of_line ();
1755       goto out;
1756     }
1757
1758   symbolP = symbol_find_or_make (name);
1759   if ((S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
1760       && !S_IS_COMMON (symbolP))
1761     {
1762       if (!S_IS_VOLATILE (symbolP))
1763         {
1764           symbolP = NULL;
1765           as_bad (_("symbol `%s' is already defined"), name);
1766           ignore_rest_of_line ();
1767           goto out;
1768         }
1769       symbolP = symbol_clone (symbolP, 1);
1770       S_SET_SEGMENT (symbolP, undefined_section);
1771       S_SET_VALUE (symbolP, 0);
1772       symbol_set_frag (symbolP, &zero_address_frag);
1773       S_CLEAR_VOLATILE (symbolP);
1774     }
1775
1776   size = S_GET_VALUE (symbolP);
1777   if (size == 0)
1778     size = temp;
1779   else if (size != temp)
1780     as_warn (_("size of \"%s\" is already %ld; not changing to %ld"),
1781              name, (long) size, (long) temp);
1782
1783   if (comm_parse_extra != NULL)
1784     symbolP = (*comm_parse_extra) (param, symbolP, size);
1785   else
1786     {
1787       S_SET_VALUE (symbolP, (valueT) size);
1788       S_SET_EXTERNAL (symbolP);
1789       S_SET_SEGMENT (symbolP, bfd_com_section_ptr);
1790     }
1791
1792   demand_empty_rest_of_line ();
1793  out:
1794   if (flag_mri)
1795     mri_comment_end (stop, stopc);
1796   if (name != NULL)
1797     free (name);
1798   return symbolP;
1799 }
1800
1801 void
1802 s_comm (int ignore)
1803 {
1804   s_comm_internal (ignore, NULL);
1805 }
1806
1807 /* The MRI COMMON pseudo-op.  We handle this by creating a common
1808    symbol with the appropriate name.  We make s_space do the right
1809    thing by increasing the size.  */
1810
1811 void
1812 s_mri_common (int small ATTRIBUTE_UNUSED)
1813 {
1814   char *name;
1815   char c;
1816   char *alc = NULL;
1817   symbolS *sym;
1818   offsetT align;
1819   char *stop = NULL;
1820   char stopc = 0;
1821
1822   if (!flag_mri)
1823     {
1824       s_comm (0);
1825       return;
1826     }
1827
1828   stop = mri_comment_field (&stopc);
1829
1830   SKIP_WHITESPACE ();
1831
1832   name = input_line_pointer;
1833   if (!ISDIGIT (*name))
1834     c = get_symbol_name (& name);
1835   else
1836     {
1837       do
1838         {
1839           ++input_line_pointer;
1840         }
1841       while (ISDIGIT (*input_line_pointer));
1842
1843       c = *input_line_pointer;
1844       *input_line_pointer = '\0';
1845
1846       if (line_label != NULL)
1847         {
1848           alc = (char *) xmalloc (strlen (S_GET_NAME (line_label))
1849                                   + (input_line_pointer - name)
1850                                   + 1);
1851           sprintf (alc, "%s%s", name, S_GET_NAME (line_label));
1852           name = alc;
1853         }
1854     }
1855
1856   sym = symbol_find_or_make (name);
1857   c = restore_line_pointer (c);
1858   if (alc != NULL)
1859     free (alc);
1860
1861   if (*input_line_pointer != ',')
1862     align = 0;
1863   else
1864     {
1865       ++input_line_pointer;
1866       align = get_absolute_expression ();
1867     }
1868
1869   if (S_IS_DEFINED (sym) && !S_IS_COMMON (sym))
1870     {
1871       as_bad (_("symbol `%s' is already defined"), S_GET_NAME (sym));
1872       ignore_rest_of_line ();
1873       mri_comment_end (stop, stopc);
1874       return;
1875     }
1876
1877   S_SET_EXTERNAL (sym);
1878   S_SET_SEGMENT (sym, bfd_com_section_ptr);
1879   mri_common_symbol = sym;
1880
1881 #ifdef S_SET_ALIGN
1882   if (align != 0)
1883     S_SET_ALIGN (sym, align);
1884 #else
1885   (void) align;
1886 #endif
1887
1888   if (line_label != NULL)
1889     {
1890       expressionS exp;
1891       exp.X_op = O_symbol;
1892       exp.X_add_symbol = sym;
1893       exp.X_add_number = 0;
1894       symbol_set_value_expression (line_label, &exp);
1895       symbol_set_frag (line_label, &zero_address_frag);
1896       S_SET_SEGMENT (line_label, expr_section);
1897     }
1898
1899   /* FIXME: We just ignore the small argument, which distinguishes
1900      COMMON and COMMON.S.  I don't know what we can do about it.  */
1901
1902   /* Ignore the type and hptype.  */
1903   if (*input_line_pointer == ',')
1904     input_line_pointer += 2;
1905   if (*input_line_pointer == ',')
1906     input_line_pointer += 2;
1907
1908   demand_empty_rest_of_line ();
1909
1910   mri_comment_end (stop, stopc);
1911 }
1912
1913 void
1914 s_data (int ignore ATTRIBUTE_UNUSED)
1915 {
1916   segT section;
1917   int temp;
1918
1919   temp = get_absolute_expression ();
1920   if (flag_readonly_data_in_text)
1921     {
1922       section = text_section;
1923       temp += 1000;
1924     }
1925   else
1926     section = data_section;
1927
1928   subseg_set (section, (subsegT) temp);
1929
1930   demand_empty_rest_of_line ();
1931 }
1932
1933 /* Handle the .appfile pseudo-op.  This is automatically generated by
1934    do_scrub_chars when a preprocessor # line comment is seen with a
1935    file name.  This default definition may be overridden by the object
1936    or CPU specific pseudo-ops.  This function is also the default
1937    definition for .file; the APPFILE argument is 1 for .appfile, 0 for
1938    .file.  */
1939
1940 void
1941 s_app_file_string (char *file, int appfile ATTRIBUTE_UNUSED)
1942 {
1943 #ifdef LISTING
1944   if (listing)
1945     listing_source_file (file);
1946 #endif
1947   register_dependency (file);
1948 #ifdef obj_app_file
1949   obj_app_file (file, appfile);
1950 #endif
1951 }
1952
1953 void
1954 s_app_file (int appfile)
1955 {
1956   char *s;
1957   int length;
1958
1959   /* Some assemblers tolerate immediately following '"'.  */
1960   if ((s = demand_copy_string (&length)) != 0)
1961     {
1962       int may_omit
1963         = (!new_logical_line_flags (s, -1, 1) && appfile);
1964
1965       /* In MRI mode, the preprocessor may have inserted an extraneous
1966          backquote.  */
1967       if (flag_m68k_mri
1968           && *input_line_pointer == '\''
1969           && is_end_of_line[(unsigned char) input_line_pointer[1]])
1970         ++input_line_pointer;
1971
1972       demand_empty_rest_of_line ();
1973       if (!may_omit)
1974         s_app_file_string (s, appfile);
1975     }
1976 }
1977
1978 static int
1979 get_linefile_number (int *flag)
1980 {
1981   SKIP_WHITESPACE ();
1982
1983   if (*input_line_pointer < '0' || *input_line_pointer > '9')
1984     return 0;
1985
1986   *flag = get_absolute_expression ();
1987
1988   return 1;
1989 }
1990
1991 /* Handle the .appline pseudo-op.  This is automatically generated by
1992    do_scrub_chars when a preprocessor # line comment is seen.  This
1993    default definition may be overridden by the object or CPU specific
1994    pseudo-ops.  */
1995
1996 void
1997 s_app_line (int appline)
1998 {
1999   char *file = NULL;
2000   int l;
2001
2002   /* The given number is that of the next line.  */
2003   if (appline)
2004     l = get_absolute_expression ();
2005   else if (!get_linefile_number (&l))
2006     {
2007       ignore_rest_of_line ();
2008       return;
2009     }
2010
2011   l--;
2012
2013   if (l < -1)
2014     /* Some of the back ends can't deal with non-positive line numbers.
2015        Besides, it's silly.  GCC however will generate a line number of
2016        zero when it is pre-processing builtins for assembler-with-cpp files:
2017
2018           # 0 "<built-in>"
2019
2020        We do not want to barf on this, especially since such files are used
2021        in the GCC and GDB testsuites.  So we check for negative line numbers
2022        rather than non-positive line numbers.  */
2023     as_warn (_("line numbers must be positive; line number %d rejected"),
2024              l + 1);
2025   else
2026     {
2027       int flags = 0;
2028       int length = 0;
2029
2030       if (!appline)
2031         {
2032           SKIP_WHITESPACE ();
2033
2034           if (*input_line_pointer == '"')
2035             file = demand_copy_string (&length);
2036
2037           if (file)
2038             {
2039               int this_flag;
2040
2041               while (get_linefile_number (&this_flag))
2042                 switch (this_flag)
2043                   {
2044                     /* From GCC's cpp documentation:
2045                        1: start of a new file.
2046                        2: returning to a file after having included
2047                           another file.
2048                        3: following text comes from a system header file.
2049                        4: following text should be treated as extern "C".
2050
2051                        4 is nonsensical for the assembler; 3, we don't
2052                        care about, so we ignore it just in case a
2053                        system header file is included while
2054                        preprocessing assembly.  So 1 and 2 are all we
2055                        care about, and they are mutually incompatible.
2056                        new_logical_line_flags() demands this.  */
2057                   case 1:
2058                   case 2:
2059                     if (flags && flags != (1 << this_flag))
2060                       as_warn (_("incompatible flag %i in line directive"),
2061                                this_flag);
2062                     else
2063                       flags |= 1 << this_flag;
2064                     break;
2065
2066                   case 3:
2067                   case 4:
2068                     /* We ignore these.  */
2069                     break;
2070
2071                   default:
2072                     as_warn (_("unsupported flag %i in line directive"),
2073                              this_flag);
2074                     break;
2075                   }
2076
2077               if (!is_end_of_line[(unsigned char)*input_line_pointer])
2078                 file = 0;
2079             }
2080         }
2081
2082       if (appline || file)
2083         {
2084           new_logical_line_flags (file, l, flags);
2085 #ifdef LISTING
2086           if (listing)
2087             listing_source_line (l);
2088 #endif
2089         }
2090     }
2091   if (appline || file)
2092     demand_empty_rest_of_line ();
2093   else
2094     ignore_rest_of_line ();
2095 }
2096
2097 /* Handle the .end pseudo-op.  Actually, the real work is done in
2098    read_a_source_file.  */
2099
2100 void
2101 s_end (int ignore ATTRIBUTE_UNUSED)
2102 {
2103   if (flag_mri)
2104     {
2105       /* The MRI assembler permits the start symbol to follow .end,
2106          but we don't support that.  */
2107       SKIP_WHITESPACE ();
2108       if (!is_end_of_line[(unsigned char) *input_line_pointer]
2109           && *input_line_pointer != '*'
2110           && *input_line_pointer != '!')
2111         as_warn (_("start address not supported"));
2112     }
2113 }
2114
2115 /* Handle the .err pseudo-op.  */
2116
2117 void
2118 s_err (int ignore ATTRIBUTE_UNUSED)
2119 {
2120   as_bad (_(".err encountered"));
2121   demand_empty_rest_of_line ();
2122 }
2123
2124 /* Handle the .error and .warning pseudo-ops.  */
2125
2126 void
2127 s_errwarn (int err)
2128 {
2129   int len;
2130   /* The purpose for the conditional assignment is not to
2131      internationalize the directive itself, but that we need a
2132      self-contained message, one that can be passed like the
2133      demand_copy_C_string return value, and with no assumption on the
2134      location of the name of the directive within the message.  */
2135   char *msg
2136     = (err ? _(".error directive invoked in source file")
2137        : _(".warning directive invoked in source file"));
2138
2139   if (!is_it_end_of_statement ())
2140     {
2141       if (*input_line_pointer != '\"')
2142         {
2143           as_bad (_("%s argument must be a string"),
2144                   err ? ".error" : ".warning");
2145           ignore_rest_of_line ();
2146           return;
2147         }
2148
2149       msg = demand_copy_C_string (&len);
2150       if (msg == NULL)
2151         return;
2152     }
2153
2154   if (err)
2155     as_bad ("%s", msg);
2156   else
2157     as_warn ("%s", msg);
2158   demand_empty_rest_of_line ();
2159 }
2160
2161 /* Handle the MRI fail pseudo-op.  */
2162
2163 void
2164 s_fail (int ignore ATTRIBUTE_UNUSED)
2165 {
2166   offsetT temp;
2167   char *stop = NULL;
2168   char stopc = 0;
2169
2170   if (flag_mri)
2171     stop = mri_comment_field (&stopc);
2172
2173   temp = get_absolute_expression ();
2174   if (temp >= 500)
2175     as_warn (_(".fail %ld encountered"), (long) temp);
2176   else
2177     as_bad (_(".fail %ld encountered"), (long) temp);
2178
2179   demand_empty_rest_of_line ();
2180
2181   if (flag_mri)
2182     mri_comment_end (stop, stopc);
2183 }
2184
2185 void
2186 s_fill (int ignore ATTRIBUTE_UNUSED)
2187 {
2188   expressionS rep_exp;
2189   long size = 1;
2190   long fill = 0;
2191   char *p;
2192
2193 #ifdef md_flush_pending_output
2194   md_flush_pending_output ();
2195 #endif
2196
2197 #ifdef md_cons_align
2198   md_cons_align (1);
2199 #endif
2200
2201   get_known_segmented_expression (&rep_exp);
2202   if (*input_line_pointer == ',')
2203     {
2204       input_line_pointer++;
2205       size = get_absolute_expression ();
2206       if (*input_line_pointer == ',')
2207         {
2208           input_line_pointer++;
2209           fill = get_absolute_expression ();
2210         }
2211     }
2212
2213   /* This is to be compatible with BSD 4.2 AS, not for any rational reason.  */
2214 #define BSD_FILL_SIZE_CROCK_8 (8)
2215   if (size > BSD_FILL_SIZE_CROCK_8)
2216     {
2217       as_warn (_(".fill size clamped to %d"), BSD_FILL_SIZE_CROCK_8);
2218       size = BSD_FILL_SIZE_CROCK_8;
2219     }
2220   if (size < 0)
2221     {
2222       as_warn (_("size negative; .fill ignored"));
2223       size = 0;
2224     }
2225   else if (rep_exp.X_op == O_constant && rep_exp.X_add_number <= 0)
2226     {
2227       if (rep_exp.X_add_number < 0)
2228         as_warn (_("repeat < 0; .fill ignored"));
2229       size = 0;
2230     }
2231
2232   if (size && !need_pass_2)
2233     {
2234       if (now_seg == absolute_section)
2235         {
2236           if (rep_exp.X_op != O_constant)
2237             as_bad (_("non-constant fill count for absolute section"));
2238           else if (fill && rep_exp.X_add_number != 0)
2239             as_bad (_("attempt to fill absolute section with non-zero value"));
2240           abs_section_offset += rep_exp.X_add_number * size;
2241         }
2242       else if (fill
2243                && (rep_exp.X_op != O_constant || rep_exp.X_add_number != 0)
2244                && in_bss ())
2245         as_bad (_("attempt to fill section `%s' with non-zero value"),
2246                 segment_name (now_seg));
2247
2248       if (rep_exp.X_op == O_constant)
2249         {
2250           p = frag_var (rs_fill, (int) size, (int) size,
2251                         (relax_substateT) 0, (symbolS *) 0,
2252                         (offsetT) rep_exp.X_add_number,
2253                         (char *) 0);
2254         }
2255       else
2256         {
2257           /* We don't have a constant repeat count, so we can't use
2258              rs_fill.  We can get the same results out of rs_space,
2259              but its argument is in bytes, so we must multiply the
2260              repeat count by size.  */
2261
2262           symbolS *rep_sym;
2263           rep_sym = make_expr_symbol (&rep_exp);
2264           if (size != 1)
2265             {
2266               expressionS size_exp;
2267               size_exp.X_op = O_constant;
2268               size_exp.X_add_number = size;
2269
2270               rep_exp.X_op = O_multiply;
2271               rep_exp.X_add_symbol = rep_sym;
2272               rep_exp.X_op_symbol = make_expr_symbol (&size_exp);
2273               rep_exp.X_add_number = 0;
2274               rep_sym = make_expr_symbol (&rep_exp);
2275             }
2276
2277           p = frag_var (rs_space, (int) size, (int) size,
2278                         (relax_substateT) 0, rep_sym, (offsetT) 0, (char *) 0);
2279         }
2280
2281       memset (p, 0, (unsigned int) size);
2282
2283       /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX
2284          flavoured AS.  The following bizarre behaviour is to be
2285          compatible with above.  I guess they tried to take up to 8
2286          bytes from a 4-byte expression and they forgot to sign
2287          extend.  */
2288 #define BSD_FILL_SIZE_CROCK_4 (4)
2289       md_number_to_chars (p, (valueT) fill,
2290                           (size > BSD_FILL_SIZE_CROCK_4
2291                            ? BSD_FILL_SIZE_CROCK_4
2292                            : (int) size));
2293       /* Note: .fill (),0 emits no frag (since we are asked to .fill 0 bytes)
2294          but emits no error message because it seems a legal thing to do.
2295          It is a degenerate case of .fill but could be emitted by a
2296          compiler.  */
2297     }
2298   demand_empty_rest_of_line ();
2299 }
2300
2301 void
2302 s_globl (int ignore ATTRIBUTE_UNUSED)
2303 {
2304   char *name;
2305   int c;
2306   symbolS *symbolP;
2307   char *stop = NULL;
2308   char stopc = 0;
2309
2310   if (flag_mri)
2311     stop = mri_comment_field (&stopc);
2312
2313   do
2314     {
2315       if ((name = read_symbol_name ()) == NULL)
2316         return;
2317
2318       symbolP = symbol_find_or_make (name);
2319       S_SET_EXTERNAL (symbolP);
2320
2321       SKIP_WHITESPACE ();
2322       c = *input_line_pointer;
2323       if (c == ',')
2324         {
2325           input_line_pointer++;
2326           SKIP_WHITESPACE ();
2327           if (is_end_of_line[(unsigned char) *input_line_pointer])
2328             c = '\n';
2329         }
2330
2331       free (name);
2332     }
2333   while (c == ',');
2334
2335   demand_empty_rest_of_line ();
2336
2337   if (flag_mri)
2338     mri_comment_end (stop, stopc);
2339 }
2340
2341 /* Handle the MRI IRP and IRPC pseudo-ops.  */
2342
2343 void
2344 s_irp (int irpc)
2345 {
2346   char *file, *eol;
2347   unsigned int line;
2348   sb s;
2349   const char *err;
2350   sb out;
2351
2352   as_where (&file, &line);
2353
2354   eol = find_end_of_line (input_line_pointer, 0);
2355   sb_build (&s, eol - input_line_pointer);
2356   sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
2357   input_line_pointer = eol;
2358
2359   sb_new (&out);
2360
2361   err = expand_irp (irpc, 0, &s, &out, get_non_macro_line_sb);
2362   if (err != NULL)
2363     as_bad_where (file, line, "%s", err);
2364
2365   sb_kill (&s);
2366
2367   input_scrub_include_sb (&out, input_line_pointer, 1);
2368   sb_kill (&out);
2369   buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2370 }
2371
2372 /* Handle the .linkonce pseudo-op.  This tells the assembler to mark
2373    the section to only be linked once.  However, this is not supported
2374    by most object file formats.  This takes an optional argument,
2375    which is what to do about duplicates.  */
2376
2377 void
2378 s_linkonce (int ignore ATTRIBUTE_UNUSED)
2379 {
2380   enum linkonce_type type;
2381
2382   SKIP_WHITESPACE ();
2383
2384   type = LINKONCE_DISCARD;
2385
2386   if (!is_end_of_line[(unsigned char) *input_line_pointer])
2387     {
2388       char *s;
2389       char c;
2390
2391       c = get_symbol_name (& s);
2392       if (strcasecmp (s, "discard") == 0)
2393         type = LINKONCE_DISCARD;
2394       else if (strcasecmp (s, "one_only") == 0)
2395         type = LINKONCE_ONE_ONLY;
2396       else if (strcasecmp (s, "same_size") == 0)
2397         type = LINKONCE_SAME_SIZE;
2398       else if (strcasecmp (s, "same_contents") == 0)
2399         type = LINKONCE_SAME_CONTENTS;
2400       else
2401         as_warn (_("unrecognized .linkonce type `%s'"), s);
2402
2403       (void) restore_line_pointer (c);
2404     }
2405
2406 #ifdef obj_handle_link_once
2407   obj_handle_link_once (type);
2408 #else /* ! defined (obj_handle_link_once) */
2409   {
2410     flagword flags;
2411
2412     if ((bfd_applicable_section_flags (stdoutput) & SEC_LINK_ONCE) == 0)
2413       as_warn (_(".linkonce is not supported for this object file format"));
2414
2415     flags = bfd_get_section_flags (stdoutput, now_seg);
2416     flags |= SEC_LINK_ONCE;
2417     switch (type)
2418       {
2419       default:
2420         abort ();
2421       case LINKONCE_DISCARD:
2422         flags |= SEC_LINK_DUPLICATES_DISCARD;
2423         break;
2424       case LINKONCE_ONE_ONLY:
2425         flags |= SEC_LINK_DUPLICATES_ONE_ONLY;
2426         break;
2427       case LINKONCE_SAME_SIZE:
2428         flags |= SEC_LINK_DUPLICATES_SAME_SIZE;
2429         break;
2430       case LINKONCE_SAME_CONTENTS:
2431         flags |= SEC_LINK_DUPLICATES_SAME_CONTENTS;
2432         break;
2433       }
2434     if (!bfd_set_section_flags (stdoutput, now_seg, flags))
2435       as_bad (_("bfd_set_section_flags: %s"),
2436               bfd_errmsg (bfd_get_error ()));
2437   }
2438 #endif /* ! defined (obj_handle_link_once) */
2439
2440   demand_empty_rest_of_line ();
2441 }
2442
2443 void
2444 bss_alloc (symbolS *symbolP, addressT size, unsigned int align)
2445 {
2446   char *pfrag;
2447   segT current_seg = now_seg;
2448   subsegT current_subseg = now_subseg;
2449   segT bss_seg = bss_section;
2450
2451 #if defined (TC_MIPS) || defined (TC_ALPHA)
2452   if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour
2453       || OUTPUT_FLAVOR == bfd_target_elf_flavour)
2454     {
2455       /* For MIPS and Alpha ECOFF or ELF, small objects are put in .sbss.  */
2456       if (size <= bfd_get_gp_size (stdoutput))
2457         {
2458           bss_seg = subseg_new (".sbss", 1);
2459           seg_info (bss_seg)->bss = 1;
2460           if (!bfd_set_section_flags (stdoutput, bss_seg, SEC_ALLOC))
2461             as_warn (_("error setting flags for \".sbss\": %s"),
2462                      bfd_errmsg (bfd_get_error ()));
2463         }
2464     }
2465 #endif
2466   subseg_set (bss_seg, 1);
2467
2468   if (align > OCTETS_PER_BYTE_POWER)
2469     {
2470       record_alignment (bss_seg, align);
2471       frag_align (align, 0, 0);
2472     }
2473
2474   /* Detach from old frag.  */
2475   if (S_GET_SEGMENT (symbolP) == bss_seg)
2476     symbol_get_frag (symbolP)->fr_symbol = NULL;
2477
2478   symbol_set_frag (symbolP, frag_now);
2479   pfrag = frag_var (rs_org, 1, 1, 0, symbolP, size, NULL);
2480   *pfrag = 0;
2481
2482 #ifdef S_SET_SIZE
2483   S_SET_SIZE (symbolP, size);
2484 #endif
2485   S_SET_SEGMENT (symbolP, bss_seg);
2486
2487 #ifdef OBJ_COFF
2488   /* The symbol may already have been created with a preceding
2489      ".globl" directive -- be careful not to step on storage class
2490      in that case.  Otherwise, set it to static.  */
2491   if (S_GET_STORAGE_CLASS (symbolP) != C_EXT)
2492     S_SET_STORAGE_CLASS (symbolP, C_STAT);
2493 #endif /* OBJ_COFF */
2494
2495   subseg_set (current_seg, current_subseg);
2496 }
2497
2498 offsetT
2499 parse_align (int align_bytes)
2500 {
2501   expressionS exp;
2502   addressT align;
2503
2504   SKIP_WHITESPACE ();
2505   if (*input_line_pointer != ',')
2506     {
2507     no_align:
2508       as_bad (_("expected alignment after size"));
2509       ignore_rest_of_line ();
2510       return -1;
2511     }
2512
2513   input_line_pointer++;
2514   SKIP_WHITESPACE ();
2515
2516   align = get_absolute_expr (&exp);
2517   if (exp.X_op == O_absent)
2518     goto no_align;
2519
2520   if (!exp.X_unsigned)
2521     {
2522       as_warn (_("alignment negative; 0 assumed"));
2523       align = 0;
2524     }
2525
2526   if (align_bytes && align != 0)
2527     {
2528       /* convert to a power of 2 alignment */
2529       unsigned int alignp2 = 0;
2530       while ((align & 1) == 0)
2531         align >>= 1, ++alignp2;
2532       if (align != 1)
2533         {
2534           as_bad (_("alignment not a power of 2"));
2535           ignore_rest_of_line ();
2536           return -1;
2537         }
2538       align = alignp2;
2539     }
2540   return align;
2541 }
2542
2543 /* Called from s_comm_internal after symbol name and size have been
2544    parsed.  NEEDS_ALIGN is 0 if it was an ".lcomm" (2 args only),
2545    1 if this was a ".bss" directive which has a 3rd argument
2546    (alignment as a power of 2), or 2 if this was a ".bss" directive
2547    with alignment in bytes.  */
2548
2549 symbolS *
2550 s_lcomm_internal (int needs_align, symbolS *symbolP, addressT size)
2551 {
2552   addressT align = 0;
2553
2554   if (needs_align)
2555     {
2556       align = parse_align (needs_align - 1);
2557       if (align == (addressT) -1)
2558         return NULL;
2559     }
2560   else
2561     /* Assume some objects may require alignment on some systems.  */
2562     TC_IMPLICIT_LCOMM_ALIGNMENT (size, align);
2563
2564   bss_alloc (symbolP, size, align);
2565   return symbolP;
2566 }
2567
2568 void
2569 s_lcomm (int needs_align)
2570 {
2571   s_comm_internal (needs_align, s_lcomm_internal);
2572 }
2573
2574 void
2575 s_lcomm_bytes (int needs_align)
2576 {
2577   s_comm_internal (needs_align * 2, s_lcomm_internal);
2578 }
2579
2580 void
2581 s_lsym (int ignore ATTRIBUTE_UNUSED)
2582 {
2583   char *name;
2584   expressionS exp;
2585   symbolS *symbolP;
2586
2587   /* We permit ANY defined expression: BSD4.2 demands constants.  */
2588   if ((name = read_symbol_name ()) == NULL)
2589     return;
2590
2591   if (*input_line_pointer != ',')
2592     {
2593       as_bad (_("expected comma after \"%s\""), name);
2594       goto err_out;
2595     }
2596
2597   input_line_pointer++;
2598   expression_and_evaluate (&exp);
2599
2600   if (exp.X_op != O_constant
2601       && exp.X_op != O_register)
2602     {
2603       as_bad (_("bad expression"));
2604       goto err_out;
2605     }
2606
2607   symbolP = symbol_find_or_make (name);
2608
2609   if (S_GET_SEGMENT (symbolP) == undefined_section)
2610     {
2611       /* The name might be an undefined .global symbol; be sure to
2612          keep the "external" bit.  */
2613       S_SET_SEGMENT (symbolP,
2614                      (exp.X_op == O_constant
2615                       ? absolute_section
2616                       : reg_section));
2617       S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
2618     }
2619   else
2620     {
2621       as_bad (_("symbol `%s' is already defined"), name);
2622     }
2623
2624   demand_empty_rest_of_line ();
2625   free (name);
2626   return;
2627
2628  err_out:
2629   ignore_rest_of_line ();
2630   free (name);
2631   return;
2632 }
2633
2634 /* Read a line into an sb.  Returns the character that ended the line
2635    or zero if there are no more lines.  */
2636
2637 static int
2638 get_line_sb (sb *line, int in_macro)
2639 {
2640   char *eol;
2641
2642   if (input_line_pointer[-1] == '\n')
2643     bump_line_counters ();
2644
2645   if (input_line_pointer >= buffer_limit)
2646     {
2647       buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2648       if (buffer_limit == 0)
2649         return 0;
2650     }
2651
2652   eol = _find_end_of_line (input_line_pointer, flag_m68k_mri, 0, in_macro);
2653   sb_add_buffer (line, input_line_pointer, eol - input_line_pointer);
2654   input_line_pointer = eol;
2655
2656   /* Don't skip multiple end-of-line characters, because that breaks support
2657      for the IA-64 stop bit (;;) which looks like two consecutive end-of-line
2658      characters but isn't.  Instead just skip one end of line character and
2659      return the character skipped so that the caller can re-insert it if
2660      necessary.   */
2661   return *input_line_pointer++;
2662 }
2663
2664 static size_t
2665 get_non_macro_line_sb (sb *line)
2666 {
2667   return get_line_sb (line, 0);
2668 }
2669
2670 static size_t
2671 get_macro_line_sb (sb *line)
2672 {
2673   return get_line_sb (line, 1);
2674 }
2675
2676 /* Define a macro.  This is an interface to macro.c.  */
2677
2678 void
2679 s_macro (int ignore ATTRIBUTE_UNUSED)
2680 {
2681   char *file, *eol;
2682   unsigned int line;
2683   sb s;
2684   const char *err;
2685   const char *name;
2686
2687   as_where (&file, &line);
2688
2689   eol = find_end_of_line (input_line_pointer, 0);
2690   sb_build (&s, eol - input_line_pointer);
2691   sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
2692   input_line_pointer = eol;
2693
2694   if (line_label != NULL)
2695     {
2696       sb label;
2697       size_t len;
2698
2699       name = S_GET_NAME (line_label);
2700       len = strlen (name);
2701       sb_build (&label, len);
2702       sb_add_buffer (&label, name, len);
2703       err = define_macro (0, &s, &label, get_macro_line_sb, file, line, &name);
2704       sb_kill (&label);
2705     }
2706   else
2707     err = define_macro (0, &s, NULL, get_macro_line_sb, file, line, &name);
2708   if (err != NULL)
2709     as_bad_where (file, line, err, name);
2710   else
2711     {
2712       if (line_label != NULL)
2713         {
2714           S_SET_SEGMENT (line_label, absolute_section);
2715           S_SET_VALUE (line_label, 0);
2716           symbol_set_frag (line_label, &zero_address_frag);
2717         }
2718
2719       if (((NO_PSEUDO_DOT || flag_m68k_mri)
2720            && hash_find (po_hash, name) != NULL)
2721           || (!flag_m68k_mri
2722               && *name == '.'
2723               && hash_find (po_hash, name + 1) != NULL))
2724         as_warn_where (file,
2725                  line,
2726                  _("attempt to redefine pseudo-op `%s' ignored"),
2727                  name);
2728     }
2729
2730   sb_kill (&s);
2731 }
2732
2733 /* Handle the .mexit pseudo-op, which immediately exits a macro
2734    expansion.  */
2735
2736 void
2737 s_mexit (int ignore ATTRIBUTE_UNUSED)
2738 {
2739   if (macro_nest)
2740     {
2741       cond_exit_macro (macro_nest);
2742       buffer_limit = input_scrub_next_buffer (&input_line_pointer);
2743     }
2744   else
2745     as_warn (_("ignoring macro exit outside a macro definition."));
2746 }
2747
2748 /* Switch in and out of MRI mode.  */
2749
2750 void
2751 s_mri (int ignore ATTRIBUTE_UNUSED)
2752 {
2753   int on;
2754 #ifdef MRI_MODE_CHANGE
2755   int old_flag;
2756 #endif
2757
2758   on = get_absolute_expression ();
2759 #ifdef MRI_MODE_CHANGE
2760   old_flag = flag_mri;
2761 #endif
2762   if (on != 0)
2763     {
2764       flag_mri = 1;
2765 #ifdef TC_M68K
2766       flag_m68k_mri = 1;
2767 #endif
2768       macro_mri_mode (1);
2769     }
2770   else
2771     {
2772       flag_mri = 0;
2773 #ifdef TC_M68K
2774       flag_m68k_mri = 0;
2775 #endif
2776       macro_mri_mode (0);
2777     }
2778
2779   /* Operator precedence changes in m68k MRI mode, so we need to
2780      update the operator rankings.  */
2781   expr_set_precedence ();
2782
2783 #ifdef MRI_MODE_CHANGE
2784   if (on != old_flag)
2785     MRI_MODE_CHANGE (on);
2786 #endif
2787
2788   demand_empty_rest_of_line ();
2789 }
2790
2791 /* Handle changing the location counter.  */
2792
2793 static void
2794 do_org (segT segment, expressionS *exp, int fill)
2795 {
2796   if (segment != now_seg
2797       && segment != absolute_section
2798       && segment != expr_section)
2799     as_bad (_("invalid segment \"%s\""), segment_name (segment));
2800
2801   if (now_seg == absolute_section)
2802     {
2803       if (fill != 0)
2804         as_warn (_("ignoring fill value in absolute section"));
2805       if (exp->X_op != O_constant)
2806         {
2807           as_bad (_("only constant offsets supported in absolute section"));
2808           exp->X_add_number = 0;
2809         }
2810       abs_section_offset = exp->X_add_number;
2811     }
2812   else
2813     {
2814       char *p;
2815       symbolS *sym = exp->X_add_symbol;
2816       offsetT off = exp->X_add_number * OCTETS_PER_BYTE;
2817
2818       if (fill && in_bss ())
2819         as_warn (_("ignoring fill value in section `%s'"),
2820                  segment_name (now_seg));
2821
2822       if (exp->X_op != O_constant && exp->X_op != O_symbol)
2823         {
2824           /* Handle complex expressions.  */
2825           sym = make_expr_symbol (exp);
2826           off = 0;
2827         }
2828
2829       p = frag_var (rs_org, 1, 1, (relax_substateT) 0, sym, off, (char *) 0);
2830       *p = fill;
2831     }
2832 }
2833
2834 void
2835 s_org (int ignore ATTRIBUTE_UNUSED)
2836 {
2837   segT segment;
2838   expressionS exp;
2839   long temp_fill;
2840
2841 #ifdef md_flush_pending_output
2842   md_flush_pending_output ();
2843 #endif
2844
2845   /* The m68k MRI assembler has a different meaning for .org.  It
2846      means to create an absolute section at a given address.  We can't
2847      support that--use a linker script instead.  */
2848   if (flag_m68k_mri)
2849     {
2850       as_bad (_("MRI style ORG pseudo-op not supported"));
2851       ignore_rest_of_line ();
2852       return;
2853     }
2854
2855   /* Don't believe the documentation of BSD 4.2 AS.  There is no such
2856      thing as a sub-segment-relative origin.  Any absolute origin is
2857      given a warning, then assumed to be segment-relative.  Any
2858      segmented origin expression ("foo+42") had better be in the right
2859      segment or the .org is ignored.
2860
2861      BSD 4.2 AS warns if you try to .org backwards. We cannot because
2862      we never know sub-segment sizes when we are reading code.  BSD
2863      will crash trying to emit negative numbers of filler bytes in
2864      certain .orgs. We don't crash, but see as-write for that code.
2865
2866      Don't make frag if need_pass_2==1.  */
2867   segment = get_known_segmented_expression (&exp);
2868   if (*input_line_pointer == ',')
2869     {
2870       input_line_pointer++;
2871       temp_fill = get_absolute_expression ();
2872     }
2873   else
2874     temp_fill = 0;
2875
2876   if (!need_pass_2)
2877     do_org (segment, &exp, temp_fill);
2878
2879   demand_empty_rest_of_line ();
2880 }
2881
2882 /* Handle parsing for the MRI SECT/SECTION pseudo-op.  This should be
2883    called by the obj-format routine which handles section changing
2884    when in MRI mode.  It will create a new section, and return it.  It
2885    will set *TYPE to the section type: one of 'C' (code), 'D' (data),
2886    'M' (mixed), or 'R' (romable).  The flags will be set in the section.  */
2887
2888 void
2889 s_mri_sect (char *type ATTRIBUTE_UNUSED)
2890 {
2891 #ifdef TC_M68K
2892
2893   char *name;
2894   char c;
2895   segT seg;
2896
2897   SKIP_WHITESPACE ();
2898
2899   name = input_line_pointer;
2900   if (!ISDIGIT (*name))
2901     c = get_symbol_name (& name);
2902   else
2903     {
2904       do
2905         {
2906           ++input_line_pointer;
2907         }
2908       while (ISDIGIT (*input_line_pointer));
2909
2910       c = *input_line_pointer;
2911       *input_line_pointer = '\0';
2912     }
2913
2914   name = xstrdup (name);
2915
2916   c = restore_line_pointer (c);
2917
2918   seg = subseg_new (name, 0);
2919
2920   if (c == ',')
2921     {
2922       unsigned int align;
2923
2924       ++input_line_pointer;
2925       align = get_absolute_expression ();
2926       record_alignment (seg, align);
2927     }
2928
2929   *type = 'C';
2930   if (*input_line_pointer == ',')
2931     {
2932       c = *++input_line_pointer;
2933       c = TOUPPER (c);
2934       if (c == 'C' || c == 'D' || c == 'M' || c == 'R')
2935         *type = c;
2936       else
2937         as_bad (_("unrecognized section type"));
2938       ++input_line_pointer;
2939
2940       {
2941         flagword flags;
2942
2943         flags = SEC_NO_FLAGS;
2944         if (*type == 'C')
2945           flags = SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE;
2946         else if (*type == 'D' || *type == 'M')
2947           flags = SEC_ALLOC | SEC_LOAD | SEC_DATA;
2948         else if (*type == 'R')
2949           flags = SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_READONLY | SEC_ROM;
2950         if (flags != SEC_NO_FLAGS)
2951           {
2952             if (!bfd_set_section_flags (stdoutput, seg, flags))
2953               as_warn (_("error setting flags for \"%s\": %s"),
2954                        bfd_section_name (stdoutput, seg),
2955                        bfd_errmsg (bfd_get_error ()));
2956           }
2957       }
2958     }
2959
2960   /* Ignore the HP type.  */
2961   if (*input_line_pointer == ',')
2962     input_line_pointer += 2;
2963
2964   demand_empty_rest_of_line ();
2965
2966 #else /* ! TC_M68K */
2967 #ifdef TC_I960
2968
2969   char *name;
2970   char c;
2971   segT seg;
2972
2973   SKIP_WHITESPACE ();
2974
2975   c = get_symbol_name (& name);
2976
2977   name = xstrdup (name);
2978
2979   c = restore_line_pointer (c);
2980
2981   seg = subseg_new (name, 0);
2982
2983   if (c != ',')
2984     *type = 'C';
2985   else
2986     {
2987       char *sectype;
2988
2989       ++input_line_pointer;
2990       SKIP_WHITESPACE ();
2991       c = get_symbol_name (& sectype);
2992       if (*sectype == '\0')
2993         *type = 'C';
2994       else if (strcasecmp (sectype, "text") == 0)
2995         *type = 'C';
2996       else if (strcasecmp (sectype, "data") == 0)
2997         *type = 'D';
2998       else if (strcasecmp (sectype, "romdata") == 0)
2999         *type = 'R';
3000       else
3001         as_warn (_("unrecognized section type `%s'"), sectype);
3002       (void) restore_line_pointer (c);
3003     }
3004
3005   if (*input_line_pointer == ',')
3006     {
3007       char *seccmd;
3008
3009       ++input_line_pointer;
3010       SKIP_WHITESPACE ();
3011       c = get_symbol_name (& seccmd);
3012       if (strcasecmp (seccmd, "absolute") == 0)
3013         {
3014           as_bad (_("absolute sections are not supported"));
3015           *input_line_pointer = c;
3016           ignore_rest_of_line ();
3017           return;
3018         }
3019       else if (strcasecmp (seccmd, "align") == 0)
3020         {
3021           unsigned int align;
3022
3023           (void) restore_line_pointer (c);
3024           align = get_absolute_expression ();
3025           record_alignment (seg, align);
3026         }
3027       else
3028         {
3029           as_warn (_("unrecognized section command `%s'"), seccmd);
3030           (void) restore_line_pointer (c);
3031         }
3032     }
3033
3034   demand_empty_rest_of_line ();
3035
3036 #else /* ! TC_I960 */
3037   /* The MRI assembler seems to use different forms of .sect for
3038      different targets.  */
3039   as_bad ("MRI mode not supported for this target");
3040   ignore_rest_of_line ();
3041 #endif /* ! TC_I960 */
3042 #endif /* ! TC_M68K */
3043 }
3044
3045 /* Handle the .print pseudo-op.  */
3046
3047 void
3048 s_print (int ignore ATTRIBUTE_UNUSED)
3049 {
3050   char *s;
3051   int len;
3052
3053   s = demand_copy_C_string (&len);
3054   if (s != NULL)
3055     printf ("%s\n", s);
3056   demand_empty_rest_of_line ();
3057 }
3058
3059 /* Handle the .purgem pseudo-op.  */
3060
3061 void
3062 s_purgem (int ignore ATTRIBUTE_UNUSED)
3063 {
3064   if (is_it_end_of_statement ())
3065     {
3066       demand_empty_rest_of_line ();
3067       return;
3068     }
3069
3070   do
3071     {
3072       char *name;
3073       char c;
3074
3075       SKIP_WHITESPACE ();
3076       c = get_symbol_name (& name);
3077       delete_macro (name);
3078       *input_line_pointer = c;
3079       SKIP_WHITESPACE_AFTER_NAME ();
3080     }
3081   while (*input_line_pointer++ == ',');
3082
3083   --input_line_pointer;
3084   demand_empty_rest_of_line ();
3085 }
3086
3087 /* Handle the .endm/.endr pseudo-ops.  */
3088
3089 static void
3090 s_bad_end (int endr)
3091 {
3092   as_warn (_(".end%c encountered without preceding %s"),
3093            endr ? 'r' : 'm',
3094            endr ? ".rept, .irp, or .irpc" : ".macro");
3095   demand_empty_rest_of_line ();
3096 }
3097
3098 /* Handle the .rept pseudo-op.  */
3099
3100 void
3101 s_rept (int ignore ATTRIBUTE_UNUSED)
3102 {
3103   int count;
3104
3105   count = get_absolute_expression ();
3106
3107   do_repeat (count, "REPT", "ENDR");
3108 }
3109
3110 /* This function provides a generic repeat block implementation.   It allows
3111    different directives to be used as the start/end keys.  */
3112
3113 void
3114 do_repeat (int count, const char *start, const char *end)
3115 {
3116   sb one;
3117   sb many;
3118
3119   sb_new (&one);
3120   if (!buffer_and_nest (start, end, &one, get_non_macro_line_sb))
3121     {
3122       as_bad (_("%s without %s"), start, end);
3123       return;
3124     }
3125
3126   sb_build (&many, count * one.len);
3127   while (count-- > 0)
3128     sb_add_sb (&many, &one);
3129
3130   sb_kill (&one);
3131
3132   input_scrub_include_sb (&many, input_line_pointer, 1);
3133   sb_kill (&many);
3134   buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3135 }
3136
3137 /* Like do_repeat except that any text matching EXPANDER in the
3138    block is replaced by the itteration count.  */
3139
3140 void
3141 do_repeat_with_expander (int count,
3142                          const char * start,
3143                          const char * end,
3144                          const char * expander)
3145 {
3146   sb one;
3147   sb many;
3148
3149   sb_new (&one);
3150   if (!buffer_and_nest (start, end, &one, get_non_macro_line_sb))
3151     {
3152       as_bad (_("%s without %s"), start, end);
3153       return;
3154     }
3155
3156   sb_new (&many);
3157
3158   if (expander != NULL && strstr (one.ptr, expander) != NULL)
3159     {
3160       while (count -- > 0)
3161         {
3162           int len;
3163           char * sub;
3164           sb processed;
3165
3166           sb_build (& processed, one.len);
3167           sb_add_sb (& processed, & one);
3168           sub = strstr (processed.ptr, expander);
3169           len = sprintf (sub, "%d", count);
3170           gas_assert (len < 8);
3171           strcpy (sub + len, sub + 8);
3172           processed.len -= (8 - len);
3173           sb_add_sb (& many, & processed);
3174           sb_kill (& processed);
3175         }
3176     }
3177   else
3178     while (count-- > 0)
3179       sb_add_sb (&many, &one);
3180
3181   sb_kill (&one);
3182
3183   input_scrub_include_sb (&many, input_line_pointer, 1);
3184   sb_kill (&many);
3185   buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3186 }
3187
3188 /* Skip to end of current repeat loop; EXTRA indicates how many additional
3189    input buffers to skip.  Assumes that conditionals preceding the loop end
3190    are properly nested.
3191
3192    This function makes it easier to implement a premature "break" out of the
3193    loop.  The EXTRA arg accounts for other buffers we might have inserted,
3194    such as line substitutions.  */
3195
3196 void
3197 end_repeat (int extra)
3198 {
3199   cond_exit_macro (macro_nest);
3200   while (extra-- >= 0)
3201     buffer_limit = input_scrub_next_buffer (&input_line_pointer);
3202 }
3203
3204 static void
3205 assign_symbol (char *name, int mode)
3206 {
3207   symbolS *symbolP;
3208
3209   if (name[0] == '.' && name[1] == '\0')
3210     {
3211       /* Turn '. = mumble' into a .org mumble.  */
3212       segT segment;
3213       expressionS exp;
3214
3215       segment = get_known_segmented_expression (&exp);
3216
3217       if (!need_pass_2)
3218         do_org (segment, &exp, 0);
3219
3220       return;
3221     }
3222
3223   if ((symbolP = symbol_find (name)) == NULL
3224       && (symbolP = md_undefined_symbol (name)) == NULL)
3225     {
3226       symbolP = symbol_find_or_make (name);
3227 #ifndef NO_LISTING
3228       /* When doing symbol listings, play games with dummy fragments living
3229          outside the normal fragment chain to record the file and line info
3230          for this symbol.  */
3231       if (listing & LISTING_SYMBOLS)
3232         {
3233           extern struct list_info_struct *listing_tail;
3234           fragS *dummy_frag = (fragS *) xcalloc (1, sizeof (fragS));
3235           dummy_frag->line = listing_tail;
3236           dummy_frag->fr_symbol = symbolP;
3237           symbol_set_frag (symbolP, dummy_frag);
3238         }
3239 #endif
3240 #if defined (OBJ_COFF) && !defined (TE_PE)
3241       /* "set" symbols are local unless otherwise specified.  */
3242       SF_SET_LOCAL (symbolP);
3243 #endif
3244     }
3245
3246   if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
3247     {
3248       if ((mode != 0 || !S_IS_VOLATILE (symbolP))
3249           && !S_CAN_BE_REDEFINED (symbolP))
3250         {
3251           as_bad (_("symbol `%s' is already defined"), name);
3252           symbolP = symbol_clone (symbolP, 0);
3253         }
3254       /* If the symbol is volatile, copy the symbol and replace the
3255          original with the copy, so that previous uses of the symbol will
3256          retain the value of the symbol at the point of use.  */
3257       else if (S_IS_VOLATILE (symbolP))
3258         symbolP = symbol_clone (symbolP, 1);
3259     }
3260
3261   if (mode == 0)
3262     S_SET_VOLATILE (symbolP);
3263   else if (mode < 0)
3264     S_SET_FORWARD_REF (symbolP);
3265
3266   pseudo_set (symbolP);
3267 }
3268
3269 /* Handle the .equ, .equiv, .eqv, and .set directives.  If EQUIV is 1,
3270    then this is .equiv, and it is an error if the symbol is already
3271    defined.  If EQUIV is -1, the symbol additionally is a forward
3272    reference.  */
3273
3274 void
3275 s_set (int equiv)
3276 {
3277   char *name;
3278
3279   /* Especial apologies for the random logic:
3280      this just grew, and could be parsed much more simply!
3281      Dean in haste.  */
3282   if ((name = read_symbol_name ()) == NULL)
3283     return;
3284
3285   if (*input_line_pointer != ',')
3286     {
3287       as_bad (_("expected comma after \"%s\""), name);
3288       ignore_rest_of_line ();
3289       free (name);
3290       return;
3291     }
3292
3293   input_line_pointer++;
3294   assign_symbol (name, equiv);
3295   demand_empty_rest_of_line ();
3296   free (name);
3297 }
3298
3299 void
3300 s_space (int mult)
3301 {
3302   expressionS exp;
3303   expressionS val;
3304   char *p = 0;
3305   char *stop = NULL;
3306   char stopc = 0;
3307   int bytes;
3308
3309 #ifdef md_flush_pending_output
3310   md_flush_pending_output ();
3311 #endif
3312
3313 #ifdef md_cons_align
3314   md_cons_align (1);
3315 #endif
3316
3317   if (flag_mri)
3318     stop = mri_comment_field (&stopc);
3319
3320   /* In m68k MRI mode, we need to align to a word boundary, unless
3321      this is ds.b.  */
3322   if (flag_m68k_mri && mult > 1)
3323     {
3324       if (now_seg == absolute_section)
3325         {
3326           abs_section_offset += abs_section_offset & 1;
3327           if (line_label != NULL)
3328             S_SET_VALUE (line_label, abs_section_offset);
3329         }
3330       else if (mri_common_symbol != NULL)
3331         {
3332           valueT mri_val;
3333
3334           mri_val = S_GET_VALUE (mri_common_symbol);
3335           if ((mri_val & 1) != 0)
3336             {
3337               S_SET_VALUE (mri_common_symbol, mri_val + 1);
3338               if (line_label != NULL)
3339                 {
3340                   expressionS *symexp;
3341
3342                   symexp = symbol_get_value_expression (line_label);
3343                   know (symexp->X_op == O_symbol);
3344                   know (symexp->X_add_symbol == mri_common_symbol);
3345                   symexp->X_add_number += 1;
3346                 }
3347             }
3348         }
3349       else
3350         {
3351           do_align (1, (char *) NULL, 0, 0);
3352           if (line_label != NULL)
3353             {
3354               symbol_set_frag (line_label, frag_now);
3355               S_SET_VALUE (line_label, frag_now_fix ());
3356             }
3357         }
3358     }
3359
3360   bytes = mult;
3361
3362   expression (&exp);
3363
3364   SKIP_WHITESPACE ();
3365   if (*input_line_pointer == ',')
3366     {
3367       ++input_line_pointer;
3368       expression (&val);
3369     }
3370   else
3371     {
3372       val.X_op = O_constant;
3373       val.X_add_number = 0;
3374     }
3375
3376   if ((val.X_op != O_constant
3377        || val.X_add_number < - 0x80
3378        || val.X_add_number > 0xff
3379        || (mult != 0 && mult != 1 && val.X_add_number != 0))
3380       && (now_seg != absolute_section && !in_bss ()))
3381     {
3382       resolve_expression (&exp);
3383       if (exp.X_op != O_constant)
3384         as_bad (_("unsupported variable size or fill value"));
3385       else
3386         {
3387           offsetT i;
3388
3389           if (mult == 0)
3390             mult = 1;
3391           bytes = mult * exp.X_add_number;
3392           for (i = 0; i < exp.X_add_number; i++)
3393             emit_expr (&val, mult);
3394         }
3395     }
3396   else
3397     {
3398       if (now_seg == absolute_section || mri_common_symbol != NULL)
3399         resolve_expression (&exp);
3400
3401       if (exp.X_op == O_constant)
3402         {
3403           offsetT repeat;
3404
3405           repeat = exp.X_add_number;
3406           if (mult)
3407             repeat *= mult;
3408           bytes = repeat;
3409           if (repeat <= 0)
3410             {
3411               if (!flag_mri)
3412                 as_warn (_(".space repeat count is zero, ignored"));
3413               else if (repeat < 0)
3414                 as_warn (_(".space repeat count is negative, ignored"));
3415               goto getout;
3416             }
3417
3418           /* If we are in the absolute section, just bump the offset.  */
3419           if (now_seg == absolute_section)
3420             {
3421               if (val.X_op != O_constant || val.X_add_number != 0)
3422                 as_warn (_("ignoring fill value in absolute section"));
3423               abs_section_offset += repeat;
3424               goto getout;
3425             }
3426
3427           /* If we are secretly in an MRI common section, then
3428              creating space just increases the size of the common
3429              symbol.  */
3430           if (mri_common_symbol != NULL)
3431             {
3432               S_SET_VALUE (mri_common_symbol,
3433                            S_GET_VALUE (mri_common_symbol) + repeat);
3434               goto getout;
3435             }
3436
3437           if (!need_pass_2)
3438             p = frag_var (rs_fill, 1, 1, (relax_substateT) 0, (symbolS *) 0,
3439                           (offsetT) repeat, (char *) 0);
3440         }
3441       else
3442         {
3443           if (now_seg == absolute_section)
3444             {
3445               as_bad (_("space allocation too complex in absolute section"));
3446               subseg_set (text_section, 0);
3447             }
3448
3449           if (mri_common_symbol != NULL)
3450             {
3451               as_bad (_("space allocation too complex in common section"));
3452               mri_common_symbol = NULL;
3453             }
3454
3455           if (!need_pass_2)
3456             p = frag_var (rs_space, 1, 1, (relax_substateT) 0,
3457                           make_expr_symbol (&exp), (offsetT) 0, (char *) 0);
3458         }
3459
3460       if ((val.X_op != O_constant || val.X_add_number != 0) && in_bss ())
3461         as_warn (_("ignoring fill value in section `%s'"),
3462                  segment_name (now_seg));
3463       else if (p)
3464         *p = val.X_add_number;
3465     }
3466
3467  getout:
3468
3469   /* In MRI mode, after an odd number of bytes, we must align to an
3470      even word boundary, unless the next instruction is a dc.b, ds.b
3471      or dcb.b.  */
3472   if (flag_mri && (bytes & 1) != 0)
3473     mri_pending_align = 1;
3474
3475   demand_empty_rest_of_line ();
3476
3477   if (flag_mri)
3478     mri_comment_end (stop, stopc);
3479 }
3480
3481 /* This is like s_space, but the value is a floating point number with
3482    the given precision.  This is for the MRI dcb.s pseudo-op and
3483    friends.  */
3484
3485 void
3486 s_float_space (int float_type)
3487 {
3488   offsetT count;
3489   int flen;
3490   char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
3491   char *stop = NULL;
3492   char stopc = 0;
3493
3494 #ifdef md_cons_align
3495   md_cons_align (1);
3496 #endif
3497
3498   if (flag_mri)
3499     stop = mri_comment_field (&stopc);
3500
3501   count = get_absolute_expression ();
3502
3503   SKIP_WHITESPACE ();
3504   if (*input_line_pointer != ',')
3505     {
3506       as_bad (_("missing value"));
3507       ignore_rest_of_line ();
3508       if (flag_mri)
3509         mri_comment_end (stop, stopc);
3510       return;
3511     }
3512
3513   ++input_line_pointer;
3514
3515   SKIP_WHITESPACE ();
3516
3517   /* Skip any 0{letter} that may be present.  Don't even check if the
3518    * letter is legal.  */
3519   if (input_line_pointer[0] == '0'
3520       && ISALPHA (input_line_pointer[1]))
3521     input_line_pointer += 2;
3522
3523   /* Accept :xxxx, where the x's are hex digits, for a floating point
3524      with the exact digits specified.  */
3525   if (input_line_pointer[0] == ':')
3526     {
3527       flen = hex_float (float_type, temp);
3528       if (flen < 0)
3529         {
3530           ignore_rest_of_line ();
3531           if (flag_mri)
3532             mri_comment_end (stop, stopc);
3533           return;
3534         }
3535     }
3536   else
3537     {
3538       char *err;
3539
3540       err = md_atof (float_type, temp, &flen);
3541       know (flen <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
3542       know (err != NULL || flen > 0);
3543       if (err)
3544         {
3545           as_bad (_("bad floating literal: %s"), err);
3546           ignore_rest_of_line ();
3547           if (flag_mri)
3548             mri_comment_end (stop, stopc);
3549           return;
3550         }
3551     }
3552
3553   while (--count >= 0)
3554     {
3555       char *p;
3556
3557       p = frag_more (flen);
3558       memcpy (p, temp, (unsigned int) flen);
3559     }
3560
3561   demand_empty_rest_of_line ();
3562
3563   if (flag_mri)
3564     mri_comment_end (stop, stopc);
3565 }
3566
3567 /* Handle the .struct pseudo-op, as found in MIPS assemblers.  */
3568
3569 void
3570 s_struct (int ignore ATTRIBUTE_UNUSED)
3571 {
3572   char *stop = NULL;
3573   char stopc = 0;
3574
3575   if (flag_mri)
3576     stop = mri_comment_field (&stopc);
3577   abs_section_offset = get_absolute_expression ();
3578 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3579   /* The ELF backend needs to know that we are changing sections, so
3580      that .previous works correctly. */
3581   if (IS_ELF)
3582     obj_elf_section_change_hook ();
3583 #endif
3584   subseg_set (absolute_section, 0);
3585   demand_empty_rest_of_line ();
3586   if (flag_mri)
3587     mri_comment_end (stop, stopc);
3588 }
3589
3590 void
3591 s_text (int ignore ATTRIBUTE_UNUSED)
3592 {
3593   int temp;
3594
3595   temp = get_absolute_expression ();
3596   subseg_set (text_section, (subsegT) temp);
3597   demand_empty_rest_of_line ();
3598 }
3599
3600 /* .weakref x, y sets x as an alias to y that, as long as y is not
3601    referenced directly, will cause y to become a weak symbol.  */
3602 void
3603 s_weakref (int ignore ATTRIBUTE_UNUSED)
3604 {
3605   char *name;
3606   symbolS *symbolP;
3607   symbolS *symbolP2;
3608   expressionS exp;
3609
3610   if ((name = read_symbol_name ()) == NULL)
3611     return;
3612
3613   symbolP = symbol_find_or_make (name);
3614
3615   if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
3616     {
3617       if (!S_IS_VOLATILE (symbolP))
3618         {
3619           as_bad (_("symbol `%s' is already defined"), name);
3620           goto err_out;
3621         }
3622       symbolP = symbol_clone (symbolP, 1);
3623       S_CLEAR_VOLATILE (symbolP);
3624     }
3625
3626   SKIP_WHITESPACE ();
3627
3628   if (*input_line_pointer != ',')
3629     {
3630       as_bad (_("expected comma after \"%s\""), name);
3631       goto err_out;
3632     }
3633
3634   input_line_pointer++;
3635
3636   SKIP_WHITESPACE ();
3637   free (name);
3638
3639   if ((name = read_symbol_name ()) == NULL)
3640     return;
3641
3642   if ((symbolP2 = symbol_find_noref (name, 1)) == NULL
3643       && (symbolP2 = md_undefined_symbol (name)) == NULL)
3644     {
3645       symbolP2 = symbol_find_or_make (name);
3646       S_SET_WEAKREFD (symbolP2);
3647     }
3648   else
3649     {
3650       symbolS *symp = symbolP2;
3651
3652       while (S_IS_WEAKREFR (symp) && symp != symbolP)
3653         {
3654           expressionS *expP = symbol_get_value_expression (symp);
3655
3656           gas_assert (expP->X_op == O_symbol
3657                   && expP->X_add_number == 0);
3658           symp = expP->X_add_symbol;
3659         }
3660       if (symp == symbolP)
3661         {
3662           char *loop;
3663
3664           loop = concat (S_GET_NAME (symbolP),
3665                          " => ", S_GET_NAME (symbolP2), (const char *) NULL);
3666
3667           symp = symbolP2;
3668           while (symp != symbolP)
3669             {
3670               char *old_loop = loop;
3671
3672               symp = symbol_get_value_expression (symp)->X_add_symbol;
3673               loop = concat (loop, " => ", S_GET_NAME (symp),
3674                              (const char *) NULL);
3675               free (old_loop);
3676             }
3677
3678           as_bad (_("%s: would close weakref loop: %s"),
3679                   S_GET_NAME (symbolP), loop);
3680
3681           free (loop);
3682           free (name);
3683           ignore_rest_of_line ();
3684           return;
3685         }
3686
3687       /* Short-circuiting instead of just checking here might speed
3688          things up a tiny little bit, but loop error messages would
3689          miss intermediate links.  */
3690       /* symbolP2 = symp; */
3691     }
3692
3693   memset (&exp, 0, sizeof (exp));
3694   exp.X_op = O_symbol;
3695   exp.X_add_symbol = symbolP2;
3696
3697   S_SET_SEGMENT (symbolP, undefined_section);
3698   symbol_set_value_expression (symbolP, &exp);
3699   symbol_set_frag (symbolP, &zero_address_frag);
3700   S_SET_WEAKREFR (symbolP);
3701
3702   demand_empty_rest_of_line ();
3703   free (name);
3704   return;
3705
3706  err_out:
3707   ignore_rest_of_line ();
3708   free (name);
3709   return;
3710 }
3711 \f
3712
3713 /* Verify that we are at the end of a line.  If not, issue an error and
3714    skip to EOL.  */
3715
3716 void
3717 demand_empty_rest_of_line (void)
3718 {
3719   SKIP_WHITESPACE ();
3720   if (is_end_of_line[(unsigned char) *input_line_pointer])
3721     input_line_pointer++;
3722   else
3723     {
3724       if (ISPRINT (*input_line_pointer))
3725         as_bad (_("junk at end of line, first unrecognized character is `%c'"),
3726                  *input_line_pointer);
3727       else
3728         as_bad (_("junk at end of line, first unrecognized character valued 0x%x"),
3729                  *input_line_pointer);
3730       ignore_rest_of_line ();
3731     }
3732
3733   /* Return pointing just after end-of-line.  */
3734   know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3735 }
3736
3737 /* Silently advance to the end of line.  Use this after already having
3738    issued an error about something bad.  */
3739
3740 void
3741 ignore_rest_of_line (void)
3742 {
3743   while (input_line_pointer < buffer_limit
3744          && !is_end_of_line[(unsigned char) *input_line_pointer])
3745     input_line_pointer++;
3746
3747   input_line_pointer++;
3748
3749   /* Return pointing just after end-of-line.  */
3750   know (is_end_of_line[(unsigned char) input_line_pointer[-1]]);
3751 }
3752
3753 /* Sets frag for given symbol to zero_address_frag, except when the
3754    symbol frag is already set to a dummy listing frag.  */
3755
3756 static void
3757 set_zero_frag (symbolS *symbolP)
3758 {
3759   if (symbol_get_frag (symbolP)->fr_type != rs_dummy)
3760     symbol_set_frag (symbolP, &zero_address_frag);
3761 }
3762
3763 /* In:  Pointer to a symbol.
3764         Input_line_pointer->expression.
3765
3766    Out: Input_line_pointer->just after any whitespace after expression.
3767         Tried to set symbol to value of expression.
3768         Will change symbols type, value, and frag;  */
3769
3770 void
3771 pseudo_set (symbolS *symbolP)
3772 {
3773   expressionS exp;
3774   segT seg;
3775
3776   know (symbolP);               /* NULL pointer is logic error.  */
3777
3778   if (!S_IS_FORWARD_REF (symbolP))
3779     (void) expression (&exp);
3780   else
3781     (void) deferred_expression (&exp);
3782
3783   if (exp.X_op == O_illegal)
3784     as_bad (_("illegal expression"));
3785   else if (exp.X_op == O_absent)
3786     as_bad (_("missing expression"));
3787   else if (exp.X_op == O_big)
3788     {
3789       if (exp.X_add_number > 0)
3790         as_bad (_("bignum invalid"));
3791       else
3792         as_bad (_("floating point number invalid"));
3793     }
3794   else if (exp.X_op == O_subtract
3795            && !S_IS_FORWARD_REF (symbolP)
3796            && SEG_NORMAL (S_GET_SEGMENT (exp.X_add_symbol))
3797            && (symbol_get_frag (exp.X_add_symbol)
3798                == symbol_get_frag (exp.X_op_symbol)))
3799     {
3800       exp.X_op = O_constant;
3801       exp.X_add_number = (S_GET_VALUE (exp.X_add_symbol)
3802                           - S_GET_VALUE (exp.X_op_symbol));
3803     }
3804
3805   if (symbol_section_p (symbolP))
3806     {
3807       as_bad ("attempt to set value of section symbol");
3808       return;
3809     }
3810
3811   switch (exp.X_op)
3812     {
3813     case O_illegal:
3814     case O_absent:
3815     case O_big:
3816       exp.X_add_number = 0;
3817       /* Fall through.  */
3818     case O_constant:
3819       S_SET_SEGMENT (symbolP, absolute_section);
3820       S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3821       set_zero_frag (symbolP);
3822       break;
3823
3824     case O_register:
3825 #ifndef TC_GLOBAL_REGISTER_SYMBOL_OK
3826       if (S_IS_EXTERNAL (symbolP))
3827         {
3828           as_bad ("can't equate global symbol `%s' with register name",
3829                   S_GET_NAME (symbolP));
3830           return;
3831         }
3832 #endif
3833       S_SET_SEGMENT (symbolP, reg_section);
3834       S_SET_VALUE (symbolP, (valueT) exp.X_add_number);
3835       set_zero_frag (symbolP);
3836       symbol_get_value_expression (symbolP)->X_op = O_register;
3837       break;
3838
3839     case O_symbol:
3840       seg = S_GET_SEGMENT (exp.X_add_symbol);
3841       /* For x=undef+const, create an expression symbol.
3842          For x=x+const, just update x except when x is an undefined symbol
3843          For x=defined+const, evaluate x.  */
3844       if (symbolP == exp.X_add_symbol
3845           && (seg != undefined_section
3846               || !symbol_constant_p (symbolP)))
3847         {
3848           *symbol_X_add_number (symbolP) += exp.X_add_number;
3849           break;
3850         }
3851       else if (!S_IS_FORWARD_REF (symbolP) && seg != undefined_section)
3852         {
3853           symbolS *s = exp.X_add_symbol;
3854
3855           if (S_IS_COMMON (s))
3856             as_bad (_("`%s' can't be equated to common symbol '%s'"),
3857                     S_GET_NAME (symbolP), S_GET_NAME (s));
3858
3859           S_SET_SEGMENT (symbolP, seg);
3860           S_SET_VALUE (symbolP, exp.X_add_number + S_GET_VALUE (s));
3861           symbol_set_frag (symbolP, symbol_get_frag (s));
3862           copy_symbol_attributes (symbolP, s);
3863           break;
3864         }
3865       S_SET_SEGMENT (symbolP, undefined_section);
3866       symbol_set_value_expression (symbolP, &exp);
3867       copy_symbol_attributes (symbolP, exp.X_add_symbol);
3868       set_zero_frag (symbolP);
3869       break;
3870
3871     default:
3872       /* The value is some complex expression.  */
3873       S_SET_SEGMENT (symbolP, expr_section);
3874       symbol_set_value_expression (symbolP, &exp);
3875       set_zero_frag (symbolP);
3876       break;
3877     }
3878 }
3879 \f
3880 /*                      cons()
3881
3882    CONStruct more frag of .bytes, or .words etc.
3883    Should need_pass_2 be 1 then emit no frag(s).
3884    This understands EXPRESSIONS.
3885
3886    Bug (?)
3887
3888    This has a split personality. We use expression() to read the
3889    value. We can detect if the value won't fit in a byte or word.
3890    But we can't detect if expression() discarded significant digits
3891    in the case of a long. Not worth the crocks required to fix it.  */
3892
3893 /* Select a parser for cons expressions.  */
3894
3895 /* Some targets need to parse the expression in various fancy ways.
3896    You can define TC_PARSE_CONS_EXPRESSION to do whatever you like
3897    (for example, the HPPA does this).  Otherwise, you can define
3898    BITFIELD_CONS_EXPRESSIONS to permit bitfields to be specified, or
3899    REPEAT_CONS_EXPRESSIONS to permit repeat counts.  If none of these
3900    are defined, which is the normal case, then only simple expressions
3901    are permitted.  */
3902
3903 #ifdef TC_M68K
3904 static void
3905 parse_mri_cons (expressionS *exp, unsigned int nbytes);
3906 #endif
3907
3908 #ifndef TC_PARSE_CONS_EXPRESSION
3909 #ifdef BITFIELD_CONS_EXPRESSIONS
3910 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3911   (parse_bitfield_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3912 static void
3913 parse_bitfield_cons (expressionS *exp, unsigned int nbytes);
3914 #endif
3915 #ifdef REPEAT_CONS_EXPRESSIONS
3916 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3917   (parse_repeat_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3918 static void
3919 parse_repeat_cons (expressionS *exp, unsigned int nbytes);
3920 #endif
3921
3922 /* If we haven't gotten one yet, just call expression.  */
3923 #ifndef TC_PARSE_CONS_EXPRESSION
3924 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3925   (expression (EXP), TC_PARSE_CONS_RETURN_NONE)
3926 #endif
3927 #endif
3928
3929 void
3930 do_parse_cons_expression (expressionS *exp,
3931                           int nbytes ATTRIBUTE_UNUSED)
3932 {
3933   (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
3934 }
3935
3936
3937 /* Worker to do .byte etc statements.
3938    Clobbers input_line_pointer and checks end-of-line.  */
3939
3940 static void
3941 cons_worker (int nbytes,        /* 1=.byte, 2=.word, 4=.long.  */
3942              int rva)
3943 {
3944   int c;
3945   expressionS exp;
3946   char *stop = NULL;
3947   char stopc = 0;
3948
3949 #ifdef md_flush_pending_output
3950   md_flush_pending_output ();
3951 #endif
3952
3953   if (flag_mri)
3954     stop = mri_comment_field (&stopc);
3955
3956   if (is_it_end_of_statement ())
3957     {
3958       demand_empty_rest_of_line ();
3959       if (flag_mri)
3960         mri_comment_end (stop, stopc);
3961       return;
3962     }
3963
3964 #ifdef TC_ADDRESS_BYTES
3965   if (nbytes == 0)
3966     nbytes = TC_ADDRESS_BYTES ();
3967 #endif
3968
3969 #ifdef md_cons_align
3970   md_cons_align (nbytes);
3971 #endif
3972
3973   c = 0;
3974   do
3975     {
3976       TC_PARSE_CONS_RETURN_TYPE ret = TC_PARSE_CONS_RETURN_NONE;
3977 #ifdef TC_CONS_FIX_CHECK
3978       fixS **cur_fix = &frchain_now->fix_tail;
3979
3980       if (*cur_fix != NULL)
3981         cur_fix = &(*cur_fix)->fx_next;
3982 #endif
3983
3984 #ifdef TC_M68K
3985       if (flag_m68k_mri)
3986         parse_mri_cons (&exp, (unsigned int) nbytes);
3987       else
3988 #endif
3989         {
3990 #if 0
3991           if (*input_line_pointer == '"')
3992             {
3993               as_bad (_("unexpected `\"' in expression"));
3994               ignore_rest_of_line ();
3995               return;
3996             }
3997 #endif
3998           ret = TC_PARSE_CONS_EXPRESSION (&exp, (unsigned int) nbytes);
3999         }
4000
4001       if (rva)
4002         {
4003           if (exp.X_op == O_symbol)
4004             exp.X_op = O_symbol_rva;
4005           else
4006             as_fatal (_("rva without symbol"));
4007         }
4008       emit_expr_with_reloc (&exp, (unsigned int) nbytes, ret);
4009 #ifdef TC_CONS_FIX_CHECK
4010       TC_CONS_FIX_CHECK (&exp, nbytes, *cur_fix);
4011 #endif
4012       ++c;
4013     }
4014   while (*input_line_pointer++ == ',');
4015
4016   /* In MRI mode, after an odd number of bytes, we must align to an
4017      even word boundary, unless the next instruction is a dc.b, ds.b
4018      or dcb.b.  */
4019   if (flag_mri && nbytes == 1 && (c & 1) != 0)
4020     mri_pending_align = 1;
4021
4022   input_line_pointer--;         /* Put terminator back into stream.  */
4023
4024   demand_empty_rest_of_line ();
4025
4026   if (flag_mri)
4027     mri_comment_end (stop, stopc);
4028 }
4029
4030 void
4031 cons (int size)
4032 {
4033   cons_worker (size, 0);
4034 }
4035
4036 void
4037 s_rva (int size)
4038 {
4039   cons_worker (size, 1);
4040 }
4041
4042 /* .reloc offset, reloc_name, symbol+addend.  */
4043
4044 static void
4045 s_reloc (int ignore ATTRIBUTE_UNUSED)
4046 {
4047   char *stop = NULL;
4048   char stopc = 0;
4049   expressionS exp;
4050   char *r_name;
4051   int c;
4052   struct reloc_list *reloc;
4053   struct _bfd_rel { char *name; bfd_reloc_code_real_type code; };
4054   static struct _bfd_rel bfd_relocs[] = {
4055     { "NONE", BFD_RELOC_NONE },
4056     { "8", BFD_RELOC_8 },
4057     { "16", BFD_RELOC_16 },
4058     { "32", BFD_RELOC_32 },
4059     { "64", BFD_RELOC_64 }
4060   };
4061
4062   reloc = (struct reloc_list *) xmalloc (sizeof (*reloc));
4063
4064   if (flag_mri)
4065     stop = mri_comment_field (&stopc);
4066
4067   expression (&exp);
4068   switch (exp.X_op)
4069     {
4070     case O_illegal:
4071     case O_absent:
4072     case O_big:
4073     case O_register:
4074       as_bad (_("missing or bad offset expression"));
4075       goto err_out;
4076     case O_constant:
4077       exp.X_add_symbol = section_symbol (now_seg);
4078       exp.X_op = O_symbol;
4079       /* Fall thru */
4080     case O_symbol:
4081       if (exp.X_add_number == 0)
4082         {
4083           reloc->u.a.offset_sym = exp.X_add_symbol;
4084           break;
4085         }
4086       /* Fall thru */
4087     default:
4088       reloc->u.a.offset_sym = make_expr_symbol (&exp);
4089       break;
4090     }
4091
4092   SKIP_WHITESPACE ();
4093   if (*input_line_pointer != ',')
4094     {
4095       as_bad (_("missing reloc type"));
4096       goto err_out;
4097     }
4098
4099   ++input_line_pointer;
4100   SKIP_WHITESPACE ();
4101   c = get_symbol_name (& r_name);
4102   if (strncasecmp (r_name, "BFD_RELOC_", 10) == 0)
4103     {
4104       unsigned int i;
4105
4106       for (reloc->u.a.howto = NULL, i = 0; i < ARRAY_SIZE (bfd_relocs); i++)
4107         if (strcasecmp (r_name + 10, bfd_relocs[i].name) == 0)
4108           {
4109             reloc->u.a.howto = bfd_reloc_type_lookup (stdoutput,
4110                                                       bfd_relocs[i].code);
4111             break;
4112           }
4113     }
4114   else
4115     reloc->u.a.howto = bfd_reloc_name_lookup (stdoutput, r_name);
4116   *input_line_pointer = c;
4117   if (reloc->u.a.howto == NULL)
4118     {
4119       as_bad (_("unrecognized reloc type"));
4120       goto err_out;
4121     }
4122
4123   exp.X_op = O_absent;
4124   SKIP_WHITESPACE_AFTER_NAME ();
4125   if (*input_line_pointer == ',')
4126     {
4127       ++input_line_pointer;
4128       expression (&exp);
4129     }
4130   switch (exp.X_op)
4131     {
4132     case O_illegal:
4133     case O_big:
4134     case O_register:
4135       as_bad (_("bad reloc expression"));
4136     err_out:
4137       ignore_rest_of_line ();
4138       free (reloc);
4139       if (flag_mri)
4140         mri_comment_end (stop, stopc);
4141       return;
4142     case O_absent:
4143       reloc->u.a.sym = NULL;
4144       reloc->u.a.addend = 0;
4145       break;
4146     case O_constant:
4147       reloc->u.a.sym = NULL;
4148       reloc->u.a.addend = exp.X_add_number;
4149       break;
4150     case O_symbol:
4151       reloc->u.a.sym = exp.X_add_symbol;
4152       reloc->u.a.addend = exp.X_add_number;
4153       break;
4154     default:
4155       reloc->u.a.sym = make_expr_symbol (&exp);
4156       reloc->u.a.addend = 0;
4157       break;
4158     }
4159
4160   as_where (&reloc->file, &reloc->line);
4161   reloc->next = reloc_list;
4162   reloc_list = reloc;
4163
4164   demand_empty_rest_of_line ();
4165   if (flag_mri)
4166     mri_comment_end (stop, stopc);
4167 }
4168
4169 /* Put the contents of expression EXP into the object file using
4170    NBYTES bytes.  If need_pass_2 is 1, this does nothing.  */
4171
4172 void
4173 emit_expr (expressionS *exp, unsigned int nbytes)
4174 {
4175   emit_expr_with_reloc (exp, nbytes, TC_PARSE_CONS_RETURN_NONE);
4176 }
4177
4178 void
4179 emit_expr_with_reloc (expressionS *exp,
4180                       unsigned int nbytes,
4181                       TC_PARSE_CONS_RETURN_TYPE reloc)
4182 {
4183   operatorT op;
4184   char *p;
4185   valueT extra_digit = 0;
4186
4187   /* Don't do anything if we are going to make another pass.  */
4188   if (need_pass_2)
4189     return;
4190
4191   frag_grow (nbytes);
4192   dot_value = frag_now_fix ();
4193   dot_frag = frag_now;
4194
4195 #ifndef NO_LISTING
4196 #ifdef OBJ_ELF
4197   /* When gcc emits DWARF 1 debugging pseudo-ops, a line number will
4198      appear as a four byte positive constant in the .line section,
4199      followed by a 2 byte 0xffff.  Look for that case here.  */
4200   {
4201     static int dwarf_line = -1;
4202
4203     if (strcmp (segment_name (now_seg), ".line") != 0)
4204       dwarf_line = -1;
4205     else if (dwarf_line >= 0
4206              && nbytes == 2
4207              && exp->X_op == O_constant
4208              && (exp->X_add_number == -1 || exp->X_add_number == 0xffff))
4209       listing_source_line ((unsigned int) dwarf_line);
4210     else if (nbytes == 4
4211              && exp->X_op == O_constant
4212              && exp->X_add_number >= 0)
4213       dwarf_line = exp->X_add_number;
4214     else
4215       dwarf_line = -1;
4216   }
4217
4218   /* When gcc emits DWARF 1 debugging pseudo-ops, a file name will
4219      appear as a 2 byte TAG_compile_unit (0x11) followed by a 2 byte
4220      AT_sibling (0x12) followed by a four byte address of the sibling
4221      followed by a 2 byte AT_name (0x38) followed by the name of the
4222      file.  We look for that case here.  */
4223   {
4224     static int dwarf_file = 0;
4225
4226     if (strcmp (segment_name (now_seg), ".debug") != 0)
4227       dwarf_file = 0;
4228     else if (dwarf_file == 0
4229              && nbytes == 2
4230              && exp->X_op == O_constant
4231              && exp->X_add_number == 0x11)
4232       dwarf_file = 1;
4233     else if (dwarf_file == 1
4234              && nbytes == 2
4235              && exp->X_op == O_constant
4236              && exp->X_add_number == 0x12)
4237       dwarf_file = 2;
4238     else if (dwarf_file == 2
4239              && nbytes == 4)
4240       dwarf_file = 3;
4241     else if (dwarf_file == 3
4242              && nbytes == 2
4243              && exp->X_op == O_constant
4244              && exp->X_add_number == 0x38)
4245       dwarf_file = 4;
4246     else
4247       dwarf_file = 0;
4248
4249     /* The variable dwarf_file_string tells stringer that the string
4250        may be the name of the source file.  */
4251     if (dwarf_file == 4)
4252       dwarf_file_string = 1;
4253     else
4254       dwarf_file_string = 0;
4255   }
4256 #endif
4257 #endif
4258
4259   if (check_eh_frame (exp, &nbytes))
4260     return;
4261
4262   op = exp->X_op;
4263
4264   /* Handle a negative bignum.  */
4265   if (op == O_uminus
4266       && exp->X_add_number == 0
4267       && symbol_get_value_expression (exp->X_add_symbol)->X_op == O_big
4268       && symbol_get_value_expression (exp->X_add_symbol)->X_add_number > 0)
4269     {
4270       int i;
4271       unsigned long carry;
4272
4273       exp = symbol_get_value_expression (exp->X_add_symbol);
4274
4275       /* Negate the bignum: one's complement each digit and add 1.  */
4276       carry = 1;
4277       for (i = 0; i < exp->X_add_number; i++)
4278         {
4279           unsigned long next;
4280
4281           next = (((~(generic_bignum[i] & LITTLENUM_MASK))
4282                    & LITTLENUM_MASK)
4283                   + carry);
4284           generic_bignum[i] = next & LITTLENUM_MASK;
4285           carry = next >> LITTLENUM_NUMBER_OF_BITS;
4286         }
4287
4288       /* We can ignore any carry out, because it will be handled by
4289          extra_digit if it is needed.  */
4290
4291       extra_digit = (valueT) -1;
4292       op = O_big;
4293     }
4294
4295   if (op == O_absent || op == O_illegal)
4296     {
4297       as_warn (_("zero assumed for missing expression"));
4298       exp->X_add_number = 0;
4299       op = O_constant;
4300     }
4301   else if (op == O_big && exp->X_add_number <= 0)
4302     {
4303       as_bad (_("floating point number invalid"));
4304       exp->X_add_number = 0;
4305       op = O_constant;
4306     }
4307   else if (op == O_register)
4308     {
4309       as_warn (_("register value used as expression"));
4310       op = O_constant;
4311     }
4312
4313   /* Allow `.word 0' in the absolute section.  */
4314   if (now_seg == absolute_section)
4315     {
4316       if (op != O_constant || exp->X_add_number != 0)
4317         as_bad (_("attempt to store value in absolute section"));
4318       abs_section_offset += nbytes;
4319       return;
4320     }
4321
4322   /* Allow `.word 0' in BSS style sections.  */
4323   if ((op != O_constant || exp->X_add_number != 0) && in_bss ())
4324     as_bad (_("attempt to store non-zero value in section `%s'"),
4325             segment_name (now_seg));
4326
4327   p = frag_more ((int) nbytes);
4328
4329   if (reloc != TC_PARSE_CONS_RETURN_NONE)
4330     {
4331       emit_expr_fix (exp, nbytes, frag_now, p, reloc);
4332       return;
4333     }
4334
4335 #ifndef WORKING_DOT_WORD
4336   /* If we have the difference of two symbols in a word, save it on
4337      the broken_words list.  See the code in write.c.  */
4338   if (op == O_subtract && nbytes == 2)
4339     {
4340       struct broken_word *x;
4341
4342       x = (struct broken_word *) xmalloc (sizeof (struct broken_word));
4343       x->next_broken_word = broken_words;
4344       broken_words = x;
4345       x->seg = now_seg;
4346       x->subseg = now_subseg;
4347       x->frag = frag_now;
4348       x->word_goes_here = p;
4349       x->dispfrag = 0;
4350       x->add = exp->X_add_symbol;
4351       x->sub = exp->X_op_symbol;
4352       x->addnum = exp->X_add_number;
4353       x->added = 0;
4354       x->use_jump = 0;
4355       new_broken_words++;
4356       return;
4357     }
4358 #endif
4359
4360   /* If we have an integer, but the number of bytes is too large to
4361      pass to md_number_to_chars, handle it as a bignum.  */
4362   if (op == O_constant && nbytes > sizeof (valueT))
4363     {
4364       extra_digit = exp->X_unsigned ? 0 : -1;
4365       convert_to_bignum (exp, !exp->X_unsigned);
4366       op = O_big;
4367     }
4368
4369   if (op == O_constant)
4370     {
4371       valueT get;
4372       valueT use;
4373       valueT mask;
4374       valueT hibit;
4375       valueT unmask;
4376
4377       /* JF << of >= number of bits in the object is undefined.  In
4378          particular SPARC (Sun 4) has problems.  */
4379       if (nbytes >= sizeof (valueT))
4380         {
4381           mask = 0;
4382           if (nbytes > sizeof (valueT))
4383             hibit = 0;
4384           else
4385             hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
4386         }
4387       else
4388         {
4389           /* Don't store these bits.  */
4390           mask = ~(valueT) 0 << (BITS_PER_CHAR * nbytes);
4391           hibit = (valueT) 1 << (nbytes * BITS_PER_CHAR - 1);
4392         }
4393
4394       unmask = ~mask;           /* Do store these bits.  */
4395
4396 #ifdef NEVER
4397       "Do this mod if you want every overflow check to assume SIGNED 2's complement data.";
4398       mask = ~(unmask >> 1);    /* Includes sign bit now.  */
4399 #endif
4400
4401       get = exp->X_add_number;
4402       use = get & unmask;
4403       if ((get & mask) != 0
4404           && ((get & mask) != mask
4405               || (get & hibit) == 0))
4406         {               /* Leading bits contain both 0s & 1s.  */
4407 #if defined (BFD64) && BFD_HOST_64BIT_LONG_LONG
4408 #ifndef __MSVCRT__
4409           as_warn (_("value 0x%llx truncated to 0x%llx"),
4410                    (unsigned long long) get, (unsigned long long) use);
4411 #else
4412           as_warn (_("value 0x%I64x truncated to 0x%I64x"),
4413                    (unsigned long long) get, (unsigned long long) use);
4414 #endif
4415 #else
4416           as_warn (_("value 0x%lx truncated to 0x%lx"),
4417                    (unsigned long) get, (unsigned long) use);
4418 #endif
4419         }
4420       /* Put bytes in right order.  */
4421       md_number_to_chars (p, use, (int) nbytes);
4422     }
4423   else if (op == O_big)
4424     {
4425       unsigned int size;
4426       LITTLENUM_TYPE *nums;
4427
4428       size = exp->X_add_number * CHARS_PER_LITTLENUM;
4429       if (nbytes < size)
4430         {
4431           int i = nbytes / CHARS_PER_LITTLENUM;
4432           if (i != 0)
4433             {
4434               LITTLENUM_TYPE sign = 0;
4435               if ((generic_bignum[--i]
4436                    & (1 << (LITTLENUM_NUMBER_OF_BITS - 1))) != 0)
4437                 sign = ~(LITTLENUM_TYPE) 0;
4438               while (++i < exp->X_add_number)
4439                 if (generic_bignum[i] != sign)
4440                   break;
4441             }
4442           if (i < exp->X_add_number)
4443             as_warn (_("bignum truncated to %d bytes"), nbytes);
4444           size = nbytes;
4445         }
4446
4447       if (nbytes == 1)
4448         {
4449           md_number_to_chars (p, (valueT) generic_bignum[0], 1);
4450           return;
4451         }
4452       know (nbytes % CHARS_PER_LITTLENUM == 0);
4453
4454       if (target_big_endian)
4455         {
4456           while (nbytes > size)
4457             {
4458               md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
4459               nbytes -= CHARS_PER_LITTLENUM;
4460               p += CHARS_PER_LITTLENUM;
4461             }
4462
4463           nums = generic_bignum + size / CHARS_PER_LITTLENUM;
4464           while (size >= CHARS_PER_LITTLENUM)
4465             {
4466               --nums;
4467               md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
4468               size -= CHARS_PER_LITTLENUM;
4469               p += CHARS_PER_LITTLENUM;
4470             }
4471         }
4472       else
4473         {
4474           nums = generic_bignum;
4475           while (size >= CHARS_PER_LITTLENUM)
4476             {
4477               md_number_to_chars (p, (valueT) *nums, CHARS_PER_LITTLENUM);
4478               ++nums;
4479               size -= CHARS_PER_LITTLENUM;
4480               p += CHARS_PER_LITTLENUM;
4481               nbytes -= CHARS_PER_LITTLENUM;
4482             }
4483
4484           while (nbytes >= CHARS_PER_LITTLENUM)
4485             {
4486               md_number_to_chars (p, extra_digit, CHARS_PER_LITTLENUM);
4487               nbytes -= CHARS_PER_LITTLENUM;
4488               p += CHARS_PER_LITTLENUM;
4489             }
4490         }
4491     }
4492   else
4493     emit_expr_fix (exp, nbytes, frag_now, p, TC_PARSE_CONS_RETURN_NONE);
4494 }
4495
4496 void
4497 emit_expr_fix (expressionS *exp, unsigned int nbytes, fragS *frag, char *p,
4498                TC_PARSE_CONS_RETURN_TYPE r ATTRIBUTE_UNUSED)
4499 {
4500   int offset = 0;
4501   unsigned int size = nbytes;
4502
4503   memset (p, 0, size);
4504
4505   /* Generate a fixS to record the symbol value.  */
4506
4507 #ifdef TC_CONS_FIX_NEW
4508   TC_CONS_FIX_NEW (frag, p - frag->fr_literal + offset, size, exp, r);
4509 #else
4510   if (r != TC_PARSE_CONS_RETURN_NONE)
4511     {
4512       reloc_howto_type *reloc_howto;
4513
4514       reloc_howto = bfd_reloc_type_lookup (stdoutput, r);
4515       size = bfd_get_reloc_size (reloc_howto);
4516
4517       if (size > nbytes)
4518         {
4519           as_bad (_("%s relocations do not fit in %u bytes\n"),
4520                   reloc_howto->name, nbytes);
4521           return;
4522         }
4523       else if (target_big_endian)
4524         offset = nbytes - size;
4525     }
4526   else
4527     switch (size)
4528       {
4529       case 1:
4530         r = BFD_RELOC_8;
4531         break;
4532       case 2:
4533         r = BFD_RELOC_16;
4534         break;
4535       case 3:
4536         r = BFD_RELOC_24;
4537         break;
4538       case 4:
4539         r = BFD_RELOC_32;
4540         break;
4541       case 8:
4542         r = BFD_RELOC_64;
4543         break;
4544       default:
4545         as_bad (_("unsupported BFD relocation size %u"), size);
4546         return;
4547       }
4548   fix_new_exp (frag, p - frag->fr_literal + offset, size,
4549                exp, 0, r);
4550 #endif
4551 }
4552 \f
4553 #ifdef BITFIELD_CONS_EXPRESSIONS
4554
4555 /* i960 assemblers, (eg, asm960), allow bitfields after ".byte" as
4556    w:x,y:z, where w and y are bitwidths and x and y are values.  They
4557    then pack them all together. We do a little better in that we allow
4558    them in words, longs, etc. and we'll pack them in target byte order
4559    for you.
4560
4561    The rules are: pack least significant bit first, if a field doesn't
4562    entirely fit, put it in the next unit.  Overflowing the bitfield is
4563    explicitly *not* even a warning.  The bitwidth should be considered
4564    a "mask".
4565
4566    To use this function the tc-XXX.h file should define
4567    BITFIELD_CONS_EXPRESSIONS.  */
4568
4569 static void
4570 parse_bitfield_cons (exp, nbytes)
4571      expressionS *exp;
4572      unsigned int nbytes;
4573 {
4574   unsigned int bits_available = BITS_PER_CHAR * nbytes;
4575   char *hold = input_line_pointer;
4576
4577   (void) expression (exp);
4578
4579   if (*input_line_pointer == ':')
4580     {
4581       /* Bitfields.  */
4582       long value = 0;
4583
4584       for (;;)
4585         {
4586           unsigned long width;
4587
4588           if (*input_line_pointer != ':')
4589             {
4590               input_line_pointer = hold;
4591               break;
4592             }                   /* Next piece is not a bitfield.  */
4593
4594           /* In the general case, we can't allow
4595              full expressions with symbol
4596              differences and such.  The relocation
4597              entries for symbols not defined in this
4598              assembly would require arbitrary field
4599              widths, positions, and masks which most
4600              of our current object formats don't
4601              support.
4602
4603              In the specific case where a symbol
4604              *is* defined in this assembly, we
4605              *could* build fixups and track it, but
4606              this could lead to confusion for the
4607              backends.  I'm lazy. I'll take any
4608              SEG_ABSOLUTE. I think that means that
4609              you can use a previous .set or
4610              .equ type symbol.  xoxorich.  */
4611
4612           if (exp->X_op == O_absent)
4613             {
4614               as_warn (_("using a bit field width of zero"));
4615               exp->X_add_number = 0;
4616               exp->X_op = O_constant;
4617             }                   /* Implied zero width bitfield.  */
4618
4619           if (exp->X_op != O_constant)
4620             {
4621               *input_line_pointer = '\0';
4622               as_bad (_("field width \"%s\" too complex for a bitfield"), hold);
4623               *input_line_pointer = ':';
4624               demand_empty_rest_of_line ();
4625               return;
4626             }                   /* Too complex.  */
4627
4628           if ((width = exp->X_add_number) > (BITS_PER_CHAR * nbytes))
4629             {
4630               as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"),
4631                        width, nbytes, (BITS_PER_CHAR * nbytes));
4632               width = BITS_PER_CHAR * nbytes;
4633             }                   /* Too big.  */
4634
4635           if (width > bits_available)
4636             {
4637               /* FIXME-SOMEDAY: backing up and reparsing is wasteful.  */
4638               input_line_pointer = hold;
4639               exp->X_add_number = value;
4640               break;
4641             }                   /* Won't fit.  */
4642
4643           /* Skip ':'.  */
4644           hold = ++input_line_pointer;
4645
4646           (void) expression (exp);
4647           if (exp->X_op != O_constant)
4648             {
4649               char cache = *input_line_pointer;
4650
4651               *input_line_pointer = '\0';
4652               as_bad (_("field value \"%s\" too complex for a bitfield"), hold);
4653               *input_line_pointer = cache;
4654               demand_empty_rest_of_line ();
4655               return;
4656             }                   /* Too complex.  */
4657
4658           value |= ((~(-(1 << width)) & exp->X_add_number)
4659                     << ((BITS_PER_CHAR * nbytes) - bits_available));
4660
4661           if ((bits_available -= width) == 0
4662               || is_it_end_of_statement ()
4663               || *input_line_pointer != ',')
4664             {
4665               break;
4666             }                   /* All the bitfields we're gonna get.  */
4667
4668           hold = ++input_line_pointer;
4669           (void) expression (exp);
4670         }
4671
4672       exp->X_add_number = value;
4673       exp->X_op = O_constant;
4674       exp->X_unsigned = 1;
4675       exp->X_extrabit = 0;
4676     }
4677 }
4678
4679 #endif /* BITFIELD_CONS_EXPRESSIONS */
4680 \f
4681 /* Handle an MRI style string expression.  */
4682
4683 #ifdef TC_M68K
4684 static void
4685 parse_mri_cons (expressionS *exp, unsigned int nbytes)
4686 {
4687   if (*input_line_pointer != '\''
4688       && (input_line_pointer[1] != '\''
4689           || (*input_line_pointer != 'A'
4690               && *input_line_pointer != 'E')))
4691     (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
4692   else
4693     {
4694       unsigned int scan;
4695       unsigned int result = 0;
4696
4697       /* An MRI style string.  Cut into as many bytes as will fit into
4698          a nbyte chunk, left justify if necessary, and separate with
4699          commas so we can try again later.  */
4700       if (*input_line_pointer == 'A')
4701         ++input_line_pointer;
4702       else if (*input_line_pointer == 'E')
4703         {
4704           as_bad (_("EBCDIC constants are not supported"));
4705           ++input_line_pointer;
4706         }
4707
4708       input_line_pointer++;
4709       for (scan = 0; scan < nbytes; scan++)
4710         {
4711           if (*input_line_pointer == '\'')
4712             {
4713               if (input_line_pointer[1] == '\'')
4714                 {
4715                   input_line_pointer++;
4716                 }
4717               else
4718                 break;
4719             }
4720           result = (result << 8) | (*input_line_pointer++);
4721         }
4722
4723       /* Left justify.  */
4724       while (scan < nbytes)
4725         {
4726           result <<= 8;
4727           scan++;
4728         }
4729
4730       /* Create correct expression.  */
4731       exp->X_op = O_constant;
4732       exp->X_add_number = result;
4733
4734       /* Fake it so that we can read the next char too.  */
4735       if (input_line_pointer[0] != '\'' ||
4736           (input_line_pointer[0] == '\'' && input_line_pointer[1] == '\''))
4737         {
4738           input_line_pointer -= 2;
4739           input_line_pointer[0] = ',';
4740           input_line_pointer[1] = '\'';
4741         }
4742       else
4743         input_line_pointer++;
4744     }
4745 }
4746 #endif /* TC_M68K */
4747 \f
4748 #ifdef REPEAT_CONS_EXPRESSIONS
4749
4750 /* Parse a repeat expression for cons.  This is used by the MIPS
4751    assembler.  The format is NUMBER:COUNT; NUMBER appears in the
4752    object file COUNT times.
4753
4754    To use this for a target, define REPEAT_CONS_EXPRESSIONS.  */
4755
4756 static void
4757 parse_repeat_cons (exp, nbytes)
4758      expressionS *exp;
4759      unsigned int nbytes;
4760 {
4761   expressionS count;
4762   int i;
4763
4764   expression (exp);
4765
4766   if (*input_line_pointer != ':')
4767     {
4768       /* No repeat count.  */
4769       return;
4770     }
4771
4772   ++input_line_pointer;
4773   expression (&count);
4774   if (count.X_op != O_constant
4775       || count.X_add_number <= 0)
4776     {
4777       as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4778       return;
4779     }
4780
4781   /* The cons function is going to output this expression once.  So we
4782      output it count - 1 times.  */
4783   for (i = count.X_add_number - 1; i > 0; i--)
4784     emit_expr (exp, nbytes);
4785 }
4786
4787 #endif /* REPEAT_CONS_EXPRESSIONS */
4788 \f
4789 /* Parse a floating point number represented as a hex constant.  This
4790    permits users to specify the exact bits they want in the floating
4791    point number.  */
4792
4793 static int
4794 hex_float (int float_type, char *bytes)
4795 {
4796   int length;
4797   int i;
4798
4799   switch (float_type)
4800     {
4801     case 'f':
4802     case 'F':
4803     case 's':
4804     case 'S':
4805       length = 4;
4806       break;
4807
4808     case 'd':
4809     case 'D':
4810     case 'r':
4811     case 'R':
4812       length = 8;
4813       break;
4814
4815     case 'x':
4816     case 'X':
4817       length = 12;
4818       break;
4819
4820     case 'p':
4821     case 'P':
4822       length = 12;
4823       break;
4824
4825     default:
4826       as_bad (_("unknown floating type type '%c'"), float_type);
4827       return -1;
4828     }
4829
4830   /* It would be nice if we could go through expression to parse the
4831      hex constant, but if we get a bignum it's a pain to sort it into
4832      the buffer correctly.  */
4833   i = 0;
4834   while (hex_p (*input_line_pointer) || *input_line_pointer == '_')
4835     {
4836       int d;
4837
4838       /* The MRI assembler accepts arbitrary underscores strewn about
4839          through the hex constant, so we ignore them as well.  */
4840       if (*input_line_pointer == '_')
4841         {
4842           ++input_line_pointer;
4843           continue;
4844         }
4845
4846       if (i >= length)
4847         {
4848           as_warn (_("floating point constant too large"));
4849           return -1;
4850         }
4851       d = hex_value (*input_line_pointer) << 4;
4852       ++input_line_pointer;
4853       while (*input_line_pointer == '_')
4854         ++input_line_pointer;
4855       if (hex_p (*input_line_pointer))
4856         {
4857           d += hex_value (*input_line_pointer);
4858           ++input_line_pointer;
4859         }
4860       if (target_big_endian)
4861         bytes[i] = d;
4862       else
4863         bytes[length - i - 1] = d;
4864       ++i;
4865     }
4866
4867   if (i < length)
4868     {
4869       if (target_big_endian)
4870         memset (bytes + i, 0, length - i);
4871       else
4872         memset (bytes, 0, length - i);
4873     }
4874
4875   return length;
4876 }
4877
4878 /*                      float_cons()
4879
4880    CONStruct some more frag chars of .floats .ffloats etc.
4881    Makes 0 or more new frags.
4882    If need_pass_2 == 1, no frags are emitted.
4883    This understands only floating literals, not expressions. Sorry.
4884
4885    A floating constant is defined by atof_generic(), except it is preceded
4886    by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its
4887    reading, I decided to be incompatible. This always tries to give you
4888    rounded bits to the precision of the pseudo-op. Former AS did premature
4889    truncation, restored noisy bits instead of trailing 0s AND gave you
4890    a choice of 2 flavours of noise according to which of 2 floating-point
4891    scanners you directed AS to use.
4892
4893    In:  input_line_pointer->whitespace before, or '0' of flonum.  */
4894
4895 void
4896 float_cons (/* Clobbers input_line-pointer, checks end-of-line.  */
4897             int float_type      /* 'f':.ffloat ... 'F':.float ...  */)
4898 {
4899   char *p;
4900   int length;                   /* Number of chars in an object.  */
4901   char *err;            /* Error from scanning floating literal.  */
4902   char temp[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT];
4903
4904   if (is_it_end_of_statement ())
4905     {
4906       demand_empty_rest_of_line ();
4907       return;
4908     }
4909
4910   if (now_seg == absolute_section)
4911     {
4912       as_bad (_("attempt to store float in absolute section"));
4913       ignore_rest_of_line ();
4914       return;
4915     }
4916
4917   if (in_bss ())
4918     {
4919       as_bad (_("attempt to store float in section `%s'"),
4920               segment_name (now_seg));
4921       ignore_rest_of_line ();
4922       return;
4923     }
4924
4925 #ifdef md_flush_pending_output
4926   md_flush_pending_output ();
4927 #endif
4928
4929 #ifdef md_cons_align
4930   md_cons_align (1);
4931 #endif
4932
4933   do
4934     {
4935       /* input_line_pointer->1st char of a flonum (we hope!).  */
4936       SKIP_WHITESPACE ();
4937
4938       /* Skip any 0{letter} that may be present. Don't even check if the
4939          letter is legal. Someone may invent a "z" format and this routine
4940          has no use for such information. Lusers beware: you get
4941          diagnostics if your input is ill-conditioned.  */
4942       if (input_line_pointer[0] == '0'
4943           && ISALPHA (input_line_pointer[1]))
4944         input_line_pointer += 2;
4945
4946       /* Accept :xxxx, where the x's are hex digits, for a floating
4947          point with the exact digits specified.  */
4948       if (input_line_pointer[0] == ':')
4949         {
4950           ++input_line_pointer;
4951           length = hex_float (float_type, temp);
4952           if (length < 0)
4953             {
4954               ignore_rest_of_line ();
4955               return;
4956             }
4957         }
4958       else
4959         {
4960           err = md_atof (float_type, temp, &length);
4961           know (length <= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT);
4962           know (err != NULL || length > 0);
4963           if (err)
4964             {
4965               as_bad (_("bad floating literal: %s"), err);
4966               ignore_rest_of_line ();
4967               return;
4968             }
4969         }
4970
4971       if (!need_pass_2)
4972         {
4973           int count;
4974
4975           count = 1;
4976
4977 #ifdef REPEAT_CONS_EXPRESSIONS
4978           if (*input_line_pointer == ':')
4979             {
4980               expressionS count_exp;
4981
4982               ++input_line_pointer;
4983               expression (&count_exp);
4984
4985               if (count_exp.X_op != O_constant
4986                   || count_exp.X_add_number <= 0)
4987                 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4988               else
4989                 count = count_exp.X_add_number;
4990             }
4991 #endif
4992
4993           while (--count >= 0)
4994             {
4995               p = frag_more (length);
4996               memcpy (p, temp, (unsigned int) length);
4997             }
4998         }
4999       SKIP_WHITESPACE ();
5000     }
5001   while (*input_line_pointer++ == ',');
5002
5003   /* Put terminator back into stream.  */
5004   --input_line_pointer;
5005   demand_empty_rest_of_line ();
5006 }
5007 \f
5008 /* LEB128 Encoding.
5009
5010    Note - we are using the DWARF standard's definition of LEB128 encoding
5011    where each 7-bit value is a stored in a byte, *not* an octet.  This
5012    means that on targets where a byte contains multiple octets there is
5013    a *huge waste of space*.  (This also means that we do not have to
5014    have special versions of these functions for when OCTETS_PER_BYTE_POWER
5015    is non-zero).
5016
5017    If the 7-bit values were to be packed into N-bit bytes (where N > 8)
5018    we would then have to consider whether multiple, successive LEB128
5019    values should be packed into the bytes without padding (bad idea) or
5020    whether each LEB128 number is padded out to a whole number of bytes.
5021    Plus you have to decide on the endianness of packing octets into a
5022    byte.  */
5023
5024 /* Return the size of a LEB128 value in bytes.  */
5025
5026 static inline unsigned int
5027 sizeof_sleb128 (offsetT value)
5028 {
5029   int size = 0;
5030   unsigned byte;
5031
5032   do
5033     {
5034       byte = (value & 0x7f);
5035       /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
5036          Fortunately, we can structure things so that the extra work reduces
5037          to a noop on systems that do things "properly".  */
5038       value = (value >> 7) | ~(-(offsetT)1 >> 7);
5039       size += 1;
5040     }
5041   while (!(((value == 0) && ((byte & 0x40) == 0))
5042            || ((value == -1) && ((byte & 0x40) != 0))));
5043
5044   return size;
5045 }
5046
5047 static inline unsigned int
5048 sizeof_uleb128 (valueT value)
5049 {
5050   int size = 0;
5051
5052   do
5053     {
5054       value >>= 7;
5055       size += 1;
5056     }
5057   while (value != 0);
5058
5059   return size;
5060 }
5061
5062 unsigned int
5063 sizeof_leb128 (valueT value, int sign)
5064 {
5065   if (sign)
5066     return sizeof_sleb128 ((offsetT) value);
5067   else
5068     return sizeof_uleb128 (value);
5069 }
5070
5071 /* Output a LEB128 value.  Returns the number of bytes used.  */
5072
5073 static inline unsigned int
5074 output_sleb128 (char *p, offsetT value)
5075 {
5076   char *orig = p;
5077   int more;
5078
5079   do
5080     {
5081       unsigned byte = (value & 0x7f);
5082
5083       /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
5084          Fortunately, we can structure things so that the extra work reduces
5085          to a noop on systems that do things "properly".  */
5086       value = (value >> 7) | ~(-(offsetT)1 >> 7);
5087
5088       more = !((((value == 0) && ((byte & 0x40) == 0))
5089                 || ((value == -1) && ((byte & 0x40) != 0))));
5090       if (more)
5091         byte |= 0x80;
5092
5093       *p++ = byte;
5094     }
5095   while (more);
5096
5097   return p - orig;
5098 }
5099
5100 static inline unsigned int
5101 output_uleb128 (char *p, valueT value)
5102 {
5103   char *orig = p;
5104
5105   do
5106     {
5107       unsigned byte = (value & 0x7f);
5108
5109       value >>= 7;
5110       if (value != 0)
5111         /* More bytes to follow.  */
5112         byte |= 0x80;
5113
5114       *p++ = byte;
5115     }
5116   while (value != 0);
5117
5118   return p - orig;
5119 }
5120
5121 unsigned int
5122 output_leb128 (char *p, valueT value, int sign)
5123 {
5124   if (sign)
5125     return output_sleb128 (p, (offsetT) value);
5126   else
5127     return output_uleb128 (p, value);
5128 }
5129
5130 /* Do the same for bignums.  We combine sizeof with output here in that
5131    we don't output for NULL values of P.  It isn't really as critical as
5132    for "normal" values that this be streamlined.  Returns the number of
5133    bytes used.  */
5134
5135 static inline unsigned int
5136 output_big_sleb128 (char *p, LITTLENUM_TYPE *bignum, unsigned int size)
5137 {
5138   char *orig = p;
5139   valueT val = 0;
5140   int loaded = 0;
5141   unsigned byte;
5142
5143   /* Strip leading sign extensions off the bignum.  */
5144   while (size > 1
5145          && bignum[size - 1] == LITTLENUM_MASK
5146          && bignum[size - 2] > LITTLENUM_MASK / 2)
5147     size--;
5148
5149   do
5150     {
5151       /* OR in the next part of the littlenum.  */
5152       val |= (*bignum << loaded);
5153       loaded += LITTLENUM_NUMBER_OF_BITS;
5154       size--;
5155       bignum++;
5156
5157       /* Add bytes until there are less than 7 bits left in VAL
5158          or until every non-sign bit has been written.  */
5159       do
5160         {
5161           byte = val & 0x7f;
5162           loaded -= 7;
5163           val >>= 7;
5164           if (size > 0
5165               || val != ((byte & 0x40) == 0 ? 0 : ((valueT) 1 << loaded) - 1))
5166             byte |= 0x80;
5167
5168           if (orig)
5169             *p = byte;
5170           p++;
5171         }
5172       while ((byte & 0x80) != 0 && loaded >= 7);
5173     }
5174   while (size > 0);
5175
5176   /* Mop up any left-over bits (of which there will be less than 7).  */
5177   if ((byte & 0x80) != 0)
5178     {
5179       /* Sign-extend VAL.  */
5180       if (val & (1 << (loaded - 1)))
5181         val |= ~0U << loaded;
5182       if (orig)
5183         *p = val & 0x7f;
5184       p++;
5185     }
5186
5187   return p - orig;
5188 }
5189
5190 static inline unsigned int
5191 output_big_uleb128 (char *p, LITTLENUM_TYPE *bignum, unsigned int size)
5192 {
5193   char *orig = p;
5194   valueT val = 0;
5195   int loaded = 0;
5196   unsigned byte;
5197
5198   /* Strip leading zeros off the bignum.  */
5199   /* XXX: Is this needed?  */
5200   while (size > 0 && bignum[size - 1] == 0)
5201     size--;
5202
5203   do
5204     {
5205       if (loaded < 7 && size > 0)
5206         {
5207           val |= (*bignum << loaded);
5208           loaded += 8 * CHARS_PER_LITTLENUM;
5209           size--;
5210           bignum++;
5211         }
5212
5213       byte = val & 0x7f;
5214       loaded -= 7;
5215       val >>= 7;
5216
5217       if (size > 0 || val)
5218         byte |= 0x80;
5219
5220       if (orig)
5221         *p = byte;
5222       p++;
5223     }
5224   while (byte & 0x80);
5225
5226   return p - orig;
5227 }
5228
5229 static unsigned int
5230 output_big_leb128 (char *p, LITTLENUM_TYPE *bignum, unsigned int size, int sign)
5231 {
5232   if (sign)
5233     return output_big_sleb128 (p, bignum, size);
5234   else
5235     return output_big_uleb128 (p, bignum, size);
5236 }
5237
5238 /* Generate the appropriate fragments for a given expression to emit a
5239    leb128 value.  SIGN is 1 for sleb, 0 for uleb.  */
5240
5241 static void
5242 emit_leb128_expr (expressionS *exp, int sign)
5243 {
5244   operatorT op = exp->X_op;
5245   unsigned int nbytes;
5246
5247   if (op == O_absent || op == O_illegal)
5248     {
5249       as_warn (_("zero assumed for missing expression"));
5250       exp->X_add_number = 0;
5251       op = O_constant;
5252     }
5253   else if (op == O_big && exp->X_add_number <= 0)
5254     {
5255       as_bad (_("floating point number invalid"));
5256       exp->X_add_number = 0;
5257       op = O_constant;
5258     }
5259   else if (op == O_register)
5260     {
5261       as_warn (_("register value used as expression"));
5262       op = O_constant;
5263     }
5264   else if (op == O_constant
5265            && sign
5266            && (exp->X_add_number < 0) == !exp->X_extrabit)
5267     {
5268       /* We're outputting a signed leb128 and the sign of X_add_number
5269          doesn't reflect the sign of the original value.  Convert EXP
5270          to a correctly-extended bignum instead.  */
5271       convert_to_bignum (exp, exp->X_extrabit);
5272       op = O_big;
5273     }
5274
5275   if (now_seg == absolute_section)
5276     {
5277       if (op != O_constant || exp->X_add_number != 0)
5278         as_bad (_("attempt to store value in absolute section"));
5279       abs_section_offset++;
5280       return;
5281     }
5282
5283   if ((op != O_constant || exp->X_add_number != 0) && in_bss ())
5284     as_bad (_("attempt to store non-zero value in section `%s'"),
5285             segment_name (now_seg));
5286
5287   /* Let check_eh_frame know that data is being emitted.  nbytes == -1 is
5288      a signal that this is leb128 data.  It shouldn't optimize this away.  */
5289   nbytes = (unsigned int) -1;
5290   if (check_eh_frame (exp, &nbytes))
5291     abort ();
5292
5293   /* Let the backend know that subsequent data may be byte aligned.  */
5294 #ifdef md_cons_align
5295   md_cons_align (1);
5296 #endif
5297
5298   if (op == O_constant)
5299     {
5300       /* If we've got a constant, emit the thing directly right now.  */
5301
5302       valueT value = exp->X_add_number;
5303       unsigned int size;
5304       char *p;
5305
5306       size = sizeof_leb128 (value, sign);
5307       p = frag_more (size);
5308       if (output_leb128 (p, value, sign) > size)
5309         abort ();
5310     }
5311   else if (op == O_big)
5312     {
5313       /* O_big is a different sort of constant.  */
5314
5315       unsigned int size;
5316       char *p;
5317
5318       size = output_big_leb128 (NULL, generic_bignum, exp->X_add_number, sign);
5319       p = frag_more (size);
5320       if (output_big_leb128 (p, generic_bignum, exp->X_add_number, sign) > size)
5321         abort ();
5322     }
5323   else
5324     {
5325       /* Otherwise, we have to create a variable sized fragment and
5326          resolve things later.  */
5327
5328       frag_var (rs_leb128, sizeof_uleb128 (~(valueT) 0), 0, sign,
5329                 make_expr_symbol (exp), 0, (char *) NULL);
5330     }
5331 }
5332
5333 /* Parse the .sleb128 and .uleb128 pseudos.  */
5334
5335 void
5336 s_leb128 (int sign)
5337 {
5338   expressionS exp;
5339
5340 #ifdef md_flush_pending_output
5341   md_flush_pending_output ();
5342 #endif
5343
5344   do
5345     {
5346       expression (&exp);
5347       emit_leb128_expr (&exp, sign);
5348     }
5349   while (*input_line_pointer++ == ',');
5350
5351   input_line_pointer--;
5352   demand_empty_rest_of_line ();
5353 }
5354 \f
5355 static void
5356 stringer_append_char (int c, int bitsize)
5357 {
5358   if (c && in_bss ())
5359     as_bad (_("attempt to store non-empty string in section `%s'"),
5360             segment_name (now_seg));
5361
5362   if (!target_big_endian)
5363     FRAG_APPEND_1_CHAR (c);
5364
5365   switch (bitsize)
5366     {
5367     case 64:
5368       FRAG_APPEND_1_CHAR (0);
5369       FRAG_APPEND_1_CHAR (0);
5370       FRAG_APPEND_1_CHAR (0);
5371       FRAG_APPEND_1_CHAR (0);
5372       /* Fall through.  */
5373     case 32:
5374       FRAG_APPEND_1_CHAR (0);
5375       FRAG_APPEND_1_CHAR (0);
5376       /* Fall through.  */
5377     case 16:
5378       FRAG_APPEND_1_CHAR (0);
5379       /* Fall through.  */
5380     case 8:
5381       break;
5382     default:
5383       /* Called with invalid bitsize argument.  */
5384       abort ();
5385       break;
5386     }
5387   if (target_big_endian)
5388     FRAG_APPEND_1_CHAR (c);
5389 }
5390
5391 /* Worker to do .ascii etc statements.
5392    Reads 0 or more ',' separated, double-quoted strings.
5393    Caller should have checked need_pass_2 is FALSE because we don't
5394    check it.
5395    Checks for end-of-line.
5396    BITS_APPENDZERO says how many bits are in a target char.
5397    The bottom bit is set if a NUL char should be appended to the strings.  */
5398
5399 void
5400 stringer (int bits_appendzero)
5401 {
5402   const int bitsize = bits_appendzero & ~7;
5403   const int append_zero = bits_appendzero & 1;
5404   unsigned int c;
5405 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5406   char *start;
5407 #endif
5408
5409 #ifdef md_flush_pending_output
5410   md_flush_pending_output ();
5411 #endif
5412
5413 #ifdef md_cons_align
5414   md_cons_align (1);
5415 #endif
5416
5417   /* If we have been switched into the abs_section then we
5418      will not have an obstack onto which we can hang strings.  */
5419   if (now_seg == absolute_section)
5420     {
5421       as_bad (_("strings must be placed into a section"));
5422       ignore_rest_of_line ();
5423       return;
5424     }
5425
5426   /* The following awkward logic is to parse ZERO or more strings,
5427      comma separated. Recall a string expression includes spaces
5428      before the opening '\"' and spaces after the closing '\"'.
5429      We fake a leading ',' if there is (supposed to be)
5430      a 1st, expression. We keep demanding expressions for each ','.  */
5431   if (is_it_end_of_statement ())
5432     {
5433       c = 0;                    /* Skip loop.  */
5434       ++input_line_pointer;     /* Compensate for end of loop.  */
5435     }
5436   else
5437     {
5438       c = ',';                  /* Do loop.  */
5439     }
5440
5441   while (c == ',' || c == '<' || c == '"')
5442     {
5443       SKIP_WHITESPACE ();
5444       switch (*input_line_pointer)
5445         {
5446         case '\"':
5447           ++input_line_pointer; /*->1st char of string.  */
5448 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5449           start = input_line_pointer;
5450 #endif
5451
5452           while (is_a_char (c = next_char_of_string ()))
5453             stringer_append_char (c, bitsize);
5454
5455           if (append_zero)
5456             stringer_append_char (0, bitsize);
5457
5458           know (input_line_pointer[-1] == '\"');
5459
5460 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5461           /* In ELF, when gcc is emitting DWARF 1 debugging output, it
5462              will emit .string with a filename in the .debug section
5463              after a sequence of constants.  See the comment in
5464              emit_expr for the sequence.  emit_expr will set
5465              dwarf_file_string to non-zero if this string might be a
5466              source file name.  */
5467           if (strcmp (segment_name (now_seg), ".debug") != 0)
5468             dwarf_file_string = 0;
5469           else if (dwarf_file_string)
5470             {
5471               c = input_line_pointer[-1];
5472               input_line_pointer[-1] = '\0';
5473               listing_source_file (start);
5474               input_line_pointer[-1] = c;
5475             }
5476 #endif
5477
5478           break;
5479         case '<':
5480           input_line_pointer++;
5481           c = get_single_number ();
5482           stringer_append_char (c, bitsize);
5483           if (*input_line_pointer != '>')
5484             as_bad (_("expected <nn>"));
5485
5486           input_line_pointer++;
5487           break;
5488         case ',':
5489           input_line_pointer++;
5490           break;
5491         }
5492       SKIP_WHITESPACE ();
5493       c = *input_line_pointer;
5494     }
5495
5496   demand_empty_rest_of_line ();
5497 }
5498 \f
5499 /* FIXME-SOMEDAY: I had trouble here on characters with the
5500     high bits set.  We'll probably also have trouble with
5501     multibyte chars, wide chars, etc.  Also be careful about
5502     returning values bigger than 1 byte.  xoxorich.  */
5503
5504 unsigned int
5505 next_char_of_string (void)
5506 {
5507   unsigned int c;
5508
5509   c = *input_line_pointer++ & CHAR_MASK;
5510   switch (c)
5511     {
5512     case '\"':
5513       c = NOT_A_CHAR;
5514       break;
5515
5516     case '\n':
5517       as_warn (_("unterminated string; newline inserted"));
5518       bump_line_counters ();
5519       break;
5520
5521 #ifndef NO_STRING_ESCAPES
5522     case '\\':
5523       switch (c = *input_line_pointer++ & CHAR_MASK)
5524         {
5525         case 'b':
5526           c = '\b';
5527           break;
5528
5529         case 'f':
5530           c = '\f';
5531           break;
5532
5533         case 'n':
5534           c = '\n';
5535           break;
5536
5537         case 'r':
5538           c = '\r';
5539           break;
5540
5541         case 't':
5542           c = '\t';
5543           break;
5544
5545         case 'v':
5546           c = '\013';
5547           break;
5548
5549         case '\\':
5550         case '"':
5551           break;                /* As itself.  */
5552
5553         case '0':
5554         case '1':
5555         case '2':
5556         case '3':
5557         case '4':
5558         case '5':
5559         case '6':
5560         case '7':
5561         case '8':
5562         case '9':
5563           {
5564             long number;
5565             int i;
5566
5567             for (i = 0, number = 0;
5568                  ISDIGIT (c) && i < 3;
5569                  c = *input_line_pointer++, i++)
5570               {
5571                 number = number * 8 + c - '0';
5572               }
5573
5574             c = number & CHAR_MASK;
5575           }
5576           --input_line_pointer;
5577           break;
5578
5579         case 'x':
5580         case 'X':
5581           {
5582             long number;
5583
5584             number = 0;
5585             c = *input_line_pointer++;
5586             while (ISXDIGIT (c))
5587               {
5588                 if (ISDIGIT (c))
5589                   number = number * 16 + c - '0';
5590                 else if (ISUPPER (c))
5591                   number = number * 16 + c - 'A' + 10;
5592                 else
5593                   number = number * 16 + c - 'a' + 10;
5594                 c = *input_line_pointer++;
5595               }
5596             c = number & CHAR_MASK;
5597             --input_line_pointer;
5598           }
5599           break;
5600
5601         case '\n':
5602           /* To be compatible with BSD 4.2 as: give the luser a linefeed!!  */
5603           as_warn (_("unterminated string; newline inserted"));
5604           c = '\n';
5605           bump_line_counters ();
5606           break;
5607
5608         default:
5609
5610 #ifdef ONLY_STANDARD_ESCAPES
5611           as_bad (_("bad escaped character in string"));
5612           c = '?';
5613 #endif /* ONLY_STANDARD_ESCAPES */
5614
5615           break;
5616         }
5617       break;
5618 #endif /* ! defined (NO_STRING_ESCAPES) */
5619
5620     default:
5621       break;
5622     }
5623   return (c);
5624 }
5625 \f
5626 static segT
5627 get_segmented_expression (expressionS *expP)
5628 {
5629   segT retval;
5630
5631   retval = expression (expP);
5632   if (expP->X_op == O_illegal
5633       || expP->X_op == O_absent
5634       || expP->X_op == O_big)
5635     {
5636       as_bad (_("expected address expression"));
5637       expP->X_op = O_constant;
5638       expP->X_add_number = 0;
5639       retval = absolute_section;
5640     }
5641   return retval;
5642 }
5643
5644 static segT
5645 get_known_segmented_expression (expressionS *expP)
5646 {
5647   segT retval = get_segmented_expression (expP);
5648
5649   if (retval == undefined_section)
5650     {
5651       /* There is no easy way to extract the undefined symbol from the
5652          expression.  */
5653       if (expP->X_add_symbol != NULL
5654           && S_GET_SEGMENT (expP->X_add_symbol) != expr_section)
5655         as_warn (_("symbol \"%s\" undefined; zero assumed"),
5656                  S_GET_NAME (expP->X_add_symbol));
5657       else
5658         as_warn (_("some symbol undefined; zero assumed"));
5659       retval = absolute_section;
5660       expP->X_op = O_constant;
5661       expP->X_add_number = 0;
5662     }
5663   return retval;
5664 }
5665
5666 char                            /* Return terminator.  */
5667 get_absolute_expression_and_terminator (long *val_pointer /* Return value of expression.  */)
5668 {
5669   /* FIXME: val_pointer should probably be offsetT *.  */
5670   *val_pointer = (long) get_absolute_expression ();
5671   return (*input_line_pointer++);
5672 }
5673 \f
5674 /* Like demand_copy_string, but return NULL if the string contains any '\0's.
5675    Give a warning if that happens.  */
5676
5677 char *
5678 demand_copy_C_string (int *len_pointer)
5679 {
5680   char *s;
5681
5682   if ((s = demand_copy_string (len_pointer)) != 0)
5683     {
5684       int len;
5685
5686       for (len = *len_pointer; len > 0; len--)
5687         {
5688           if (*s == 0)
5689             {
5690               s = 0;
5691               len = 1;
5692               *len_pointer = 0;
5693               as_bad (_("this string may not contain \'\\0\'"));
5694             }
5695         }
5696     }
5697
5698   return s;
5699 }
5700 \f
5701 /* Demand string, but return a safe (=private) copy of the string.
5702    Return NULL if we can't read a string here.  */
5703
5704 char *
5705 demand_copy_string (int *lenP)
5706 {
5707   unsigned int c;
5708   int len;
5709   char *retval;
5710
5711   len = 0;
5712   SKIP_WHITESPACE ();
5713   if (*input_line_pointer == '\"')
5714     {
5715       input_line_pointer++;     /* Skip opening quote.  */
5716
5717       while (is_a_char (c = next_char_of_string ()))
5718         {
5719           obstack_1grow (&notes, c);
5720           len++;
5721         }
5722       /* JF this next line is so demand_copy_C_string will return a
5723          null terminated string.  */
5724       obstack_1grow (&notes, '\0');
5725       retval = (char *) obstack_finish (&notes);
5726     }
5727   else
5728     {
5729       as_bad (_("missing string"));
5730       retval = NULL;
5731       ignore_rest_of_line ();
5732     }
5733   *lenP = len;
5734   return (retval);
5735 }
5736 \f
5737 /* In:  Input_line_pointer->next character.
5738
5739    Do:  Skip input_line_pointer over all whitespace.
5740
5741    Out: 1 if input_line_pointer->end-of-line.  */
5742
5743 int
5744 is_it_end_of_statement (void)
5745 {
5746   SKIP_WHITESPACE ();
5747   return (is_end_of_line[(unsigned char) *input_line_pointer]);
5748 }
5749
5750 void
5751 equals (char *sym_name, int reassign)
5752 {
5753   char *stop = NULL;
5754   char stopc = 0;
5755
5756   input_line_pointer++;
5757   if (*input_line_pointer == '=')
5758     input_line_pointer++;
5759   if (reassign < 0 && *input_line_pointer == '=')
5760     input_line_pointer++;
5761
5762   while (*input_line_pointer == ' ' || *input_line_pointer == '\t')
5763     input_line_pointer++;
5764
5765   if (flag_mri)
5766     stop = mri_comment_field (&stopc);
5767
5768   assign_symbol (sym_name, reassign >= 0 ? !reassign : reassign);
5769
5770   if (flag_mri)
5771     {
5772       demand_empty_rest_of_line ();
5773       mri_comment_end (stop, stopc);
5774     }
5775 }
5776
5777 /* .incbin -- include a file verbatim at the current location.  */
5778
5779 void
5780 s_incbin (int x ATTRIBUTE_UNUSED)
5781 {
5782   FILE * binfile;
5783   char * path;
5784   char * filename;
5785   char * binfrag;
5786   long   skip = 0;
5787   long   count = 0;
5788   long   bytes;
5789   int    len;
5790
5791 #ifdef md_flush_pending_output
5792   md_flush_pending_output ();
5793 #endif
5794
5795 #ifdef md_cons_align
5796   md_cons_align (1);
5797 #endif
5798
5799   SKIP_WHITESPACE ();
5800   filename = demand_copy_string (& len);
5801   if (filename == NULL)
5802     return;
5803
5804   SKIP_WHITESPACE ();
5805
5806   /* Look for optional skip and count.  */
5807   if (* input_line_pointer == ',')
5808     {
5809       ++ input_line_pointer;
5810       skip = get_absolute_expression ();
5811
5812       SKIP_WHITESPACE ();
5813
5814       if (* input_line_pointer == ',')
5815         {
5816           ++ input_line_pointer;
5817
5818           count = get_absolute_expression ();
5819           if (count == 0)
5820             as_warn (_(".incbin count zero, ignoring `%s'"), filename);
5821
5822           SKIP_WHITESPACE ();
5823         }
5824     }
5825
5826   demand_empty_rest_of_line ();
5827
5828   /* Try opening absolute path first, then try include dirs.  */
5829   binfile = fopen (filename, FOPEN_RB);
5830   if (binfile == NULL)
5831     {
5832       int i;
5833
5834       path = (char *) xmalloc ((unsigned long) len + include_dir_maxlen + 5);
5835
5836       for (i = 0; i < include_dir_count; i++)
5837         {
5838           sprintf (path, "%s/%s", include_dirs[i], filename);
5839
5840           binfile = fopen (path, FOPEN_RB);
5841           if (binfile != NULL)
5842             break;
5843         }
5844
5845       if (binfile == NULL)
5846         as_bad (_("file not found: %s"), filename);
5847     }
5848   else
5849     path = xstrdup (filename);
5850
5851   if (binfile)
5852     {
5853       long   file_len;
5854
5855       register_dependency (path);
5856
5857       /* Compute the length of the file.  */
5858       if (fseek (binfile, 0, SEEK_END) != 0)
5859         {
5860           as_bad (_("seek to end of .incbin file failed `%s'"), path);
5861           goto done;
5862         }
5863       file_len = ftell (binfile);
5864
5865       /* If a count was not specified use the remainder of the file.  */
5866       if (count == 0)
5867         count = file_len - skip;
5868
5869       if (skip < 0 || count < 0 || file_len < 0 || skip + count > file_len)
5870         {
5871           as_bad (_("skip (%ld) or count (%ld) invalid for file size (%ld)"),
5872                   skip, count, file_len);
5873           goto done;
5874         }
5875
5876       if (fseek (binfile, skip, SEEK_SET) != 0)
5877         {
5878           as_bad (_("could not skip to %ld in file `%s'"), skip, path);
5879           goto done;
5880         }
5881
5882       /* Allocate frag space and store file contents in it.  */
5883       binfrag = frag_more (count);
5884
5885       bytes = fread (binfrag, 1, count, binfile);
5886       if (bytes < count)
5887         as_warn (_("truncated file `%s', %ld of %ld bytes read"),
5888                  path, bytes, count);
5889     }
5890 done:
5891   if (binfile != NULL)
5892     fclose (binfile);
5893   if (path)
5894     free (path);
5895 }
5896
5897 /* .include -- include a file at this point.  */
5898
5899 void
5900 s_include (int arg ATTRIBUTE_UNUSED)
5901 {
5902   char *filename;
5903   int i;
5904   FILE *try_file;
5905   char *path;
5906
5907   if (!flag_m68k_mri)
5908     {
5909       filename = demand_copy_string (&i);
5910       if (filename == NULL)
5911         {
5912           /* demand_copy_string has already printed an error and
5913              called ignore_rest_of_line.  */
5914           return;
5915         }
5916     }
5917   else
5918     {
5919       SKIP_WHITESPACE ();
5920       i = 0;
5921       while (!is_end_of_line[(unsigned char) *input_line_pointer]
5922              && *input_line_pointer != ' '
5923              && *input_line_pointer != '\t')
5924         {
5925           obstack_1grow (&notes, *input_line_pointer);
5926           ++input_line_pointer;
5927           ++i;
5928         }
5929
5930       obstack_1grow (&notes, '\0');
5931       filename = (char *) obstack_finish (&notes);
5932       while (!is_end_of_line[(unsigned char) *input_line_pointer])
5933         ++input_line_pointer;
5934     }
5935
5936   demand_empty_rest_of_line ();
5937   path = (char *) xmalloc ((unsigned long) i
5938                            + include_dir_maxlen + 5 /* slop */ );
5939
5940   for (i = 0; i < include_dir_count; i++)
5941     {
5942       strcpy (path, include_dirs[i]);
5943       strcat (path, "/");
5944       strcat (path, filename);
5945       if (0 != (try_file = fopen (path, FOPEN_RT)))
5946         {
5947           fclose (try_file);
5948           goto gotit;
5949         }
5950     }
5951
5952   free (path);
5953   path = filename;
5954 gotit:
5955   /* malloc Storage leak when file is found on path.  FIXME-SOMEDAY.  */
5956   register_dependency (path);
5957   input_scrub_insert_file (path);
5958 }
5959
5960 void
5961 add_include_dir (char *path)
5962 {
5963   int i;
5964
5965   if (include_dir_count == 0)
5966     {
5967       include_dirs = (char **) xmalloc (2 * sizeof (*include_dirs));
5968       include_dirs[0] = ".";    /* Current dir.  */
5969       include_dir_count = 2;
5970     }
5971   else
5972     {
5973       include_dir_count++;
5974       include_dirs =
5975         (char **) xrealloc (include_dirs,
5976                             include_dir_count * sizeof (*include_dirs));
5977     }
5978
5979   include_dirs[include_dir_count - 1] = path;   /* New one.  */
5980
5981   i = strlen (path);
5982   if (i > include_dir_maxlen)
5983     include_dir_maxlen = i;
5984 }
5985 \f
5986 /* Output debugging information to denote the source file.  */
5987
5988 static void
5989 generate_file_debug (void)
5990 {
5991   if (debug_type == DEBUG_STABS)
5992     stabs_generate_asm_file ();
5993 }
5994
5995 /* Output line number debugging information for the current source line.  */
5996
5997 void
5998 generate_lineno_debug (void)
5999 {
6000   switch (debug_type)
6001     {
6002     case DEBUG_UNSPECIFIED:
6003     case DEBUG_NONE:
6004     case DEBUG_DWARF:
6005       break;
6006     case DEBUG_STABS:
6007       stabs_generate_asm_lineno ();
6008       break;
6009     case DEBUG_ECOFF:
6010       ecoff_generate_asm_lineno ();
6011       break;
6012     case DEBUG_DWARF2:
6013       /* ??? We could here indicate to dwarf2dbg.c that something
6014          has changed.  However, since there is additional backend
6015          support that is required (calling dwarf2_emit_insn), we
6016          let dwarf2dbg.c call as_where on its own.  */
6017       break;
6018     }
6019 }
6020
6021 /* Output debugging information to mark a function entry point or end point.
6022    END_P is zero for .func, and non-zero for .endfunc.  */
6023
6024 void
6025 s_func (int end_p)
6026 {
6027   do_s_func (end_p, NULL);
6028 }
6029
6030 /* Subroutine of s_func so targets can choose a different default prefix.
6031    If DEFAULT_PREFIX is NULL, use the target's "leading char".  */
6032
6033 static void
6034 do_s_func (int end_p, const char *default_prefix)
6035 {
6036   /* Record the current function so that we can issue an error message for
6037      misplaced .func,.endfunc, and also so that .endfunc needs no
6038      arguments.  */
6039   static char *current_name;
6040   static char *current_label;
6041
6042   if (end_p)
6043     {
6044       if (current_name == NULL)
6045         {
6046           as_bad (_("missing .func"));
6047           ignore_rest_of_line ();
6048           return;
6049         }
6050
6051       if (debug_type == DEBUG_STABS)
6052         stabs_generate_asm_endfunc (current_name, current_label);
6053
6054       current_name = current_label = NULL;
6055     }
6056   else /* ! end_p */
6057     {
6058       char *name, *label;
6059       char delim1, delim2;
6060
6061       if (current_name != NULL)
6062         {
6063           as_bad (_(".endfunc missing for previous .func"));
6064           ignore_rest_of_line ();
6065           return;
6066         }
6067
6068       delim1 = get_symbol_name (& name);
6069       name = xstrdup (name);
6070       *input_line_pointer = delim1;
6071       SKIP_WHITESPACE_AFTER_NAME ();
6072       if (*input_line_pointer != ',')
6073         {
6074           if (default_prefix)
6075             {
6076               if (asprintf (&label, "%s%s", default_prefix, name) == -1)
6077                 as_fatal ("%s", xstrerror (errno));
6078             }
6079           else
6080             {
6081               char leading_char = bfd_get_symbol_leading_char (stdoutput);
6082               /* Missing entry point, use function's name with the leading
6083                  char prepended.  */
6084               if (leading_char)
6085                 {
6086                   if (asprintf (&label, "%c%s", leading_char, name) == -1)
6087                     as_fatal ("%s", xstrerror (errno));
6088                 }
6089               else
6090                 label = name;
6091             }
6092         }
6093       else
6094         {
6095           ++input_line_pointer;
6096           SKIP_WHITESPACE ();
6097           delim2 = get_symbol_name (& label);
6098           label = xstrdup (label);
6099           restore_line_pointer (delim2);
6100         }
6101
6102       if (debug_type == DEBUG_STABS)
6103         stabs_generate_asm_func (name, label);
6104
6105       current_name = name;
6106       current_label = label;
6107     }
6108
6109   demand_empty_rest_of_line ();
6110 }
6111 \f
6112 #ifdef HANDLE_BUNDLE
6113
6114 void
6115 s_bundle_align_mode (int arg ATTRIBUTE_UNUSED)
6116 {
6117   unsigned int align = get_absolute_expression ();
6118   SKIP_WHITESPACE ();
6119   demand_empty_rest_of_line ();
6120
6121   if (align > (unsigned int) TC_ALIGN_LIMIT)
6122     as_fatal (_(".bundle_align_mode alignment too large (maximum %u)"),
6123               (unsigned int) TC_ALIGN_LIMIT);
6124
6125   if (bundle_lock_frag != NULL)
6126     {
6127       as_bad (_("cannot change .bundle_align_mode inside .bundle_lock"));
6128       return;
6129     }
6130
6131   bundle_align_p2 = align;
6132 }
6133
6134 void
6135 s_bundle_lock (int arg ATTRIBUTE_UNUSED)
6136 {
6137   demand_empty_rest_of_line ();
6138
6139   if (bundle_align_p2 == 0)
6140     {
6141       as_bad (_(".bundle_lock is meaningless without .bundle_align_mode"));
6142       return;
6143     }
6144
6145   if (bundle_lock_depth == 0)
6146     {
6147       bundle_lock_frchain = frchain_now;
6148       bundle_lock_frag = start_bundle ();
6149     }
6150   ++bundle_lock_depth;
6151 }
6152
6153 void
6154 s_bundle_unlock (int arg ATTRIBUTE_UNUSED)
6155 {
6156   unsigned int size;
6157
6158   demand_empty_rest_of_line ();
6159
6160   if (bundle_lock_frag == NULL)
6161     {
6162       as_bad (_(".bundle_unlock without preceding .bundle_lock"));
6163       return;
6164     }
6165
6166   gas_assert (bundle_align_p2 > 0);
6167
6168   gas_assert (bundle_lock_depth > 0);
6169   if (--bundle_lock_depth > 0)
6170     return;
6171
6172   size = pending_bundle_size (bundle_lock_frag);
6173
6174   if (size > (1U << bundle_align_p2))
6175     as_bad (_(".bundle_lock sequence is %u bytes, but bundle size only %u"),
6176             size, 1 << bundle_align_p2);
6177   else
6178     finish_bundle (bundle_lock_frag, size);
6179
6180   bundle_lock_frag = NULL;
6181   bundle_lock_frchain = NULL;
6182 }
6183
6184 #endif  /* HANDLE_BUNDLE */
6185 \f
6186 void
6187 s_ignore (int arg ATTRIBUTE_UNUSED)
6188 {
6189   ignore_rest_of_line ();
6190 }
6191
6192 void
6193 read_print_statistics (FILE *file)
6194 {
6195   hash_print_statistics (file, "pseudo-op table", po_hash);
6196 }
6197
6198 /* Inserts the given line into the input stream.
6199
6200    This call avoids macro/conditionals nesting checking, since the contents of
6201    the line are assumed to replace the contents of a line already scanned.
6202
6203    An appropriate use of this function would be substitution of input lines when
6204    called by md_start_line_hook().  The given line is assumed to already be
6205    properly scrubbed.  */
6206
6207 void
6208 input_scrub_insert_line (const char *line)
6209 {
6210   sb newline;
6211   size_t len = strlen (line);
6212   sb_build (&newline, len);
6213   sb_add_buffer (&newline, line, len);
6214   input_scrub_include_sb (&newline, input_line_pointer, 0);
6215   sb_kill (&newline);
6216   buffer_limit = input_scrub_next_buffer (&input_line_pointer);
6217 }
6218
6219 /* Insert a file into the input stream; the path must resolve to an actual
6220    file; no include path searching or dependency registering is performed.  */
6221
6222 void
6223 input_scrub_insert_file (char *path)
6224 {
6225   input_scrub_include_file (path, input_line_pointer);
6226   buffer_limit = input_scrub_next_buffer (&input_line_pointer);
6227 }
6228
6229 /* Find the end of a line, considering quotation and escaping of quotes.  */
6230
6231 #if !defined(TC_SINGLE_QUOTE_STRINGS) && defined(SINGLE_QUOTE_STRINGS)
6232 # define TC_SINGLE_QUOTE_STRINGS 1
6233 #endif
6234
6235 static char *
6236 _find_end_of_line (char *s, int mri_string, int insn ATTRIBUTE_UNUSED,
6237                    int in_macro)
6238 {
6239   char inquote = '\0';
6240   int inescape = 0;
6241
6242   while (!is_end_of_line[(unsigned char) *s]
6243          || (inquote && !ISCNTRL (*s))
6244          || (inquote == '\'' && flag_mri)
6245 #ifdef TC_EOL_IN_INSN
6246          || (insn && TC_EOL_IN_INSN (s))
6247 #endif
6248          /* PR 6926:  When we are parsing the body of a macro the sequence
6249             \@ is special - it refers to the invocation count.  If the @
6250             character happens to be registered as a line-separator character
6251             by the target, then the is_end_of_line[] test above will have
6252             returned true, but we need to ignore the line separating
6253             semantics in this particular case.  */
6254          || (in_macro && inescape && *s == '@')
6255         )
6256     {
6257       if (mri_string && *s == '\'')
6258         inquote ^= *s;
6259       else if (inescape)
6260         inescape = 0;
6261       else if (*s == '\\')
6262         inescape = 1;
6263       else if (!inquote
6264                ? *s == '"'
6265 #ifdef TC_SINGLE_QUOTE_STRINGS
6266                  || (TC_SINGLE_QUOTE_STRINGS && *s == '\'')
6267 #endif
6268                : *s == inquote)
6269         inquote ^= *s;
6270       ++s;
6271     }
6272   if (inquote)
6273     as_warn (_("missing closing `%c'"), inquote);
6274   if (inescape && !ignore_input ())
6275     as_warn (_("stray `\\'"));
6276   return s;
6277 }
6278
6279 char *
6280 find_end_of_line (char *s, int mri_string)
6281 {
6282   return _find_end_of_line (s, mri_string, 0, 0);
6283 }