1 /* read.c - read a source file -
2 Copyright (C) 1986-2015 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
11 GAS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GAS; see the file COPYING. If not, write to the Free
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21 /* If your chars aren't 8 bits, you will change this a bit (eg. to 0xFF).
22 But then, GNU isn't spozed to run on your machine anyway.
23 (RMS is so shortsighted sometimes.) */
24 #define MASK_CHAR ((int)(unsigned char) -1)
26 /* This is the largest known floating point format (for now). It will
27 grow when we do 4361 style flonums. */
28 #define MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT (16)
30 /* Routines that read assembler source text to build spaghetti in memory.
31 Another group of these functions is in the expr.c module. */
34 #include "safe-ctype.h"
40 #include "dw2gencfi.h"
43 #ifndef TC_START_LABEL
44 #define TC_START_LABEL(x,y,z) (x == ':')
47 /* Set by the object-format or the target. */
48 #ifndef TC_IMPLICIT_LCOMM_ALIGNMENT
49 #define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) \
54 else if ((SIZE) >= 4) \
56 else if ((SIZE) >= 2) \
64 char *input_line_pointer
; /*->next char of source file to parse. */
66 #if BITS_PER_CHAR != 8
67 /* The following table is indexed by[(char)] and will break if
68 a char does not have exactly 256 states (hopefully 0:255!)! */
77 /* The RS/6000 assembler uses {,},[,] as parts of symbol names. */
82 /* The Delta 68k assembler permits % inside label names. */
87 /* The PowerPC Windows NT assemblers permits ? inside label names. */
92 /* The IA-64 assembler uses # as a suffix designating a symbol. We include
93 it in the symbol and strip it out in tc_canonicalize_symbol_name. */
102 /* The Delta 68k assembler permits ~ at start of label names. */
106 /* Used by is_... macros. our ctype[]. */
107 char lex_type
[256] = {
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* @ABCDEFGHIJKLMNO */
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* PQRSTUVWXYZ[\]^_ */
110 0, 0, 0, LEX_HASH
, LEX_DOLLAR
, LEX_PCT
, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, /* _!"#$%&'()*+,-./ */
111 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, LEX_QM
, /* 0123456789:;<=>? */
112 LEX_AT
, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* @ABCDEFGHIJKLMNO */
113 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR
, 0, LEX_BR
, 0, 3, /* PQRSTUVWXYZ[\]^_ */
114 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* `abcdefghijklmno */
115 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, LEX_BR
, 0, LEX_BR
, LEX_TILDE
, 0, /* pqrstuvwxyz{|}~. */
116 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
117 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
118 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
119 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
120 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
121 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
122 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
123 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
127 Out: 1 if this character ends a line.
128 2 if this character is a line separator. */
129 char is_end_of_line
[256] = {
131 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, /* @abcdefghijklmno */
133 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* @abcdefghijklmno */
135 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
136 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* _!"#$%&'()*+,-./ */
137 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0123456789:;<=>? */
138 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
140 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* */
149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /* */
152 #ifndef TC_CASE_SENSITIVE
153 char original_case_string
[128];
156 /* Functions private to this file. */
158 static char *buffer
; /* 1st char of each buffer of lines is here. */
159 static char *buffer_limit
; /*->1 + last char in buffer. */
161 /* TARGET_BYTES_BIG_ENDIAN is required to be defined to either 0 or 1
162 in the tc-<CPU>.h file. See the "Porting GAS" section of the
164 int target_big_endian
= TARGET_BYTES_BIG_ENDIAN
;
166 /* Variables for handling include file directory table. */
168 /* Table of pointers to directories to search for .include's. */
171 /* How many are in the table. */
172 int include_dir_count
;
174 /* Length of longest in table. */
175 int include_dir_maxlen
= 1;
177 #ifndef WORKING_DOT_WORD
178 struct broken_word
*broken_words
;
179 int new_broken_words
;
182 /* The current offset into the absolute section. We don't try to
183 build frags in the absolute section, since no data can be stored
184 there. We just keep track of the current offset. */
185 addressT abs_section_offset
;
187 /* If this line had an MRI style label, it is stored in this variable.
188 This is used by some of the MRI pseudo-ops. */
191 /* This global variable is used to support MRI common sections. We
192 translate such sections into a common symbol. This variable is
193 non-NULL when we are in an MRI common section. */
194 symbolS
*mri_common_symbol
;
196 /* In MRI mode, after a dc.b pseudo-op with an odd number of bytes, we
197 need to align to an even byte boundary unless the next pseudo-op is
198 dc.b, ds.b, or dcb.b. This variable is set to 1 if an alignment
200 static int mri_pending_align
;
204 /* This variable is set to be non-zero if the next string we see might
205 be the name of the source file in DWARF debugging information. See
206 the comment in emit_expr for the format we look for. */
207 static int dwarf_file_string
;
211 /* If the target defines the md_frag_max_var hook then we know
212 enough to implement the .bundle_align_mode features. */
213 #ifdef md_frag_max_var
214 # define HANDLE_BUNDLE
218 /* .bundle_align_mode sets this. Normally it's zero. When nonzero,
219 it's the exponent of the bundle size, and aligned instruction bundle
220 mode is in effect. */
221 static unsigned int bundle_align_p2
;
223 /* These are set by .bundle_lock and .bundle_unlock. .bundle_lock sets
224 bundle_lock_frag to frag_now and then starts a new frag with
225 frag_align_code. At the same time, bundle_lock_frain gets frchain_now,
226 so that .bundle_unlock can verify that we didn't change segments.
227 .bundle_unlock resets both to NULL. If we detect a bundling violation,
228 then we reset bundle_lock_frchain to NULL as an indicator that we've
229 already diagnosed the error with as_bad and don't need a cascade of
230 redundant errors, but bundle_lock_frag remains set to indicate that
231 we are expecting to see .bundle_unlock. */
232 static fragS
*bundle_lock_frag
;
233 static frchainS
*bundle_lock_frchain
;
235 /* This is incremented by .bundle_lock and decremented by .bundle_unlock,
237 static unsigned int bundle_lock_depth
;
240 static void do_s_func (int end_p
, const char *default_prefix
);
241 static void do_align (int, char *, int, int);
242 static void s_align (int, int);
243 static void s_altmacro (int);
244 static void s_bad_end (int);
245 static void s_reloc (int);
246 static int hex_float (int, char *);
247 static segT
get_known_segmented_expression (expressionS
* expP
);
248 static void pobegin (void);
249 static size_t get_non_macro_line_sb (sb
*);
250 static void generate_file_debug (void);
251 static char *_find_end_of_line (char *, int, int, int);
259 obj_read_begin_hook ();
261 /* Something close -- but not too close -- to a multiple of 1024.
262 The debugging malloc I'm using has 24 bytes of overhead. */
263 obstack_begin (¬es
, chunksize
);
264 obstack_begin (&cond_obstack
, chunksize
);
266 #ifndef tc_line_separator_chars
267 #define tc_line_separator_chars line_separator_chars
269 /* Use machine dependent syntax. */
270 for (p
= tc_line_separator_chars
; *p
; p
++)
271 is_end_of_line
[(unsigned char) *p
] = 2;
272 /* Use more. FIXME-SOMEDAY. */
278 #ifndef TC_ADDRESS_BYTES
279 #define TC_ADDRESS_BYTES address_bytes
284 /* Choose smallest of 1, 2, 4, 8 bytes that is large enough to
285 contain an address. */
286 int n
= (stdoutput
->arch_info
->bits_per_address
- 1) / 8;
294 /* Set up pseudo-op tables. */
296 static struct hash_control
*po_hash
;
298 static const pseudo_typeS potable
[] = {
299 {"abort", s_abort
, 0},
300 {"align", s_align_ptwo
, 0},
301 {"altmacro", s_altmacro
, 1},
302 {"ascii", stringer
, 8+0},
303 {"asciz", stringer
, 8+1},
304 {"balign", s_align_bytes
, 0},
305 {"balignw", s_align_bytes
, -2},
306 {"balignl", s_align_bytes
, -4},
309 {"bundle_align_mode", s_bundle_align_mode
, 0},
310 {"bundle_lock", s_bundle_lock
, 0},
311 {"bundle_unlock", s_bundle_unlock
, 0},
315 {"common", s_mri_common
, 0},
316 {"common.s", s_mri_common
, 1},
319 #ifdef TC_ADDRESS_BYTES
323 {"dc.d", float_cons
, 'd'},
325 {"dc.s", float_cons
, 'f'},
327 {"dc.x", float_cons
, 'x'},
329 {"dcb.b", s_space
, 1},
330 {"dcb.d", s_float_space
, 'd'},
331 {"dcb.l", s_space
, 4},
332 {"dcb.s", s_float_space
, 'f'},
333 {"dcb.w", s_space
, 2},
334 {"dcb.x", s_float_space
, 'x'},
336 {"ds.b", s_space
, 1},
337 {"ds.d", s_space
, 8},
338 {"ds.l", s_space
, 4},
339 {"ds.p", s_space
, 12},
340 {"ds.s", s_space
, 4},
341 {"ds.w", s_space
, 2},
342 {"ds.x", s_space
, 12},
343 {"debug", s_ignore
, 0},
348 {"double", float_cons
, 'd'},
350 {"eject", listing_eject
, 0}, /* Formfeed listing. */
352 {"elsec", s_else
, 0},
353 {"elseif", s_elseif
, (int) O_ne
},
355 {"endc", s_endif
, 0},
356 {"endfunc", s_func
, 1},
357 {"endif", s_endif
, 0},
358 {"endm", s_bad_end
, 0},
359 {"endr", s_bad_end
, 1},
365 {"error", s_errwarn
, 1},
366 {"exitm", s_mexit
, 0},
368 {"extern", s_ignore
, 0}, /* We treat all undef as ext. */
369 {"appfile", s_app_file
, 1},
370 {"appline", s_app_line
, 1},
372 {"file", s_app_file
, 0},
374 {"float", float_cons
, 'f'},
375 {"format", s_ignore
, 0},
377 {"global", s_globl
, 0},
378 {"globl", s_globl
, 0},
380 {"if", s_if
, (int) O_ne
},
383 {"ifdef", s_ifdef
, 0},
384 {"ifeq", s_if
, (int) O_eq
},
385 {"ifeqs", s_ifeqs
, 0},
386 {"ifge", s_if
, (int) O_ge
},
387 {"ifgt", s_if
, (int) O_gt
},
388 {"ifle", s_if
, (int) O_le
},
389 {"iflt", s_if
, (int) O_lt
},
392 {"ifndef", s_ifdef
, 1},
393 {"ifne", s_if
, (int) O_ne
},
394 {"ifnes", s_ifeqs
, 1},
395 {"ifnotdef", s_ifdef
, 1},
396 {"incbin", s_incbin
, 0},
397 {"include", s_include
, 0},
403 {"lcomm", s_lcomm
, 0},
404 {"lflags", s_ignore
, 0}, /* Listing flags. */
405 {"linefile", s_app_line
, 0},
406 {"linkonce", s_linkonce
, 0},
407 {"list", listing_list
, 1}, /* Turn listing on. */
408 {"llen", listing_psize
, 1},
411 {"macro", s_macro
, 0},
412 {"mexit", s_mexit
, 0},
414 {".mri", s_mri
, 0}, /* Special case so .mri works in MRI mode. */
415 {"name", s_ignore
, 0},
416 {"noaltmacro", s_altmacro
, 0},
417 {"noformat", s_ignore
, 0},
418 {"nolist", listing_list
, 0}, /* Turn listing off. */
419 {"nopage", listing_nopage
, 0},
421 {"offset", s_struct
, 0},
423 {"p2align", s_align_ptwo
, 0},
424 {"p2alignw", s_align_ptwo
, -2},
425 {"p2alignl", s_align_ptwo
, -4},
426 {"page", listing_eject
, 0},
427 {"plen", listing_psize
, 0},
428 {"print", s_print
, 0},
429 {"psize", listing_psize
, 0}, /* Set paper size. */
430 {"purgem", s_purgem
, 0},
432 {"reloc", s_reloc
, 0},
436 {"sbttl", listing_title
, 1}, /* Subtitle of listing. */
441 {"single", float_cons
, 'f'},
443 {"space", s_space
, 0},
444 {"skip", s_space
, 0},
445 {"sleb128", s_leb128
, 1},
446 {"spc", s_ignore
, 0},
447 {"stabd", s_stab
, 'd'},
448 {"stabn", s_stab
, 'n'},
449 {"stabs", s_stab
, 's'},
450 {"string", stringer
, 8+1},
451 {"string8", stringer
, 8+1},
452 {"string16", stringer
, 16+1},
453 {"string32", stringer
, 32+1},
454 {"string64", stringer
, 64+1},
455 {"struct", s_struct
, 0},
459 /* This is for gcc to use. It's only just been added (2/94), so gcc
460 won't be able to use it for a while -- probably a year or more.
461 But once this has been released, check with gcc maintainers
462 before deleting it or even changing the spelling. */
463 {"this_GCC_requires_the_GNU_assembler", s_ignore
, 0},
464 /* If we're folding case -- done for some targets, not necessarily
465 all -- the above string in an input file will be converted to
466 this one. Match it either way... */
467 {"this_gcc_requires_the_gnu_assembler", s_ignore
, 0},
469 {"title", listing_title
, 0}, /* Listing title. */
470 {"ttl", listing_title
, 0},
472 {"uleb128", s_leb128
, 0},
476 {"xdef", s_globl
, 0},
477 {"xref", s_ignore
, 0},
478 {"xstabs", s_xstab
, 's'},
479 {"warning", s_errwarn
, 0},
480 {"weakref", s_weakref
, 0},
482 {"zero", s_space
, 0},
483 {NULL
, NULL
, 0} /* End sentinel. */
487 get_absolute_expr (expressionS
*exp
)
489 expression_and_evaluate (exp
);
490 if (exp
->X_op
!= O_constant
)
492 if (exp
->X_op
!= O_absent
)
493 as_bad (_("bad or irreducible absolute expression"));
494 exp
->X_add_number
= 0;
496 return exp
->X_add_number
;
500 get_absolute_expression (void)
504 return get_absolute_expr (&exp
);
507 static int pop_override_ok
= 0;
508 static const char *pop_table_name
;
511 pop_insert (const pseudo_typeS
*table
)
514 const pseudo_typeS
*pop
;
515 for (pop
= table
; pop
->poc_name
; pop
++)
517 errtxt
= hash_insert (po_hash
, pop
->poc_name
, (char *) pop
);
518 if (errtxt
&& (!pop_override_ok
|| strcmp (errtxt
, "exists")))
519 as_fatal (_("error constructing %s pseudo-op table: %s"), pop_table_name
,
524 #ifndef md_pop_insert
525 #define md_pop_insert() pop_insert(md_pseudo_table)
528 #ifndef obj_pop_insert
529 #define obj_pop_insert() pop_insert(obj_pseudo_table)
532 #ifndef cfi_pop_insert
533 #define cfi_pop_insert() pop_insert(cfi_pseudo_table)
539 po_hash
= hash_new ();
541 /* Do the target-specific pseudo ops. */
542 pop_table_name
= "md";
545 /* Now object specific. Skip any that were in the target table. */
546 pop_table_name
= "obj";
550 /* Now portable ones. Skip any that we've seen already. */
551 pop_table_name
= "standard";
552 pop_insert (potable
);
555 pop_table_name
= "cfi";
560 #define HANDLE_CONDITIONAL_ASSEMBLY(num_read) \
561 if (ignore_input ()) \
563 char *eol = find_end_of_line (input_line_pointer - (num_read), \
565 input_line_pointer = (input_line_pointer <= buffer_limit \
566 && eol >= buffer_limit) \
572 /* This function is used when scrubbing the characters between #APP
575 static char *scrub_string
;
576 static char *scrub_string_end
;
579 scrub_from_string (char *buf
, size_t buflen
)
583 copy
= scrub_string_end
- scrub_string
;
586 memcpy (buf
, scrub_string
, copy
);
587 scrub_string
+= copy
;
591 /* Helper function of read_a_source_file, which tries to expand a macro. */
593 try_macro (char term
, const char *line
)
599 if (check_macro (line
, &out
, &err
, ¯o
))
603 *input_line_pointer
++ = term
;
604 input_scrub_include_sb (&out
,
605 input_line_pointer
, 1);
608 input_scrub_next_buffer (&input_line_pointer
);
610 md_macro_info (macro
);
618 /* Start a new instruction bundle. Returns the rs_align_code frag that
619 will be used to align the new bundle. */
623 fragS
*frag
= frag_now
;
625 frag_align_code (0, 0);
627 while (frag
->fr_type
!= rs_align_code
)
628 frag
= frag
->fr_next
;
630 gas_assert (frag
!= frag_now
);
635 /* Calculate the maximum size after relaxation of the region starting
636 at the given frag and extending through frag_now (which is unfinished). */
638 pending_bundle_size (fragS
*frag
)
640 unsigned int offset
= frag
->fr_fix
;
641 unsigned int size
= 0;
643 gas_assert (frag
!= frag_now
);
644 gas_assert (frag
->fr_type
== rs_align_code
);
646 while (frag
!= frag_now
)
648 /* This should only happen in what will later become an error case. */
652 size
+= frag
->fr_fix
;
653 if (frag
->fr_type
== rs_machine_dependent
)
654 size
+= md_frag_max_var (frag
);
656 frag
= frag
->fr_next
;
659 gas_assert (frag
== frag_now
);
660 size
+= frag_now_fix ();
661 if (frag
->fr_type
== rs_machine_dependent
)
662 size
+= md_frag_max_var (frag
);
664 gas_assert (size
>= offset
);
666 return size
- offset
;
669 /* Finish off the frag created to ensure bundle alignment. */
671 finish_bundle (fragS
*frag
, unsigned int size
)
673 gas_assert (bundle_align_p2
> 0);
674 gas_assert (frag
->fr_type
== rs_align_code
);
678 /* If there is more than a single byte, then we need to set up the
679 alignment frag. Otherwise we leave it at its initial state from
680 calling frag_align_code (0, 0), so that it does nothing. */
681 frag
->fr_offset
= bundle_align_p2
;
682 frag
->fr_subtype
= size
- 1;
685 /* We do this every time rather than just in s_bundle_align_mode
686 so that we catch any affected section without needing hooks all
687 over for all paths that do section changes. It's cheap enough. */
688 record_alignment (now_seg
, bundle_align_p2
- OCTETS_PER_BYTE_POWER
);
691 /* Assemble one instruction. This takes care of the bundle features
692 around calling md_assemble. */
694 assemble_one (char *line
)
696 fragS
*insn_start_frag
= NULL
;
698 if (bundle_lock_frchain
!= NULL
&& bundle_lock_frchain
!= frchain_now
)
700 as_bad (_("cannot change section or subsection inside .bundle_lock"));
701 /* Clearing this serves as a marker that we have already complained. */
702 bundle_lock_frchain
= NULL
;
705 if (bundle_lock_frchain
== NULL
&& bundle_align_p2
> 0)
706 insn_start_frag
= start_bundle ();
710 if (bundle_lock_frchain
!= NULL
)
712 /* Make sure this hasn't pushed the locked sequence
713 past the bundle size. */
714 unsigned int bundle_size
= pending_bundle_size (bundle_lock_frag
);
715 if (bundle_size
> (1U << bundle_align_p2
))
717 .bundle_lock sequence at %u bytes but .bundle_align_mode limit is %u bytes"),
718 bundle_size
, 1U << bundle_align_p2
);
720 else if (bundle_align_p2
> 0)
722 unsigned int insn_size
= pending_bundle_size (insn_start_frag
);
724 if (insn_size
> (1U << bundle_align_p2
))
726 single instruction is %u bytes long but .bundle_align_mode limit is %u"),
727 (unsigned int) insn_size
, 1U << bundle_align_p2
);
729 finish_bundle (insn_start_frag
, insn_size
);
733 #else /* !HANDLE_BUNDLE */
735 # define assemble_one(line) md_assemble(line)
737 #endif /* HANDLE_BUNDLE */
739 /* We read the file, putting things into a web that represents what we
740 have been reading. */
742 read_a_source_file (char *name
)
745 char *s
; /* String of symbol, '\0' appended. */
753 buffer
= input_scrub_new_file (name
);
756 listing_newline (NULL
);
757 register_dependency (name
);
759 /* Generate debugging information before we've read anything in to denote
760 this file as the "main" source file and not a subordinate one
761 (e.g. N_SO vs N_SOL in stabs). */
762 generate_file_debug ();
764 while ((buffer_limit
= input_scrub_next_buffer (&input_line_pointer
)) != 0)
765 { /* We have another line to parse. */
767 /* In order to avoid listing macro expansion lines with labels
768 multiple times, keep track of which line was last issued. */
769 static char *last_eol
;
773 while (input_line_pointer
< buffer_limit
)
775 bfd_boolean was_new_line
;
776 /* We have more of this buffer to parse. */
778 /* We now have input_line_pointer->1st char of next line.
779 If input_line_pointer [-1] == '\n' then we just
780 scanned another line: so bump line counters. */
781 was_new_line
= is_end_of_line
[(unsigned char) input_line_pointer
[-1]];
784 symbol_set_value_now (&dot_symbol
);
785 #ifdef md_start_line_hook
786 md_start_line_hook ();
788 if (input_line_pointer
[-1] == '\n')
789 bump_line_counters ();
793 /* If listing is on, and we are expanding a macro, then give
794 the listing code the contents of the expanded line. */
797 if ((listing
& LISTING_MACEXP
) && macro_nest
> 0)
799 /* Find the end of the current expanded macro line. */
800 s
= find_end_of_line (input_line_pointer
, flag_m68k_mri
);
808 /* Copy it for safe keeping. Also give an indication of
809 how much macro nesting is involved at this point. */
810 len
= s
- input_line_pointer
;
811 copy
= (char *) xmalloc (len
+ macro_nest
+ 2);
812 memset (copy
, '>', macro_nest
);
813 copy
[macro_nest
] = ' ';
814 memcpy (copy
+ macro_nest
+ 1, input_line_pointer
, len
);
815 copy
[macro_nest
+ 1 + len
] = '\0';
817 /* Install the line with the listing facility. */
818 listing_newline (copy
);
822 listing_newline (NULL
);
829 if (LABELS_WITHOUT_COLONS
|| flag_m68k_mri
)
831 /* Text at the start of a line must be a label, we
832 run down and stick a colon in. */
833 if (is_name_beginner (*input_line_pointer
))
835 char *line_start
= input_line_pointer
;
838 HANDLE_CONDITIONAL_ASSEMBLY (0);
840 c
= get_symbol_end ();
842 /* In MRI mode, the EQU and MACRO pseudoops must
843 be handled specially. */
847 char *rest
= input_line_pointer
+ 1;
851 if (*rest
== ' ' || *rest
== '\t')
853 if ((strncasecmp (rest
, "EQU", 3) == 0
854 || strncasecmp (rest
, "SET", 3) == 0)
855 && (rest
[3] == ' ' || rest
[3] == '\t'))
857 input_line_pointer
= rest
+ 3;
859 strncasecmp (rest
, "SET", 3) == 0);
862 if (strncasecmp (rest
, "MACRO", 5) == 0
865 || is_end_of_line
[(unsigned char) rest
[5]]))
869 /* In MRI mode, we need to handle the MACRO
870 pseudo-op specially: we don't want to put the
871 symbol in the symbol table. */
873 #ifdef TC_START_LABEL_WITHOUT_COLON
874 && TC_START_LABEL_WITHOUT_COLON(c
,
878 line_label
= colon (line_start
);
880 line_label
= symbol_create (line_start
,
885 *input_line_pointer
= c
;
887 input_line_pointer
++;
892 /* We are at the beginning of a line, or similar place.
893 We expect a well-formed assembler statement.
894 A "symbol-name:" is a statement.
896 Depending on what compiler is used, the order of these tests
897 may vary to catch most common case 1st.
898 Each test is independent of all other tests at the (top)
901 c
= *input_line_pointer
++;
902 while (c
== '\t' || c
== ' ' || c
== '\f');
904 /* C is the 1st significant character.
905 Input_line_pointer points after that character. */
906 if (is_name_beginner (c
))
908 /* Want user-defined label or pseudo/opcode. */
909 HANDLE_CONDITIONAL_ASSEMBLY (1);
911 s
= --input_line_pointer
;
912 c
= get_symbol_end (); /* name's delimiter. */
914 /* C is character after symbol.
915 That character's place in the input line is now '\0'.
916 S points to the beginning of the symbol.
917 [In case of pseudo-op, s->'.'.]
918 Input_line_pointer->'\0' where c was. */
919 if (TC_START_LABEL (c
, s
, input_line_pointer
))
923 char *rest
= input_line_pointer
+ 1;
925 /* In MRI mode, \tsym: set 0 is permitted. */
929 if (*rest
== ' ' || *rest
== '\t')
932 if ((strncasecmp (rest
, "EQU", 3) == 0
933 || strncasecmp (rest
, "SET", 3) == 0)
934 && (rest
[3] == ' ' || rest
[3] == '\t'))
936 input_line_pointer
= rest
+ 3;
942 line_label
= colon (s
); /* User-defined label. */
943 /* Put ':' back for error messages' sake. */
944 *input_line_pointer
++ = ':';
945 #ifdef tc_check_label
946 tc_check_label (line_label
);
948 /* Input_line_pointer->after ':'. */
951 else if ((c
== '=' && input_line_pointer
[1] == '=')
952 || ((c
== ' ' || c
== '\t')
953 && input_line_pointer
[1] == '='
954 && input_line_pointer
[2] == '='))
957 demand_empty_rest_of_line ();
960 || ((c
== ' ' || c
== '\t')
961 && input_line_pointer
[1] == '='))
962 #ifdef TC_EQUAL_IN_INSN
963 && !TC_EQUAL_IN_INSN (c
, s
)
968 demand_empty_rest_of_line ();
972 /* Expect pseudo-op or machine instruction. */
975 #ifndef TC_CASE_SENSITIVE
979 strncpy (original_case_string
, s2
, sizeof (original_case_string
));
980 original_case_string
[sizeof (original_case_string
) - 1] = 0;
989 if (NO_PSEUDO_DOT
|| flag_m68k_mri
)
991 /* The MRI assembler uses pseudo-ops without
993 pop
= (pseudo_typeS
*) hash_find (po_hash
, s
);
994 if (pop
!= NULL
&& pop
->poc_handler
== NULL
)
999 || (!flag_m68k_mri
&& *s
== '.'))
1003 WARNING: c has next char, which may be end-of-line.
1004 We lookup the pseudo-op table with s+1 because we
1005 already know that the pseudo-op begins with a '.'. */
1008 pop
= (pseudo_typeS
*) hash_find (po_hash
, s
+ 1);
1009 if (pop
&& !pop
->poc_handler
)
1012 /* In MRI mode, we may need to insert an
1013 automatic alignment directive. What a hack
1015 if (mri_pending_align
1017 || !((pop
->poc_handler
== cons
1018 && pop
->poc_val
== 1)
1019 || (pop
->poc_handler
== s_space
1020 && pop
->poc_val
== 1)
1021 #ifdef tc_conditional_pseudoop
1022 || tc_conditional_pseudoop (pop
)
1024 || pop
->poc_handler
== s_if
1025 || pop
->poc_handler
== s_ifdef
1026 || pop
->poc_handler
== s_ifc
1027 || pop
->poc_handler
== s_ifeqs
1028 || pop
->poc_handler
== s_else
1029 || pop
->poc_handler
== s_endif
1030 || pop
->poc_handler
== s_globl
1031 || pop
->poc_handler
== s_ignore
)))
1033 do_align (1, (char *) NULL
, 0, 0);
1034 mri_pending_align
= 0;
1036 if (line_label
!= NULL
)
1038 symbol_set_frag (line_label
, frag_now
);
1039 S_SET_VALUE (line_label
, frag_now_fix ());
1043 /* Print the error msg now, while we still can. */
1046 char *end
= input_line_pointer
;
1048 *input_line_pointer
= c
;
1050 c
= *--input_line_pointer
;
1051 *input_line_pointer
= '\0';
1052 if (! macro_defined
|| ! try_macro (c
, s
))
1055 as_bad (_("unknown pseudo-op: `%s'"), s
);
1056 *input_line_pointer
++ = c
;
1061 /* Put it back for error messages etc. */
1062 *input_line_pointer
= c
;
1063 /* The following skip of whitespace is compulsory.
1064 A well shaped space is sometimes all that separates
1065 keyword from operands. */
1066 if (c
== ' ' || c
== '\t')
1067 input_line_pointer
++;
1069 /* Input_line is restored.
1070 Input_line_pointer->1st non-blank char
1071 after pseudo-operation. */
1072 (*pop
->poc_handler
) (pop
->poc_val
);
1074 /* If that was .end, just get out now. */
1075 if (pop
->poc_handler
== s_end
)
1080 /* WARNING: c has char, which may be end-of-line. */
1081 /* Also: input_line_pointer->`\0` where c was. */
1082 *input_line_pointer
= c
;
1083 input_line_pointer
= _find_end_of_line (input_line_pointer
, flag_m68k_mri
, 1, 0);
1084 c
= *input_line_pointer
;
1085 *input_line_pointer
= '\0';
1087 generate_lineno_debug ();
1089 if (macro_defined
&& try_macro (c
, s
))
1092 if (mri_pending_align
)
1094 do_align (1, (char *) NULL
, 0, 0);
1095 mri_pending_align
= 0;
1096 if (line_label
!= NULL
)
1098 symbol_set_frag (line_label
, frag_now
);
1099 S_SET_VALUE (line_label
, frag_now_fix ());
1103 assemble_one (s
); /* Assemble 1 instruction. */
1105 *input_line_pointer
++ = c
;
1107 /* We resume loop AFTER the end-of-line from
1108 this instruction. */
1114 /* Empty statement? */
1115 if (is_end_of_line
[(unsigned char) c
])
1118 if ((LOCAL_LABELS_DOLLAR
|| LOCAL_LABELS_FB
) && ISDIGIT (c
))
1120 /* local label ("4:") */
1121 char *backup
= input_line_pointer
;
1123 HANDLE_CONDITIONAL_ASSEMBLY (1);
1127 /* Read the whole number. */
1128 while (ISDIGIT (*input_line_pointer
))
1130 temp
= (temp
* 10) + *input_line_pointer
- '0';
1131 ++input_line_pointer
;
1134 if (LOCAL_LABELS_DOLLAR
1135 && *input_line_pointer
== '$'
1136 && *(input_line_pointer
+ 1) == ':')
1138 input_line_pointer
+= 2;
1140 if (dollar_label_defined (temp
))
1142 as_fatal (_("label \"%d$\" redefined"), temp
);
1145 define_dollar_label (temp
);
1146 colon (dollar_label_name (temp
, 0));
1151 && *input_line_pointer
++ == ':')
1153 fb_label_instance_inc (temp
);
1154 colon (fb_label_name (temp
, 0));
1158 input_line_pointer
= backup
;
1159 } /* local label ("4:") */
1161 if (c
&& strchr (line_comment_chars
, c
))
1162 { /* Its a comment. Better say APP or NO_APP. */
1167 unsigned int new_length
;
1170 s
= input_line_pointer
;
1171 if (strncmp (s
, "APP\n", 4))
1174 ignore_rest_of_line ();
1177 bump_line_counters ();
1180 ends
= strstr (s
, "#NO_APP\n");
1184 unsigned int tmp_len
;
1187 /* The end of the #APP wasn't in this buffer. We
1188 keep reading in buffers until we find the #NO_APP
1189 that goes with this #APP There is one. The specs
1191 tmp_len
= buffer_limit
- s
;
1192 tmp_buf
= (char *) xmalloc (tmp_len
+ 1);
1193 memcpy (tmp_buf
, s
, tmp_len
);
1196 new_tmp
= input_scrub_next_buffer (&buffer
);
1200 buffer_limit
= new_tmp
;
1201 input_line_pointer
= buffer
;
1202 ends
= strstr (buffer
, "#NO_APP\n");
1204 num
= ends
- buffer
;
1206 num
= buffer_limit
- buffer
;
1208 tmp_buf
= (char *) xrealloc (tmp_buf
, tmp_len
+ num
);
1209 memcpy (tmp_buf
+ tmp_len
, buffer
, num
);
1214 input_line_pointer
= ends
? ends
+ 8 : NULL
;
1222 input_line_pointer
= ends
+ 8;
1226 scrub_string_end
= ends
;
1228 new_length
= ends
- s
;
1229 new_buf
= (char *) xmalloc (new_length
);
1236 space
= (new_buf
+ new_length
) - new_tmp
;
1237 size
= do_scrub_chars (scrub_from_string
, new_tmp
, space
);
1245 new_buf
= (char *) xrealloc (new_buf
, new_length
+ 100);
1246 new_tmp
= new_buf
+ new_length
;
1253 /* We've "scrubbed" input to the preferred format. In the
1254 process we may have consumed the whole of the remaining
1255 file (and included files). We handle this formatted
1256 input similar to that of macro expansion, letting
1257 actual macro expansion (possibly nested) and other
1258 input expansion work. Beware that in messages, line
1259 numbers and possibly file names will be incorrect. */
1260 new_length
= strlen (new_buf
);
1261 sb_build (&sbuf
, new_length
);
1262 sb_add_buffer (&sbuf
, new_buf
, new_length
);
1263 input_scrub_include_sb (&sbuf
, input_line_pointer
, 0);
1265 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
1270 HANDLE_CONDITIONAL_ASSEMBLY (1);
1272 #ifdef tc_unrecognized_line
1273 if (tc_unrecognized_line (c
))
1276 input_line_pointer
--;
1277 /* Report unknown char as error. */
1278 demand_empty_rest_of_line ();
1283 symbol_set_value_now (&dot_symbol
);
1285 #ifdef HANDLE_BUNDLE
1286 if (bundle_lock_frag
!= NULL
)
1288 as_bad_where (bundle_lock_frag
->fr_file
, bundle_lock_frag
->fr_line
,
1289 _(".bundle_lock with no matching .bundle_unlock"));
1290 bundle_lock_frag
= NULL
;
1291 bundle_lock_frchain
= NULL
;
1292 bundle_lock_depth
= 0;
1299 /* Close the input file. */
1300 input_scrub_close ();
1301 #ifdef WARN_COMMENTS
1303 if (warn_comment
&& found_comment
)
1304 as_warn_where (found_comment_file
, found_comment
,
1305 "first comment found here");
1310 /* Convert O_constant expression EXP into the equivalent O_big representation.
1311 Take the sign of the number from SIGN rather than X_add_number. */
1314 convert_to_bignum (expressionS
*exp
, int sign
)
1319 value
= exp
->X_add_number
;
1320 for (i
= 0; i
< sizeof (exp
->X_add_number
) / CHARS_PER_LITTLENUM
; i
++)
1322 generic_bignum
[i
] = value
& LITTLENUM_MASK
;
1323 value
>>= LITTLENUM_NUMBER_OF_BITS
;
1325 /* Add a sequence of sign bits if the top bit of X_add_number is not
1326 the sign of the original value. */
1327 if ((exp
->X_add_number
< 0) == !sign
)
1328 generic_bignum
[i
++] = sign
? LITTLENUM_MASK
: 0;
1330 exp
->X_add_number
= i
;
1333 /* For most MRI pseudo-ops, the line actually ends at the first
1334 nonquoted space. This function looks for that point, stuffs a null
1335 in, and sets *STOPCP to the character that used to be there, and
1336 returns the location.
1338 Until I hear otherwise, I am going to assume that this is only true
1339 for the m68k MRI assembler. */
1342 mri_comment_field (char *stopcp
)
1348 know (flag_m68k_mri
);
1350 for (s
= input_line_pointer
;
1351 ((!is_end_of_line
[(unsigned char) *s
] && *s
!= ' ' && *s
!= '\t')
1359 for (s
= input_line_pointer
;
1360 !is_end_of_line
[(unsigned char) *s
];
1370 /* Skip to the end of an MRI comment field. */
1373 mri_comment_end (char *stop
, int stopc
)
1377 input_line_pointer
= stop
;
1379 while (!is_end_of_line
[(unsigned char) *input_line_pointer
])
1380 ++input_line_pointer
;
1384 s_abort (int ignore ATTRIBUTE_UNUSED
)
1386 as_fatal (_(".abort detected. Abandoning ship."));
1389 /* Guts of .align directive. N is the power of two to which to align.
1390 FILL may be NULL, or it may point to the bytes of the fill pattern.
1391 LEN is the length of whatever FILL points to, if anything. MAX is
1392 the maximum number of characters to skip when doing the alignment,
1393 or 0 if there is no maximum. */
1396 do_align (int n
, char *fill
, int len
, int max
)
1398 if (now_seg
== absolute_section
)
1402 if (*fill
++ != '\0')
1404 as_warn (_("ignoring fill value in absolute section"));
1411 #ifdef md_flush_pending_output
1412 md_flush_pending_output ();
1415 md_do_align (n
, fill
, len
, max
, just_record_alignment
);
1418 /* Only make a frag if we HAVE to... */
1419 if (n
!= 0 && !need_pass_2
)
1423 if (subseg_text_p (now_seg
))
1424 frag_align_code (n
, max
);
1426 frag_align (n
, 0, max
);
1429 frag_align (n
, *fill
, max
);
1431 frag_align_pattern (n
, fill
, len
, max
);
1435 just_record_alignment
: ATTRIBUTE_UNUSED_LABEL
1438 record_alignment (now_seg
, n
- OCTETS_PER_BYTE_POWER
);
1441 /* Handle the .align pseudo-op. A positive ARG is a default alignment
1442 (in bytes). A negative ARG is the negative of the length of the
1443 fill pattern. BYTES_P is non-zero if the alignment value should be
1444 interpreted as the byte boundary, rather than the power of 2. */
1445 #ifndef TC_ALIGN_LIMIT
1446 #define TC_ALIGN_LIMIT (stdoutput->arch_info->bits_per_address - 1)
1450 s_align (int arg
, int bytes_p
)
1452 unsigned int align_limit
= TC_ALIGN_LIMIT
;
1461 stop
= mri_comment_field (&stopc
);
1463 if (is_end_of_line
[(unsigned char) *input_line_pointer
])
1468 align
= arg
; /* Default value from pseudo-op table. */
1472 align
= get_absolute_expression ();
1478 /* Convert to a power of 2. */
1483 for (i
= 0; (align
& 1) == 0; align
>>= 1, ++i
)
1486 as_bad (_("alignment not a power of 2"));
1492 if (align
> align_limit
)
1494 align
= align_limit
;
1495 as_warn (_("alignment too large: %u assumed"), align
);
1498 if (*input_line_pointer
!= ',')
1505 ++input_line_pointer
;
1506 if (*input_line_pointer
== ',')
1510 fill
= get_absolute_expression ();
1515 if (*input_line_pointer
!= ',')
1519 ++input_line_pointer
;
1520 max
= get_absolute_expression ();
1527 as_warn (_("expected fill pattern missing"));
1528 do_align (align
, (char *) NULL
, 0, max
);
1543 do_align (align
, &fill_char
, fill_len
, max
);
1549 if ((size_t) fill_len
> sizeof ab
)
1551 md_number_to_chars (ab
, fill
, fill_len
);
1552 do_align (align
, ab
, fill_len
, max
);
1556 demand_empty_rest_of_line ();
1559 mri_comment_end (stop
, stopc
);
1562 /* Handle the .align pseudo-op on machines where ".align 4" means
1563 align to a 4 byte boundary. */
1566 s_align_bytes (int arg
)
1571 /* Handle the .align pseudo-op on machines where ".align 4" means align
1572 to a 2**4 boundary. */
1575 s_align_ptwo (int arg
)
1580 /* Switch in and out of alternate macro mode. */
1585 demand_empty_rest_of_line ();
1586 macro_set_alternate (on
);
1589 /* Read a symbol name from input_line_pointer.
1591 Stores the symbol name in a buffer and returns a pointer to this buffer.
1592 The buffer is xalloc'ed. It is the caller's responsibility to free
1595 The name is not left in the i_l_p buffer as it may need processing
1596 to handle escape characters.
1598 Advances i_l_p to the next non-whitespace character.
1600 If a symbol name could not be read, the routine issues an error
1601 messages, skips to the end of the line and returns NULL. */
1604 read_symbol_name (void)
1610 c
= *input_line_pointer
++;
1614 #define SYM_NAME_CHUNK_LEN 128
1615 ptrdiff_t len
= SYM_NAME_CHUNK_LEN
;
1619 start
= name
= xmalloc (len
+ 1);
1621 name_end
= name
+ SYM_NAME_CHUNK_LEN
;
1623 while (is_a_char (C
= next_char_of_string ()))
1625 if (name
>= name_end
)
1629 sofar
= name
- start
;
1630 len
+= SYM_NAME_CHUNK_LEN
;
1631 start
= xrealloc (start
, len
+ 1);
1632 name_end
= start
+ len
;
1633 name
= start
+ sofar
;
1640 /* Since quoted symbol names can contain non-ASCII characters,
1641 check the string and warn if it cannot be recognised by the
1642 current character set. */
1643 if (mbstowcs (NULL
, name
, len
) == (size_t) -1)
1644 as_warn (_("symbol name not recognised in the current locale"));
1646 else if (is_name_beginner (c
) || c
== '\001')
1650 name
= input_line_pointer
- 1;
1652 /* We accept \001 in a name in case this is
1653 being called with a constructed string. */
1654 while (is_part_of_name (c
= *input_line_pointer
++)
1658 len
= (input_line_pointer
- name
) - 1;
1659 start
= xmalloc (len
+ 1);
1661 memcpy (start
, name
, len
);
1664 /* Skip a name ender char if one is present. */
1665 if (! is_name_ender (c
))
1666 --input_line_pointer
;
1669 name
= start
= NULL
;
1673 as_bad (_("expected symbol name"));
1674 ignore_rest_of_line ();
1685 s_comm_internal (int param
,
1686 symbolS
*(*comm_parse_extra
) (int, symbolS
*, addressT
))
1690 symbolS
*symbolP
= NULL
;
1696 stop
= mri_comment_field (&stopc
);
1698 if ((name
= read_symbol_name ()) == NULL
)
1701 /* Accept an optional comma after the name. The comma used to be
1702 required, but Irix 5 cc does not generate it for .lcomm. */
1703 if (*input_line_pointer
== ',')
1704 input_line_pointer
++;
1706 temp
= get_absolute_expr (&exp
);
1708 size
&= ((addressT
) 2 << (stdoutput
->arch_info
->bits_per_address
- 1)) - 1;
1709 if (exp
.X_op
== O_absent
)
1711 as_bad (_("missing size expression"));
1712 ignore_rest_of_line ();
1715 else if (temp
!= size
|| !exp
.X_unsigned
)
1717 as_warn (_("size (%ld) out of range, ignored"), (long) temp
);
1718 ignore_rest_of_line ();
1722 symbolP
= symbol_find_or_make (name
);
1723 if ((S_IS_DEFINED (symbolP
) || symbol_equated_p (symbolP
))
1724 && !S_IS_COMMON (symbolP
))
1726 if (!S_IS_VOLATILE (symbolP
))
1729 as_bad (_("symbol `%s' is already defined"), name
);
1730 ignore_rest_of_line ();
1733 symbolP
= symbol_clone (symbolP
, 1);
1734 S_SET_SEGMENT (symbolP
, undefined_section
);
1735 S_SET_VALUE (symbolP
, 0);
1736 symbol_set_frag (symbolP
, &zero_address_frag
);
1737 S_CLEAR_VOLATILE (symbolP
);
1740 size
= S_GET_VALUE (symbolP
);
1743 else if (size
!= temp
)
1744 as_warn (_("size of \"%s\" is already %ld; not changing to %ld"),
1745 name
, (long) size
, (long) temp
);
1747 if (comm_parse_extra
!= NULL
)
1748 symbolP
= (*comm_parse_extra
) (param
, symbolP
, size
);
1751 S_SET_VALUE (symbolP
, (valueT
) size
);
1752 S_SET_EXTERNAL (symbolP
);
1753 S_SET_SEGMENT (symbolP
, bfd_com_section_ptr
);
1756 demand_empty_rest_of_line ();
1759 mri_comment_end (stop
, stopc
);
1768 s_comm_internal (ignore
, NULL
);
1771 /* The MRI COMMON pseudo-op. We handle this by creating a common
1772 symbol with the appropriate name. We make s_space do the right
1773 thing by increasing the size. */
1776 s_mri_common (int small ATTRIBUTE_UNUSED
)
1792 stop
= mri_comment_field (&stopc
);
1796 name
= input_line_pointer
;
1797 if (!ISDIGIT (*name
))
1798 c
= get_symbol_end ();
1803 ++input_line_pointer
;
1805 while (ISDIGIT (*input_line_pointer
));
1807 c
= *input_line_pointer
;
1808 *input_line_pointer
= '\0';
1810 if (line_label
!= NULL
)
1812 alc
= (char *) xmalloc (strlen (S_GET_NAME (line_label
))
1813 + (input_line_pointer
- name
)
1815 sprintf (alc
, "%s%s", name
, S_GET_NAME (line_label
));
1820 sym
= symbol_find_or_make (name
);
1821 *input_line_pointer
= c
;
1825 if (*input_line_pointer
!= ',')
1829 ++input_line_pointer
;
1830 align
= get_absolute_expression ();
1833 if (S_IS_DEFINED (sym
) && !S_IS_COMMON (sym
))
1835 as_bad (_("symbol `%s' is already defined"), S_GET_NAME (sym
));
1836 ignore_rest_of_line ();
1837 mri_comment_end (stop
, stopc
);
1841 S_SET_EXTERNAL (sym
);
1842 S_SET_SEGMENT (sym
, bfd_com_section_ptr
);
1843 mri_common_symbol
= sym
;
1847 S_SET_ALIGN (sym
, align
);
1852 if (line_label
!= NULL
)
1855 exp
.X_op
= O_symbol
;
1856 exp
.X_add_symbol
= sym
;
1857 exp
.X_add_number
= 0;
1858 symbol_set_value_expression (line_label
, &exp
);
1859 symbol_set_frag (line_label
, &zero_address_frag
);
1860 S_SET_SEGMENT (line_label
, expr_section
);
1863 /* FIXME: We just ignore the small argument, which distinguishes
1864 COMMON and COMMON.S. I don't know what we can do about it. */
1866 /* Ignore the type and hptype. */
1867 if (*input_line_pointer
== ',')
1868 input_line_pointer
+= 2;
1869 if (*input_line_pointer
== ',')
1870 input_line_pointer
+= 2;
1872 demand_empty_rest_of_line ();
1874 mri_comment_end (stop
, stopc
);
1878 s_data (int ignore ATTRIBUTE_UNUSED
)
1883 temp
= get_absolute_expression ();
1884 if (flag_readonly_data_in_text
)
1886 section
= text_section
;
1890 section
= data_section
;
1892 subseg_set (section
, (subsegT
) temp
);
1894 demand_empty_rest_of_line ();
1897 /* Handle the .appfile pseudo-op. This is automatically generated by
1898 do_scrub_chars when a preprocessor # line comment is seen with a
1899 file name. This default definition may be overridden by the object
1900 or CPU specific pseudo-ops. This function is also the default
1901 definition for .file; the APPFILE argument is 1 for .appfile, 0 for
1905 s_app_file_string (char *file
, int appfile ATTRIBUTE_UNUSED
)
1909 listing_source_file (file
);
1911 register_dependency (file
);
1913 obj_app_file (file
, appfile
);
1918 s_app_file (int appfile
)
1923 /* Some assemblers tolerate immediately following '"'. */
1924 if ((s
= demand_copy_string (&length
)) != 0)
1927 = (!new_logical_line_flags (s
, -1, 1) && appfile
);
1929 /* In MRI mode, the preprocessor may have inserted an extraneous
1932 && *input_line_pointer
== '\''
1933 && is_end_of_line
[(unsigned char) input_line_pointer
[1]])
1934 ++input_line_pointer
;
1936 demand_empty_rest_of_line ();
1938 s_app_file_string (s
, appfile
);
1943 get_linefile_number (int *flag
)
1947 if (*input_line_pointer
< '0' || *input_line_pointer
> '9')
1950 *flag
= get_absolute_expression ();
1955 /* Handle the .appline pseudo-op. This is automatically generated by
1956 do_scrub_chars when a preprocessor # line comment is seen. This
1957 default definition may be overridden by the object or CPU specific
1961 s_app_line (int appline
)
1966 /* The given number is that of the next line. */
1968 l
= get_absolute_expression ();
1969 else if (!get_linefile_number (&l
))
1971 ignore_rest_of_line ();
1978 /* Some of the back ends can't deal with non-positive line numbers.
1979 Besides, it's silly. GCC however will generate a line number of
1980 zero when it is pre-processing builtins for assembler-with-cpp files:
1984 We do not want to barf on this, especially since such files are used
1985 in the GCC and GDB testsuites. So we check for negative line numbers
1986 rather than non-positive line numbers. */
1987 as_warn (_("line numbers must be positive; line number %d rejected"),
1998 if (*input_line_pointer
== '"')
1999 file
= demand_copy_string (&length
);
2005 while (get_linefile_number (&this_flag
))
2008 /* From GCC's cpp documentation:
2009 1: start of a new file.
2010 2: returning to a file after having included
2012 3: following text comes from a system header file.
2013 4: following text should be treated as extern "C".
2015 4 is nonsensical for the assembler; 3, we don't
2016 care about, so we ignore it just in case a
2017 system header file is included while
2018 preprocessing assembly. So 1 and 2 are all we
2019 care about, and they are mutually incompatible.
2020 new_logical_line_flags() demands this. */
2023 if (flags
&& flags
!= (1 << this_flag
))
2024 as_warn (_("incompatible flag %i in line directive"),
2027 flags
|= 1 << this_flag
;
2032 /* We ignore these. */
2036 as_warn (_("unsupported flag %i in line directive"),
2041 if (!is_end_of_line
[(unsigned char)*input_line_pointer
])
2046 if (appline
|| file
)
2048 new_logical_line_flags (file
, l
, flags
);
2051 listing_source_line (l
);
2055 if (appline
|| file
)
2056 demand_empty_rest_of_line ();
2058 ignore_rest_of_line ();
2061 /* Handle the .end pseudo-op. Actually, the real work is done in
2062 read_a_source_file. */
2065 s_end (int ignore ATTRIBUTE_UNUSED
)
2069 /* The MRI assembler permits the start symbol to follow .end,
2070 but we don't support that. */
2072 if (!is_end_of_line
[(unsigned char) *input_line_pointer
]
2073 && *input_line_pointer
!= '*'
2074 && *input_line_pointer
!= '!')
2075 as_warn (_("start address not supported"));
2079 /* Handle the .err pseudo-op. */
2082 s_err (int ignore ATTRIBUTE_UNUSED
)
2084 as_bad (_(".err encountered"));
2085 demand_empty_rest_of_line ();
2088 /* Handle the .error and .warning pseudo-ops. */
2094 /* The purpose for the conditional assignment is not to
2095 internationalize the directive itself, but that we need a
2096 self-contained message, one that can be passed like the
2097 demand_copy_C_string return value, and with no assumption on the
2098 location of the name of the directive within the message. */
2100 = (err
? _(".error directive invoked in source file")
2101 : _(".warning directive invoked in source file"));
2103 if (!is_it_end_of_statement ())
2105 if (*input_line_pointer
!= '\"')
2107 as_bad (_("%s argument must be a string"),
2108 err
? ".error" : ".warning");
2109 ignore_rest_of_line ();
2113 msg
= demand_copy_C_string (&len
);
2121 as_warn ("%s", msg
);
2122 demand_empty_rest_of_line ();
2125 /* Handle the MRI fail pseudo-op. */
2128 s_fail (int ignore ATTRIBUTE_UNUSED
)
2135 stop
= mri_comment_field (&stopc
);
2137 temp
= get_absolute_expression ();
2139 as_warn (_(".fail %ld encountered"), (long) temp
);
2141 as_bad (_(".fail %ld encountered"), (long) temp
);
2143 demand_empty_rest_of_line ();
2146 mri_comment_end (stop
, stopc
);
2150 s_fill (int ignore ATTRIBUTE_UNUSED
)
2152 expressionS rep_exp
;
2157 #ifdef md_flush_pending_output
2158 md_flush_pending_output ();
2161 #ifdef md_cons_align
2165 get_known_segmented_expression (&rep_exp
);
2166 if (*input_line_pointer
== ',')
2168 input_line_pointer
++;
2169 size
= get_absolute_expression ();
2170 if (*input_line_pointer
== ',')
2172 input_line_pointer
++;
2173 fill
= get_absolute_expression ();
2177 /* This is to be compatible with BSD 4.2 AS, not for any rational reason. */
2178 #define BSD_FILL_SIZE_CROCK_8 (8)
2179 if (size
> BSD_FILL_SIZE_CROCK_8
)
2181 as_warn (_(".fill size clamped to %d"), BSD_FILL_SIZE_CROCK_8
);
2182 size
= BSD_FILL_SIZE_CROCK_8
;
2186 as_warn (_("size negative; .fill ignored"));
2189 else if (rep_exp
.X_op
== O_constant
&& rep_exp
.X_add_number
<= 0)
2191 if (rep_exp
.X_add_number
< 0)
2192 as_warn (_("repeat < 0; .fill ignored"));
2196 if (size
&& !need_pass_2
)
2198 if (rep_exp
.X_op
== O_constant
)
2200 p
= frag_var (rs_fill
, (int) size
, (int) size
,
2201 (relax_substateT
) 0, (symbolS
*) 0,
2202 (offsetT
) rep_exp
.X_add_number
,
2207 /* We don't have a constant repeat count, so we can't use
2208 rs_fill. We can get the same results out of rs_space,
2209 but its argument is in bytes, so we must multiply the
2210 repeat count by size. */
2213 rep_sym
= make_expr_symbol (&rep_exp
);
2216 expressionS size_exp
;
2217 size_exp
.X_op
= O_constant
;
2218 size_exp
.X_add_number
= size
;
2220 rep_exp
.X_op
= O_multiply
;
2221 rep_exp
.X_add_symbol
= rep_sym
;
2222 rep_exp
.X_op_symbol
= make_expr_symbol (&size_exp
);
2223 rep_exp
.X_add_number
= 0;
2224 rep_sym
= make_expr_symbol (&rep_exp
);
2227 p
= frag_var (rs_space
, (int) size
, (int) size
,
2228 (relax_substateT
) 0, rep_sym
, (offsetT
) 0, (char *) 0);
2231 memset (p
, 0, (unsigned int) size
);
2233 /* The magic number BSD_FILL_SIZE_CROCK_4 is from BSD 4.2 VAX
2234 flavoured AS. The following bizarre behaviour is to be
2235 compatible with above. I guess they tried to take up to 8
2236 bytes from a 4-byte expression and they forgot to sign
2238 #define BSD_FILL_SIZE_CROCK_4 (4)
2239 md_number_to_chars (p
, (valueT
) fill
,
2240 (size
> BSD_FILL_SIZE_CROCK_4
2241 ? BSD_FILL_SIZE_CROCK_4
2243 /* Note: .fill (),0 emits no frag (since we are asked to .fill 0 bytes)
2244 but emits no error message because it seems a legal thing to do.
2245 It is a degenerate case of .fill but could be emitted by a
2248 demand_empty_rest_of_line ();
2252 s_globl (int ignore ATTRIBUTE_UNUSED
)
2261 stop
= mri_comment_field (&stopc
);
2265 if ((name
= read_symbol_name ()) == NULL
)
2268 symbolP
= symbol_find_or_make (name
);
2269 S_SET_EXTERNAL (symbolP
);
2272 c
= *input_line_pointer
;
2275 input_line_pointer
++;
2277 if (is_end_of_line
[(unsigned char) *input_line_pointer
])
2285 demand_empty_rest_of_line ();
2288 mri_comment_end (stop
, stopc
);
2291 /* Handle the MRI IRP and IRPC pseudo-ops. */
2302 as_where (&file
, &line
);
2304 eol
= find_end_of_line (input_line_pointer
, 0);
2305 sb_build (&s
, eol
- input_line_pointer
);
2306 sb_add_buffer (&s
, input_line_pointer
, eol
- input_line_pointer
);
2307 input_line_pointer
= eol
;
2311 err
= expand_irp (irpc
, 0, &s
, &out
, get_non_macro_line_sb
);
2313 as_bad_where (file
, line
, "%s", err
);
2317 input_scrub_include_sb (&out
, input_line_pointer
, 1);
2319 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
2322 /* Handle the .linkonce pseudo-op. This tells the assembler to mark
2323 the section to only be linked once. However, this is not supported
2324 by most object file formats. This takes an optional argument,
2325 which is what to do about duplicates. */
2328 s_linkonce (int ignore ATTRIBUTE_UNUSED
)
2330 enum linkonce_type type
;
2334 type
= LINKONCE_DISCARD
;
2336 if (!is_end_of_line
[(unsigned char) *input_line_pointer
])
2341 s
= input_line_pointer
;
2342 c
= get_symbol_end ();
2343 if (strcasecmp (s
, "discard") == 0)
2344 type
= LINKONCE_DISCARD
;
2345 else if (strcasecmp (s
, "one_only") == 0)
2346 type
= LINKONCE_ONE_ONLY
;
2347 else if (strcasecmp (s
, "same_size") == 0)
2348 type
= LINKONCE_SAME_SIZE
;
2349 else if (strcasecmp (s
, "same_contents") == 0)
2350 type
= LINKONCE_SAME_CONTENTS
;
2352 as_warn (_("unrecognized .linkonce type `%s'"), s
);
2354 *input_line_pointer
= c
;
2357 #ifdef obj_handle_link_once
2358 obj_handle_link_once (type
);
2359 #else /* ! defined (obj_handle_link_once) */
2363 if ((bfd_applicable_section_flags (stdoutput
) & SEC_LINK_ONCE
) == 0)
2364 as_warn (_(".linkonce is not supported for this object file format"));
2366 flags
= bfd_get_section_flags (stdoutput
, now_seg
);
2367 flags
|= SEC_LINK_ONCE
;
2372 case LINKONCE_DISCARD
:
2373 flags
|= SEC_LINK_DUPLICATES_DISCARD
;
2375 case LINKONCE_ONE_ONLY
:
2376 flags
|= SEC_LINK_DUPLICATES_ONE_ONLY
;
2378 case LINKONCE_SAME_SIZE
:
2379 flags
|= SEC_LINK_DUPLICATES_SAME_SIZE
;
2381 case LINKONCE_SAME_CONTENTS
:
2382 flags
|= SEC_LINK_DUPLICATES_SAME_CONTENTS
;
2385 if (!bfd_set_section_flags (stdoutput
, now_seg
, flags
))
2386 as_bad (_("bfd_set_section_flags: %s"),
2387 bfd_errmsg (bfd_get_error ()));
2389 #endif /* ! defined (obj_handle_link_once) */
2391 demand_empty_rest_of_line ();
2395 bss_alloc (symbolS
*symbolP
, addressT size
, int align
)
2398 segT current_seg
= now_seg
;
2399 subsegT current_subseg
= now_subseg
;
2400 segT bss_seg
= bss_section
;
2402 #if defined (TC_MIPS) || defined (TC_ALPHA)
2403 if (OUTPUT_FLAVOR
== bfd_target_ecoff_flavour
2404 || OUTPUT_FLAVOR
== bfd_target_elf_flavour
)
2406 /* For MIPS and Alpha ECOFF or ELF, small objects are put in .sbss. */
2407 if (size
<= bfd_get_gp_size (stdoutput
))
2409 bss_seg
= subseg_new (".sbss", 1);
2410 seg_info (bss_seg
)->bss
= 1;
2411 if (!bfd_set_section_flags (stdoutput
, bss_seg
, SEC_ALLOC
))
2412 as_warn (_("error setting flags for \".sbss\": %s"),
2413 bfd_errmsg (bfd_get_error ()));
2417 subseg_set (bss_seg
, 1);
2421 record_alignment (bss_seg
, align
);
2422 frag_align (align
, 0, 0);
2425 /* Detach from old frag. */
2426 if (S_GET_SEGMENT (symbolP
) == bss_seg
)
2427 symbol_get_frag (symbolP
)->fr_symbol
= NULL
;
2429 symbol_set_frag (symbolP
, frag_now
);
2430 pfrag
= frag_var (rs_org
, 1, 1, 0, symbolP
, size
, NULL
);
2434 S_SET_SIZE (symbolP
, size
);
2436 S_SET_SEGMENT (symbolP
, bss_seg
);
2439 /* The symbol may already have been created with a preceding
2440 ".globl" directive -- be careful not to step on storage class
2441 in that case. Otherwise, set it to static. */
2442 if (S_GET_STORAGE_CLASS (symbolP
) != C_EXT
)
2443 S_SET_STORAGE_CLASS (symbolP
, C_STAT
);
2444 #endif /* OBJ_COFF */
2446 subseg_set (current_seg
, current_subseg
);
2450 parse_align (int align_bytes
)
2456 if (*input_line_pointer
!= ',')
2459 as_bad (_("expected alignment after size"));
2460 ignore_rest_of_line ();
2464 input_line_pointer
++;
2467 align
= get_absolute_expr (&exp
);
2468 if (exp
.X_op
== O_absent
)
2471 if (!exp
.X_unsigned
)
2473 as_warn (_("alignment negative; 0 assumed"));
2477 if (align_bytes
&& align
!= 0)
2479 /* convert to a power of 2 alignment */
2480 unsigned int alignp2
= 0;
2481 while ((align
& 1) == 0)
2482 align
>>= 1, ++alignp2
;
2485 as_bad (_("alignment not a power of 2"));
2486 ignore_rest_of_line ();
2494 /* Called from s_comm_internal after symbol name and size have been
2495 parsed. NEEDS_ALIGN is 0 if it was an ".lcomm" (2 args only),
2496 1 if this was a ".bss" directive which has a 3rd argument
2497 (alignment as a power of 2), or 2 if this was a ".bss" directive
2498 with alignment in bytes. */
2501 s_lcomm_internal (int needs_align
, symbolS
*symbolP
, addressT size
)
2507 align
= parse_align (needs_align
- 1);
2508 if (align
== (addressT
) -1)
2512 /* Assume some objects may require alignment on some systems. */
2513 TC_IMPLICIT_LCOMM_ALIGNMENT (size
, align
);
2515 bss_alloc (symbolP
, size
, align
);
2520 s_lcomm (int needs_align
)
2522 s_comm_internal (needs_align
, s_lcomm_internal
);
2526 s_lcomm_bytes (int needs_align
)
2528 s_comm_internal (needs_align
* 2, s_lcomm_internal
);
2532 s_lsym (int ignore ATTRIBUTE_UNUSED
)
2538 /* We permit ANY defined expression: BSD4.2 demands constants. */
2539 if ((name
= read_symbol_name ()) == NULL
)
2542 if (*input_line_pointer
!= ',')
2544 as_bad (_("expected comma after \"%s\""), name
);
2548 input_line_pointer
++;
2549 expression_and_evaluate (&exp
);
2551 if (exp
.X_op
!= O_constant
2552 && exp
.X_op
!= O_register
)
2554 as_bad (_("bad expression"));
2558 symbolP
= symbol_find_or_make (name
);
2560 if (S_GET_SEGMENT (symbolP
) == undefined_section
)
2562 /* The name might be an undefined .global symbol; be sure to
2563 keep the "external" bit. */
2564 S_SET_SEGMENT (symbolP
,
2565 (exp
.X_op
== O_constant
2568 S_SET_VALUE (symbolP
, (valueT
) exp
.X_add_number
);
2572 as_bad (_("symbol `%s' is already defined"), name
);
2575 demand_empty_rest_of_line ();
2580 ignore_rest_of_line ();
2585 /* Read a line into an sb. Returns the character that ended the line
2586 or zero if there are no more lines. */
2589 get_line_sb (sb
*line
, int in_macro
)
2593 if (input_line_pointer
[-1] == '\n')
2594 bump_line_counters ();
2596 if (input_line_pointer
>= buffer_limit
)
2598 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
2599 if (buffer_limit
== 0)
2603 eol
= _find_end_of_line (input_line_pointer
, flag_m68k_mri
, 0, in_macro
);
2604 sb_add_buffer (line
, input_line_pointer
, eol
- input_line_pointer
);
2605 input_line_pointer
= eol
;
2607 /* Don't skip multiple end-of-line characters, because that breaks support
2608 for the IA-64 stop bit (;;) which looks like two consecutive end-of-line
2609 characters but isn't. Instead just skip one end of line character and
2610 return the character skipped so that the caller can re-insert it if
2612 return *input_line_pointer
++;
2616 get_non_macro_line_sb (sb
*line
)
2618 return get_line_sb (line
, 0);
2622 get_macro_line_sb (sb
*line
)
2624 return get_line_sb (line
, 1);
2627 /* Define a macro. This is an interface to macro.c. */
2630 s_macro (int ignore ATTRIBUTE_UNUSED
)
2638 as_where (&file
, &line
);
2640 eol
= find_end_of_line (input_line_pointer
, 0);
2641 sb_build (&s
, eol
- input_line_pointer
);
2642 sb_add_buffer (&s
, input_line_pointer
, eol
- input_line_pointer
);
2643 input_line_pointer
= eol
;
2645 if (line_label
!= NULL
)
2650 name
= S_GET_NAME (line_label
);
2651 len
= strlen (name
);
2652 sb_build (&label
, len
);
2653 sb_add_buffer (&label
, name
, len
);
2654 err
= define_macro (0, &s
, &label
, get_macro_line_sb
, file
, line
, &name
);
2658 err
= define_macro (0, &s
, NULL
, get_macro_line_sb
, file
, line
, &name
);
2660 as_bad_where (file
, line
, err
, name
);
2663 if (line_label
!= NULL
)
2665 S_SET_SEGMENT (line_label
, absolute_section
);
2666 S_SET_VALUE (line_label
, 0);
2667 symbol_set_frag (line_label
, &zero_address_frag
);
2670 if (((NO_PSEUDO_DOT
|| flag_m68k_mri
)
2671 && hash_find (po_hash
, name
) != NULL
)
2674 && hash_find (po_hash
, name
+ 1) != NULL
))
2675 as_warn_where (file
,
2677 _("attempt to redefine pseudo-op `%s' ignored"),
2684 /* Handle the .mexit pseudo-op, which immediately exits a macro
2688 s_mexit (int ignore ATTRIBUTE_UNUSED
)
2692 cond_exit_macro (macro_nest
);
2693 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
2696 as_warn (_("ignoring macro exit outside a macro definition."));
2699 /* Switch in and out of MRI mode. */
2702 s_mri (int ignore ATTRIBUTE_UNUSED
)
2705 #ifdef MRI_MODE_CHANGE
2709 on
= get_absolute_expression ();
2710 #ifdef MRI_MODE_CHANGE
2711 old_flag
= flag_mri
;
2730 /* Operator precedence changes in m68k MRI mode, so we need to
2731 update the operator rankings. */
2732 expr_set_precedence ();
2734 #ifdef MRI_MODE_CHANGE
2736 MRI_MODE_CHANGE (on
);
2739 demand_empty_rest_of_line ();
2742 /* Handle changing the location counter. */
2745 do_org (segT segment
, expressionS
*exp
, int fill
)
2747 if (segment
!= now_seg
2748 && segment
!= absolute_section
2749 && segment
!= expr_section
)
2750 as_bad (_("invalid segment \"%s\""), segment_name (segment
));
2752 if (now_seg
== absolute_section
)
2755 as_warn (_("ignoring fill value in absolute section"));
2756 if (exp
->X_op
!= O_constant
)
2758 as_bad (_("only constant offsets supported in absolute section"));
2759 exp
->X_add_number
= 0;
2761 abs_section_offset
= exp
->X_add_number
;
2766 symbolS
*sym
= exp
->X_add_symbol
;
2767 offsetT off
= exp
->X_add_number
* OCTETS_PER_BYTE
;
2769 if (exp
->X_op
!= O_constant
&& exp
->X_op
!= O_symbol
)
2771 /* Handle complex expressions. */
2772 sym
= make_expr_symbol (exp
);
2776 p
= frag_var (rs_org
, 1, 1, (relax_substateT
) 0, sym
, off
, (char *) 0);
2782 s_org (int ignore ATTRIBUTE_UNUSED
)
2788 #ifdef md_flush_pending_output
2789 md_flush_pending_output ();
2792 /* The m68k MRI assembler has a different meaning for .org. It
2793 means to create an absolute section at a given address. We can't
2794 support that--use a linker script instead. */
2797 as_bad (_("MRI style ORG pseudo-op not supported"));
2798 ignore_rest_of_line ();
2802 /* Don't believe the documentation of BSD 4.2 AS. There is no such
2803 thing as a sub-segment-relative origin. Any absolute origin is
2804 given a warning, then assumed to be segment-relative. Any
2805 segmented origin expression ("foo+42") had better be in the right
2806 segment or the .org is ignored.
2808 BSD 4.2 AS warns if you try to .org backwards. We cannot because
2809 we never know sub-segment sizes when we are reading code. BSD
2810 will crash trying to emit negative numbers of filler bytes in
2811 certain .orgs. We don't crash, but see as-write for that code.
2813 Don't make frag if need_pass_2==1. */
2814 segment
= get_known_segmented_expression (&exp
);
2815 if (*input_line_pointer
== ',')
2817 input_line_pointer
++;
2818 temp_fill
= get_absolute_expression ();
2824 do_org (segment
, &exp
, temp_fill
);
2826 demand_empty_rest_of_line ();
2829 /* Handle parsing for the MRI SECT/SECTION pseudo-op. This should be
2830 called by the obj-format routine which handles section changing
2831 when in MRI mode. It will create a new section, and return it. It
2832 will set *TYPE to the section type: one of 'C' (code), 'D' (data),
2833 'M' (mixed), or 'R' (romable). The flags will be set in the section. */
2836 s_mri_sect (char *type ATTRIBUTE_UNUSED
)
2846 name
= input_line_pointer
;
2847 if (!ISDIGIT (*name
))
2848 c
= get_symbol_end ();
2853 ++input_line_pointer
;
2855 while (ISDIGIT (*input_line_pointer
));
2857 c
= *input_line_pointer
;
2858 *input_line_pointer
= '\0';
2861 name
= xstrdup (name
);
2863 *input_line_pointer
= c
;
2865 seg
= subseg_new (name
, 0);
2867 if (*input_line_pointer
== ',')
2871 ++input_line_pointer
;
2872 align
= get_absolute_expression ();
2873 record_alignment (seg
, align
);
2877 if (*input_line_pointer
== ',')
2879 c
= *++input_line_pointer
;
2881 if (c
== 'C' || c
== 'D' || c
== 'M' || c
== 'R')
2884 as_bad (_("unrecognized section type"));
2885 ++input_line_pointer
;
2890 flags
= SEC_NO_FLAGS
;
2892 flags
= SEC_ALLOC
| SEC_LOAD
| SEC_READONLY
| SEC_CODE
;
2893 else if (*type
== 'D' || *type
== 'M')
2894 flags
= SEC_ALLOC
| SEC_LOAD
| SEC_DATA
;
2895 else if (*type
== 'R')
2896 flags
= SEC_ALLOC
| SEC_LOAD
| SEC_DATA
| SEC_READONLY
| SEC_ROM
;
2897 if (flags
!= SEC_NO_FLAGS
)
2899 if (!bfd_set_section_flags (stdoutput
, seg
, flags
))
2900 as_warn (_("error setting flags for \"%s\": %s"),
2901 bfd_section_name (stdoutput
, seg
),
2902 bfd_errmsg (bfd_get_error ()));
2907 /* Ignore the HP type. */
2908 if (*input_line_pointer
== ',')
2909 input_line_pointer
+= 2;
2911 demand_empty_rest_of_line ();
2913 #else /* ! TC_M68K */
2922 name
= input_line_pointer
;
2923 c
= get_symbol_end ();
2925 name
= xstrdup (name
);
2927 *input_line_pointer
= c
;
2929 seg
= subseg_new (name
, 0);
2931 if (*input_line_pointer
!= ',')
2937 ++input_line_pointer
;
2939 sectype
= input_line_pointer
;
2940 c
= get_symbol_end ();
2941 if (*sectype
== '\0')
2943 else if (strcasecmp (sectype
, "text") == 0)
2945 else if (strcasecmp (sectype
, "data") == 0)
2947 else if (strcasecmp (sectype
, "romdata") == 0)
2950 as_warn (_("unrecognized section type `%s'"), sectype
);
2951 *input_line_pointer
= c
;
2954 if (*input_line_pointer
== ',')
2958 ++input_line_pointer
;
2960 seccmd
= input_line_pointer
;
2961 c
= get_symbol_end ();
2962 if (strcasecmp (seccmd
, "absolute") == 0)
2964 as_bad (_("absolute sections are not supported"));
2965 *input_line_pointer
= c
;
2966 ignore_rest_of_line ();
2969 else if (strcasecmp (seccmd
, "align") == 0)
2973 *input_line_pointer
= c
;
2974 align
= get_absolute_expression ();
2975 record_alignment (seg
, align
);
2979 as_warn (_("unrecognized section command `%s'"), seccmd
);
2980 *input_line_pointer
= c
;
2984 demand_empty_rest_of_line ();
2986 #else /* ! TC_I960 */
2987 /* The MRI assembler seems to use different forms of .sect for
2988 different targets. */
2989 as_bad ("MRI mode not supported for this target");
2990 ignore_rest_of_line ();
2991 #endif /* ! TC_I960 */
2992 #endif /* ! TC_M68K */
2995 /* Handle the .print pseudo-op. */
2998 s_print (int ignore ATTRIBUTE_UNUSED
)
3003 s
= demand_copy_C_string (&len
);
3006 demand_empty_rest_of_line ();
3009 /* Handle the .purgem pseudo-op. */
3012 s_purgem (int ignore ATTRIBUTE_UNUSED
)
3014 if (is_it_end_of_statement ())
3016 demand_empty_rest_of_line ();
3026 name
= input_line_pointer
;
3027 c
= get_symbol_end ();
3028 delete_macro (name
);
3029 *input_line_pointer
= c
;
3032 while (*input_line_pointer
++ == ',');
3034 --input_line_pointer
;
3035 demand_empty_rest_of_line ();
3038 /* Handle the .endm/.endr pseudo-ops. */
3041 s_bad_end (int endr
)
3043 as_warn (_(".end%c encountered without preceding %s"),
3045 endr
? ".rept, .irp, or .irpc" : ".macro");
3046 demand_empty_rest_of_line ();
3049 /* Handle the .rept pseudo-op. */
3052 s_rept (int ignore ATTRIBUTE_UNUSED
)
3056 count
= get_absolute_expression ();
3058 do_repeat (count
, "REPT", "ENDR");
3061 /* This function provides a generic repeat block implementation. It allows
3062 different directives to be used as the start/end keys. */
3065 do_repeat (int count
, const char *start
, const char *end
)
3071 if (!buffer_and_nest (start
, end
, &one
, get_non_macro_line_sb
))
3073 as_bad (_("%s without %s"), start
, end
);
3077 sb_build (&many
, count
* one
.len
);
3079 sb_add_sb (&many
, &one
);
3083 input_scrub_include_sb (&many
, input_line_pointer
, 1);
3085 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
3088 /* Like do_repeat except that any text matching EXPANDER in the
3089 block is replaced by the itteration count. */
3092 do_repeat_with_expander (int count
,
3095 const char * expander
)
3101 if (!buffer_and_nest (start
, end
, &one
, get_non_macro_line_sb
))
3103 as_bad (_("%s without %s"), start
, end
);
3109 if (expander
!= NULL
&& strstr (one
.ptr
, expander
) != NULL
)
3111 while (count
-- > 0)
3117 sb_build (& processed
, one
.len
);
3118 sb_add_sb (& processed
, & one
);
3119 sub
= strstr (processed
.ptr
, expander
);
3120 len
= sprintf (sub
, "%d", count
);
3121 gas_assert (len
< 8);
3122 strcpy (sub
+ len
, sub
+ 8);
3123 processed
.len
-= (8 - len
);
3124 sb_add_sb (& many
, & processed
);
3125 sb_kill (& processed
);
3130 sb_add_sb (&many
, &one
);
3134 input_scrub_include_sb (&many
, input_line_pointer
, 1);
3136 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
3139 /* Skip to end of current repeat loop; EXTRA indicates how many additional
3140 input buffers to skip. Assumes that conditionals preceding the loop end
3141 are properly nested.
3143 This function makes it easier to implement a premature "break" out of the
3144 loop. The EXTRA arg accounts for other buffers we might have inserted,
3145 such as line substitutions. */
3148 end_repeat (int extra
)
3150 cond_exit_macro (macro_nest
);
3151 while (extra
-- >= 0)
3152 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
3156 assign_symbol (char *name
, int mode
)
3160 if (name
[0] == '.' && name
[1] == '\0')
3162 /* Turn '. = mumble' into a .org mumble. */
3166 segment
= get_known_segmented_expression (&exp
);
3169 do_org (segment
, &exp
, 0);
3174 if ((symbolP
= symbol_find (name
)) == NULL
3175 && (symbolP
= md_undefined_symbol (name
)) == NULL
)
3177 symbolP
= symbol_find_or_make (name
);
3179 /* When doing symbol listings, play games with dummy fragments living
3180 outside the normal fragment chain to record the file and line info
3182 if (listing
& LISTING_SYMBOLS
)
3184 extern struct list_info_struct
*listing_tail
;
3185 fragS
*dummy_frag
= (fragS
*) xcalloc (1, sizeof (fragS
));
3186 dummy_frag
->line
= listing_tail
;
3187 dummy_frag
->fr_symbol
= symbolP
;
3188 symbol_set_frag (symbolP
, dummy_frag
);
3191 #if defined (OBJ_COFF) && !defined (TE_PE)
3192 /* "set" symbols are local unless otherwise specified. */
3193 SF_SET_LOCAL (symbolP
);
3197 if (S_IS_DEFINED (symbolP
) || symbol_equated_p (symbolP
))
3199 if ((mode
!= 0 || !S_IS_VOLATILE (symbolP
))
3200 && !S_CAN_BE_REDEFINED (symbolP
))
3202 as_bad (_("symbol `%s' is already defined"), name
);
3203 symbolP
= symbol_clone (symbolP
, 0);
3205 /* If the symbol is volatile, copy the symbol and replace the
3206 original with the copy, so that previous uses of the symbol will
3207 retain the value of the symbol at the point of use. */
3208 else if (S_IS_VOLATILE (symbolP
))
3209 symbolP
= symbol_clone (symbolP
, 1);
3213 S_SET_VOLATILE (symbolP
);
3215 S_SET_FORWARD_REF (symbolP
);
3217 pseudo_set (symbolP
);
3220 /* Handle the .equ, .equiv, .eqv, and .set directives. If EQUIV is 1,
3221 then this is .equiv, and it is an error if the symbol is already
3222 defined. If EQUIV is -1, the symbol additionally is a forward
3230 /* Especial apologies for the random logic:
3231 this just grew, and could be parsed much more simply!
3233 if ((name
= read_symbol_name ()) == NULL
)
3236 if (*input_line_pointer
!= ',')
3238 as_bad (_("expected comma after \"%s\""), name
);
3239 ignore_rest_of_line ();
3244 input_line_pointer
++;
3245 assign_symbol (name
, equiv
);
3246 demand_empty_rest_of_line ();
3260 #ifdef md_flush_pending_output
3261 md_flush_pending_output ();
3264 #ifdef md_cons_align
3269 stop
= mri_comment_field (&stopc
);
3271 /* In m68k MRI mode, we need to align to a word boundary, unless
3273 if (flag_m68k_mri
&& mult
> 1)
3275 if (now_seg
== absolute_section
)
3277 abs_section_offset
+= abs_section_offset
& 1;
3278 if (line_label
!= NULL
)
3279 S_SET_VALUE (line_label
, abs_section_offset
);
3281 else if (mri_common_symbol
!= NULL
)
3285 mri_val
= S_GET_VALUE (mri_common_symbol
);
3286 if ((mri_val
& 1) != 0)
3288 S_SET_VALUE (mri_common_symbol
, mri_val
+ 1);
3289 if (line_label
!= NULL
)
3291 expressionS
*symexp
;
3293 symexp
= symbol_get_value_expression (line_label
);
3294 know (symexp
->X_op
== O_symbol
);
3295 know (symexp
->X_add_symbol
== mri_common_symbol
);
3296 symexp
->X_add_number
+= 1;
3302 do_align (1, (char *) NULL
, 0, 0);
3303 if (line_label
!= NULL
)
3305 symbol_set_frag (line_label
, frag_now
);
3306 S_SET_VALUE (line_label
, frag_now_fix ());
3316 if (*input_line_pointer
== ',')
3318 ++input_line_pointer
;
3323 val
.X_op
= O_constant
;
3324 val
.X_add_number
= 0;
3327 if (val
.X_op
!= O_constant
3328 || val
.X_add_number
< - 0x80
3329 || val
.X_add_number
> 0xff
3330 || (mult
!= 0 && mult
!= 1 && val
.X_add_number
!= 0))
3332 resolve_expression (&exp
);
3333 if (exp
.X_op
!= O_constant
)
3334 as_bad (_("unsupported variable size or fill value"));
3341 bytes
= mult
* exp
.X_add_number
;
3342 for (i
= 0; i
< exp
.X_add_number
; i
++)
3343 emit_expr (&val
, mult
);
3348 if (now_seg
== absolute_section
|| mri_common_symbol
!= NULL
)
3349 resolve_expression (&exp
);
3351 if (exp
.X_op
== O_constant
)
3355 repeat
= exp
.X_add_number
;
3362 as_warn (_(".space repeat count is zero, ignored"));
3363 else if (repeat
< 0)
3364 as_warn (_(".space repeat count is negative, ignored"));
3368 /* If we are in the absolute section, just bump the offset. */
3369 if (now_seg
== absolute_section
)
3371 abs_section_offset
+= repeat
;
3375 /* If we are secretly in an MRI common section, then
3376 creating space just increases the size of the common
3378 if (mri_common_symbol
!= NULL
)
3380 S_SET_VALUE (mri_common_symbol
,
3381 S_GET_VALUE (mri_common_symbol
) + repeat
);
3386 p
= frag_var (rs_fill
, 1, 1, (relax_substateT
) 0, (symbolS
*) 0,
3387 (offsetT
) repeat
, (char *) 0);
3391 if (now_seg
== absolute_section
)
3393 as_bad (_("space allocation too complex in absolute section"));
3394 subseg_set (text_section
, 0);
3397 if (mri_common_symbol
!= NULL
)
3399 as_bad (_("space allocation too complex in common section"));
3400 mri_common_symbol
= NULL
;
3404 p
= frag_var (rs_space
, 1, 1, (relax_substateT
) 0,
3405 make_expr_symbol (&exp
), (offsetT
) 0, (char *) 0);
3409 *p
= val
.X_add_number
;
3414 /* In MRI mode, after an odd number of bytes, we must align to an
3415 even word boundary, unless the next instruction is a dc.b, ds.b
3417 if (flag_mri
&& (bytes
& 1) != 0)
3418 mri_pending_align
= 1;
3420 demand_empty_rest_of_line ();
3423 mri_comment_end (stop
, stopc
);
3426 /* This is like s_space, but the value is a floating point number with
3427 the given precision. This is for the MRI dcb.s pseudo-op and
3431 s_float_space (int float_type
)
3435 char temp
[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT
];
3439 #ifdef md_cons_align
3444 stop
= mri_comment_field (&stopc
);
3446 count
= get_absolute_expression ();
3449 if (*input_line_pointer
!= ',')
3451 as_bad (_("missing value"));
3452 ignore_rest_of_line ();
3454 mri_comment_end (stop
, stopc
);
3458 ++input_line_pointer
;
3462 /* Skip any 0{letter} that may be present. Don't even check if the
3463 * letter is legal. */
3464 if (input_line_pointer
[0] == '0'
3465 && ISALPHA (input_line_pointer
[1]))
3466 input_line_pointer
+= 2;
3468 /* Accept :xxxx, where the x's are hex digits, for a floating point
3469 with the exact digits specified. */
3470 if (input_line_pointer
[0] == ':')
3472 flen
= hex_float (float_type
, temp
);
3475 ignore_rest_of_line ();
3477 mri_comment_end (stop
, stopc
);
3485 err
= md_atof (float_type
, temp
, &flen
);
3486 know (flen
<= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT
);
3487 know (err
!= NULL
|| flen
> 0);
3490 as_bad (_("bad floating literal: %s"), err
);
3491 ignore_rest_of_line ();
3493 mri_comment_end (stop
, stopc
);
3498 while (--count
>= 0)
3502 p
= frag_more (flen
);
3503 memcpy (p
, temp
, (unsigned int) flen
);
3506 demand_empty_rest_of_line ();
3509 mri_comment_end (stop
, stopc
);
3512 /* Handle the .struct pseudo-op, as found in MIPS assemblers. */
3515 s_struct (int ignore ATTRIBUTE_UNUSED
)
3521 stop
= mri_comment_field (&stopc
);
3522 abs_section_offset
= get_absolute_expression ();
3523 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
3524 /* The ELF backend needs to know that we are changing sections, so
3525 that .previous works correctly. */
3527 obj_elf_section_change_hook ();
3529 subseg_set (absolute_section
, 0);
3530 demand_empty_rest_of_line ();
3532 mri_comment_end (stop
, stopc
);
3536 s_text (int ignore ATTRIBUTE_UNUSED
)
3540 temp
= get_absolute_expression ();
3541 subseg_set (text_section
, (subsegT
) temp
);
3542 demand_empty_rest_of_line ();
3545 /* .weakref x, y sets x as an alias to y that, as long as y is not
3546 referenced directly, will cause y to become a weak symbol. */
3548 s_weakref (int ignore ATTRIBUTE_UNUSED
)
3555 if ((name
= read_symbol_name ()) == NULL
)
3558 symbolP
= symbol_find_or_make (name
);
3560 if (S_IS_DEFINED (symbolP
) || symbol_equated_p (symbolP
))
3562 if (!S_IS_VOLATILE (symbolP
))
3564 as_bad (_("symbol `%s' is already defined"), name
);
3567 symbolP
= symbol_clone (symbolP
, 1);
3568 S_CLEAR_VOLATILE (symbolP
);
3573 if (*input_line_pointer
!= ',')
3575 as_bad (_("expected comma after \"%s\""), name
);
3579 input_line_pointer
++;
3584 if ((name
= read_symbol_name ()) == NULL
)
3587 if ((symbolP2
= symbol_find_noref (name
, 1)) == NULL
3588 && (symbolP2
= md_undefined_symbol (name
)) == NULL
)
3590 symbolP2
= symbol_find_or_make (name
);
3591 S_SET_WEAKREFD (symbolP2
);
3595 symbolS
*symp
= symbolP2
;
3597 while (S_IS_WEAKREFR (symp
) && symp
!= symbolP
)
3599 expressionS
*expP
= symbol_get_value_expression (symp
);
3601 gas_assert (expP
->X_op
== O_symbol
3602 && expP
->X_add_number
== 0);
3603 symp
= expP
->X_add_symbol
;
3605 if (symp
== symbolP
)
3609 loop
= concat (S_GET_NAME (symbolP
),
3610 " => ", S_GET_NAME (symbolP2
), (const char *) NULL
);
3613 while (symp
!= symbolP
)
3615 char *old_loop
= loop
;
3617 symp
= symbol_get_value_expression (symp
)->X_add_symbol
;
3618 loop
= concat (loop
, " => ", S_GET_NAME (symp
),
3619 (const char *) NULL
);
3623 as_bad (_("%s: would close weakref loop: %s"),
3624 S_GET_NAME (symbolP
), loop
);
3628 ignore_rest_of_line ();
3632 /* Short-circuiting instead of just checking here might speed
3633 things up a tiny little bit, but loop error messages would
3634 miss intermediate links. */
3635 /* symbolP2 = symp; */
3638 memset (&exp
, 0, sizeof (exp
));
3639 exp
.X_op
= O_symbol
;
3640 exp
.X_add_symbol
= symbolP2
;
3642 S_SET_SEGMENT (symbolP
, undefined_section
);
3643 symbol_set_value_expression (symbolP
, &exp
);
3644 symbol_set_frag (symbolP
, &zero_address_frag
);
3645 S_SET_WEAKREFR (symbolP
);
3647 demand_empty_rest_of_line ();
3652 ignore_rest_of_line ();
3658 /* Verify that we are at the end of a line. If not, issue an error and
3662 demand_empty_rest_of_line (void)
3665 if (is_end_of_line
[(unsigned char) *input_line_pointer
])
3666 input_line_pointer
++;
3669 if (ISPRINT (*input_line_pointer
))
3670 as_bad (_("junk at end of line, first unrecognized character is `%c'"),
3671 *input_line_pointer
);
3673 as_bad (_("junk at end of line, first unrecognized character valued 0x%x"),
3674 *input_line_pointer
);
3675 ignore_rest_of_line ();
3678 /* Return pointing just after end-of-line. */
3679 know (is_end_of_line
[(unsigned char) input_line_pointer
[-1]]);
3682 /* Silently advance to the end of line. Use this after already having
3683 issued an error about something bad. */
3686 ignore_rest_of_line (void)
3688 while (input_line_pointer
< buffer_limit
3689 && !is_end_of_line
[(unsigned char) *input_line_pointer
])
3690 input_line_pointer
++;
3692 input_line_pointer
++;
3694 /* Return pointing just after end-of-line. */
3695 know (is_end_of_line
[(unsigned char) input_line_pointer
[-1]]);
3698 /* Sets frag for given symbol to zero_address_frag, except when the
3699 symbol frag is already set to a dummy listing frag. */
3702 set_zero_frag (symbolS
*symbolP
)
3704 if (symbol_get_frag (symbolP
)->fr_type
!= rs_dummy
)
3705 symbol_set_frag (symbolP
, &zero_address_frag
);
3708 /* In: Pointer to a symbol.
3709 Input_line_pointer->expression.
3711 Out: Input_line_pointer->just after any whitespace after expression.
3712 Tried to set symbol to value of expression.
3713 Will change symbols type, value, and frag; */
3716 pseudo_set (symbolS
*symbolP
)
3721 know (symbolP
); /* NULL pointer is logic error. */
3723 if (!S_IS_FORWARD_REF (symbolP
))
3724 (void) expression (&exp
);
3726 (void) deferred_expression (&exp
);
3728 if (exp
.X_op
== O_illegal
)
3729 as_bad (_("illegal expression"));
3730 else if (exp
.X_op
== O_absent
)
3731 as_bad (_("missing expression"));
3732 else if (exp
.X_op
== O_big
)
3734 if (exp
.X_add_number
> 0)
3735 as_bad (_("bignum invalid"));
3737 as_bad (_("floating point number invalid"));
3739 else if (exp
.X_op
== O_subtract
3740 && !S_IS_FORWARD_REF (symbolP
)
3741 && SEG_NORMAL (S_GET_SEGMENT (exp
.X_add_symbol
))
3742 && (symbol_get_frag (exp
.X_add_symbol
)
3743 == symbol_get_frag (exp
.X_op_symbol
)))
3745 exp
.X_op
= O_constant
;
3746 exp
.X_add_number
= (S_GET_VALUE (exp
.X_add_symbol
)
3747 - S_GET_VALUE (exp
.X_op_symbol
));
3750 if (symbol_section_p (symbolP
))
3752 as_bad ("attempt to set value of section symbol");
3761 exp
.X_add_number
= 0;
3764 S_SET_SEGMENT (symbolP
, absolute_section
);
3765 S_SET_VALUE (symbolP
, (valueT
) exp
.X_add_number
);
3766 set_zero_frag (symbolP
);
3770 #ifndef TC_GLOBAL_REGISTER_SYMBOL_OK
3771 if (S_IS_EXTERNAL (symbolP
))
3773 as_bad ("can't equate global symbol `%s' with register name",
3774 S_GET_NAME (symbolP
));
3778 S_SET_SEGMENT (symbolP
, reg_section
);
3779 S_SET_VALUE (symbolP
, (valueT
) exp
.X_add_number
);
3780 set_zero_frag (symbolP
);
3781 symbol_get_value_expression (symbolP
)->X_op
= O_register
;
3785 seg
= S_GET_SEGMENT (exp
.X_add_symbol
);
3786 /* For x=undef+const, create an expression symbol.
3787 For x=x+const, just update x except when x is an undefined symbol
3788 For x=defined+const, evaluate x. */
3789 if (symbolP
== exp
.X_add_symbol
3790 && (seg
!= undefined_section
3791 || !symbol_constant_p (symbolP
)))
3793 *symbol_X_add_number (symbolP
) += exp
.X_add_number
;
3796 else if (!S_IS_FORWARD_REF (symbolP
) && seg
!= undefined_section
)
3798 symbolS
*s
= exp
.X_add_symbol
;
3800 if (S_IS_COMMON (s
))
3801 as_bad (_("`%s' can't be equated to common symbol '%s'"),
3802 S_GET_NAME (symbolP
), S_GET_NAME (s
));
3804 S_SET_SEGMENT (symbolP
, seg
);
3805 S_SET_VALUE (symbolP
, exp
.X_add_number
+ S_GET_VALUE (s
));
3806 symbol_set_frag (symbolP
, symbol_get_frag (s
));
3807 copy_symbol_attributes (symbolP
, s
);
3810 S_SET_SEGMENT (symbolP
, undefined_section
);
3811 symbol_set_value_expression (symbolP
, &exp
);
3812 copy_symbol_attributes (symbolP
, exp
.X_add_symbol
);
3813 set_zero_frag (symbolP
);
3817 /* The value is some complex expression. */
3818 S_SET_SEGMENT (symbolP
, expr_section
);
3819 symbol_set_value_expression (symbolP
, &exp
);
3820 set_zero_frag (symbolP
);
3827 CONStruct more frag of .bytes, or .words etc.
3828 Should need_pass_2 be 1 then emit no frag(s).
3829 This understands EXPRESSIONS.
3833 This has a split personality. We use expression() to read the
3834 value. We can detect if the value won't fit in a byte or word.
3835 But we can't detect if expression() discarded significant digits
3836 in the case of a long. Not worth the crocks required to fix it. */
3838 /* Select a parser for cons expressions. */
3840 /* Some targets need to parse the expression in various fancy ways.
3841 You can define TC_PARSE_CONS_EXPRESSION to do whatever you like
3842 (for example, the HPPA does this). Otherwise, you can define
3843 BITFIELD_CONS_EXPRESSIONS to permit bitfields to be specified, or
3844 REPEAT_CONS_EXPRESSIONS to permit repeat counts. If none of these
3845 are defined, which is the normal case, then only simple expressions
3850 parse_mri_cons (expressionS
*exp
, unsigned int nbytes
);
3853 #ifndef TC_PARSE_CONS_EXPRESSION
3854 #ifdef BITFIELD_CONS_EXPRESSIONS
3855 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3856 (parse_bitfield_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3858 parse_bitfield_cons (expressionS
*exp
, unsigned int nbytes
);
3860 #ifdef REPEAT_CONS_EXPRESSIONS
3861 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3862 (parse_repeat_cons (EXP, NBYTES), TC_PARSE_CONS_RETURN_NONE)
3864 parse_repeat_cons (expressionS
*exp
, unsigned int nbytes
);
3867 /* If we haven't gotten one yet, just call expression. */
3868 #ifndef TC_PARSE_CONS_EXPRESSION
3869 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
3870 (expression (EXP), TC_PARSE_CONS_RETURN_NONE)
3875 do_parse_cons_expression (expressionS
*exp
,
3876 int nbytes ATTRIBUTE_UNUSED
)
3878 (void) TC_PARSE_CONS_EXPRESSION (exp
, nbytes
);
3882 /* Worker to do .byte etc statements.
3883 Clobbers input_line_pointer and checks end-of-line. */
3886 cons_worker (int nbytes
, /* 1=.byte, 2=.word, 4=.long. */
3894 #ifdef md_flush_pending_output
3895 md_flush_pending_output ();
3899 stop
= mri_comment_field (&stopc
);
3901 if (is_it_end_of_statement ())
3903 demand_empty_rest_of_line ();
3905 mri_comment_end (stop
, stopc
);
3909 #ifdef TC_ADDRESS_BYTES
3911 nbytes
= TC_ADDRESS_BYTES ();
3914 #ifdef md_cons_align
3915 md_cons_align (nbytes
);
3921 TC_PARSE_CONS_RETURN_TYPE ret
= TC_PARSE_CONS_RETURN_NONE
;
3922 #ifdef TC_CONS_FIX_CHECK
3923 fixS
**cur_fix
= &frchain_now
->fix_tail
;
3925 if (*cur_fix
!= NULL
)
3926 cur_fix
= &(*cur_fix
)->fx_next
;
3931 parse_mri_cons (&exp
, (unsigned int) nbytes
);
3935 if (*input_line_pointer
== '"')
3937 as_bad (_("unexpected `\"' in expression"));
3938 ignore_rest_of_line ();
3941 ret
= TC_PARSE_CONS_EXPRESSION (&exp
, (unsigned int) nbytes
);
3946 if (exp
.X_op
== O_symbol
)
3947 exp
.X_op
= O_symbol_rva
;
3949 as_fatal (_("rva without symbol"));
3951 emit_expr_with_reloc (&exp
, (unsigned int) nbytes
, ret
);
3952 #ifdef TC_CONS_FIX_CHECK
3953 TC_CONS_FIX_CHECK (&exp
, nbytes
, *cur_fix
);
3957 while (*input_line_pointer
++ == ',');
3959 /* In MRI mode, after an odd number of bytes, we must align to an
3960 even word boundary, unless the next instruction is a dc.b, ds.b
3962 if (flag_mri
&& nbytes
== 1 && (c
& 1) != 0)
3963 mri_pending_align
= 1;
3965 input_line_pointer
--; /* Put terminator back into stream. */
3967 demand_empty_rest_of_line ();
3970 mri_comment_end (stop
, stopc
);
3976 cons_worker (size
, 0);
3982 cons_worker (size
, 1);
3985 /* .reloc offset, reloc_name, symbol+addend. */
3988 s_reloc (int ignore ATTRIBUTE_UNUSED
)
3995 struct reloc_list
*reloc
;
3997 reloc
= (struct reloc_list
*) xmalloc (sizeof (*reloc
));
4000 stop
= mri_comment_field (&stopc
);
4009 as_bad (_("missing or bad offset expression"));
4012 exp
.X_add_symbol
= section_symbol (now_seg
);
4013 exp
.X_op
= O_symbol
;
4016 if (exp
.X_add_number
== 0)
4018 reloc
->u
.a
.offset_sym
= exp
.X_add_symbol
;
4023 reloc
->u
.a
.offset_sym
= make_expr_symbol (&exp
);
4028 if (*input_line_pointer
!= ',')
4030 as_bad (_("missing reloc type"));
4034 ++input_line_pointer
;
4036 r_name
= input_line_pointer
;
4037 c
= get_symbol_end ();
4038 reloc
->u
.a
.howto
= bfd_reloc_name_lookup (stdoutput
, r_name
);
4039 *input_line_pointer
= c
;
4040 if (reloc
->u
.a
.howto
== NULL
)
4042 as_bad (_("unrecognized reloc type"));
4046 exp
.X_op
= O_absent
;
4048 if (*input_line_pointer
== ',')
4050 ++input_line_pointer
;
4058 as_bad (_("bad reloc expression"));
4060 ignore_rest_of_line ();
4063 mri_comment_end (stop
, stopc
);
4066 reloc
->u
.a
.sym
= NULL
;
4067 reloc
->u
.a
.addend
= 0;
4070 reloc
->u
.a
.sym
= NULL
;
4071 reloc
->u
.a
.addend
= exp
.X_add_number
;
4074 reloc
->u
.a
.sym
= exp
.X_add_symbol
;
4075 reloc
->u
.a
.addend
= exp
.X_add_number
;
4078 reloc
->u
.a
.sym
= make_expr_symbol (&exp
);
4079 reloc
->u
.a
.addend
= 0;
4083 as_where (&reloc
->file
, &reloc
->line
);
4084 reloc
->next
= reloc_list
;
4087 demand_empty_rest_of_line ();
4089 mri_comment_end (stop
, stopc
);
4092 /* Put the contents of expression EXP into the object file using
4093 NBYTES bytes. If need_pass_2 is 1, this does nothing. */
4096 emit_expr (expressionS
*exp
, unsigned int nbytes
)
4098 emit_expr_with_reloc (exp
, nbytes
, TC_PARSE_CONS_RETURN_NONE
);
4102 emit_expr_with_reloc (expressionS
*exp
,
4103 unsigned int nbytes
,
4104 TC_PARSE_CONS_RETURN_TYPE reloc
)
4108 valueT extra_digit
= 0;
4110 /* Don't do anything if we are going to make another pass. */
4115 dot_value
= frag_now_fix ();
4116 dot_frag
= frag_now
;
4120 /* When gcc emits DWARF 1 debugging pseudo-ops, a line number will
4121 appear as a four byte positive constant in the .line section,
4122 followed by a 2 byte 0xffff. Look for that case here. */
4124 static int dwarf_line
= -1;
4126 if (strcmp (segment_name (now_seg
), ".line") != 0)
4128 else if (dwarf_line
>= 0
4130 && exp
->X_op
== O_constant
4131 && (exp
->X_add_number
== -1 || exp
->X_add_number
== 0xffff))
4132 listing_source_line ((unsigned int) dwarf_line
);
4133 else if (nbytes
== 4
4134 && exp
->X_op
== O_constant
4135 && exp
->X_add_number
>= 0)
4136 dwarf_line
= exp
->X_add_number
;
4141 /* When gcc emits DWARF 1 debugging pseudo-ops, a file name will
4142 appear as a 2 byte TAG_compile_unit (0x11) followed by a 2 byte
4143 AT_sibling (0x12) followed by a four byte address of the sibling
4144 followed by a 2 byte AT_name (0x38) followed by the name of the
4145 file. We look for that case here. */
4147 static int dwarf_file
= 0;
4149 if (strcmp (segment_name (now_seg
), ".debug") != 0)
4151 else if (dwarf_file
== 0
4153 && exp
->X_op
== O_constant
4154 && exp
->X_add_number
== 0x11)
4156 else if (dwarf_file
== 1
4158 && exp
->X_op
== O_constant
4159 && exp
->X_add_number
== 0x12)
4161 else if (dwarf_file
== 2
4164 else if (dwarf_file
== 3
4166 && exp
->X_op
== O_constant
4167 && exp
->X_add_number
== 0x38)
4172 /* The variable dwarf_file_string tells stringer that the string
4173 may be the name of the source file. */
4174 if (dwarf_file
== 4)
4175 dwarf_file_string
= 1;
4177 dwarf_file_string
= 0;
4182 if (check_eh_frame (exp
, &nbytes
))
4187 /* Allow `.word 0' in the absolute section. */
4188 if (now_seg
== absolute_section
)
4190 if (op
!= O_constant
|| exp
->X_add_number
!= 0)
4191 as_bad (_("attempt to store value in absolute section"));
4192 abs_section_offset
+= nbytes
;
4196 /* Handle a negative bignum. */
4198 && exp
->X_add_number
== 0
4199 && symbol_get_value_expression (exp
->X_add_symbol
)->X_op
== O_big
4200 && symbol_get_value_expression (exp
->X_add_symbol
)->X_add_number
> 0)
4203 unsigned long carry
;
4205 exp
= symbol_get_value_expression (exp
->X_add_symbol
);
4207 /* Negate the bignum: one's complement each digit and add 1. */
4209 for (i
= 0; i
< exp
->X_add_number
; i
++)
4213 next
= (((~(generic_bignum
[i
] & LITTLENUM_MASK
))
4216 generic_bignum
[i
] = next
& LITTLENUM_MASK
;
4217 carry
= next
>> LITTLENUM_NUMBER_OF_BITS
;
4220 /* We can ignore any carry out, because it will be handled by
4221 extra_digit if it is needed. */
4223 extra_digit
= (valueT
) -1;
4227 if (op
== O_absent
|| op
== O_illegal
)
4229 as_warn (_("zero assumed for missing expression"));
4230 exp
->X_add_number
= 0;
4233 else if (op
== O_big
&& exp
->X_add_number
<= 0)
4235 as_bad (_("floating point number invalid"));
4236 exp
->X_add_number
= 0;
4239 else if (op
== O_register
)
4241 as_warn (_("register value used as expression"));
4245 p
= frag_more ((int) nbytes
);
4247 if (reloc
!= TC_PARSE_CONS_RETURN_NONE
)
4249 emit_expr_fix (exp
, nbytes
, frag_now
, p
, reloc
);
4253 #ifndef WORKING_DOT_WORD
4254 /* If we have the difference of two symbols in a word, save it on
4255 the broken_words list. See the code in write.c. */
4256 if (op
== O_subtract
&& nbytes
== 2)
4258 struct broken_word
*x
;
4260 x
= (struct broken_word
*) xmalloc (sizeof (struct broken_word
));
4261 x
->next_broken_word
= broken_words
;
4264 x
->subseg
= now_subseg
;
4266 x
->word_goes_here
= p
;
4268 x
->add
= exp
->X_add_symbol
;
4269 x
->sub
= exp
->X_op_symbol
;
4270 x
->addnum
= exp
->X_add_number
;
4278 /* If we have an integer, but the number of bytes is too large to
4279 pass to md_number_to_chars, handle it as a bignum. */
4280 if (op
== O_constant
&& nbytes
> sizeof (valueT
))
4282 extra_digit
= exp
->X_unsigned
? 0 : -1;
4283 convert_to_bignum (exp
, !exp
->X_unsigned
);
4287 if (op
== O_constant
)
4295 /* JF << of >= number of bits in the object is undefined. In
4296 particular SPARC (Sun 4) has problems. */
4297 if (nbytes
>= sizeof (valueT
))
4300 if (nbytes
> sizeof (valueT
))
4303 hibit
= (valueT
) 1 << (nbytes
* BITS_PER_CHAR
- 1);
4307 /* Don't store these bits. */
4308 mask
= ~(valueT
) 0 << (BITS_PER_CHAR
* nbytes
);
4309 hibit
= (valueT
) 1 << (nbytes
* BITS_PER_CHAR
- 1);
4312 unmask
= ~mask
; /* Do store these bits. */
4315 "Do this mod if you want every overflow check to assume SIGNED 2's complement data.";
4316 mask
= ~(unmask
>> 1); /* Includes sign bit now. */
4319 get
= exp
->X_add_number
;
4321 if ((get
& mask
) != 0
4322 && ((get
& mask
) != mask
4323 || (get
& hibit
) == 0))
4324 { /* Leading bits contain both 0s & 1s. */
4325 #if defined (BFD64) && BFD_HOST_64BIT_LONG_LONG
4327 as_warn (_("value 0x%llx truncated to 0x%llx"),
4328 (unsigned long long) get
, (unsigned long long) use
);
4330 as_warn (_("value 0x%I64x truncated to 0x%I64x"),
4331 (unsigned long long) get
, (unsigned long long) use
);
4334 as_warn (_("value 0x%lx truncated to 0x%lx"),
4335 (unsigned long) get
, (unsigned long) use
);
4338 /* Put bytes in right order. */
4339 md_number_to_chars (p
, use
, (int) nbytes
);
4341 else if (op
== O_big
)
4344 LITTLENUM_TYPE
*nums
;
4346 size
= exp
->X_add_number
* CHARS_PER_LITTLENUM
;
4349 int i
= nbytes
/ CHARS_PER_LITTLENUM
;
4352 LITTLENUM_TYPE sign
= 0;
4353 if ((generic_bignum
[--i
]
4354 & (1 << (LITTLENUM_NUMBER_OF_BITS
- 1))) != 0)
4355 sign
= ~(LITTLENUM_TYPE
) 0;
4356 while (++i
< exp
->X_add_number
)
4357 if (generic_bignum
[i
] != sign
)
4360 if (i
< exp
->X_add_number
)
4361 as_warn (_("bignum truncated to %d bytes"), nbytes
);
4367 md_number_to_chars (p
, (valueT
) generic_bignum
[0], 1);
4370 know (nbytes
% CHARS_PER_LITTLENUM
== 0);
4372 if (target_big_endian
)
4374 while (nbytes
> size
)
4376 md_number_to_chars (p
, extra_digit
, CHARS_PER_LITTLENUM
);
4377 nbytes
-= CHARS_PER_LITTLENUM
;
4378 p
+= CHARS_PER_LITTLENUM
;
4381 nums
= generic_bignum
+ size
/ CHARS_PER_LITTLENUM
;
4382 while (size
>= CHARS_PER_LITTLENUM
)
4385 md_number_to_chars (p
, (valueT
) *nums
, CHARS_PER_LITTLENUM
);
4386 size
-= CHARS_PER_LITTLENUM
;
4387 p
+= CHARS_PER_LITTLENUM
;
4392 nums
= generic_bignum
;
4393 while (size
>= CHARS_PER_LITTLENUM
)
4395 md_number_to_chars (p
, (valueT
) *nums
, CHARS_PER_LITTLENUM
);
4397 size
-= CHARS_PER_LITTLENUM
;
4398 p
+= CHARS_PER_LITTLENUM
;
4399 nbytes
-= CHARS_PER_LITTLENUM
;
4402 while (nbytes
>= CHARS_PER_LITTLENUM
)
4404 md_number_to_chars (p
, extra_digit
, CHARS_PER_LITTLENUM
);
4405 nbytes
-= CHARS_PER_LITTLENUM
;
4406 p
+= CHARS_PER_LITTLENUM
;
4411 emit_expr_fix (exp
, nbytes
, frag_now
, p
, TC_PARSE_CONS_RETURN_NONE
);
4415 emit_expr_fix (expressionS
*exp
, unsigned int nbytes
, fragS
*frag
, char *p
,
4416 TC_PARSE_CONS_RETURN_TYPE r ATTRIBUTE_UNUSED
)
4419 unsigned int size
= nbytes
;
4421 memset (p
, 0, size
);
4423 /* Generate a fixS to record the symbol value. */
4425 #ifdef TC_CONS_FIX_NEW
4426 TC_CONS_FIX_NEW (frag
, p
- frag
->fr_literal
+ offset
, size
, exp
, r
);
4428 if (r
!= TC_PARSE_CONS_RETURN_NONE
)
4430 reloc_howto_type
*reloc_howto
;
4432 reloc_howto
= bfd_reloc_type_lookup (stdoutput
, r
);
4433 size
= bfd_get_reloc_size (reloc_howto
);
4437 as_bad (_("%s relocations do not fit in %u bytes\n"),
4438 reloc_howto
->name
, nbytes
);
4441 else if (target_big_endian
)
4442 offset
= nbytes
- size
;
4463 as_bad (_("unsupported BFD relocation size %u"), size
);
4466 fix_new_exp (frag
, p
- frag
->fr_literal
+ offset
, size
,
4471 #ifdef BITFIELD_CONS_EXPRESSIONS
4473 /* i960 assemblers, (eg, asm960), allow bitfields after ".byte" as
4474 w:x,y:z, where w and y are bitwidths and x and y are values. They
4475 then pack them all together. We do a little better in that we allow
4476 them in words, longs, etc. and we'll pack them in target byte order
4479 The rules are: pack least significant bit first, if a field doesn't
4480 entirely fit, put it in the next unit. Overflowing the bitfield is
4481 explicitly *not* even a warning. The bitwidth should be considered
4484 To use this function the tc-XXX.h file should define
4485 BITFIELD_CONS_EXPRESSIONS. */
4488 parse_bitfield_cons (exp
, nbytes
)
4490 unsigned int nbytes
;
4492 unsigned int bits_available
= BITS_PER_CHAR
* nbytes
;
4493 char *hold
= input_line_pointer
;
4495 (void) expression (exp
);
4497 if (*input_line_pointer
== ':')
4504 unsigned long width
;
4506 if (*input_line_pointer
!= ':')
4508 input_line_pointer
= hold
;
4510 } /* Next piece is not a bitfield. */
4512 /* In the general case, we can't allow
4513 full expressions with symbol
4514 differences and such. The relocation
4515 entries for symbols not defined in this
4516 assembly would require arbitrary field
4517 widths, positions, and masks which most
4518 of our current object formats don't
4521 In the specific case where a symbol
4522 *is* defined in this assembly, we
4523 *could* build fixups and track it, but
4524 this could lead to confusion for the
4525 backends. I'm lazy. I'll take any
4526 SEG_ABSOLUTE. I think that means that
4527 you can use a previous .set or
4528 .equ type symbol. xoxorich. */
4530 if (exp
->X_op
== O_absent
)
4532 as_warn (_("using a bit field width of zero"));
4533 exp
->X_add_number
= 0;
4534 exp
->X_op
= O_constant
;
4535 } /* Implied zero width bitfield. */
4537 if (exp
->X_op
!= O_constant
)
4539 *input_line_pointer
= '\0';
4540 as_bad (_("field width \"%s\" too complex for a bitfield"), hold
);
4541 *input_line_pointer
= ':';
4542 demand_empty_rest_of_line ();
4544 } /* Too complex. */
4546 if ((width
= exp
->X_add_number
) > (BITS_PER_CHAR
* nbytes
))
4548 as_warn (_("field width %lu too big to fit in %d bytes: truncated to %d bits"),
4549 width
, nbytes
, (BITS_PER_CHAR
* nbytes
));
4550 width
= BITS_PER_CHAR
* nbytes
;
4553 if (width
> bits_available
)
4555 /* FIXME-SOMEDAY: backing up and reparsing is wasteful. */
4556 input_line_pointer
= hold
;
4557 exp
->X_add_number
= value
;
4562 hold
= ++input_line_pointer
;
4564 (void) expression (exp
);
4565 if (exp
->X_op
!= O_constant
)
4567 char cache
= *input_line_pointer
;
4569 *input_line_pointer
= '\0';
4570 as_bad (_("field value \"%s\" too complex for a bitfield"), hold
);
4571 *input_line_pointer
= cache
;
4572 demand_empty_rest_of_line ();
4574 } /* Too complex. */
4576 value
|= ((~(-1 << width
) & exp
->X_add_number
)
4577 << ((BITS_PER_CHAR
* nbytes
) - bits_available
));
4579 if ((bits_available
-= width
) == 0
4580 || is_it_end_of_statement ()
4581 || *input_line_pointer
!= ',')
4584 } /* All the bitfields we're gonna get. */
4586 hold
= ++input_line_pointer
;
4587 (void) expression (exp
);
4590 exp
->X_add_number
= value
;
4591 exp
->X_op
= O_constant
;
4592 exp
->X_unsigned
= 1;
4593 exp
->X_extrabit
= 0;
4597 #endif /* BITFIELD_CONS_EXPRESSIONS */
4599 /* Handle an MRI style string expression. */
4603 parse_mri_cons (expressionS
*exp
, unsigned int nbytes
)
4605 if (*input_line_pointer
!= '\''
4606 && (input_line_pointer
[1] != '\''
4607 || (*input_line_pointer
!= 'A'
4608 && *input_line_pointer
!= 'E')))
4609 (void) TC_PARSE_CONS_EXPRESSION (exp
, nbytes
);
4613 unsigned int result
= 0;
4615 /* An MRI style string. Cut into as many bytes as will fit into
4616 a nbyte chunk, left justify if necessary, and separate with
4617 commas so we can try again later. */
4618 if (*input_line_pointer
== 'A')
4619 ++input_line_pointer
;
4620 else if (*input_line_pointer
== 'E')
4622 as_bad (_("EBCDIC constants are not supported"));
4623 ++input_line_pointer
;
4626 input_line_pointer
++;
4627 for (scan
= 0; scan
< nbytes
; scan
++)
4629 if (*input_line_pointer
== '\'')
4631 if (input_line_pointer
[1] == '\'')
4633 input_line_pointer
++;
4638 result
= (result
<< 8) | (*input_line_pointer
++);
4642 while (scan
< nbytes
)
4648 /* Create correct expression. */
4649 exp
->X_op
= O_constant
;
4650 exp
->X_add_number
= result
;
4652 /* Fake it so that we can read the next char too. */
4653 if (input_line_pointer
[0] != '\'' ||
4654 (input_line_pointer
[0] == '\'' && input_line_pointer
[1] == '\''))
4656 input_line_pointer
-= 2;
4657 input_line_pointer
[0] = ',';
4658 input_line_pointer
[1] = '\'';
4661 input_line_pointer
++;
4664 #endif /* TC_M68K */
4666 #ifdef REPEAT_CONS_EXPRESSIONS
4668 /* Parse a repeat expression for cons. This is used by the MIPS
4669 assembler. The format is NUMBER:COUNT; NUMBER appears in the
4670 object file COUNT times.
4672 To use this for a target, define REPEAT_CONS_EXPRESSIONS. */
4675 parse_repeat_cons (exp
, nbytes
)
4677 unsigned int nbytes
;
4684 if (*input_line_pointer
!= ':')
4686 /* No repeat count. */
4690 ++input_line_pointer
;
4691 expression (&count
);
4692 if (count
.X_op
!= O_constant
4693 || count
.X_add_number
<= 0)
4695 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4699 /* The cons function is going to output this expression once. So we
4700 output it count - 1 times. */
4701 for (i
= count
.X_add_number
- 1; i
> 0; i
--)
4702 emit_expr (exp
, nbytes
);
4705 #endif /* REPEAT_CONS_EXPRESSIONS */
4707 /* Parse a floating point number represented as a hex constant. This
4708 permits users to specify the exact bits they want in the floating
4712 hex_float (int float_type
, char *bytes
)
4744 as_bad (_("unknown floating type type '%c'"), float_type
);
4748 /* It would be nice if we could go through expression to parse the
4749 hex constant, but if we get a bignum it's a pain to sort it into
4750 the buffer correctly. */
4752 while (hex_p (*input_line_pointer
) || *input_line_pointer
== '_')
4756 /* The MRI assembler accepts arbitrary underscores strewn about
4757 through the hex constant, so we ignore them as well. */
4758 if (*input_line_pointer
== '_')
4760 ++input_line_pointer
;
4766 as_warn (_("floating point constant too large"));
4769 d
= hex_value (*input_line_pointer
) << 4;
4770 ++input_line_pointer
;
4771 while (*input_line_pointer
== '_')
4772 ++input_line_pointer
;
4773 if (hex_p (*input_line_pointer
))
4775 d
+= hex_value (*input_line_pointer
);
4776 ++input_line_pointer
;
4778 if (target_big_endian
)
4781 bytes
[length
- i
- 1] = d
;
4787 if (target_big_endian
)
4788 memset (bytes
+ i
, 0, length
- i
);
4790 memset (bytes
, 0, length
- i
);
4798 CONStruct some more frag chars of .floats .ffloats etc.
4799 Makes 0 or more new frags.
4800 If need_pass_2 == 1, no frags are emitted.
4801 This understands only floating literals, not expressions. Sorry.
4803 A floating constant is defined by atof_generic(), except it is preceded
4804 by 0d 0f 0g or 0h. After observing the STRANGE way my BSD AS does its
4805 reading, I decided to be incompatible. This always tries to give you
4806 rounded bits to the precision of the pseudo-op. Former AS did premature
4807 truncation, restored noisy bits instead of trailing 0s AND gave you
4808 a choice of 2 flavours of noise according to which of 2 floating-point
4809 scanners you directed AS to use.
4811 In: input_line_pointer->whitespace before, or '0' of flonum. */
4814 float_cons (/* Clobbers input_line-pointer, checks end-of-line. */
4815 int float_type
/* 'f':.ffloat ... 'F':.float ... */)
4818 int length
; /* Number of chars in an object. */
4819 char *err
; /* Error from scanning floating literal. */
4820 char temp
[MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT
];
4822 if (is_it_end_of_statement ())
4824 demand_empty_rest_of_line ();
4828 #ifdef md_flush_pending_output
4829 md_flush_pending_output ();
4832 #ifdef md_cons_align
4838 /* input_line_pointer->1st char of a flonum (we hope!). */
4841 /* Skip any 0{letter} that may be present. Don't even check if the
4842 letter is legal. Someone may invent a "z" format and this routine
4843 has no use for such information. Lusers beware: you get
4844 diagnostics if your input is ill-conditioned. */
4845 if (input_line_pointer
[0] == '0'
4846 && ISALPHA (input_line_pointer
[1]))
4847 input_line_pointer
+= 2;
4849 /* Accept :xxxx, where the x's are hex digits, for a floating
4850 point with the exact digits specified. */
4851 if (input_line_pointer
[0] == ':')
4853 ++input_line_pointer
;
4854 length
= hex_float (float_type
, temp
);
4857 ignore_rest_of_line ();
4863 err
= md_atof (float_type
, temp
, &length
);
4864 know (length
<= MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT
);
4865 know (err
!= NULL
|| length
> 0);
4868 as_bad (_("bad floating literal: %s"), err
);
4869 ignore_rest_of_line ();
4880 #ifdef REPEAT_CONS_EXPRESSIONS
4881 if (*input_line_pointer
== ':')
4883 expressionS count_exp
;
4885 ++input_line_pointer
;
4886 expression (&count_exp
);
4888 if (count_exp
.X_op
!= O_constant
4889 || count_exp
.X_add_number
<= 0)
4890 as_warn (_("unresolvable or nonpositive repeat count; using 1"));
4892 count
= count_exp
.X_add_number
;
4896 while (--count
>= 0)
4898 p
= frag_more (length
);
4899 memcpy (p
, temp
, (unsigned int) length
);
4904 while (*input_line_pointer
++ == ',');
4906 /* Put terminator back into stream. */
4907 --input_line_pointer
;
4908 demand_empty_rest_of_line ();
4911 /* Return the size of a LEB128 value. */
4914 sizeof_sleb128 (offsetT value
)
4921 byte
= (value
& 0x7f);
4922 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
4923 Fortunately, we can structure things so that the extra work reduces
4924 to a noop on systems that do things "properly". */
4925 value
= (value
>> 7) | ~(-(offsetT
)1 >> 7);
4928 while (!(((value
== 0) && ((byte
& 0x40) == 0))
4929 || ((value
== -1) && ((byte
& 0x40) != 0))));
4935 sizeof_uleb128 (valueT value
)
4950 sizeof_leb128 (valueT value
, int sign
)
4953 return sizeof_sleb128 ((offsetT
) value
);
4955 return sizeof_uleb128 (value
);
4958 /* Output a LEB128 value. */
4961 output_sleb128 (char *p
, offsetT value
)
4968 unsigned byte
= (value
& 0x7f);
4970 /* Sadly, we cannot rely on typical arithmetic right shift behaviour.
4971 Fortunately, we can structure things so that the extra work reduces
4972 to a noop on systems that do things "properly". */
4973 value
= (value
>> 7) | ~(-(offsetT
)1 >> 7);
4975 more
= !((((value
== 0) && ((byte
& 0x40) == 0))
4976 || ((value
== -1) && ((byte
& 0x40) != 0))));
4988 output_uleb128 (char *p
, valueT value
)
4994 unsigned byte
= (value
& 0x7f);
4997 /* More bytes to follow. */
5008 output_leb128 (char *p
, valueT value
, int sign
)
5011 return output_sleb128 (p
, (offsetT
) value
);
5013 return output_uleb128 (p
, value
);
5016 /* Do the same for bignums. We combine sizeof with output here in that
5017 we don't output for NULL values of P. It isn't really as critical as
5018 for "normal" values that this be streamlined. */
5021 output_big_sleb128 (char *p
, LITTLENUM_TYPE
*bignum
, int size
)
5028 /* Strip leading sign extensions off the bignum. */
5030 && bignum
[size
- 1] == LITTLENUM_MASK
5031 && bignum
[size
- 2] > LITTLENUM_MASK
/ 2)
5036 /* OR in the next part of the littlenum. */
5037 val
|= (*bignum
<< loaded
);
5038 loaded
+= LITTLENUM_NUMBER_OF_BITS
;
5042 /* Add bytes until there are less than 7 bits left in VAL
5043 or until every non-sign bit has been written. */
5050 || val
!= ((byte
& 0x40) == 0 ? 0 : ((valueT
) 1 << loaded
) - 1))
5057 while ((byte
& 0x80) != 0 && loaded
>= 7);
5061 /* Mop up any left-over bits (of which there will be less than 7). */
5062 if ((byte
& 0x80) != 0)
5064 /* Sign-extend VAL. */
5065 if (val
& (1 << (loaded
- 1)))
5066 val
|= ~0 << loaded
;
5076 output_big_uleb128 (char *p
, LITTLENUM_TYPE
*bignum
, int size
)
5083 /* Strip leading zeros off the bignum. */
5084 /* XXX: Is this needed? */
5085 while (size
> 0 && bignum
[size
- 1] == 0)
5090 if (loaded
< 7 && size
> 0)
5092 val
|= (*bignum
<< loaded
);
5093 loaded
+= 8 * CHARS_PER_LITTLENUM
;
5102 if (size
> 0 || val
)
5109 while (byte
& 0x80);
5115 output_big_leb128 (char *p
, LITTLENUM_TYPE
*bignum
, int size
, int sign
)
5118 return output_big_sleb128 (p
, bignum
, size
);
5120 return output_big_uleb128 (p
, bignum
, size
);
5123 /* Generate the appropriate fragments for a given expression to emit a
5127 emit_leb128_expr (expressionS
*exp
, int sign
)
5129 operatorT op
= exp
->X_op
;
5130 unsigned int nbytes
;
5132 if (op
== O_absent
|| op
== O_illegal
)
5134 as_warn (_("zero assumed for missing expression"));
5135 exp
->X_add_number
= 0;
5138 else if (op
== O_big
&& exp
->X_add_number
<= 0)
5140 as_bad (_("floating point number invalid"));
5141 exp
->X_add_number
= 0;
5144 else if (op
== O_register
)
5146 as_warn (_("register value used as expression"));
5149 else if (op
== O_constant
5151 && (exp
->X_add_number
< 0) == !exp
->X_extrabit
)
5153 /* We're outputting a signed leb128 and the sign of X_add_number
5154 doesn't reflect the sign of the original value. Convert EXP
5155 to a correctly-extended bignum instead. */
5156 convert_to_bignum (exp
, exp
->X_extrabit
);
5160 /* Let check_eh_frame know that data is being emitted. nbytes == -1 is
5161 a signal that this is leb128 data. It shouldn't optimize this away. */
5162 nbytes
= (unsigned int) -1;
5163 if (check_eh_frame (exp
, &nbytes
))
5166 /* Let the backend know that subsequent data may be byte aligned. */
5167 #ifdef md_cons_align
5171 if (op
== O_constant
)
5173 /* If we've got a constant, emit the thing directly right now. */
5175 valueT value
= exp
->X_add_number
;
5179 size
= sizeof_leb128 (value
, sign
);
5180 p
= frag_more (size
);
5181 output_leb128 (p
, value
, sign
);
5183 else if (op
== O_big
)
5185 /* O_big is a different sort of constant. */
5190 size
= output_big_leb128 (NULL
, generic_bignum
, exp
->X_add_number
, sign
);
5191 p
= frag_more (size
);
5192 output_big_leb128 (p
, generic_bignum
, exp
->X_add_number
, sign
);
5196 /* Otherwise, we have to create a variable sized fragment and
5197 resolve things later. */
5199 frag_var (rs_leb128
, sizeof_uleb128 (~(valueT
) 0), 0, sign
,
5200 make_expr_symbol (exp
), 0, (char *) NULL
);
5204 /* Parse the .sleb128 and .uleb128 pseudos. */
5211 #ifdef md_flush_pending_output
5212 md_flush_pending_output ();
5218 emit_leb128_expr (&exp
, sign
);
5220 while (*input_line_pointer
++ == ',');
5222 input_line_pointer
--;
5223 demand_empty_rest_of_line ();
5227 stringer_append_char (int c
, int bitsize
)
5229 if (!target_big_endian
)
5230 FRAG_APPEND_1_CHAR (c
);
5235 FRAG_APPEND_1_CHAR (0);
5236 FRAG_APPEND_1_CHAR (0);
5237 FRAG_APPEND_1_CHAR (0);
5238 FRAG_APPEND_1_CHAR (0);
5241 FRAG_APPEND_1_CHAR (0);
5242 FRAG_APPEND_1_CHAR (0);
5245 FRAG_APPEND_1_CHAR (0);
5250 /* Called with invalid bitsize argument. */
5254 if (target_big_endian
)
5255 FRAG_APPEND_1_CHAR (c
);
5258 /* Worker to do .ascii etc statements.
5259 Reads 0 or more ',' separated, double-quoted strings.
5260 Caller should have checked need_pass_2 is FALSE because we don't
5262 Checks for end-of-line.
5263 BITS_APPENDZERO says how many bits are in a target char.
5264 The bottom bit is set if a NUL char should be appended to the strings. */
5267 stringer (int bits_appendzero
)
5269 const int bitsize
= bits_appendzero
& ~7;
5270 const int append_zero
= bits_appendzero
& 1;
5272 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5276 #ifdef md_flush_pending_output
5277 md_flush_pending_output ();
5280 #ifdef md_cons_align
5284 /* The following awkward logic is to parse ZERO or more strings,
5285 comma separated. Recall a string expression includes spaces
5286 before the opening '\"' and spaces after the closing '\"'.
5287 We fake a leading ',' if there is (supposed to be)
5288 a 1st, expression. We keep demanding expressions for each ','. */
5289 if (is_it_end_of_statement ())
5291 c
= 0; /* Skip loop. */
5292 ++input_line_pointer
; /* Compensate for end of loop. */
5296 c
= ','; /* Do loop. */
5298 /* If we have been switched into the abs_section then we
5299 will not have an obstack onto which we can hang strings. */
5300 if (now_seg
== absolute_section
)
5302 as_bad (_("strings must be placed into a section"));
5304 ignore_rest_of_line ();
5307 while (c
== ',' || c
== '<' || c
== '"')
5310 switch (*input_line_pointer
)
5313 ++input_line_pointer
; /*->1st char of string. */
5314 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5315 start
= input_line_pointer
;
5318 while (is_a_char (c
= next_char_of_string ()))
5319 stringer_append_char (c
, bitsize
);
5322 stringer_append_char (0, bitsize
);
5324 know (input_line_pointer
[-1] == '\"');
5326 #if !defined(NO_LISTING) && defined (OBJ_ELF)
5327 /* In ELF, when gcc is emitting DWARF 1 debugging output, it
5328 will emit .string with a filename in the .debug section
5329 after a sequence of constants. See the comment in
5330 emit_expr for the sequence. emit_expr will set
5331 dwarf_file_string to non-zero if this string might be a
5332 source file name. */
5333 if (strcmp (segment_name (now_seg
), ".debug") != 0)
5334 dwarf_file_string
= 0;
5335 else if (dwarf_file_string
)
5337 c
= input_line_pointer
[-1];
5338 input_line_pointer
[-1] = '\0';
5339 listing_source_file (start
);
5340 input_line_pointer
[-1] = c
;
5346 input_line_pointer
++;
5347 c
= get_single_number ();
5348 stringer_append_char (c
, bitsize
);
5349 if (*input_line_pointer
!= '>')
5350 as_bad (_("expected <nn>"));
5352 input_line_pointer
++;
5355 input_line_pointer
++;
5359 c
= *input_line_pointer
;
5362 demand_empty_rest_of_line ();
5365 /* FIXME-SOMEDAY: I had trouble here on characters with the
5366 high bits set. We'll probably also have trouble with
5367 multibyte chars, wide chars, etc. Also be careful about
5368 returning values bigger than 1 byte. xoxorich. */
5371 next_char_of_string (void)
5375 c
= *input_line_pointer
++ & CHAR_MASK
;
5383 as_warn (_("unterminated string; newline inserted"));
5384 bump_line_counters ();
5387 #ifndef NO_STRING_ESCAPES
5389 switch (c
= *input_line_pointer
++)
5417 break; /* As itself. */
5433 for (i
= 0, number
= 0;
5434 ISDIGIT (c
) && i
< 3;
5435 c
= *input_line_pointer
++, i
++)
5437 number
= number
* 8 + c
- '0';
5442 --input_line_pointer
;
5451 c
= *input_line_pointer
++;
5452 while (ISXDIGIT (c
))
5455 number
= number
* 16 + c
- '0';
5456 else if (ISUPPER (c
))
5457 number
= number
* 16 + c
- 'A' + 10;
5459 number
= number
* 16 + c
- 'a' + 10;
5460 c
= *input_line_pointer
++;
5463 --input_line_pointer
;
5468 /* To be compatible with BSD 4.2 as: give the luser a linefeed!! */
5469 as_warn (_("unterminated string; newline inserted"));
5471 bump_line_counters ();
5476 #ifdef ONLY_STANDARD_ESCAPES
5477 as_bad (_("bad escaped character in string"));
5479 #endif /* ONLY_STANDARD_ESCAPES */
5484 #endif /* ! defined (NO_STRING_ESCAPES) */
5493 get_segmented_expression (expressionS
*expP
)
5497 retval
= expression (expP
);
5498 if (expP
->X_op
== O_illegal
5499 || expP
->X_op
== O_absent
5500 || expP
->X_op
== O_big
)
5502 as_bad (_("expected address expression"));
5503 expP
->X_op
= O_constant
;
5504 expP
->X_add_number
= 0;
5505 retval
= absolute_section
;
5511 get_known_segmented_expression (expressionS
*expP
)
5513 segT retval
= get_segmented_expression (expP
);
5515 if (retval
== undefined_section
)
5517 /* There is no easy way to extract the undefined symbol from the
5519 if (expP
->X_add_symbol
!= NULL
5520 && S_GET_SEGMENT (expP
->X_add_symbol
) != expr_section
)
5521 as_warn (_("symbol \"%s\" undefined; zero assumed"),
5522 S_GET_NAME (expP
->X_add_symbol
));
5524 as_warn (_("some symbol undefined; zero assumed"));
5525 retval
= absolute_section
;
5526 expP
->X_op
= O_constant
;
5527 expP
->X_add_number
= 0;
5532 char /* Return terminator. */
5533 get_absolute_expression_and_terminator (long *val_pointer
/* Return value of expression. */)
5535 /* FIXME: val_pointer should probably be offsetT *. */
5536 *val_pointer
= (long) get_absolute_expression ();
5537 return (*input_line_pointer
++);
5540 /* Like demand_copy_string, but return NULL if the string contains any '\0's.
5541 Give a warning if that happens. */
5544 demand_copy_C_string (int *len_pointer
)
5548 if ((s
= demand_copy_string (len_pointer
)) != 0)
5552 for (len
= *len_pointer
; len
> 0; len
--)
5559 as_bad (_("this string may not contain \'\\0\'"));
5567 /* Demand string, but return a safe (=private) copy of the string.
5568 Return NULL if we can't read a string here. */
5571 demand_copy_string (int *lenP
)
5579 if (*input_line_pointer
== '\"')
5581 input_line_pointer
++; /* Skip opening quote. */
5583 while (is_a_char (c
= next_char_of_string ()))
5585 obstack_1grow (¬es
, c
);
5588 /* JF this next line is so demand_copy_C_string will return a
5589 null terminated string. */
5590 obstack_1grow (¬es
, '\0');
5591 retval
= (char *) obstack_finish (¬es
);
5595 as_bad (_("missing string"));
5597 ignore_rest_of_line ();
5603 /* In: Input_line_pointer->next character.
5605 Do: Skip input_line_pointer over all whitespace.
5607 Out: 1 if input_line_pointer->end-of-line. */
5610 is_it_end_of_statement (void)
5613 return (is_end_of_line
[(unsigned char) *input_line_pointer
]);
5617 equals (char *sym_name
, int reassign
)
5622 input_line_pointer
++;
5623 if (*input_line_pointer
== '=')
5624 input_line_pointer
++;
5625 if (reassign
< 0 && *input_line_pointer
== '=')
5626 input_line_pointer
++;
5628 while (*input_line_pointer
== ' ' || *input_line_pointer
== '\t')
5629 input_line_pointer
++;
5632 stop
= mri_comment_field (&stopc
);
5634 assign_symbol (sym_name
, reassign
>= 0 ? !reassign
: reassign
);
5638 demand_empty_rest_of_line ();
5639 mri_comment_end (stop
, stopc
);
5643 /* .incbin -- include a file verbatim at the current location. */
5646 s_incbin (int x ATTRIBUTE_UNUSED
)
5657 #ifdef md_flush_pending_output
5658 md_flush_pending_output ();
5661 #ifdef md_cons_align
5666 filename
= demand_copy_string (& len
);
5667 if (filename
== NULL
)
5672 /* Look for optional skip and count. */
5673 if (* input_line_pointer
== ',')
5675 ++ input_line_pointer
;
5676 skip
= get_absolute_expression ();
5680 if (* input_line_pointer
== ',')
5682 ++ input_line_pointer
;
5684 count
= get_absolute_expression ();
5686 as_warn (_(".incbin count zero, ignoring `%s'"), filename
);
5692 demand_empty_rest_of_line ();
5694 /* Try opening absolute path first, then try include dirs. */
5695 binfile
= fopen (filename
, FOPEN_RB
);
5696 if (binfile
== NULL
)
5700 path
= (char *) xmalloc ((unsigned long) len
+ include_dir_maxlen
+ 5);
5702 for (i
= 0; i
< include_dir_count
; i
++)
5704 sprintf (path
, "%s/%s", include_dirs
[i
], filename
);
5706 binfile
= fopen (path
, FOPEN_RB
);
5707 if (binfile
!= NULL
)
5711 if (binfile
== NULL
)
5712 as_bad (_("file not found: %s"), filename
);
5715 path
= xstrdup (filename
);
5721 register_dependency (path
);
5723 /* Compute the length of the file. */
5724 if (fseek (binfile
, 0, SEEK_END
) != 0)
5726 as_bad (_("seek to end of .incbin file failed `%s'"), path
);
5729 file_len
= ftell (binfile
);
5731 /* If a count was not specified use the remainder of the file. */
5733 count
= file_len
- skip
;
5735 if (skip
< 0 || count
< 0 || file_len
< 0 || skip
+ count
> file_len
)
5737 as_bad (_("skip (%ld) or count (%ld) invalid for file size (%ld)"),
5738 skip
, count
, file_len
);
5742 if (fseek (binfile
, skip
, SEEK_SET
) != 0)
5744 as_bad (_("could not skip to %ld in file `%s'"), skip
, path
);
5748 /* Allocate frag space and store file contents in it. */
5749 binfrag
= frag_more (count
);
5751 bytes
= fread (binfrag
, 1, count
, binfile
);
5753 as_warn (_("truncated file `%s', %ld of %ld bytes read"),
5754 path
, bytes
, count
);
5757 if (binfile
!= NULL
)
5763 /* .include -- include a file at this point. */
5766 s_include (int arg ATTRIBUTE_UNUSED
)
5775 filename
= demand_copy_string (&i
);
5776 if (filename
== NULL
)
5778 /* demand_copy_string has already printed an error and
5779 called ignore_rest_of_line. */
5787 while (!is_end_of_line
[(unsigned char) *input_line_pointer
]
5788 && *input_line_pointer
!= ' '
5789 && *input_line_pointer
!= '\t')
5791 obstack_1grow (¬es
, *input_line_pointer
);
5792 ++input_line_pointer
;
5796 obstack_1grow (¬es
, '\0');
5797 filename
= (char *) obstack_finish (¬es
);
5798 while (!is_end_of_line
[(unsigned char) *input_line_pointer
])
5799 ++input_line_pointer
;
5802 demand_empty_rest_of_line ();
5803 path
= (char *) xmalloc ((unsigned long) i
5804 + include_dir_maxlen
+ 5 /* slop */ );
5806 for (i
= 0; i
< include_dir_count
; i
++)
5808 strcpy (path
, include_dirs
[i
]);
5810 strcat (path
, filename
);
5811 if (0 != (try_file
= fopen (path
, FOPEN_RT
)))
5821 /* malloc Storage leak when file is found on path. FIXME-SOMEDAY. */
5822 register_dependency (path
);
5823 input_scrub_insert_file (path
);
5827 add_include_dir (char *path
)
5831 if (include_dir_count
== 0)
5833 include_dirs
= (char **) xmalloc (2 * sizeof (*include_dirs
));
5834 include_dirs
[0] = "."; /* Current dir. */
5835 include_dir_count
= 2;
5839 include_dir_count
++;
5841 (char **) xrealloc (include_dirs
,
5842 include_dir_count
* sizeof (*include_dirs
));
5845 include_dirs
[include_dir_count
- 1] = path
; /* New one. */
5848 if (i
> include_dir_maxlen
)
5849 include_dir_maxlen
= i
;
5852 /* Output debugging information to denote the source file. */
5855 generate_file_debug (void)
5857 if (debug_type
== DEBUG_STABS
)
5858 stabs_generate_asm_file ();
5861 /* Output line number debugging information for the current source line. */
5864 generate_lineno_debug (void)
5868 case DEBUG_UNSPECIFIED
:
5873 stabs_generate_asm_lineno ();
5876 ecoff_generate_asm_lineno ();
5879 /* ??? We could here indicate to dwarf2dbg.c that something
5880 has changed. However, since there is additional backend
5881 support that is required (calling dwarf2_emit_insn), we
5882 let dwarf2dbg.c call as_where on its own. */
5887 /* Output debugging information to mark a function entry point or end point.
5888 END_P is zero for .func, and non-zero for .endfunc. */
5893 do_s_func (end_p
, NULL
);
5896 /* Subroutine of s_func so targets can choose a different default prefix.
5897 If DEFAULT_PREFIX is NULL, use the target's "leading char". */
5900 do_s_func (int end_p
, const char *default_prefix
)
5902 /* Record the current function so that we can issue an error message for
5903 misplaced .func,.endfunc, and also so that .endfunc needs no
5905 static char *current_name
;
5906 static char *current_label
;
5910 if (current_name
== NULL
)
5912 as_bad (_("missing .func"));
5913 ignore_rest_of_line ();
5917 if (debug_type
== DEBUG_STABS
)
5918 stabs_generate_asm_endfunc (current_name
, current_label
);
5920 current_name
= current_label
= NULL
;
5925 char delim1
, delim2
;
5927 if (current_name
!= NULL
)
5929 as_bad (_(".endfunc missing for previous .func"));
5930 ignore_rest_of_line ();
5934 name
= input_line_pointer
;
5935 delim1
= get_symbol_end ();
5936 name
= xstrdup (name
);
5937 *input_line_pointer
= delim1
;
5939 if (*input_line_pointer
!= ',')
5943 if (asprintf (&label
, "%s%s", default_prefix
, name
) == -1)
5944 as_fatal ("%s", xstrerror (errno
));
5948 char leading_char
= bfd_get_symbol_leading_char (stdoutput
);
5949 /* Missing entry point, use function's name with the leading
5953 if (asprintf (&label
, "%c%s", leading_char
, name
) == -1)
5954 as_fatal ("%s", xstrerror (errno
));
5962 ++input_line_pointer
;
5964 label
= input_line_pointer
;
5965 delim2
= get_symbol_end ();
5966 label
= xstrdup (label
);
5967 *input_line_pointer
= delim2
;
5970 if (debug_type
== DEBUG_STABS
)
5971 stabs_generate_asm_func (name
, label
);
5973 current_name
= name
;
5974 current_label
= label
;
5977 demand_empty_rest_of_line ();
5980 #ifdef HANDLE_BUNDLE
5983 s_bundle_align_mode (int arg ATTRIBUTE_UNUSED
)
5985 unsigned int align
= get_absolute_expression ();
5987 demand_empty_rest_of_line ();
5989 if (align
> (unsigned int) TC_ALIGN_LIMIT
)
5990 as_fatal (_(".bundle_align_mode alignment too large (maximum %u)"),
5991 (unsigned int) TC_ALIGN_LIMIT
);
5993 if (bundle_lock_frag
!= NULL
)
5995 as_bad (_("cannot change .bundle_align_mode inside .bundle_lock"));
5999 bundle_align_p2
= align
;
6003 s_bundle_lock (int arg ATTRIBUTE_UNUSED
)
6005 demand_empty_rest_of_line ();
6007 if (bundle_align_p2
== 0)
6009 as_bad (_(".bundle_lock is meaningless without .bundle_align_mode"));
6013 if (bundle_lock_depth
== 0)
6015 bundle_lock_frchain
= frchain_now
;
6016 bundle_lock_frag
= start_bundle ();
6018 ++bundle_lock_depth
;
6022 s_bundle_unlock (int arg ATTRIBUTE_UNUSED
)
6026 demand_empty_rest_of_line ();
6028 if (bundle_lock_frag
== NULL
)
6030 as_bad (_(".bundle_unlock without preceding .bundle_lock"));
6034 gas_assert (bundle_align_p2
> 0);
6036 gas_assert (bundle_lock_depth
> 0);
6037 if (--bundle_lock_depth
> 0)
6040 size
= pending_bundle_size (bundle_lock_frag
);
6042 if (size
> (1U << bundle_align_p2
))
6043 as_bad (_(".bundle_lock sequence is %u bytes, but bundle size only %u"),
6044 size
, 1 << bundle_align_p2
);
6046 finish_bundle (bundle_lock_frag
, size
);
6048 bundle_lock_frag
= NULL
;
6049 bundle_lock_frchain
= NULL
;
6052 #endif /* HANDLE_BUNDLE */
6055 s_ignore (int arg ATTRIBUTE_UNUSED
)
6057 ignore_rest_of_line ();
6061 read_print_statistics (FILE *file
)
6063 hash_print_statistics (file
, "pseudo-op table", po_hash
);
6066 /* Inserts the given line into the input stream.
6068 This call avoids macro/conditionals nesting checking, since the contents of
6069 the line are assumed to replace the contents of a line already scanned.
6071 An appropriate use of this function would be substitution of input lines when
6072 called by md_start_line_hook(). The given line is assumed to already be
6073 properly scrubbed. */
6076 input_scrub_insert_line (const char *line
)
6079 size_t len
= strlen (line
);
6080 sb_build (&newline
, len
);
6081 sb_add_buffer (&newline
, line
, len
);
6082 input_scrub_include_sb (&newline
, input_line_pointer
, 0);
6084 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
6087 /* Insert a file into the input stream; the path must resolve to an actual
6088 file; no include path searching or dependency registering is performed. */
6091 input_scrub_insert_file (char *path
)
6093 input_scrub_include_file (path
, input_line_pointer
);
6094 buffer_limit
= input_scrub_next_buffer (&input_line_pointer
);
6097 /* Find the end of a line, considering quotation and escaping of quotes. */
6099 #if !defined(TC_SINGLE_QUOTE_STRINGS) && defined(SINGLE_QUOTE_STRINGS)
6100 # define TC_SINGLE_QUOTE_STRINGS 1
6104 _find_end_of_line (char *s
, int mri_string
, int insn ATTRIBUTE_UNUSED
,
6107 char inquote
= '\0';
6110 while (!is_end_of_line
[(unsigned char) *s
]
6111 || (inquote
&& !ISCNTRL (*s
))
6112 || (inquote
== '\'' && flag_mri
)
6113 #ifdef TC_EOL_IN_INSN
6114 || (insn
&& TC_EOL_IN_INSN (s
))
6116 /* PR 6926: When we are parsing the body of a macro the sequence
6117 \@ is special - it refers to the invocation count. If the @
6118 character happens to be registered as a line-separator character
6119 by the target, then the is_end_of_line[] test above will have
6120 returned true, but we need to ignore the line separating
6121 semantics in this particular case. */
6122 || (in_macro
&& inescape
&& *s
== '@')
6125 if (mri_string
&& *s
== '\'')
6129 else if (*s
== '\\')
6133 #ifdef TC_SINGLE_QUOTE_STRINGS
6134 || (TC_SINGLE_QUOTE_STRINGS
&& *s
== '\'')
6141 as_warn (_("missing closing `%c'"), inquote
);
6142 if (inescape
&& !ignore_input ())
6143 as_warn (_("stray `\\'"));
6148 find_end_of_line (char *s
, int mri_string
)
6150 return _find_end_of_line (s
, mri_string
, 0, 0);