cgraph.h: Flatten.
[platform/upstream/gcc.git] / gcc / dbxout.c
1 /* Output dbx-format symbol table information from GNU compiler.
2    Copyright (C) 1987-2014 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19
20
21 /* Output dbx-format symbol table data.
22    This consists of many symbol table entries, each of them
23    a .stabs assembler pseudo-op with four operands:
24    a "name" which is really a description of one symbol and its type,
25    a "code", which is a symbol defined in stab.h whose name starts with N_,
26    an unused operand always 0,
27    and a "value" which is an address or an offset.
28    The name is enclosed in doublequote characters.
29
30    Each function, variable, typedef, and structure tag
31    has a symbol table entry to define it.
32    The beginning and end of each level of name scoping within
33    a function are also marked by special symbol table entries.
34
35    The "name" consists of the symbol name, a colon, a kind-of-symbol letter,
36    and a data type number.  The data type number may be followed by
37    "=" and a type definition; normally this will happen the first time
38    the type number is mentioned.  The type definition may refer to
39    other types by number, and those type numbers may be followed
40    by "=" and nested definitions.
41
42    This can make the "name" quite long.
43    When a name is more than 80 characters, we split the .stabs pseudo-op
44    into two .stabs pseudo-ops, both sharing the same "code" and "value".
45    The first one is marked as continued with a double-backslash at the
46    end of its "name".
47
48    The kind-of-symbol letter distinguished function names from global
49    variables from file-scope variables from parameters from auto
50    variables in memory from typedef names from register variables.
51    See `dbxout_symbol'.
52
53    The "code" is mostly redundant with the kind-of-symbol letter
54    that goes in the "name", but not entirely: for symbols located
55    in static storage, the "code" says which segment the address is in,
56    which controls how it is relocated.
57
58    The "value" for a symbol in static storage
59    is the core address of the symbol (actually, the assembler
60    label for the symbol).  For a symbol located in a stack slot
61    it is the stack offset; for one in a register, the register number.
62    For a typedef symbol, it is zero.
63
64    If DEBUG_SYMS_TEXT is defined, all debugging symbols must be
65    output while in the text section.
66
67    For more on data type definitions, see `dbxout_type'.  */
68
69 #include "config.h"
70 #include "system.h"
71 #include "coretypes.h"
72 #include "tm.h"
73
74 #include "tree.h"
75 #include "varasm.h"
76 #include "stor-layout.h"
77 #include "rtl.h"
78 #include "flags.h"
79 #include "regs.h"
80 #include "insn-config.h"
81 #include "reload.h"
82 #include "output.h"
83 #include "dbxout.h"
84 #include "diagnostic-core.h"
85 #include "toplev.h"
86 #include "tm_p.h"
87 #include "ggc.h"
88 #include "debug.h"
89 #include "hashtab.h"
90 #include "hash-set.h"
91 #include "vec.h"
92 #include "machmode.h"
93 #include "hard-reg-set.h"
94 #include "input.h"
95 #include "function.h"
96 #include "target.h"
97 #include "common/common-target.h"
98 #include "langhooks.h"
99 #include "obstack.h"
100 #include "expr.h"
101 #include "hash-map.h"
102 #include "is-a.h"
103 #include "plugin-api.h"
104 #include "ipa-ref.h"
105 #include "cgraph.h"
106
107 #ifdef XCOFF_DEBUGGING_INFO
108 #include "xcoffout.h"
109 #endif
110
111 #ifndef ASM_STABS_OP
112 # ifdef XCOFF_DEBUGGING_INFO
113 #  define ASM_STABS_OP "\t.stabx\t"
114 # else
115 #  define ASM_STABS_OP "\t.stabs\t"
116 # endif
117 #endif
118
119 #ifndef ASM_STABN_OP
120 #define ASM_STABN_OP "\t.stabn\t"
121 #endif
122
123 #ifndef ASM_STABD_OP
124 #define ASM_STABD_OP "\t.stabd\t"
125 #endif
126
127 #ifndef DBX_TYPE_DECL_STABS_CODE
128 #define DBX_TYPE_DECL_STABS_CODE N_LSYM
129 #endif
130
131 #ifndef DBX_STATIC_CONST_VAR_CODE
132 #define DBX_STATIC_CONST_VAR_CODE N_FUN
133 #endif
134
135 #ifndef DBX_REGPARM_STABS_CODE
136 #define DBX_REGPARM_STABS_CODE N_RSYM
137 #endif
138
139 #ifndef DBX_REGPARM_STABS_LETTER
140 #define DBX_REGPARM_STABS_LETTER 'P'
141 #endif
142
143 #ifndef NO_DBX_FUNCTION_END
144 #define NO_DBX_FUNCTION_END 0
145 #endif
146
147 #ifndef NO_DBX_BNSYM_ENSYM
148 #define NO_DBX_BNSYM_ENSYM 0
149 #endif
150
151 #ifndef NO_DBX_MAIN_SOURCE_DIRECTORY
152 #define NO_DBX_MAIN_SOURCE_DIRECTORY 0
153 #endif
154
155 #ifndef DBX_BLOCKS_FUNCTION_RELATIVE
156 #define DBX_BLOCKS_FUNCTION_RELATIVE 0
157 #endif
158
159 #ifndef DBX_LINES_FUNCTION_RELATIVE
160 #define DBX_LINES_FUNCTION_RELATIVE 0
161 #endif
162
163 #ifndef DBX_CONTIN_LENGTH
164 #define DBX_CONTIN_LENGTH 80
165 #endif
166
167 #ifndef DBX_CONTIN_CHAR
168 #define DBX_CONTIN_CHAR '\\'
169 #endif
170
171 enum typestatus {TYPE_UNSEEN, TYPE_XREF, TYPE_DEFINED};
172
173 /* Structure recording information about a C data type.
174    The status element says whether we have yet output
175    the definition of the type.  TYPE_XREF says we have
176    output it as a cross-reference only.
177    The file_number and type_number elements are used if DBX_USE_BINCL
178    is defined.  */
179
180 struct GTY(()) typeinfo {
181   enum typestatus status;
182   int file_number;
183   int type_number;
184 };
185
186 /* Vector recording information about C data types.
187    When we first notice a data type (a tree node),
188    we assign it a number using next_type_number.
189    That is its index in this vector.  */
190
191 static GTY ((length ("typevec_len"))) struct typeinfo *typevec;
192
193 /* Number of elements of space allocated in `typevec'.  */
194
195 static GTY(()) int typevec_len;
196
197 /* In dbx output, each type gets a unique number.
198    This is the number for the next type output.
199    The number, once assigned, is in the TYPE_SYMTAB_ADDRESS field.  */
200
201 static GTY(()) int next_type_number;
202
203 /* The C front end may call dbxout_symbol before dbxout_init runs.
204    We save all such decls in this list and output them when we get
205    to dbxout_init.  */
206
207 static GTY(()) tree preinit_symbols;
208
209 enum binclstatus {BINCL_NOT_REQUIRED, BINCL_PENDING, BINCL_PROCESSED};
210
211 /* When using N_BINCL in dbx output, each type number is actually a
212    pair of the file number and the type number within the file.
213    This is a stack of input files.  */
214
215 struct dbx_file
216 {
217   struct dbx_file *next;
218   int file_number;
219   int next_type_number;
220   enum binclstatus bincl_status;  /* Keep track of lazy bincl.  */
221   const char *pending_bincl_name; /* Name of bincl.  */
222   struct dbx_file *prev;          /* Chain to traverse all pending bincls.  */
223 };
224
225 /* This is the top of the stack.
226
227    This is not saved for PCH, because restoring a PCH should not change it.
228    next_file_number does have to be saved, because the PCH may use some
229    file numbers; however, just before restoring a PCH, next_file_number
230    should always be 0 because we should not have needed any file numbers
231    yet.  */
232
233 #if (defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)) \
234     && defined (DBX_USE_BINCL)
235 static struct dbx_file *current_file;
236 #endif
237
238 /* This is the next file number to use.  */
239
240 static GTY(()) int next_file_number;
241
242 /* A counter for dbxout_function_end.  */
243
244 static GTY(()) int scope_labelno;
245
246 /* A counter for dbxout_source_line.  */
247
248 static GTY(()) int dbxout_source_line_counter;
249
250 /* Number for the next N_SOL filename stabs label.  The number 0 is reserved
251    for the N_SO filename stabs label.  */
252
253 static GTY(()) int source_label_number = 1;
254
255 /* Last source file name mentioned in a NOTE insn.  */
256
257 static GTY(()) const char *lastfile;
258
259 /* Used by PCH machinery to detect if 'lastfile' should be reset to
260    base_input_file.  */
261 static GTY(()) int lastfile_is_base;
262
263 /* Typical USG systems don't have stab.h, and they also have
264    no use for DBX-format debugging info.  */
265
266 #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
267
268 #ifdef DBX_USE_BINCL
269 /* If zero then there is no pending BINCL.  */
270 static int pending_bincls = 0;
271 #endif
272
273 /* The original input file name.  */
274 static const char *base_input_file;
275
276 #ifdef DEBUG_SYMS_TEXT
277 #define FORCE_TEXT switch_to_section (current_function_section ())
278 #else
279 #define FORCE_TEXT
280 #endif
281
282 #include "gstab.h"
283
284 /* 1 if PARM is passed to this function in memory.  */
285
286 #define PARM_PASSED_IN_MEMORY(PARM) \
287  (MEM_P (DECL_INCOMING_RTL (PARM)))
288
289 /* A C expression for the integer offset value of an automatic variable
290    (N_LSYM) having address X (an RTX).  */
291 #ifndef DEBUGGER_AUTO_OFFSET
292 #define DEBUGGER_AUTO_OFFSET(X) \
293   (GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0)
294 #endif
295
296 /* A C expression for the integer offset value of an argument (N_PSYM)
297    having address X (an RTX).  The nominal offset is OFFSET.
298    Note that we use OFFSET + 0 here to avoid the self-assign warning
299    when the macro is called in a context like
300    number = DEBUGGER_ARG_OFFSET(number, X)  */
301 #ifndef DEBUGGER_ARG_OFFSET
302 #define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET + 0)
303 #endif
304
305 /* This obstack holds the stab string currently being constructed.  We
306    build it up here, then write it out, so we can split long lines up
307    properly (see dbxout_finish_complex_stabs).  */
308 static struct obstack stabstr_ob;
309 static size_t stabstr_last_contin_point;
310
311 #ifdef DBX_USE_BINCL
312 static void emit_bincl_stab             (const char *c);
313 static void emit_pending_bincls         (void);
314 #endif
315 static inline void emit_pending_bincls_if_required (void);
316
317 static void dbxout_init (const char *);
318
319 static void dbxout_finish (const char *);
320 static void dbxout_start_source_file (unsigned, const char *);
321 static void dbxout_end_source_file (unsigned);
322 static void dbxout_typedefs (tree);
323 static void dbxout_type_index (tree);
324 static void dbxout_args (tree);
325 static void dbxout_type_fields (tree);
326 static void dbxout_type_method_1 (tree);
327 static void dbxout_type_methods (tree);
328 static void dbxout_range_type (tree, tree, tree);
329 static void dbxout_type (tree, int);
330 static bool print_int_cst_bounds_in_octal_p (tree, tree, tree);
331 static bool is_fortran (void);
332 static void dbxout_type_name (tree);
333 static void dbxout_class_name_qualifiers (tree);
334 static int dbxout_symbol_location (tree, tree, const char *, rtx);
335 static void dbxout_symbol_name (tree, const char *, int);
336 static void dbxout_common_name (tree, const char *, stab_code_type);
337 static const char *dbxout_common_check (tree, int *);
338 static void dbxout_global_decl (tree);
339 static void dbxout_type_decl (tree, int);
340 static void dbxout_handle_pch (unsigned);
341 static void debug_free_queue (void);
342 \f
343 /* The debug hooks structure.  */
344 #if defined (DBX_DEBUGGING_INFO)
345
346 static void dbxout_source_line (unsigned int, const char *, int, bool);
347 static void dbxout_begin_prologue (unsigned int, const char *);
348 static void dbxout_source_file (const char *);
349 static void dbxout_function_end (tree);
350 static void dbxout_begin_function (tree);
351 static void dbxout_begin_block (unsigned, unsigned);
352 static void dbxout_end_block (unsigned, unsigned);
353 static void dbxout_function_decl (tree);
354
355 const struct gcc_debug_hooks dbx_debug_hooks =
356 {
357   dbxout_init,
358   dbxout_finish,
359   debug_nothing_void,
360   debug_nothing_int_charstar,
361   debug_nothing_int_charstar,
362   dbxout_start_source_file,
363   dbxout_end_source_file,
364   dbxout_begin_block,
365   dbxout_end_block,
366   debug_true_const_tree,                 /* ignore_block */
367   dbxout_source_line,                    /* source_line */
368   dbxout_begin_prologue,                 /* begin_prologue */
369   debug_nothing_int_charstar,            /* end_prologue */
370   debug_nothing_int_charstar,            /* begin_epilogue */
371   debug_nothing_int_charstar,            /* end_epilogue */
372 #ifdef DBX_FUNCTION_FIRST
373   dbxout_begin_function,
374 #else
375   debug_nothing_tree,                    /* begin_function */
376 #endif
377   debug_nothing_int,                     /* end_function */
378   dbxout_function_decl,
379   dbxout_global_decl,                    /* global_decl */
380   dbxout_type_decl,                      /* type_decl */
381   debug_nothing_tree_tree_tree_bool,     /* imported_module_or_decl */
382   debug_nothing_tree,                    /* deferred_inline_function */
383   debug_nothing_tree,                    /* outlining_inline_function */
384   debug_nothing_rtx_code_label,          /* label */
385   dbxout_handle_pch,                     /* handle_pch */
386   debug_nothing_rtx_insn,                /* var_location */
387   debug_nothing_void,                    /* switch_text_section */
388   debug_nothing_tree_tree,               /* set_name */
389   0,                                     /* start_end_main_source_file */
390   TYPE_SYMTAB_IS_ADDRESS                 /* tree_type_symtab_field */
391 };
392 #endif /* DBX_DEBUGGING_INFO  */
393
394 #if defined (XCOFF_DEBUGGING_INFO)
395 const struct gcc_debug_hooks xcoff_debug_hooks =
396 {
397   dbxout_init,
398   dbxout_finish,
399   debug_nothing_void,
400   debug_nothing_int_charstar,
401   debug_nothing_int_charstar,
402   dbxout_start_source_file,
403   dbxout_end_source_file,
404   xcoffout_begin_block,
405   xcoffout_end_block,
406   debug_true_const_tree,                 /* ignore_block */
407   xcoffout_source_line,
408   xcoffout_begin_prologue,               /* begin_prologue */
409   debug_nothing_int_charstar,            /* end_prologue */
410   debug_nothing_int_charstar,            /* begin_epilogue */
411   xcoffout_end_epilogue,
412   debug_nothing_tree,                    /* begin_function */
413   xcoffout_end_function,
414   debug_nothing_tree,                    /* function_decl */
415   dbxout_global_decl,                    /* global_decl */
416   dbxout_type_decl,                      /* type_decl */
417   debug_nothing_tree_tree_tree_bool,     /* imported_module_or_decl */
418   debug_nothing_tree,                    /* deferred_inline_function */
419   debug_nothing_tree,                    /* outlining_inline_function */
420   debug_nothing_rtx_code_label,          /* label */
421   dbxout_handle_pch,                     /* handle_pch */
422   debug_nothing_rtx_insn,                /* var_location */
423   debug_nothing_void,                    /* switch_text_section */
424   debug_nothing_tree_tree,               /* set_name */
425   0,                                     /* start_end_main_source_file */
426   TYPE_SYMTAB_IS_ADDRESS                 /* tree_type_symtab_field */
427 };
428 #endif /* XCOFF_DEBUGGING_INFO  */
429 \f
430 /* Numeric formatting helper macro.  Note that this does not handle
431    hexadecimal.  */
432 #define NUMBER_FMT_LOOP(P, NUM, BASE)           \
433   do                                            \
434     {                                           \
435       int digit = NUM % BASE;                   \
436       NUM /= BASE;                              \
437       *--P = digit + '0';                       \
438     }                                           \
439   while (NUM > 0)
440
441 /* Utility: write a decimal integer NUM to asm_out_file.  */
442 void
443 dbxout_int (int num)
444 {
445   char buf[64];
446   char *p = buf + sizeof buf;
447   unsigned int unum;
448
449   if (num == 0)
450     {
451       putc ('0', asm_out_file);
452       return;
453     }
454   if (num < 0)
455     {
456       putc ('-', asm_out_file);
457       unum = -num;
458     }
459   else
460     unum = num;
461
462   NUMBER_FMT_LOOP (p, unum, 10);
463
464   while (p < buf + sizeof buf)
465     {
466       putc (*p, asm_out_file);
467       p++;
468     }
469 }
470
471 \f
472 /* Primitives for emitting simple stabs directives.  All other stabs
473    routines should use these functions instead of directly emitting
474    stabs.  They are exported because machine-dependent code may need
475    to invoke them, e.g. in a DBX_OUTPUT_* macro whose definition
476    forwards to code in CPU.c.  */
477
478 /* The following functions should all be called immediately after one
479    of the dbxout_begin_stab* functions (below).  They write out
480    various things as the value of a stab.  */
481
482 /* Write out a literal zero as the value of a stab.  */
483 void
484 dbxout_stab_value_zero (void)
485 {
486   fputs ("0\n", asm_out_file);
487 }
488
489 /* Write out the label LABEL as the value of a stab.  */
490 void
491 dbxout_stab_value_label (const char *label)
492 {
493   assemble_name (asm_out_file, label);
494   putc ('\n', asm_out_file);
495 }
496
497 /* Write out the difference of two labels, LABEL - BASE, as the value
498    of a stab.  */
499 void
500 dbxout_stab_value_label_diff (const char *label, const char *base)
501 {
502   assemble_name (asm_out_file, label);
503   putc ('-', asm_out_file);
504   assemble_name (asm_out_file, base);
505   putc ('\n', asm_out_file);
506 }
507
508 /* Write out an internal label as the value of a stab, and immediately
509    emit that internal label.  This should be used only when
510    dbxout_stabd will not work.  STEM is the name stem of the label,
511    COUNTERP is a pointer to a counter variable which will be used to
512    guarantee label uniqueness.  */
513 void
514 dbxout_stab_value_internal_label (const char *stem, int *counterp)
515 {
516   char label[100];
517   int counter = counterp ? (*counterp)++ : 0;
518
519   ASM_GENERATE_INTERNAL_LABEL (label, stem, counter);
520   dbxout_stab_value_label (label);
521   targetm.asm_out.internal_label (asm_out_file, stem, counter);
522 }
523
524 /* Write out the difference between BASE and an internal label as the
525    value of a stab, and immediately emit that internal label.  STEM and
526    COUNTERP are as for dbxout_stab_value_internal_label.  */
527 void
528 dbxout_stab_value_internal_label_diff (const char *stem, int *counterp,
529                                        const char *base)
530 {
531   char label[100];
532   int counter = counterp ? (*counterp)++ : 0;
533
534   ASM_GENERATE_INTERNAL_LABEL (label, stem, counter);
535   dbxout_stab_value_label_diff (label, base);
536   targetm.asm_out.internal_label (asm_out_file, stem, counter);
537 }
538
539 /* The following functions produce specific kinds of stab directives.  */
540
541 /* Write a .stabd directive with type STYPE and desc SDESC to asm_out_file.  */
542 void
543 dbxout_stabd (int stype, int sdesc)
544 {
545   fputs (ASM_STABD_OP, asm_out_file);
546   dbxout_int (stype);
547   fputs (",0,", asm_out_file);
548   dbxout_int (sdesc);
549   putc ('\n', asm_out_file);
550 }
551
552 /* Write a .stabn directive with type STYPE.  This function stops
553    short of emitting the value field, which is the responsibility of
554    the caller (normally it will be either a symbol or the difference
555    of two symbols).  */
556
557 void
558 dbxout_begin_stabn (int stype)
559 {
560   fputs (ASM_STABN_OP, asm_out_file);
561   dbxout_int (stype);
562   fputs (",0,0,", asm_out_file);
563 }
564
565 /* Write a .stabn directive with type N_SLINE and desc LINE.  As above,
566    the value field is the responsibility of the caller.  */
567 void
568 dbxout_begin_stabn_sline (int lineno)
569 {
570   fputs (ASM_STABN_OP, asm_out_file);
571   dbxout_int (N_SLINE);
572   fputs (",0,", asm_out_file);
573   dbxout_int (lineno);
574   putc (',', asm_out_file);
575 }
576
577 /* Begin a .stabs directive with string "", type STYPE, and desc and
578    other fields 0.  The value field is the responsibility of the
579    caller.  This function cannot be used for .stabx directives.  */
580 void
581 dbxout_begin_empty_stabs (int stype)
582 {
583   fputs (ASM_STABS_OP, asm_out_file);
584   fputs ("\"\",", asm_out_file);
585   dbxout_int (stype);
586   fputs (",0,0,", asm_out_file);
587 }
588
589 /* Begin a .stabs directive with string STR, type STYPE, and desc 0.
590    The value field is the responsibility of the caller.  */
591 void
592 dbxout_begin_simple_stabs (const char *str, int stype)
593 {
594   fputs (ASM_STABS_OP, asm_out_file);
595   output_quoted_string (asm_out_file, str);
596   putc (',', asm_out_file);
597   dbxout_int (stype);
598   fputs (",0,0,", asm_out_file);
599 }
600
601 /* As above but use SDESC for the desc field.  */
602 void
603 dbxout_begin_simple_stabs_desc (const char *str, int stype, int sdesc)
604 {
605   fputs (ASM_STABS_OP, asm_out_file);
606   output_quoted_string (asm_out_file, str);
607   putc (',', asm_out_file);
608   dbxout_int (stype);
609   fputs (",0,", asm_out_file);
610   dbxout_int (sdesc);
611   putc (',', asm_out_file);
612 }
613
614 /* The next set of functions are entirely concerned with production of
615    "complex" .stabs directives: that is, .stabs directives whose
616    strings have to be constructed piecemeal.  dbxout_type,
617    dbxout_symbol, etc. use these routines heavily.  The string is queued
618    up in an obstack, then written out by dbxout_finish_complex_stabs, which
619    is also responsible for splitting it up if it exceeds DBX_CONTIN_LENGTH.
620    (You might think it would be more efficient to go straight to stdio
621    when DBX_CONTIN_LENGTH is 0 (i.e. no length limit) but that turns
622    out not to be the case, and anyway this needs fewer #ifdefs.)  */
623
624 /* Begin a complex .stabs directive.  If we can, write the initial
625    ASM_STABS_OP to the asm_out_file.  */
626
627 static void
628 dbxout_begin_complex_stabs (void)
629 {
630   emit_pending_bincls_if_required ();
631   FORCE_TEXT;
632   fputs (ASM_STABS_OP, asm_out_file);
633   putc ('"', asm_out_file);
634   gcc_assert (stabstr_last_contin_point == 0);
635 }
636
637 /* As above, but do not force text or emit pending bincls.  This is
638    used by dbxout_symbol_location, which needs to do something else.  */
639 static void
640 dbxout_begin_complex_stabs_noforcetext (void)
641 {
642   fputs (ASM_STABS_OP, asm_out_file);
643   putc ('"', asm_out_file);
644   gcc_assert (stabstr_last_contin_point == 0);
645 }
646
647 /* Add CHR, a single character, to the string being built.  */
648 #define stabstr_C(chr) obstack_1grow (&stabstr_ob, chr)
649
650 /* Add STR, a normal C string, to the string being built.  */
651 #define stabstr_S(str) obstack_grow (&stabstr_ob, str, strlen (str))
652
653 /* Add the text of ID, an IDENTIFIER_NODE, to the string being built.  */
654 #define stabstr_I(id) obstack_grow (&stabstr_ob, \
655                                     IDENTIFIER_POINTER (id), \
656                                     IDENTIFIER_LENGTH (id))
657
658 /* Add NUM, a signed decimal number, to the string being built.  */
659 static void
660 stabstr_D (HOST_WIDE_INT num)
661 {
662   char buf[64];
663   char *p = buf + sizeof buf;
664   unsigned int unum;
665
666   if (num == 0)
667     {
668       stabstr_C ('0');
669       return;
670     }
671   if (num < 0)
672     {
673       stabstr_C ('-');
674       unum = -num;
675     }
676   else
677     unum = num;
678
679   NUMBER_FMT_LOOP (p, unum, 10);
680
681   obstack_grow (&stabstr_ob, p, (buf + sizeof buf) - p);
682 }
683
684 /* Add NUM, an unsigned decimal number, to the string being built.  */
685 static void
686 stabstr_U (unsigned HOST_WIDE_INT num)
687 {
688   char buf[64];
689   char *p = buf + sizeof buf;
690   if (num == 0)
691     {
692       stabstr_C ('0');
693       return;
694     }
695   NUMBER_FMT_LOOP (p, num, 10);
696   obstack_grow (&stabstr_ob, p, (buf + sizeof buf) - p);
697 }
698
699 /* Add CST, an INTEGER_CST tree, to the string being built as an
700    unsigned octal number.  This routine handles values which are
701    larger than a single HOST_WIDE_INT.  */
702 static void
703 stabstr_O (tree cst)
704 {
705   int prec = TYPE_PRECISION (TREE_TYPE (cst));
706   int res_pres = prec % 3;
707   int i;
708   unsigned int digit;
709
710   /* Leading zero for base indicator.  */
711   stabstr_C ('0');
712
713   /* If the value is zero, the base indicator will serve as the value
714      all by itself.  */
715   if (wi::eq_p (cst, 0))
716     return;
717
718   /* GDB wants constants with no extra leading "1" bits, so
719      we need to remove any sign-extension that might be
720      present.  */
721   if (res_pres == 1)
722     {
723       digit = wi::extract_uhwi (cst, prec - 1, 1);
724       stabstr_C ('0' + digit);
725     }
726   else if (res_pres == 2)
727     {
728       digit = wi::extract_uhwi (cst, prec - 2, 2);
729       stabstr_C ('0' + digit);
730     }
731
732   prec -= res_pres;
733   for (i = prec - 3; i >= 0; i = i - 3)
734     {
735       digit = wi::extract_uhwi (cst, i, 3);
736       stabstr_C ('0' + digit);
737     }
738 }
739
740 /* Called whenever it is safe to break a stabs string into multiple
741    .stabs directives.  If the current string has exceeded the limit
742    set by DBX_CONTIN_LENGTH, mark the current position in the buffer
743    as a continuation point by inserting DBX_CONTIN_CHAR (doubled if
744    it is a backslash) and a null character.  */
745 static inline void
746 stabstr_continue (void)
747 {
748   if (DBX_CONTIN_LENGTH > 0
749       && obstack_object_size (&stabstr_ob) - stabstr_last_contin_point
750          > DBX_CONTIN_LENGTH)
751     {
752       if (DBX_CONTIN_CHAR == '\\')
753         obstack_1grow (&stabstr_ob, '\\');
754       obstack_1grow (&stabstr_ob, DBX_CONTIN_CHAR);
755       obstack_1grow (&stabstr_ob, '\0');
756       stabstr_last_contin_point = obstack_object_size (&stabstr_ob);
757     }
758 }
759 #define CONTIN stabstr_continue ()
760
761 /* Macro subroutine of dbxout_finish_complex_stabs, which emits
762    all of the arguments to the .stabs directive after the string.
763    Overridden by xcoffout.h.  CODE is the stabs code for this symbol;
764    LINE is the source line to write into the desc field (in extended
765    mode); SYM is the symbol itself.
766
767    ADDR, LABEL, and NUMBER are three different ways to represent the
768    stabs value field.  At most one of these should be nonzero.
769
770      ADDR is used most of the time; it represents the value as an
771      RTL address constant.
772
773      LABEL is used (currently) only for N_CATCH stabs; it represents
774      the value as a string suitable for assemble_name.
775
776      NUMBER is used when the value is an offset from an implicit base
777      pointer (e.g. for a stack variable), or an index (e.g. for a
778      register variable).  It represents the value as a decimal integer.  */
779
780 #ifndef DBX_FINISH_STABS
781 #define DBX_FINISH_STABS(SYM, CODE, LINE, ADDR, LABEL, NUMBER)  \
782 do {                                                            \
783   int line_ = use_gnu_debug_info_extensions ? LINE : 0;         \
784                                                                 \
785   dbxout_int (CODE);                                            \
786   fputs (",0,", asm_out_file);                                  \
787   dbxout_int (line_);                                           \
788   putc (',', asm_out_file);                                     \
789   if (ADDR)                                                     \
790     output_addr_const (asm_out_file, ADDR);                     \
791   else if (LABEL)                                               \
792     assemble_name (asm_out_file, LABEL);                        \
793   else                                                          \
794     dbxout_int (NUMBER);                                        \
795   putc ('\n', asm_out_file);                                    \
796 } while (0)
797 #endif
798
799 /* Finish the emission of a complex .stabs directive.  When DBX_CONTIN_LENGTH
800    is zero, this has only to emit the close quote and the remainder of
801    the arguments.  When it is nonzero, the string has been marshalled in
802    stabstr_ob, and this routine is responsible for breaking it up into
803    DBX_CONTIN_LENGTH-sized chunks.
804
805    SYM is the DECL of the symbol under consideration; it is used only
806    for its DECL_SOURCE_LINE.  The other arguments are all passed directly
807    to DBX_FINISH_STABS; see above for details.  */
808
809 static void
810 dbxout_finish_complex_stabs (tree sym, stab_code_type code,
811                              rtx addr, const char *label, int number)
812 {
813   int line ATTRIBUTE_UNUSED;
814   char *str;
815   size_t len;
816
817   line = sym ? DECL_SOURCE_LINE (sym) : 0;
818   if (DBX_CONTIN_LENGTH > 0)
819     {
820       char *chunk;
821       size_t chunklen;
822
823       /* Nul-terminate the growing string, then get its size and
824          address.  */
825       obstack_1grow (&stabstr_ob, '\0');
826
827       len = obstack_object_size (&stabstr_ob);
828       chunk = str = XOBFINISH (&stabstr_ob, char *);
829
830       /* Within the buffer are a sequence of NUL-separated strings,
831          each of which is to be written out as a separate stab
832          directive.  */
833       for (;;)
834         {
835           chunklen = strlen (chunk);
836           fwrite (chunk, 1, chunklen, asm_out_file);
837           fputs ("\",", asm_out_file);
838
839           /* Must add an extra byte to account for the NUL separator.  */
840           chunk += chunklen + 1;
841           len   -= chunklen + 1;
842
843           /* Only put a line number on the last stab in the sequence.  */
844           DBX_FINISH_STABS (sym, code, len == 0 ? line : 0,
845                             addr, label, number);
846           if (len == 0)
847             break;
848
849           fputs (ASM_STABS_OP, asm_out_file);
850           putc ('"', asm_out_file);
851         }
852       stabstr_last_contin_point = 0;
853     }
854   else
855     {
856       /* No continuations - we can put the whole string out at once.
857          It is faster to augment the string with the close quote and
858          comma than to do a two-character fputs.  */
859       obstack_grow (&stabstr_ob, "\",", 2);
860       len = obstack_object_size (&stabstr_ob);
861       str = XOBFINISH (&stabstr_ob, char *);
862
863       fwrite (str, 1, len, asm_out_file);
864       DBX_FINISH_STABS (sym, code, line, addr, label, number);
865     }
866   obstack_free (&stabstr_ob, str);
867 }
868
869 #if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
870
871 /* When -gused is used, emit debug info for only used symbols. But in
872    addition to the standard intercepted debug_hooks there are some
873    direct calls into this file, i.e., dbxout_symbol, dbxout_parms, and
874    dbxout_reg_params.  Those routines may also be called from a higher
875    level intercepted routine. So to prevent recording data for an inner
876    call to one of these for an intercept, we maintain an intercept
877    nesting counter (debug_nesting). We only save the intercepted
878    arguments if the nesting is 1.  */
879 static int debug_nesting = 0;
880
881 static tree *symbol_queue;
882 static int symbol_queue_index = 0;
883 static int symbol_queue_size = 0;
884
885 #define DBXOUT_DECR_NESTING \
886   if (--debug_nesting == 0 && symbol_queue_index > 0) \
887     { emit_pending_bincls_if_required (); debug_flush_symbol_queue (); }
888
889 #define DBXOUT_DECR_NESTING_AND_RETURN(x) \
890   do {--debug_nesting; return (x);} while (0)
891
892 #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */
893
894 #if defined (DBX_DEBUGGING_INFO)
895
896 static void
897 dbxout_function_end (tree decl ATTRIBUTE_UNUSED)
898 {
899   char lscope_label_name[100];
900
901   /* The Lscope label must be emitted even if we aren't doing anything
902      else; dbxout_block needs it.  */
903   switch_to_section (function_section (current_function_decl));
904
905   /* Convert Lscope into the appropriate format for local labels in case
906      the system doesn't insert underscores in front of user generated
907      labels.  */
908   ASM_GENERATE_INTERNAL_LABEL (lscope_label_name, "Lscope", scope_labelno);
909   targetm.asm_out.internal_label (asm_out_file, "Lscope", scope_labelno);
910
911   /* The N_FUN tag at the end of the function is a GNU extension,
912      which may be undesirable, and is unnecessary if we do not have
913      named sections.  */
914   if (!use_gnu_debug_info_extensions
915       || NO_DBX_FUNCTION_END
916       || !targetm_common.have_named_sections)
917     return;
918
919   /* By convention, GCC will mark the end of a function with an N_FUN
920      symbol and an empty string.  */
921   if (flag_reorder_blocks_and_partition)
922     {
923       dbxout_begin_empty_stabs (N_FUN);
924       dbxout_stab_value_label_diff (crtl->subsections.hot_section_end_label,
925                                     crtl->subsections.hot_section_label);
926       dbxout_begin_empty_stabs (N_FUN);
927       dbxout_stab_value_label_diff (crtl->subsections.cold_section_end_label,
928                                     crtl->subsections.cold_section_label);
929     }
930   else
931     {
932       char begin_label[20];
933       /* Reference current function start using LFBB.  */
934       ASM_GENERATE_INTERNAL_LABEL (begin_label, "LFBB", scope_labelno);
935       dbxout_begin_empty_stabs (N_FUN);
936       dbxout_stab_value_label_diff (lscope_label_name, begin_label);
937     }
938
939   if (!NO_DBX_BNSYM_ENSYM && !flag_debug_only_used_symbols)
940     dbxout_stabd (N_ENSYM, 0);
941 }
942 #endif /* DBX_DEBUGGING_INFO */
943
944 /* Get lang description for N_SO stab.  */
945 static unsigned int ATTRIBUTE_UNUSED
946 get_lang_number (void)
947 {
948   const char *language_string = lang_hooks.name;
949
950   if (strcmp (language_string, "GNU C") == 0)
951     return N_SO_C;
952   else if (strcmp (language_string, "GNU C++") == 0)
953     return N_SO_CC;
954   else if (strcmp (language_string, "GNU F77") == 0)
955     return N_SO_FORTRAN;
956   else if (strcmp (language_string, "GNU Fortran") == 0)
957     return N_SO_FORTRAN90; /* CHECKME */
958   else if (strcmp (language_string, "GNU Pascal") == 0)
959     return N_SO_PASCAL;
960   else if (strcmp (language_string, "GNU Objective-C") == 0)
961     return N_SO_OBJC;
962   else if (strcmp (language_string, "GNU Objective-C++") == 0)
963     return N_SO_OBJCPLUS;
964   else
965     return 0;
966
967 }
968
969 static bool
970 is_fortran (void)
971 {
972    unsigned int lang = get_lang_number ();
973
974    return (lang == N_SO_FORTRAN) || (lang == N_SO_FORTRAN90);
975 }
976
977 /* At the beginning of compilation, start writing the symbol table.
978    Initialize `typevec' and output the standard data types of C.  */
979
980 static void
981 dbxout_init (const char *input_file_name)
982 {
983   char ltext_label_name[100];
984   bool used_ltext_label_name = false;
985   tree syms = lang_hooks.decls.getdecls ();
986   const char *mapped_name;
987
988   typevec_len = 100;
989   typevec = ggc_cleared_vec_alloc<typeinfo> (typevec_len);
990
991   /* stabstr_ob contains one string, which will be just fine with
992      1-byte alignment.  */
993   obstack_specify_allocation (&stabstr_ob, 0, 1, xmalloc, free);
994
995   /* Convert Ltext into the appropriate format for local labels in case
996      the system doesn't insert underscores in front of user generated
997      labels.  */
998   ASM_GENERATE_INTERNAL_LABEL (ltext_label_name, "Ltext", 0);
999
1000   /* Put the current working directory in an N_SO symbol.  */
1001   if (use_gnu_debug_info_extensions && !NO_DBX_MAIN_SOURCE_DIRECTORY)
1002     {
1003       static const char *cwd;
1004
1005       if (!cwd)
1006         {
1007           cwd = get_src_pwd ();
1008           if (cwd[0] == '\0')
1009             cwd = "/";
1010           else if (!IS_DIR_SEPARATOR (cwd[strlen (cwd) - 1]))
1011             cwd = concat (cwd, "/", NULL);
1012           cwd = remap_debug_filename (cwd);
1013         }
1014 #ifdef DBX_OUTPUT_MAIN_SOURCE_DIRECTORY
1015       DBX_OUTPUT_MAIN_SOURCE_DIRECTORY (asm_out_file, cwd);
1016 #else /* no DBX_OUTPUT_MAIN_SOURCE_DIRECTORY */
1017       dbxout_begin_simple_stabs_desc (cwd, N_SO, get_lang_number ());
1018       dbxout_stab_value_label (ltext_label_name);
1019       used_ltext_label_name = true;
1020 #endif /* no DBX_OUTPUT_MAIN_SOURCE_DIRECTORY */
1021     }
1022
1023   mapped_name = remap_debug_filename (input_file_name);
1024 #ifdef DBX_OUTPUT_MAIN_SOURCE_FILENAME
1025   DBX_OUTPUT_MAIN_SOURCE_FILENAME (asm_out_file, mapped_name);
1026 #else
1027   dbxout_begin_simple_stabs_desc (mapped_name, N_SO, get_lang_number ());
1028   dbxout_stab_value_label (ltext_label_name);
1029   used_ltext_label_name = true;
1030 #endif
1031
1032   if (used_ltext_label_name)
1033     {
1034       switch_to_section (text_section);
1035       targetm.asm_out.internal_label (asm_out_file, "Ltext", 0);
1036     }
1037
1038   /* Emit an N_OPT stab to indicate that this file was compiled by GCC.
1039      The string used is historical.  */
1040 #ifndef NO_DBX_GCC_MARKER
1041   dbxout_begin_simple_stabs ("gcc2_compiled.", N_OPT);
1042   dbxout_stab_value_zero ();
1043 #endif
1044
1045   base_input_file = lastfile = input_file_name;
1046
1047   next_type_number = 1;
1048
1049 #ifdef DBX_USE_BINCL
1050   current_file = XNEW (struct dbx_file);
1051   current_file->next = NULL;
1052   current_file->file_number = 0;
1053   current_file->next_type_number = 1;
1054   next_file_number = 1;
1055   current_file->prev = NULL;
1056   current_file->bincl_status = BINCL_NOT_REQUIRED;
1057   current_file->pending_bincl_name = NULL;
1058 #endif
1059
1060   /* Get all permanent types that have typedef names, and output them
1061      all, except for those already output.  Some language front ends
1062      put these declarations in the top-level scope; some do not;
1063      the latter are responsible for calling debug_hooks->type_decl from
1064      their record_builtin_type function.  */
1065   dbxout_typedefs (syms);
1066
1067   if (preinit_symbols)
1068     {
1069       tree t;
1070       for (t = nreverse (preinit_symbols); t; t = TREE_CHAIN (t))
1071         dbxout_symbol (TREE_VALUE (t), 0);
1072       preinit_symbols = 0;
1073     }
1074 }
1075
1076 /* Output any typedef names for types described by TYPE_DECLs in SYMS.  */
1077
1078 static void
1079 dbxout_typedefs (tree syms)
1080 {
1081   for (; syms != NULL_TREE; syms = DECL_CHAIN (syms))
1082     {
1083       if (TREE_CODE (syms) == TYPE_DECL)
1084         {
1085           tree type = TREE_TYPE (syms);
1086           if (TYPE_NAME (type)
1087               && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1088               && COMPLETE_OR_VOID_TYPE_P (type)
1089               && ! TREE_ASM_WRITTEN (TYPE_NAME (type)))
1090             dbxout_symbol (TYPE_NAME (type), 0);
1091         }
1092     }
1093 }
1094
1095 #ifdef DBX_USE_BINCL
1096 /* Emit BINCL stab using given name.  */
1097 static void
1098 emit_bincl_stab (const char *name)
1099 {
1100   dbxout_begin_simple_stabs (name, N_BINCL);
1101   dbxout_stab_value_zero ();
1102 }
1103
1104 /* If there are pending bincls then it is time to emit all of them.  */
1105
1106 static inline void
1107 emit_pending_bincls_if_required (void)
1108 {
1109   if (pending_bincls)
1110     emit_pending_bincls ();
1111 }
1112
1113 /* Emit all pending bincls.  */
1114
1115 static void
1116 emit_pending_bincls (void)
1117 {
1118   struct dbx_file *f = current_file;
1119
1120   /* Find first pending bincl.  */
1121   while (f->bincl_status == BINCL_PENDING)
1122     f = f->next;
1123
1124   /* Now emit all bincls.  */
1125   f = f->prev;
1126
1127   while (f)
1128     {
1129       if (f->bincl_status == BINCL_PENDING)
1130         {
1131           emit_bincl_stab (f->pending_bincl_name);
1132
1133           /* Update file number and status.  */
1134           f->file_number = next_file_number++;
1135           f->bincl_status = BINCL_PROCESSED;
1136         }
1137       if (f == current_file)
1138         break;
1139       f = f->prev;
1140     }
1141
1142   /* All pending bincls have been emitted.  */
1143   pending_bincls = 0;
1144 }
1145
1146 #else
1147
1148 static inline void
1149 emit_pending_bincls_if_required (void) {}
1150 #endif
1151
1152 /* Change to reading from a new source file.  Generate a N_BINCL stab.  */
1153
1154 static void
1155 dbxout_start_source_file (unsigned int line ATTRIBUTE_UNUSED,
1156                           const char *filename ATTRIBUTE_UNUSED)
1157 {
1158 #ifdef DBX_USE_BINCL
1159   struct dbx_file *n = XNEW (struct dbx_file);
1160
1161   n->next = current_file;
1162   n->next_type_number = 1;
1163   /* Do not assign file number now.
1164      Delay it until we actually emit BINCL.  */
1165   n->file_number = 0;
1166   n->prev = NULL;
1167   current_file->prev = n;
1168   n->bincl_status = BINCL_PENDING;
1169   n->pending_bincl_name = remap_debug_filename (filename);
1170   pending_bincls = 1;
1171   current_file = n;
1172 #endif
1173 }
1174
1175 /* Revert to reading a previous source file.  Generate a N_EINCL stab.  */
1176
1177 static void
1178 dbxout_end_source_file (unsigned int line ATTRIBUTE_UNUSED)
1179 {
1180 #ifdef DBX_USE_BINCL
1181   /* Emit EINCL stab only if BINCL is not pending.  */
1182   if (current_file->bincl_status == BINCL_PROCESSED)
1183     {
1184       dbxout_begin_stabn (N_EINCL);
1185       dbxout_stab_value_zero ();
1186     }
1187   current_file->bincl_status = BINCL_NOT_REQUIRED;
1188   current_file = current_file->next;
1189 #endif
1190 }
1191
1192 /* Handle a few odd cases that occur when trying to make PCH files work.  */
1193
1194 static void
1195 dbxout_handle_pch (unsigned at_end)
1196 {
1197   if (! at_end)
1198     {
1199       /* When using the PCH, this file will be included, so we need to output
1200          a BINCL.  */
1201       dbxout_start_source_file (0, lastfile);
1202
1203       /* The base file when using the PCH won't be the same as
1204          the base file when it's being generated.  */
1205       lastfile = NULL;
1206     }
1207   else
1208     {
1209       /* ... and an EINCL.  */
1210       dbxout_end_source_file (0);
1211
1212       /* Deal with cases where 'lastfile' was never actually changed.  */
1213       lastfile_is_base = lastfile == NULL;
1214     }
1215 }
1216
1217 #if defined (DBX_DEBUGGING_INFO)
1218
1219 static void dbxout_block (tree, int, tree);
1220
1221 /* Output debugging info to FILE to switch to sourcefile FILENAME.  */
1222
1223 static void
1224 dbxout_source_file (const char *filename)
1225 {
1226   if (lastfile == 0 && lastfile_is_base)
1227     {
1228       lastfile = base_input_file;
1229       lastfile_is_base = 0;
1230     }
1231
1232   if (filename && (lastfile == 0 || strcmp (filename, lastfile)))
1233     {
1234       /* Don't change section amid function.  */
1235       if (current_function_decl == NULL_TREE)
1236         switch_to_section (text_section);
1237
1238       dbxout_begin_simple_stabs (remap_debug_filename (filename), N_SOL);
1239       dbxout_stab_value_internal_label ("Ltext", &source_label_number);
1240       lastfile = filename;
1241     }
1242 }
1243
1244 /* Output N_BNSYM, line number symbol entry, and local symbol at
1245    function scope  */
1246
1247 static void
1248 dbxout_begin_prologue (unsigned int lineno, const char *filename)
1249 {
1250   if (use_gnu_debug_info_extensions
1251       && !NO_DBX_FUNCTION_END
1252       && !NO_DBX_BNSYM_ENSYM
1253       && !flag_debug_only_used_symbols)
1254     dbxout_stabd (N_BNSYM, 0);
1255
1256   /* pre-increment the scope counter */
1257   scope_labelno++;
1258
1259   dbxout_source_line (lineno, filename, 0, true);
1260   /* Output function begin block at function scope, referenced
1261      by dbxout_block, dbxout_source_line and dbxout_function_end.  */
1262   emit_pending_bincls_if_required ();
1263   targetm.asm_out.internal_label (asm_out_file, "LFBB", scope_labelno);
1264 }
1265
1266 /* Output a line number symbol entry for source file FILENAME and line
1267    number LINENO.  */
1268
1269 static void
1270 dbxout_source_line (unsigned int lineno, const char *filename,
1271                     int discriminator ATTRIBUTE_UNUSED,
1272                     bool is_stmt ATTRIBUTE_UNUSED)
1273 {
1274   dbxout_source_file (filename);
1275
1276 #ifdef DBX_OUTPUT_SOURCE_LINE
1277   DBX_OUTPUT_SOURCE_LINE (asm_out_file, lineno, dbxout_source_line_counter);
1278 #else
1279   if (DBX_LINES_FUNCTION_RELATIVE)
1280     {
1281       char begin_label[20];
1282       dbxout_begin_stabn_sline (lineno);
1283       /* Reference current function start using LFBB.  */
1284       ASM_GENERATE_INTERNAL_LABEL (begin_label, "LFBB", scope_labelno);
1285       dbxout_stab_value_internal_label_diff ("LM", &dbxout_source_line_counter,
1286                                              begin_label);
1287     }
1288   else
1289     dbxout_stabd (N_SLINE, lineno);
1290 #endif
1291 }
1292
1293 /* Describe the beginning of an internal block within a function.  */
1294
1295 static void
1296 dbxout_begin_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int n)
1297 {
1298   emit_pending_bincls_if_required ();
1299   targetm.asm_out.internal_label (asm_out_file, "LBB", n);
1300 }
1301
1302 /* Describe the end line-number of an internal block within a function.  */
1303
1304 static void
1305 dbxout_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int n)
1306 {
1307   emit_pending_bincls_if_required ();
1308   targetm.asm_out.internal_label (asm_out_file, "LBE", n);
1309 }
1310
1311 /* Output dbx data for a function definition.
1312    This includes a definition of the function name itself (a symbol),
1313    definitions of the parameters (locating them in the parameter list)
1314    and then output the block that makes up the function's body
1315    (including all the auto variables of the function).  */
1316
1317 static void
1318 dbxout_function_decl (tree decl)
1319 {
1320   emit_pending_bincls_if_required ();
1321 #ifndef DBX_FUNCTION_FIRST
1322   dbxout_begin_function (decl);
1323 #endif
1324   dbxout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl));
1325   dbxout_function_end (decl);
1326 }
1327
1328 #endif /* DBX_DEBUGGING_INFO  */
1329
1330 /* Debug information for a global DECL.  Called from toplev.c after
1331    compilation proper has finished.  */
1332 static void
1333 dbxout_global_decl (tree decl)
1334 {
1335   if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl))
1336     {
1337       int saved_tree_used = TREE_USED (decl);
1338       TREE_USED (decl) = 1;
1339       dbxout_symbol (decl, 0);
1340       TREE_USED (decl) = saved_tree_used;
1341     }
1342 }
1343
1344 /* This is just a function-type adapter; dbxout_symbol does exactly
1345    what we want but returns an int.  */
1346 static void
1347 dbxout_type_decl (tree decl, int local)
1348 {
1349   dbxout_symbol (decl, local);
1350 }
1351
1352 /* At the end of compilation, finish writing the symbol table.
1353    The default is to call debug_free_queue but do nothing else.  */
1354
1355 static void
1356 dbxout_finish (const char *filename ATTRIBUTE_UNUSED)
1357 {
1358 #ifdef DBX_OUTPUT_MAIN_SOURCE_FILE_END
1359   DBX_OUTPUT_MAIN_SOURCE_FILE_END (asm_out_file, filename);
1360 #elif defined DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
1361  {
1362    switch_to_section (text_section);
1363    dbxout_begin_empty_stabs (N_SO);
1364    dbxout_stab_value_internal_label ("Letext", 0);
1365  }
1366 #endif
1367   debug_free_queue ();
1368 }
1369
1370 /* Output the index of a type.  */
1371
1372 static void
1373 dbxout_type_index (tree type)
1374 {
1375 #ifndef DBX_USE_BINCL
1376   stabstr_D (TYPE_SYMTAB_ADDRESS (type));
1377 #else
1378   struct typeinfo *t = &typevec[TYPE_SYMTAB_ADDRESS (type)];
1379   stabstr_C ('(');
1380   stabstr_D (t->file_number);
1381   stabstr_C (',');
1382   stabstr_D (t->type_number);
1383   stabstr_C (')');
1384 #endif
1385 }
1386
1387 \f
1388 /* Generate the symbols for any queued up type symbols we encountered
1389    while generating the type info for some originally used symbol.
1390    This might generate additional entries in the queue.  Only when
1391    the nesting depth goes to 0 is this routine called.  */
1392
1393 static void
1394 debug_flush_symbol_queue (void)
1395 {
1396   int i;
1397
1398   /* Make sure that additionally queued items are not flushed
1399      prematurely.  */
1400
1401   ++debug_nesting;
1402
1403   for (i = 0; i < symbol_queue_index; ++i)
1404     {
1405       /* If we pushed queued symbols then such symbols must be
1406          output no matter what anyone else says.  Specifically,
1407          we need to make sure dbxout_symbol() thinks the symbol was
1408          used and also we need to override TYPE_DECL_SUPPRESS_DEBUG
1409          which may be set for outside reasons.  */
1410       int saved_tree_used = TREE_USED (symbol_queue[i]);
1411       int saved_suppress_debug = TYPE_DECL_SUPPRESS_DEBUG (symbol_queue[i]);
1412       TREE_USED (symbol_queue[i]) = 1;
1413       TYPE_DECL_SUPPRESS_DEBUG (symbol_queue[i]) = 0;
1414
1415 #ifdef DBX_DEBUGGING_INFO
1416       dbxout_symbol (symbol_queue[i], 0);
1417 #endif
1418
1419       TREE_USED (symbol_queue[i]) = saved_tree_used;
1420       TYPE_DECL_SUPPRESS_DEBUG (symbol_queue[i]) = saved_suppress_debug;
1421     }
1422
1423   symbol_queue_index = 0;
1424   --debug_nesting;
1425 }
1426
1427 /* Queue a type symbol needed as part of the definition of a decl
1428    symbol.  These symbols are generated when debug_flush_symbol_queue()
1429    is called.  */
1430
1431 static void
1432 debug_queue_symbol (tree decl)
1433 {
1434   if (symbol_queue_index >= symbol_queue_size)
1435     {
1436       symbol_queue_size += 10;
1437       symbol_queue = XRESIZEVEC (tree, symbol_queue, symbol_queue_size);
1438     }
1439
1440   symbol_queue[symbol_queue_index++] = decl;
1441 }
1442
1443 /* Free symbol queue.  */
1444 static void
1445 debug_free_queue (void)
1446 {
1447   if (symbol_queue)
1448     {
1449       free (symbol_queue);
1450       symbol_queue = NULL;
1451       symbol_queue_size = 0;
1452     }
1453 }
1454 \f
1455 /* Used in several places: evaluates to '0' for a private decl,
1456    '1' for a protected decl, '2' for a public decl.  */
1457 #define DECL_ACCESSIBILITY_CHAR(DECL) \
1458 (TREE_PRIVATE (DECL) ? '0' : TREE_PROTECTED (DECL) ? '1' : '2')
1459
1460 /* Subroutine of `dbxout_type'.  Output the type fields of TYPE.
1461    This must be a separate function because anonymous unions require
1462    recursive calls.  */
1463
1464 static void
1465 dbxout_type_fields (tree type)
1466 {
1467   tree tem;
1468
1469   /* Output the name, type, position (in bits), size (in bits) of each
1470      field that we can support.  */
1471   for (tem = TYPE_FIELDS (type); tem; tem = DECL_CHAIN (tem))
1472     {
1473       /* If one of the nodes is an error_mark or its type is then
1474          return early.  */
1475       if (error_operand_p (tem))
1476         return;
1477
1478       /* Omit here local type decls until we know how to support them.  */
1479       if (TREE_CODE (tem) == TYPE_DECL
1480           /* Omit here the nameless fields that are used to skip bits.  */
1481           || DECL_IGNORED_P (tem)
1482           /* Omit fields whose position or size are variable or too large to
1483              represent.  */
1484           || (TREE_CODE (tem) == FIELD_DECL
1485               && (! tree_fits_shwi_p (bit_position (tem))
1486                   || ! DECL_SIZE (tem)
1487                   || ! tree_fits_uhwi_p (DECL_SIZE (tem)))))
1488         continue;
1489
1490       else if (TREE_CODE (tem) != CONST_DECL)
1491         {
1492           /* Continue the line if necessary,
1493              but not before the first field.  */
1494           if (tem != TYPE_FIELDS (type))
1495             CONTIN;
1496
1497           if (DECL_NAME (tem))
1498             stabstr_I (DECL_NAME (tem));
1499           stabstr_C (':');
1500
1501           if (use_gnu_debug_info_extensions
1502               && (TREE_PRIVATE (tem) || TREE_PROTECTED (tem)
1503                   || TREE_CODE (tem) != FIELD_DECL))
1504             {
1505               stabstr_C ('/');
1506               stabstr_C (DECL_ACCESSIBILITY_CHAR (tem));
1507             }
1508
1509           dbxout_type ((TREE_CODE (tem) == FIELD_DECL
1510                         && DECL_BIT_FIELD_TYPE (tem))
1511                        ? DECL_BIT_FIELD_TYPE (tem) : TREE_TYPE (tem), 0);
1512
1513           if (TREE_CODE (tem) == VAR_DECL)
1514             {
1515               if (TREE_STATIC (tem) && use_gnu_debug_info_extensions)
1516                 {
1517                   tree name = DECL_ASSEMBLER_NAME (tem);
1518
1519                   stabstr_C (':');
1520                   stabstr_I (name);
1521                   stabstr_C (';');
1522                 }
1523               else
1524                 /* If TEM is non-static, GDB won't understand it.  */
1525                 stabstr_S (",0,0;");
1526             }
1527           else
1528             {
1529               stabstr_C (',');
1530               stabstr_D (int_bit_position (tem));
1531               stabstr_C (',');
1532               stabstr_D (tree_to_uhwi (DECL_SIZE (tem)));
1533               stabstr_C (';');
1534             }
1535         }
1536     }
1537 }
1538 \f
1539 /* Subroutine of `dbxout_type_methods'.  Output debug info about the
1540    method described DECL.  */
1541
1542 static void
1543 dbxout_type_method_1 (tree decl)
1544 {
1545   char c1 = 'A', c2;
1546
1547   if (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE)
1548     c2 = '?';
1549   else /* it's a METHOD_TYPE.  */
1550     {
1551       tree firstarg = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)));
1552       /* A for normal functions.
1553          B for `const' member functions.
1554          C for `volatile' member functions.
1555          D for `const volatile' member functions.  */
1556       if (TYPE_READONLY (TREE_TYPE (firstarg)))
1557         c1 += 1;
1558       if (TYPE_VOLATILE (TREE_TYPE (firstarg)))
1559         c1 += 2;
1560
1561       if (DECL_VINDEX (decl))
1562         c2 = '*';
1563       else
1564         c2 = '.';
1565     }
1566
1567   /* ??? Output the mangled name, which contains an encoding of the
1568      method's type signature.  May not be necessary anymore.  */
1569   stabstr_C (':');
1570   stabstr_I (DECL_ASSEMBLER_NAME (decl));
1571   stabstr_C (';');
1572   stabstr_C (DECL_ACCESSIBILITY_CHAR (decl));
1573   stabstr_C (c1);
1574   stabstr_C (c2);
1575
1576   if (DECL_VINDEX (decl) && tree_fits_shwi_p (DECL_VINDEX (decl)))
1577     {
1578       stabstr_D (tree_to_shwi (DECL_VINDEX (decl)));
1579       stabstr_C (';');
1580       dbxout_type (DECL_CONTEXT (decl), 0);
1581       stabstr_C (';');
1582     }
1583 }
1584 \f
1585 /* Subroutine of `dbxout_type'.  Output debug info about the methods defined
1586    in TYPE.  */
1587
1588 static void
1589 dbxout_type_methods (tree type)
1590 {
1591   /* C++: put out the method names and their parameter lists */
1592   tree methods = TYPE_METHODS (type);
1593   tree fndecl;
1594   tree last;
1595
1596   if (methods == NULL_TREE)
1597     return;
1598
1599   if (TREE_CODE (methods) != TREE_VEC)
1600     fndecl = methods;
1601   else if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
1602     fndecl = TREE_VEC_ELT (methods, 0);
1603   else
1604     fndecl = TREE_VEC_ELT (methods, 1);
1605
1606   while (fndecl)
1607     {
1608       int need_prefix = 1;
1609
1610       /* Group together all the methods for the same operation.
1611          These differ in the types of the arguments.  */
1612       for (last = NULL_TREE;
1613            fndecl && (last == NULL_TREE || DECL_NAME (fndecl) == DECL_NAME (last));
1614            fndecl = DECL_CHAIN (fndecl))
1615         /* Output the name of the field (after overloading), as
1616            well as the name of the field before overloading, along
1617            with its parameter list */
1618         {
1619           /* Skip methods that aren't FUNCTION_DECLs.  (In C++, these
1620              include TEMPLATE_DECLs.)  The debugger doesn't know what
1621              to do with such entities anyhow.  */
1622           if (TREE_CODE (fndecl) != FUNCTION_DECL)
1623             continue;
1624
1625           CONTIN;
1626
1627           last = fndecl;
1628
1629           /* Also ignore abstract methods; those are only interesting to
1630              the DWARF backends.  */
1631           if (DECL_IGNORED_P (fndecl) || DECL_ABSTRACT_P (fndecl))
1632             continue;
1633
1634           /* Redundantly output the plain name, since that's what gdb
1635              expects.  */
1636           if (need_prefix)
1637             {
1638               stabstr_I (DECL_NAME (fndecl));
1639               stabstr_S ("::");
1640               need_prefix = 0;
1641             }
1642
1643           dbxout_type (TREE_TYPE (fndecl), 0);
1644           dbxout_type_method_1 (fndecl);
1645         }
1646       if (!need_prefix)
1647         stabstr_C (';');
1648     }
1649 }
1650
1651 /* Emit a "range" type specification, which has the form:
1652    "r<index type>;<lower bound>;<upper bound>;".
1653    TYPE is an INTEGER_TYPE, LOW and HIGH are the bounds.  */
1654
1655 static void
1656 dbxout_range_type (tree type, tree low, tree high)
1657 {
1658   stabstr_C ('r');
1659   if (TREE_TYPE (type))
1660     dbxout_type (TREE_TYPE (type), 0);
1661   else if (TREE_CODE (type) != INTEGER_TYPE)
1662     dbxout_type (type, 0); /* E.g. Pascal's ARRAY [BOOLEAN] of INTEGER */
1663   else
1664     {
1665       /* Traditionally, we made sure 'int' was type 1, and builtin types
1666          were defined to be sub-ranges of int.  Unfortunately, this
1667          does not allow us to distinguish true sub-ranges from integer
1668          types.  So, instead we define integer (non-sub-range) types as
1669          sub-ranges of themselves.  This matters for Chill.  If this isn't
1670          a subrange type, then we want to define it in terms of itself.
1671          However, in C, this may be an anonymous integer type, and we don't
1672          want to emit debug info referring to it.  Just calling
1673          dbxout_type_index won't work anyways, because the type hasn't been
1674          defined yet.  We make this work for both cases by checked to see
1675          whether this is a defined type, referring to it if it is, and using
1676          'int' otherwise.  */
1677       if (TYPE_SYMTAB_ADDRESS (type) != 0)
1678         dbxout_type_index (type);
1679       else
1680         dbxout_type_index (integer_type_node);
1681     }
1682
1683   stabstr_C (';');
1684   if (low && tree_fits_shwi_p (low))
1685     {
1686       if (print_int_cst_bounds_in_octal_p (type, low, high))
1687         stabstr_O (low);
1688       else
1689         stabstr_D (tree_to_shwi (low));
1690     }
1691   else
1692     stabstr_C ('0');
1693
1694   stabstr_C (';');
1695   if (high && tree_fits_shwi_p (high))
1696     {
1697       if (print_int_cst_bounds_in_octal_p (type, low, high))
1698         stabstr_O (high);
1699       else
1700         stabstr_D (tree_to_shwi (high));
1701       stabstr_C (';');
1702     }
1703   else
1704     stabstr_S ("-1;");
1705 }
1706 \f
1707
1708 /* Output a reference to a type.  If the type has not yet been
1709    described in the dbx output, output its definition now.
1710    For a type already defined, just refer to its definition
1711    using the type number.
1712
1713    If FULL is nonzero, and the type has been described only with
1714    a forward-reference, output the definition now.
1715    If FULL is zero in this case, just refer to the forward-reference
1716    using the number previously allocated.  */
1717
1718 static void
1719 dbxout_type (tree type, int full)
1720 {
1721   static int anonymous_type_number = 0;
1722   tree tem, main_variant, low, high;
1723
1724   if (TREE_CODE (type) == INTEGER_TYPE)
1725     {
1726       if (TREE_TYPE (type) == 0)
1727         {
1728           low = TYPE_MIN_VALUE (type);
1729           high = TYPE_MAX_VALUE (type);
1730         }
1731
1732       else if (subrange_type_for_debug_p (type, &low, &high))
1733         ;
1734
1735       /* If this is a subtype that should not be emitted as a subrange type,
1736          use the base type.  */
1737       else
1738         {
1739           type = TREE_TYPE (type);
1740           low = TYPE_MIN_VALUE (type);
1741           high = TYPE_MAX_VALUE (type);
1742         }
1743     }
1744
1745   /* If there was an input error and we don't really have a type,
1746      avoid crashing and write something that is at least valid
1747      by assuming `int'.  */
1748   if (type == error_mark_node)
1749     type = integer_type_node;
1750   else
1751     {
1752       if (TYPE_NAME (type)
1753           && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1754           && TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (type)))
1755         full = 0;
1756     }
1757
1758   /* Try to find the "main variant" with the same name.  */
1759   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1760       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
1761     main_variant = TREE_TYPE (TYPE_NAME (type));
1762   else
1763     main_variant = TYPE_MAIN_VARIANT (type);
1764
1765   /* If we are not using extensions, stabs does not distinguish const and
1766      volatile, so there is no need to make them separate types.  */
1767   if (!use_gnu_debug_info_extensions)
1768     type = main_variant;
1769
1770   if (TYPE_SYMTAB_ADDRESS (type) == 0)
1771     {
1772       /* Type has no dbx number assigned.  Assign next available number.  */
1773       TYPE_SYMTAB_ADDRESS (type) = next_type_number++;
1774
1775       /* Make sure type vector is long enough to record about this type.  */
1776
1777       if (next_type_number == typevec_len)
1778         {
1779           typevec = GGC_RESIZEVEC (struct typeinfo, typevec, typevec_len * 2);
1780           memset (typevec + typevec_len, 0, typevec_len * sizeof typevec[0]);
1781           typevec_len *= 2;
1782         }
1783
1784 #ifdef DBX_USE_BINCL
1785       emit_pending_bincls_if_required ();
1786       typevec[TYPE_SYMTAB_ADDRESS (type)].file_number
1787         = current_file->file_number;
1788       typevec[TYPE_SYMTAB_ADDRESS (type)].type_number
1789         = current_file->next_type_number++;
1790 #endif
1791     }
1792
1793   if (flag_debug_only_used_symbols)
1794     {
1795       if ((TREE_CODE (type) == RECORD_TYPE
1796            || TREE_CODE (type) == UNION_TYPE
1797            || TREE_CODE (type) == QUAL_UNION_TYPE
1798            || TREE_CODE (type) == ENUMERAL_TYPE)
1799           && TYPE_STUB_DECL (type)
1800           && DECL_P (TYPE_STUB_DECL (type))
1801           && ! DECL_IGNORED_P (TYPE_STUB_DECL (type)))
1802         debug_queue_symbol (TYPE_STUB_DECL (type));
1803       else if (TYPE_NAME (type)
1804                && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
1805         debug_queue_symbol (TYPE_NAME (type));
1806     }
1807
1808   /* Output the number of this type, to refer to it.  */
1809   dbxout_type_index (type);
1810
1811 #ifdef DBX_TYPE_DEFINED
1812   if (DBX_TYPE_DEFINED (type))
1813     return;
1814 #endif
1815
1816   /* If this type's definition has been output or is now being output,
1817      that is all.  */
1818
1819   switch (typevec[TYPE_SYMTAB_ADDRESS (type)].status)
1820     {
1821     case TYPE_UNSEEN:
1822       break;
1823     case TYPE_XREF:
1824       /* If we have already had a cross reference,
1825          and either that's all we want or that's the best we could do,
1826          don't repeat the cross reference.
1827          Sun dbx crashes if we do.  */
1828       if (! full || !COMPLETE_TYPE_P (type)
1829           /* No way in DBX fmt to describe a variable size.  */
1830           || ! tree_fits_uhwi_p (TYPE_SIZE (type)))
1831         return;
1832       break;
1833     case TYPE_DEFINED:
1834       return;
1835     }
1836
1837 #ifdef DBX_NO_XREFS
1838   /* For systems where dbx output does not allow the `=xsNAME:' syntax,
1839      leave the type-number completely undefined rather than output
1840      a cross-reference.  If we have already used GNU debug info extensions,
1841      then it is OK to output a cross reference.  This is necessary to get
1842      proper C++ debug output.  */
1843   if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE
1844        || TREE_CODE (type) == QUAL_UNION_TYPE
1845        || TREE_CODE (type) == ENUMERAL_TYPE)
1846       && ! use_gnu_debug_info_extensions)
1847     /* We must use the same test here as we use twice below when deciding
1848        whether to emit a cross-reference.  */
1849     if ((TYPE_NAME (type) != 0
1850          && ! (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1851                && DECL_IGNORED_P (TYPE_NAME (type)))
1852          && !full)
1853         || !COMPLETE_TYPE_P (type)
1854         /* No way in DBX fmt to describe a variable size.  */
1855         || ! tree_fits_uhwi_p (TYPE_SIZE (type)))
1856       {
1857         typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF;
1858         return;
1859       }
1860 #endif
1861
1862   /* Output a definition now.  */
1863   stabstr_C ('=');
1864
1865   /* Mark it as defined, so that if it is self-referent
1866      we will not get into an infinite recursion of definitions.  */
1867
1868   typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_DEFINED;
1869
1870   /* If this type is a variant of some other, hand off.  Types with
1871      different names are usefully distinguished.  We only distinguish
1872      cv-qualified types if we're using extensions.  */
1873   if (TYPE_READONLY (type) > TYPE_READONLY (main_variant))
1874     {
1875       stabstr_C ('k');
1876       dbxout_type (build_type_variant (type, 0, TYPE_VOLATILE (type)), 0);
1877       return;
1878     }
1879   else if (TYPE_VOLATILE (type) > TYPE_VOLATILE (main_variant))
1880     {
1881       stabstr_C ('B');
1882       dbxout_type (build_type_variant (type, TYPE_READONLY (type), 0), 0);
1883       return;
1884     }
1885   else if (main_variant != TYPE_MAIN_VARIANT (type))
1886     {
1887       if (flag_debug_only_used_symbols)
1888         {
1889           tree orig_type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
1890
1891           if ((TREE_CODE (orig_type) == RECORD_TYPE
1892                || TREE_CODE (orig_type) == UNION_TYPE
1893                || TREE_CODE (orig_type) == QUAL_UNION_TYPE
1894                || TREE_CODE (orig_type) == ENUMERAL_TYPE)
1895               && TYPE_STUB_DECL (orig_type)
1896               && ! DECL_IGNORED_P (TYPE_STUB_DECL (orig_type)))
1897             debug_queue_symbol (TYPE_STUB_DECL (orig_type));
1898         }
1899       /* 'type' is a typedef; output the type it refers to.  */
1900       dbxout_type (DECL_ORIGINAL_TYPE (TYPE_NAME (type)), 0);
1901       return;
1902     }
1903   /* else continue.  */
1904
1905   switch (TREE_CODE (type))
1906     {
1907     case VOID_TYPE:
1908     case NULLPTR_TYPE:
1909     case LANG_TYPE:
1910       /* For a void type, just define it as itself; i.e., "5=5".
1911          This makes us consider it defined
1912          without saying what it is.  The debugger will make it
1913          a void type when the reference is seen, and nothing will
1914          ever override that default.  */
1915       dbxout_type_index (type);
1916       break;
1917
1918     case INTEGER_TYPE:
1919       if (type == char_type_node && ! TYPE_UNSIGNED (type))
1920         {
1921           /* Output the type `char' as a subrange of itself!
1922              I don't understand this definition, just copied it
1923              from the output of pcc.
1924              This used to use `r2' explicitly and we used to
1925              take care to make sure that `char' was type number 2.  */
1926           stabstr_C ('r');
1927           dbxout_type_index (type);
1928           stabstr_S (";0;127;");
1929         }
1930
1931       /* If this is a subtype of another integer type, always prefer to
1932          write it as a subtype.  */
1933       else if (TREE_TYPE (type) != 0
1934                && TREE_CODE (TREE_TYPE (type)) == INTEGER_TYPE)
1935         {
1936           /* If the size is non-standard, say what it is if we can use
1937              GDB extensions.  */
1938
1939           if (use_gnu_debug_info_extensions
1940               && TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node))
1941             {
1942               stabstr_S ("@s");
1943               stabstr_D (TYPE_PRECISION (type));
1944               stabstr_C (';');
1945             }
1946
1947           dbxout_range_type (type, low, high);
1948         }
1949
1950       else
1951         {
1952           /* If the size is non-standard, say what it is if we can use
1953              GDB extensions.  */
1954
1955           if (use_gnu_debug_info_extensions
1956               && TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node))
1957             {
1958               stabstr_S ("@s");
1959               stabstr_D (TYPE_PRECISION (type));
1960               stabstr_C (';');
1961             }
1962
1963           if (print_int_cst_bounds_in_octal_p (type, low, high))
1964             {
1965               stabstr_C ('r');
1966
1967               /* If this type derives from another type, output type index of
1968                  parent type. This is particularly important when parent type
1969                  is an enumerated type, because not generating the parent type
1970                  index would transform the definition of this enumerated type
1971                  into a plain unsigned type.  */
1972               if (TREE_TYPE (type) != 0)
1973                 dbxout_type_index (TREE_TYPE (type));
1974               else
1975                 dbxout_type_index (type);
1976
1977               stabstr_C (';');
1978               stabstr_O (low);
1979               stabstr_C (';');
1980               stabstr_O (high);
1981               stabstr_C (';');
1982             }
1983
1984           else
1985             /* Output other integer types as subranges of `int'.  */
1986             dbxout_range_type (type, low, high);
1987         }
1988
1989       break;
1990
1991     case REAL_TYPE:
1992     case FIXED_POINT_TYPE:
1993       /* This used to say `r1' and we used to take care
1994          to make sure that `int' was type number 1.  */
1995       stabstr_C ('r');
1996       dbxout_type_index (integer_type_node);
1997       stabstr_C (';');
1998       stabstr_D (int_size_in_bytes (type));
1999       stabstr_S (";0;");
2000       break;
2001
2002     case BOOLEAN_TYPE:
2003       if (use_gnu_debug_info_extensions)
2004         {
2005           stabstr_S ("@s");
2006           stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type));
2007           stabstr_S (";-16;");
2008         }
2009       else /* Define as enumeral type (False, True) */
2010         stabstr_S ("eFalse:0,True:1,;");
2011       break;
2012
2013     case COMPLEX_TYPE:
2014       /* Differs from the REAL_TYPE by its new data type number.
2015          R3 is NF_COMPLEX.  We don't try to use any of the other NF_*
2016          codes since gdb doesn't care anyway.  */
2017
2018       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
2019         {
2020           stabstr_S ("R3;");
2021           stabstr_D (2 * int_size_in_bytes (TREE_TYPE (type)));
2022           stabstr_S (";0;");
2023         }
2024       else
2025         {
2026           /* Output a complex integer type as a structure,
2027              pending some other way to do it.  */
2028           stabstr_C ('s');
2029           stabstr_D (int_size_in_bytes (type));
2030
2031           stabstr_S ("real:");
2032           dbxout_type (TREE_TYPE (type), 0);
2033           stabstr_S (",0,");
2034           stabstr_D (TYPE_PRECISION (TREE_TYPE (type)));
2035
2036           stabstr_S (";imag:");
2037           dbxout_type (TREE_TYPE (type), 0);
2038           stabstr_C (',');
2039           stabstr_D (TYPE_PRECISION (TREE_TYPE (type)));
2040           stabstr_C (',');
2041           stabstr_D (TYPE_PRECISION (TREE_TYPE (type)));
2042           stabstr_S (";;");
2043         }
2044       break;
2045
2046     case ARRAY_TYPE:
2047       /* Make arrays of packed bits look like bitstrings for chill.  */
2048       if (TYPE_PACKED (type) && use_gnu_debug_info_extensions)
2049         {
2050           stabstr_S ("@s");
2051           stabstr_D (BITS_PER_UNIT * int_size_in_bytes (type));
2052           stabstr_S (";@S;S");
2053           dbxout_type (TYPE_DOMAIN (type), 0);
2054           break;
2055         }
2056
2057       /* Output "a" followed by a range type definition
2058          for the index type of the array
2059          followed by a reference to the target-type.
2060          ar1;0;N;M for a C array of type M and size N+1.  */
2061       /* Check if a character string type, which in Chill is
2062          different from an array of characters.  */
2063       if (TYPE_STRING_FLAG (type) && use_gnu_debug_info_extensions)
2064         {
2065           stabstr_S ("@S;");
2066         }
2067       tem = TYPE_DOMAIN (type);
2068       if (tem == NULL)
2069         {
2070           stabstr_S ("ar");
2071           dbxout_type_index (integer_type_node);
2072           stabstr_S (";0;-1;");
2073         }
2074       else
2075         {
2076           stabstr_C ('a');
2077           dbxout_range_type (tem, TYPE_MIN_VALUE (tem), TYPE_MAX_VALUE (tem));
2078         }
2079
2080       dbxout_type (TREE_TYPE (type), 0);
2081       break;
2082
2083     case VECTOR_TYPE:
2084       /* Make vectors look like an array.  */
2085       if (use_gnu_debug_info_extensions)
2086         stabstr_S ("@V;");
2087
2088       /* Output "a" followed by a range type definition
2089          for the index type of the array
2090          followed by a reference to the target-type.
2091          ar1;0;N;M for a C array of type M and size N+1.  */
2092       stabstr_C ('a');
2093       dbxout_range_type (integer_type_node, size_zero_node,
2094                          size_int (TYPE_VECTOR_SUBPARTS (type) - 1));
2095
2096       dbxout_type (TREE_TYPE (type), 0);
2097       break;
2098
2099     case RECORD_TYPE:
2100     case UNION_TYPE:
2101     case QUAL_UNION_TYPE:
2102       {
2103         tree binfo = TYPE_BINFO (type);
2104
2105         /* Output a structure type.  We must use the same test here as we
2106            use in the DBX_NO_XREFS case above.  */
2107         if ((TYPE_NAME (type) != 0
2108              && ! (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
2109                    && DECL_IGNORED_P (TYPE_NAME (type)))
2110              && !full)
2111             || !COMPLETE_TYPE_P (type)
2112             /* No way in DBX fmt to describe a variable size.  */
2113             || ! tree_fits_uhwi_p (TYPE_SIZE (type)))
2114           {
2115             /* If the type is just a cross reference, output one
2116                and mark the type as partially described.
2117                If it later becomes defined, we will output
2118                its real definition.
2119                If the type has a name, don't nest its definition within
2120                another type's definition; instead, output an xref
2121                and let the definition come when the name is defined.  */
2122             stabstr_S ((TREE_CODE (type) == RECORD_TYPE) ? "xs" : "xu");
2123             if (TYPE_IDENTIFIER (type))
2124               {
2125                 /* Note that the C frontend creates for anonymous variable
2126                    length records/unions TYPE_NAME with DECL_NAME NULL.  */
2127                 dbxout_type_name (type);
2128               }
2129             else
2130               {
2131                 stabstr_S ("$$");
2132                 stabstr_D (anonymous_type_number++);
2133               }
2134
2135             stabstr_C (':');
2136             typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF;
2137             break;
2138           }
2139
2140         /* Identify record or union, and print its size.  */
2141         stabstr_C ((TREE_CODE (type) == RECORD_TYPE) ? 's' : 'u');
2142         stabstr_D (int_size_in_bytes (type));
2143
2144         if (binfo)
2145           {
2146             int i;
2147             tree child;
2148             vec<tree, va_gc> *accesses = BINFO_BASE_ACCESSES (binfo);
2149
2150             if (use_gnu_debug_info_extensions)
2151               {
2152                 if (BINFO_N_BASE_BINFOS (binfo))
2153                   {
2154                     stabstr_C ('!');
2155                     stabstr_U (BINFO_N_BASE_BINFOS (binfo));
2156                     stabstr_C (',');
2157                   }
2158               }
2159             for (i = 0; BINFO_BASE_ITERATE (binfo, i, child); i++)
2160               {
2161                 tree access = (accesses ? (*accesses)[i] : access_public_node);
2162
2163                 if (use_gnu_debug_info_extensions)
2164                   {
2165                     stabstr_C (BINFO_VIRTUAL_P (child) ? '1' : '0');
2166                     stabstr_C (access == access_public_node ? '2' :
2167                                    access == access_protected_node
2168                                    ? '1' :'0');
2169                     if (BINFO_VIRTUAL_P (child)
2170                         && (strcmp (lang_hooks.name, "GNU C++") == 0
2171                             || strcmp (lang_hooks.name, "GNU Objective-C++") == 0))
2172                       /* For a virtual base, print the (negative)
2173                          offset within the vtable where we must look
2174                          to find the necessary adjustment.  */
2175                       stabstr_D
2176                         (tree_to_shwi (BINFO_VPTR_FIELD (child))
2177                          * BITS_PER_UNIT);
2178                     else
2179                       stabstr_D (tree_to_shwi (BINFO_OFFSET (child))
2180                                        * BITS_PER_UNIT);
2181                     stabstr_C (',');
2182                     dbxout_type (BINFO_TYPE (child), 0);
2183                     stabstr_C (';');
2184                   }
2185                 else
2186                   {
2187                     /* Print out the base class information with
2188                        fields which have the same names at the types
2189                        they hold.  */
2190                     dbxout_type_name (BINFO_TYPE (child));
2191                     stabstr_C (':');
2192                     dbxout_type (BINFO_TYPE (child), full);
2193                     stabstr_C (',');
2194                     stabstr_D (tree_to_shwi (BINFO_OFFSET (child))
2195                                      * BITS_PER_UNIT);
2196                     stabstr_C (',');
2197                     stabstr_D
2198                       (tree_to_shwi (TYPE_SIZE (BINFO_TYPE (child)))
2199                        * BITS_PER_UNIT);
2200                     stabstr_C (';');
2201                   }
2202               }
2203           }
2204       }
2205
2206       /* Write out the field declarations.  */
2207       dbxout_type_fields (type);
2208       if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE)
2209         {
2210           dbxout_type_methods (type);
2211         }
2212
2213       stabstr_C (';');
2214
2215       if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE
2216           /* Avoid the ~ if we don't really need it--it confuses dbx.  */
2217           && TYPE_VFIELD (type))
2218         {
2219
2220           /* We need to write out info about what field this class
2221              uses as its "main" vtable pointer field, because if this
2222              field is inherited from a base class, GDB cannot necessarily
2223              figure out which field it's using in time.  */
2224           stabstr_S ("~%");
2225           dbxout_type (DECL_FCONTEXT (TYPE_VFIELD (type)), 0);
2226           stabstr_C (';');
2227         }
2228       break;
2229
2230     case ENUMERAL_TYPE:
2231       /* We must use the same test here as we use in the DBX_NO_XREFS case
2232          above.  We simplify it a bit since an enum will never have a variable
2233          size.  */
2234       if ((TYPE_NAME (type) != 0
2235            && ! (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
2236                  && DECL_IGNORED_P (TYPE_NAME (type)))
2237            && !full)
2238           || !COMPLETE_TYPE_P (type))
2239         {
2240           stabstr_S ("xe");
2241           dbxout_type_name (type);
2242           typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_XREF;
2243           stabstr_C (':');
2244           return;
2245         }
2246       if (use_gnu_debug_info_extensions
2247           && TYPE_PRECISION (type) != TYPE_PRECISION (integer_type_node))
2248         {
2249           stabstr_S ("@s");
2250           stabstr_D (TYPE_PRECISION (type));
2251           stabstr_C (';');
2252         }
2253
2254       stabstr_C ('e');
2255       for (tem = TYPE_VALUES (type); tem; tem = TREE_CHAIN (tem))
2256         {
2257           tree value = TREE_VALUE (tem);
2258
2259           stabstr_I (TREE_PURPOSE (tem));
2260           stabstr_C (':');
2261
2262           if (TREE_CODE (value) == CONST_DECL)
2263             value = DECL_INITIAL (value);
2264
2265           if (cst_and_fits_in_hwi (value))
2266             stabstr_D (TREE_INT_CST_LOW (value));
2267           else
2268             stabstr_O (value);
2269
2270           stabstr_C (',');
2271           if (TREE_CHAIN (tem) != 0)
2272             CONTIN;
2273         }
2274
2275       stabstr_C (';');
2276       break;
2277
2278     case POINTER_TYPE:
2279       stabstr_C ('*');
2280       dbxout_type (TREE_TYPE (type), 0);
2281       break;
2282
2283     case METHOD_TYPE:
2284       if (use_gnu_debug_info_extensions)
2285         {
2286           stabstr_C ('#');
2287
2288           /* Write the argument types out longhand.  */
2289           dbxout_type (TYPE_METHOD_BASETYPE (type), 0);
2290           stabstr_C (',');
2291           dbxout_type (TREE_TYPE (type), 0);
2292           dbxout_args (TYPE_ARG_TYPES (type));
2293           stabstr_C (';');
2294         }
2295       else
2296         /* Treat it as a function type.  */
2297         dbxout_type (TREE_TYPE (type), 0);
2298       break;
2299
2300     case OFFSET_TYPE:
2301       if (use_gnu_debug_info_extensions)
2302         {
2303           stabstr_C ('@');
2304           dbxout_type (TYPE_OFFSET_BASETYPE (type), 0);
2305           stabstr_C (',');
2306           dbxout_type (TREE_TYPE (type), 0);
2307         }
2308       else
2309         /* Should print as an int, because it is really just an offset.  */
2310         dbxout_type (integer_type_node, 0);
2311       break;
2312
2313     case REFERENCE_TYPE:
2314       if (use_gnu_debug_info_extensions)
2315         {
2316           stabstr_C ('&');
2317         }
2318       else
2319         stabstr_C ('*');
2320       dbxout_type (TREE_TYPE (type), 0);
2321       break;
2322
2323     case FUNCTION_TYPE:
2324       stabstr_C ('f');
2325       dbxout_type (TREE_TYPE (type), 0);
2326       break;
2327
2328     default:
2329       gcc_unreachable ();
2330     }
2331 }
2332
2333 /* Return nonzero if the given type represents an integer whose bounds
2334    should be printed in octal format.  */
2335
2336 static bool
2337 print_int_cst_bounds_in_octal_p (tree type, tree low, tree high)
2338 {
2339   /* If we can use GDB extensions and the size is wider than a long
2340      (the size used by GDB to read them) or we may have trouble writing
2341      the bounds the usual way, write them in octal.  Note the test is for
2342      the *target's* size of "long", not that of the host.  The host test
2343      is just to make sure we can write it out in case the host wide int
2344      is narrower than the target "long".
2345
2346      For unsigned types, we use octal if they are the same size or larger.
2347      This is because we print the bounds as signed decimal, and hence they
2348      can't span same size unsigned types.  */
2349
2350   if (use_gnu_debug_info_extensions
2351       && low && TREE_CODE (low) == INTEGER_CST
2352       && high && TREE_CODE (high) == INTEGER_CST
2353       && (TYPE_PRECISION (type) > TYPE_PRECISION (integer_type_node)
2354           || ((TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
2355               && TYPE_UNSIGNED (type))
2356           || TYPE_PRECISION (type) > HOST_BITS_PER_WIDE_INT
2357           || (TYPE_PRECISION (type) == HOST_BITS_PER_WIDE_INT
2358               && TYPE_UNSIGNED (type))))
2359     return TRUE;
2360   else
2361     return FALSE;
2362 }
2363
2364 /* Output the name of type TYPE, with no punctuation.
2365    Such names can be set up either by typedef declarations
2366    or by struct, enum and union tags.  */
2367
2368 static void
2369 dbxout_type_name (tree type)
2370 {
2371   tree t = TYPE_NAME (type);
2372
2373   gcc_assert (t);
2374   switch (TREE_CODE (t))
2375     {
2376     case IDENTIFIER_NODE:
2377       break;
2378     case TYPE_DECL:
2379       t = DECL_NAME (t);
2380       break;
2381     default:
2382       gcc_unreachable ();
2383     }
2384
2385   stabstr_I (t);
2386 }
2387
2388 /* Output leading leading struct or class names needed for qualifying
2389    type whose scope is limited to a struct or class.  */
2390
2391 static void
2392 dbxout_class_name_qualifiers (tree decl)
2393 {
2394   tree context = decl_type_context (decl);
2395
2396   if (context != NULL_TREE
2397       && TREE_CODE (context) == RECORD_TYPE
2398       && TYPE_NAME (context) != 0
2399       && (TREE_CODE (TYPE_NAME (context)) == IDENTIFIER_NODE
2400           || (DECL_NAME (TYPE_NAME (context)) != 0)))
2401     {
2402       tree name = TYPE_NAME (context);
2403
2404       if (TREE_CODE (name) == TYPE_DECL)
2405         {
2406           dbxout_class_name_qualifiers (name);
2407           name = DECL_NAME (name);
2408         }
2409       stabstr_I (name);
2410       stabstr_S ("::");
2411     }
2412 }
2413 \f
2414 /* This is a specialized subset of expand_expr for use by dbxout_symbol in
2415    evaluating DECL_VALUE_EXPR.  In particular, we stop if we find decls that
2416    haven't been expanded, or if the expression is getting so complex we won't
2417    be able to represent it in stabs anyway.  Returns NULL on failure.  */
2418
2419 static rtx
2420 dbxout_expand_expr (tree expr)
2421 {
2422   switch (TREE_CODE (expr))
2423     {
2424     case VAR_DECL:
2425       /* We can't handle emulated tls variables, because the address is an
2426          offset to the return value of __emutls_get_address, and there is no
2427          way to express that in stabs.  Also, there are name mangling issues
2428          here.  We end up with references to undefined symbols if we don't
2429          disable debug info for these variables.  */
2430       if (!targetm.have_tls && DECL_THREAD_LOCAL_P (expr))
2431         return NULL;
2432       if (TREE_STATIC (expr)
2433           && !TREE_ASM_WRITTEN (expr)
2434           && !DECL_HAS_VALUE_EXPR_P (expr)
2435           && !TREE_PUBLIC (expr)
2436           && DECL_RTL_SET_P (expr)
2437           && MEM_P (DECL_RTL (expr)))
2438         {
2439           /* If this is a var that might not be actually output,
2440              return NULL, otherwise stabs might reference an undefined
2441              symbol.  */
2442           varpool_node *node = varpool_node::get (expr);
2443           if (!node || !node->definition)
2444             return NULL;
2445         }
2446       /* FALLTHRU */
2447
2448     case PARM_DECL:
2449     case RESULT_DECL:
2450       if (DECL_HAS_VALUE_EXPR_P (expr))
2451         return dbxout_expand_expr (DECL_VALUE_EXPR (expr));
2452       /* FALLTHRU */
2453
2454     case CONST_DECL:
2455       return DECL_RTL_IF_SET (expr);
2456
2457     case INTEGER_CST:
2458       return expand_expr (expr, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
2459
2460     case COMPONENT_REF:
2461     case ARRAY_REF:
2462     case ARRAY_RANGE_REF:
2463     case BIT_FIELD_REF:
2464       {
2465         enum machine_mode mode;
2466         HOST_WIDE_INT bitsize, bitpos;
2467         tree offset, tem;
2468         int volatilep = 0, unsignedp = 0;
2469         rtx x;
2470
2471         tem = get_inner_reference (expr, &bitsize, &bitpos, &offset,
2472                                    &mode, &unsignedp, &volatilep, true);
2473
2474         x = dbxout_expand_expr (tem);
2475         if (x == NULL || !MEM_P (x))
2476           return NULL;
2477         if (offset != NULL)
2478           {
2479             if (!tree_fits_shwi_p (offset))
2480               return NULL;
2481             x = adjust_address_nv (x, mode, tree_to_shwi (offset));
2482           }
2483         if (bitpos != 0)
2484           x = adjust_address_nv (x, mode, bitpos / BITS_PER_UNIT);
2485
2486         return x;
2487       }
2488
2489     default:
2490       return NULL;
2491     }
2492 }
2493
2494 /* Helper function for output_used_types.  Queue one entry from the
2495    used types hash to be output.  */
2496
2497 bool
2498 output_used_types_helper (tree const &type, vec<tree> *types_p)
2499 {
2500   if ((TREE_CODE (type) == RECORD_TYPE
2501        || TREE_CODE (type) == UNION_TYPE
2502        || TREE_CODE (type) == QUAL_UNION_TYPE
2503        || TREE_CODE (type) == ENUMERAL_TYPE)
2504       && TYPE_STUB_DECL (type)
2505       && DECL_P (TYPE_STUB_DECL (type))
2506       && ! DECL_IGNORED_P (TYPE_STUB_DECL (type)))
2507     types_p->quick_push (TYPE_STUB_DECL (type));
2508   else if (TYPE_NAME (type)
2509            && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
2510     types_p->quick_push (TYPE_NAME (type));
2511
2512   return true;
2513 }
2514
2515 /* This is a qsort callback which sorts types and declarations into a
2516    predictable order (types, then declarations, sorted by UID
2517    within).  */
2518
2519 static int
2520 output_types_sort (const void *pa, const void *pb)
2521 {
2522   const tree lhs = *((const tree *)pa);
2523   const tree rhs = *((const tree *)pb);
2524
2525   if (TYPE_P (lhs))
2526     {
2527       if (TYPE_P (rhs))
2528         return TYPE_UID (lhs) - TYPE_UID (rhs);
2529       else
2530         return 1;
2531     }
2532   else
2533     {
2534       if (TYPE_P (rhs))
2535         return -1;
2536       else
2537         return DECL_UID (lhs) - DECL_UID (rhs);
2538     }
2539 }
2540
2541
2542 /* Force all types used by this function to be output in debug
2543    information.  */
2544
2545 static void
2546 output_used_types (void)
2547 {
2548   if (cfun && cfun->used_types_hash)
2549     {
2550       vec<tree> types;
2551       int i;
2552       tree type;
2553
2554       types.create (cfun->used_types_hash->elements ());
2555       cfun->used_types_hash->traverse<vec<tree> *, output_used_types_helper>
2556         (&types);
2557
2558       /* Sort by UID to prevent dependence on hash table ordering.  */
2559       types.qsort (output_types_sort);
2560
2561       FOR_EACH_VEC_ELT (types, i, type)
2562         debug_queue_symbol (type);
2563
2564       types.release ();
2565     }
2566 }
2567
2568 /* Output a .stabs for the symbol defined by DECL,
2569    which must be a ..._DECL node in the normal namespace.
2570    It may be a CONST_DECL, a FUNCTION_DECL, a PARM_DECL or a VAR_DECL.
2571    LOCAL is nonzero if the scope is less than the entire file.
2572    Return 1 if a stabs might have been emitted.  */
2573
2574 int
2575 dbxout_symbol (tree decl, int local ATTRIBUTE_UNUSED)
2576 {
2577   tree type = TREE_TYPE (decl);
2578   tree context = NULL_TREE;
2579   int result = 0;
2580   rtx decl_rtl;
2581
2582   /* "Intercept" dbxout_symbol() calls like we do all debug_hooks.  */
2583   ++debug_nesting;
2584
2585   /* Ignore nameless syms, but don't ignore type tags.  */
2586
2587   if ((DECL_NAME (decl) == 0 && TREE_CODE (decl) != TYPE_DECL)
2588       || DECL_IGNORED_P (decl))
2589     DBXOUT_DECR_NESTING_AND_RETURN (0);
2590
2591   /* If we are to generate only the symbols actually used then such
2592      symbol nodes are flagged with TREE_USED.  Ignore any that
2593      aren't flagged as TREE_USED.  */
2594
2595   if (flag_debug_only_used_symbols
2596       && (!TREE_USED (decl)
2597           && (TREE_CODE (decl) != VAR_DECL || !DECL_INITIAL (decl))))
2598     DBXOUT_DECR_NESTING_AND_RETURN (0);
2599
2600   /* If dbxout_init has not yet run, queue this symbol for later.  */
2601   if (!typevec)
2602     {
2603       preinit_symbols = tree_cons (0, decl, preinit_symbols);
2604       DBXOUT_DECR_NESTING_AND_RETURN (0);
2605     }
2606
2607   if (flag_debug_only_used_symbols)
2608     {
2609       tree t;
2610
2611       /* We now have a used symbol.  We need to generate the info for
2612          the symbol's type in addition to the symbol itself.  These
2613          type symbols are queued to be generated after were done with
2614          the symbol itself (otherwise they would fight over the
2615          stabstr obstack).
2616
2617          Note, because the TREE_TYPE(type) might be something like a
2618          pointer to a named type we need to look for the first name
2619          we see following the TREE_TYPE chain.  */
2620
2621       t = type;
2622       while (POINTER_TYPE_P (t))
2623         t = TREE_TYPE (t);
2624
2625       /* RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, and ENUMERAL_TYPE
2626          need special treatment.  The TYPE_STUB_DECL field in these
2627          types generally represents the tag name type we want to
2628          output.  In addition there  could be a typedef type with
2629          a different name.  In that case we also want to output
2630          that.  */
2631
2632       if (TREE_CODE (t) == RECORD_TYPE
2633            || TREE_CODE (t) == UNION_TYPE
2634            || TREE_CODE (t) == QUAL_UNION_TYPE
2635            || TREE_CODE (t) == ENUMERAL_TYPE)
2636         {
2637             if (TYPE_STUB_DECL (t)
2638                 && TYPE_STUB_DECL (t) != decl
2639                 && DECL_P (TYPE_STUB_DECL (t))
2640                 && ! DECL_IGNORED_P (TYPE_STUB_DECL (t)))
2641             {
2642               debug_queue_symbol (TYPE_STUB_DECL (t));
2643               if (TYPE_NAME (t)
2644                   && TYPE_NAME (t) != TYPE_STUB_DECL (t)
2645                   && TYPE_NAME (t) != decl
2646                   && DECL_P (TYPE_NAME (t)))
2647                 debug_queue_symbol (TYPE_NAME (t));
2648             }
2649         }
2650       else if (TYPE_NAME (t)
2651                && TYPE_NAME (t) != decl
2652                && DECL_P (TYPE_NAME (t)))
2653         debug_queue_symbol (TYPE_NAME (t));
2654     }
2655
2656   emit_pending_bincls_if_required ();
2657
2658   switch (TREE_CODE (decl))
2659     {
2660     case CONST_DECL:
2661       /* Enum values are defined by defining the enum type.  */
2662       break;
2663
2664     case FUNCTION_DECL:
2665       decl_rtl = DECL_RTL_IF_SET (decl);
2666       if (!decl_rtl)
2667         DBXOUT_DECR_NESTING_AND_RETURN (0);
2668       if (DECL_EXTERNAL (decl))
2669         break;
2670       /* Don't mention a nested function under its parent.  */
2671       context = decl_function_context (decl);
2672       if (context == current_function_decl)
2673         break;
2674       /* Don't mention an inline instance of a nested function.  */
2675       if (context && DECL_FROM_INLINE (decl))
2676         break;
2677       if (!MEM_P (decl_rtl)
2678           || GET_CODE (XEXP (decl_rtl, 0)) != SYMBOL_REF)
2679         break;
2680
2681       if (flag_debug_only_used_symbols)
2682         output_used_types ();
2683
2684       dbxout_begin_complex_stabs ();
2685       stabstr_I (DECL_ASSEMBLER_NAME (decl));
2686       stabstr_S (TREE_PUBLIC (decl) ? ":F" : ":f");
2687       result = 1;
2688
2689       if (TREE_TYPE (type))
2690         dbxout_type (TREE_TYPE (type), 0);
2691       else
2692         dbxout_type (void_type_node, 0);
2693
2694       /* For a nested function, when that function is compiled,
2695          mention the containing function name
2696          as well as (since dbx wants it) our own assembler-name.  */
2697       if (context != 0)
2698         {
2699           stabstr_C (',');
2700           stabstr_I (DECL_ASSEMBLER_NAME (decl));
2701           stabstr_C (',');
2702           stabstr_I (DECL_NAME (context));
2703         }
2704
2705       dbxout_finish_complex_stabs (decl, N_FUN, XEXP (decl_rtl, 0), 0, 0);
2706       break;
2707
2708     case TYPE_DECL:
2709       /* Don't output the same typedef twice.
2710          And don't output what language-specific stuff doesn't want output.  */
2711       if (TREE_ASM_WRITTEN (decl) || TYPE_DECL_SUPPRESS_DEBUG (decl))
2712         DBXOUT_DECR_NESTING_AND_RETURN (0);
2713
2714       /* Don't output typedefs for types with magic type numbers (XCOFF).  */
2715 #ifdef DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER
2716       {
2717         int fundamental_type_number =
2718           DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER (decl);
2719
2720         if (fundamental_type_number != 0)
2721           {
2722             TREE_ASM_WRITTEN (decl) = 1;
2723             TYPE_SYMTAB_ADDRESS (TREE_TYPE (decl)) = fundamental_type_number;
2724             DBXOUT_DECR_NESTING_AND_RETURN (0);
2725           }
2726       }
2727 #endif
2728       FORCE_TEXT;
2729       result = 1;
2730       {
2731         int tag_needed = 1;
2732         int did_output = 0;
2733
2734         if (DECL_NAME (decl))
2735           {
2736             /* Nonzero means we must output a tag as well as a typedef.  */
2737             tag_needed = 0;
2738
2739             /* Handle the case of a C++ structure or union
2740                where the TYPE_NAME is a TYPE_DECL
2741                which gives both a typedef name and a tag.  */
2742             /* dbx requires the tag first and the typedef second.  */
2743             if ((TREE_CODE (type) == RECORD_TYPE
2744                  || TREE_CODE (type) == UNION_TYPE
2745                  || TREE_CODE (type) == QUAL_UNION_TYPE)
2746                 && TYPE_NAME (type) == decl
2747                 && !use_gnu_debug_info_extensions
2748                 && !TREE_ASM_WRITTEN (TYPE_NAME (type))
2749                 /* Distinguish the implicit typedefs of C++
2750                    from explicit ones that might be found in C.  */
2751                 && DECL_ARTIFICIAL (decl)
2752                 /* Do not generate a tag for incomplete records.  */
2753                 && COMPLETE_TYPE_P (type)
2754                 /* Do not generate a tag for records of variable size,
2755                    since this type can not be properly described in the
2756                    DBX format, and it confuses some tools such as objdump.  */
2757                 && tree_fits_uhwi_p (TYPE_SIZE (type)))
2758               {
2759                 tree name = TYPE_IDENTIFIER (type);
2760
2761                 dbxout_begin_complex_stabs ();
2762                 stabstr_I (name);
2763                 stabstr_S (":T");
2764                 dbxout_type (type, 1);
2765                 dbxout_finish_complex_stabs (0, DBX_TYPE_DECL_STABS_CODE,
2766                                              0, 0, 0);
2767               }
2768
2769             dbxout_begin_complex_stabs ();
2770
2771             /* Output leading class/struct qualifiers.  */
2772             if (use_gnu_debug_info_extensions)
2773               dbxout_class_name_qualifiers (decl);
2774
2775             /* Output typedef name.  */
2776             stabstr_I (DECL_NAME (decl));
2777             stabstr_C (':');
2778
2779             /* Short cut way to output a tag also.  */
2780             if ((TREE_CODE (type) == RECORD_TYPE
2781                  || TREE_CODE (type) == UNION_TYPE
2782                  || TREE_CODE (type) == QUAL_UNION_TYPE)
2783                 && TYPE_NAME (type) == decl
2784                 /* Distinguish the implicit typedefs of C++
2785                    from explicit ones that might be found in C.  */
2786                 && DECL_ARTIFICIAL (decl))
2787               {
2788                 if (use_gnu_debug_info_extensions)
2789                   {
2790                     stabstr_C ('T');
2791                     TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1;
2792                   }
2793               }
2794
2795             stabstr_C ('t');
2796             dbxout_type (type, 1);
2797             dbxout_finish_complex_stabs (decl, DBX_TYPE_DECL_STABS_CODE,
2798                                          0, 0, 0);
2799             did_output = 1;
2800           }
2801
2802         /* Don't output a tag if this is an incomplete type.  This prevents
2803            the sun4 Sun OS 4.x dbx from crashing.  */
2804
2805         if (tag_needed && TYPE_NAME (type) != 0
2806             && (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE
2807                 || (DECL_NAME (TYPE_NAME (type)) != 0))
2808             && COMPLETE_TYPE_P (type)
2809             && !TREE_ASM_WRITTEN (TYPE_NAME (type)))
2810           {
2811             /* For a TYPE_DECL with no name, but the type has a name,
2812                output a tag.
2813                This is what represents `struct foo' with no typedef.  */
2814             /* In C++, the name of a type is the corresponding typedef.
2815                In C, it is an IDENTIFIER_NODE.  */
2816             tree name = TYPE_IDENTIFIER (type);
2817
2818             dbxout_begin_complex_stabs ();
2819             stabstr_I (name);
2820             stabstr_S (":T");
2821             dbxout_type (type, 1);
2822             dbxout_finish_complex_stabs (0, DBX_TYPE_DECL_STABS_CODE, 0, 0, 0);
2823             did_output = 1;
2824           }
2825
2826         /* If an enum type has no name, it cannot be referred to, but
2827            we must output it anyway, to record the enumeration
2828            constants.  */
2829
2830         if (!did_output && TREE_CODE (type) == ENUMERAL_TYPE)
2831           {
2832             dbxout_begin_complex_stabs ();
2833             /* Some debuggers fail when given NULL names, so give this a
2834                harmless name of " " (Why not "(anon)"?).  */
2835             stabstr_S (" :T");
2836             dbxout_type (type, 1);
2837             dbxout_finish_complex_stabs (0, DBX_TYPE_DECL_STABS_CODE, 0, 0, 0);
2838           }
2839
2840         /* Prevent duplicate output of a typedef.  */
2841         TREE_ASM_WRITTEN (decl) = 1;
2842         break;
2843       }
2844
2845     case PARM_DECL:
2846       if (DECL_HAS_VALUE_EXPR_P (decl))
2847         decl = DECL_VALUE_EXPR (decl);
2848
2849       /* PARM_DECLs go in their own separate chain and are output by
2850          dbxout_reg_parms and dbxout_parms, except for those that are
2851          disguised VAR_DECLs like Out parameters in Ada.  */
2852       gcc_assert (TREE_CODE (decl) == VAR_DECL);
2853
2854       /* ... fall through ...  */
2855
2856     case RESULT_DECL:
2857     case VAR_DECL:
2858       /* Don't mention a variable that is external.
2859          Let the file that defines it describe it.  */
2860       if (DECL_EXTERNAL (decl))
2861         break;
2862
2863       /* If the variable is really a constant
2864          and not written in memory, inform the debugger.
2865
2866          ??? Why do we skip emitting the type and location in this case?  */
2867       if (TREE_STATIC (decl) && TREE_READONLY (decl)
2868           && DECL_INITIAL (decl) != 0
2869           && tree_fits_shwi_p (DECL_INITIAL (decl))
2870           && ! TREE_ASM_WRITTEN (decl)
2871           && (DECL_FILE_SCOPE_P (decl)
2872               || TREE_CODE (DECL_CONTEXT (decl)) == BLOCK
2873               || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
2874           && TREE_PUBLIC (decl) == 0)
2875         {
2876           /* The sun4 assembler does not grok this.  */
2877
2878           if (TREE_CODE (TREE_TYPE (decl)) == INTEGER_TYPE
2879               || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2880             {
2881               HOST_WIDE_INT ival = tree_to_shwi (DECL_INITIAL (decl));
2882
2883               dbxout_begin_complex_stabs ();
2884               dbxout_symbol_name (decl, NULL, 'c');
2885               stabstr_S ("=i");
2886               stabstr_D (ival);
2887               dbxout_finish_complex_stabs (0, N_LSYM, 0, 0, 0);
2888               DBXOUT_DECR_NESTING;
2889               return 1;
2890             }
2891           else
2892             break;
2893         }
2894       /* else it is something we handle like a normal variable.  */
2895
2896       decl_rtl = dbxout_expand_expr (decl);
2897       if (!decl_rtl)
2898         DBXOUT_DECR_NESTING_AND_RETURN (0);
2899
2900       decl_rtl = eliminate_regs (decl_rtl, VOIDmode, NULL_RTX);
2901 #ifdef LEAF_REG_REMAP
2902       if (crtl->uses_only_leaf_regs)
2903         leaf_renumber_regs_insn (decl_rtl);
2904 #endif
2905
2906       result = dbxout_symbol_location (decl, type, 0, decl_rtl);
2907       break;
2908
2909     default:
2910       break;
2911     }
2912   DBXOUT_DECR_NESTING;
2913   return result;
2914 }
2915 \f
2916 /* Output the stab for DECL, a VAR_DECL, RESULT_DECL or PARM_DECL.
2917    Add SUFFIX to its name, if SUFFIX is not 0.
2918    Describe the variable as residing in HOME
2919    (usually HOME is DECL_RTL (DECL), but not always).
2920    Returns 1 if the stab was really emitted.  */
2921
2922 static int
2923 dbxout_symbol_location (tree decl, tree type, const char *suffix, rtx home)
2924 {
2925   int letter = 0;
2926   stab_code_type code;
2927   rtx addr = 0;
2928   int number = 0;
2929   int regno = -1;
2930
2931   /* Don't mention a variable at all
2932      if it was completely optimized into nothingness.
2933
2934      If the decl was from an inline function, then its rtl
2935      is not identically the rtl that was used in this
2936      particular compilation.  */
2937   if (GET_CODE (home) == SUBREG)
2938     {
2939       rtx value = home;
2940
2941       while (GET_CODE (value) == SUBREG)
2942         value = SUBREG_REG (value);
2943       if (REG_P (value))
2944         {
2945           if (REGNO (value) >= FIRST_PSEUDO_REGISTER)
2946             return 0;
2947         }
2948       home = alter_subreg (&home, true);
2949     }
2950   if (REG_P (home))
2951     {
2952       regno = REGNO (home);
2953       if (regno >= FIRST_PSEUDO_REGISTER)
2954         return 0;
2955     }
2956
2957   /* The kind-of-variable letter depends on where
2958      the variable is and on the scope of its name:
2959      G and N_GSYM for static storage and global scope,
2960      S for static storage and file scope,
2961      V for static storage and local scope,
2962      for those two, use N_LCSYM if data is in bss segment,
2963      N_STSYM if in data segment, N_FUN otherwise.
2964      (We used N_FUN originally, then changed to N_STSYM
2965      to please GDB.  However, it seems that confused ld.
2966      Now GDB has been fixed to like N_FUN, says Kingdon.)
2967      no letter at all, and N_LSYM, for auto variable,
2968      r and N_RSYM for register variable.  */
2969
2970   if (MEM_P (home) && GET_CODE (XEXP (home, 0)) == SYMBOL_REF)
2971     {
2972       if (TREE_PUBLIC (decl))
2973         {
2974           int offs;
2975           letter = 'G';
2976           code = N_GSYM;
2977           if (NULL != dbxout_common_check (decl, &offs))
2978             {
2979               letter = 'V';
2980               addr = 0;
2981               number = offs;
2982             }
2983         }
2984       else
2985         {
2986           addr = XEXP (home, 0);
2987
2988           letter = decl_function_context (decl) ? 'V' : 'S';
2989
2990           /* Some ports can transform a symbol ref into a label ref,
2991              because the symbol ref is too far away and has to be
2992              dumped into a constant pool.  Alternatively, the symbol
2993              in the constant pool might be referenced by a different
2994              symbol.  */
2995           if (GET_CODE (addr) == SYMBOL_REF
2996               && CONSTANT_POOL_ADDRESS_P (addr))
2997             {
2998               bool marked;
2999               rtx tmp = get_pool_constant_mark (addr, &marked);
3000
3001               if (GET_CODE (tmp) == SYMBOL_REF)
3002                 {
3003                   addr = tmp;
3004                   if (CONSTANT_POOL_ADDRESS_P (addr))
3005                     get_pool_constant_mark (addr, &marked);
3006                   else
3007                     marked = true;
3008                 }
3009               else if (GET_CODE (tmp) == LABEL_REF)
3010                 {
3011                   addr = tmp;
3012                   marked = true;
3013                 }
3014
3015               /* If all references to the constant pool were optimized
3016                  out, we just ignore the symbol.  */
3017               if (!marked)
3018                 return 0;
3019             }
3020
3021           /* This should be the same condition as in assemble_variable, but
3022              we don't have access to dont_output_data here.  So, instead,
3023              we rely on the fact that error_mark_node initializers always
3024              end up in bss for C++ and never end up in bss for C.  */
3025           if (DECL_INITIAL (decl) == 0
3026               || (!strcmp (lang_hooks.name, "GNU C++")
3027                   && DECL_INITIAL (decl) == error_mark_node))
3028             {
3029               int offs;
3030               code = N_LCSYM;
3031               if (NULL != dbxout_common_check (decl, &offs))
3032                 {
3033                   addr = 0;
3034                   number = offs;
3035                   letter = 'V';
3036                   code = N_GSYM;
3037                 }
3038             }
3039           else if (DECL_IN_TEXT_SECTION (decl))
3040             /* This is not quite right, but it's the closest
3041                of all the codes that Unix defines.  */
3042             code = DBX_STATIC_CONST_VAR_CODE;
3043           else
3044             {
3045               /* Ultrix `as' seems to need this.  */
3046 #ifdef DBX_STATIC_STAB_DATA_SECTION
3047               switch_to_section (data_section);
3048 #endif
3049               code = N_STSYM;
3050             }
3051         }
3052     }
3053   else if (regno >= 0)
3054     {
3055       letter = 'r';
3056       code = N_RSYM;
3057       number = DBX_REGISTER_NUMBER (regno);
3058     }
3059   else if (MEM_P (home)
3060            && (MEM_P (XEXP (home, 0))
3061                || (REG_P (XEXP (home, 0))
3062                    && REGNO (XEXP (home, 0)) != HARD_FRAME_POINTER_REGNUM
3063                    && REGNO (XEXP (home, 0)) != STACK_POINTER_REGNUM
3064 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
3065                    && REGNO (XEXP (home, 0)) != ARG_POINTER_REGNUM
3066 #endif
3067                    )))
3068     /* If the value is indirect by memory or by a register
3069        that isn't the frame pointer
3070        then it means the object is variable-sized and address through
3071        that register or stack slot.  DBX has no way to represent this
3072        so all we can do is output the variable as a pointer.
3073        If it's not a parameter, ignore it.  */
3074     {
3075       if (REG_P (XEXP (home, 0)))
3076         {
3077           letter = 'r';
3078           code = N_RSYM;
3079           if (REGNO (XEXP (home, 0)) >= FIRST_PSEUDO_REGISTER)
3080             return 0;
3081           number = DBX_REGISTER_NUMBER (REGNO (XEXP (home, 0)));
3082         }
3083       else
3084         {
3085           code = N_LSYM;
3086           /* RTL looks like (MEM (MEM (PLUS (REG...) (CONST_INT...)))).
3087              We want the value of that CONST_INT.  */
3088           number = DEBUGGER_AUTO_OFFSET (XEXP (XEXP (home, 0), 0));
3089         }
3090
3091       /* Effectively do build_pointer_type, but don't cache this type,
3092          since it might be temporary whereas the type it points to
3093          might have been saved for inlining.  */
3094       /* Don't use REFERENCE_TYPE because dbx can't handle that.  */
3095       type = make_node (POINTER_TYPE);
3096       TREE_TYPE (type) = TREE_TYPE (decl);
3097     }
3098   else if (MEM_P (home)
3099            && REG_P (XEXP (home, 0)))
3100     {
3101       code = N_LSYM;
3102       number = DEBUGGER_AUTO_OFFSET (XEXP (home, 0));
3103     }
3104   else if (MEM_P (home)
3105            && GET_CODE (XEXP (home, 0)) == PLUS
3106            && CONST_INT_P (XEXP (XEXP (home, 0), 1)))
3107     {
3108       code = N_LSYM;
3109       /* RTL looks like (MEM (PLUS (REG...) (CONST_INT...)))
3110          We want the value of that CONST_INT.  */
3111       number = DEBUGGER_AUTO_OFFSET (XEXP (home, 0));
3112     }
3113   else if (MEM_P (home)
3114            && GET_CODE (XEXP (home, 0)) == CONST)
3115     {
3116       /* Handle an obscure case which can arise when optimizing and
3117          when there are few available registers.  (This is *always*
3118          the case for i386/i486 targets).  The RTL looks like
3119          (MEM (CONST ...)) even though this variable is a local `auto'
3120          or a local `register' variable.  In effect, what has happened
3121          is that the reload pass has seen that all assignments and
3122          references for one such a local variable can be replaced by
3123          equivalent assignments and references to some static storage
3124          variable, thereby avoiding the need for a register.  In such
3125          cases we're forced to lie to debuggers and tell them that
3126          this variable was itself `static'.  */
3127       int offs;
3128       code = N_LCSYM;
3129       letter = 'V';
3130       if (NULL == dbxout_common_check (decl, &offs))
3131         addr = XEXP (XEXP (home, 0), 0);
3132       else
3133         {
3134           addr = 0;
3135           number = offs;
3136           code = N_GSYM;
3137         }
3138     }
3139   else if (GET_CODE (home) == CONCAT)
3140     {
3141       tree subtype;
3142
3143       /* If TYPE is not a COMPLEX_TYPE (it might be a RECORD_TYPE,
3144          for example), then there is no easy way to figure out
3145          what SUBTYPE should be.  So, we give up.  */
3146       if (TREE_CODE (type) != COMPLEX_TYPE)
3147         return 0;
3148
3149       subtype = TREE_TYPE (type);
3150
3151       /* If the variable's storage is in two parts,
3152          output each as a separate stab with a modified name.  */
3153       if (WORDS_BIG_ENDIAN)
3154         dbxout_symbol_location (decl, subtype, "$imag", XEXP (home, 0));
3155       else
3156         dbxout_symbol_location (decl, subtype, "$real", XEXP (home, 0));
3157
3158       if (WORDS_BIG_ENDIAN)
3159         dbxout_symbol_location (decl, subtype, "$real", XEXP (home, 1));
3160       else
3161         dbxout_symbol_location (decl, subtype, "$imag", XEXP (home, 1));
3162       return 1;
3163     }
3164   else
3165     /* Address might be a MEM, when DECL is a variable-sized object.
3166        Or it might be const0_rtx, meaning previous passes
3167        want us to ignore this variable.  */
3168     return 0;
3169
3170   /* Ok, start a symtab entry and output the variable name.  */
3171   emit_pending_bincls_if_required ();
3172   FORCE_TEXT;
3173
3174 #ifdef DBX_STATIC_BLOCK_START
3175   DBX_STATIC_BLOCK_START (asm_out_file, code);
3176 #endif
3177
3178   dbxout_begin_complex_stabs_noforcetext ();
3179   dbxout_symbol_name (decl, suffix, letter);
3180   dbxout_type (type, 0);
3181   dbxout_finish_complex_stabs (decl, code, addr, 0, number);
3182
3183 #ifdef DBX_STATIC_BLOCK_END
3184   DBX_STATIC_BLOCK_END (asm_out_file, code);
3185 #endif
3186   return 1;
3187 }
3188 \f
3189 /* Output the symbol name of DECL for a stabs, with suffix SUFFIX.
3190    Then output LETTER to indicate the kind of location the symbol has.  */
3191
3192 static void
3193 dbxout_symbol_name (tree decl, const char *suffix, int letter)
3194 {
3195   tree name;
3196
3197   if (DECL_CONTEXT (decl)
3198       && (TYPE_P (DECL_CONTEXT (decl))
3199           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL))
3200     /* One slight hitch: if this is a VAR_DECL which is a class member
3201        or a namespace member, we must put out the mangled name instead of the
3202        DECL_NAME.  Note also that static member (variable) names DO NOT begin
3203        with underscores in .stabs directives.  */
3204     name = DECL_ASSEMBLER_NAME (decl);
3205   else
3206     /* ...but if we're function-local, we don't want to include the junk
3207        added by ASM_FORMAT_PRIVATE_NAME.  */
3208     name = DECL_NAME (decl);
3209
3210   if (name)
3211     stabstr_I (name);
3212   else
3213     stabstr_S ("(anon)");
3214
3215   if (suffix)
3216     stabstr_S (suffix);
3217   stabstr_C (':');
3218   if (letter)
3219     stabstr_C (letter);
3220 }
3221
3222
3223 /* Output the common block name for DECL in a stabs.
3224
3225    Symbols in global common (.comm) get wrapped with an N_BCOMM/N_ECOMM pair
3226    around each group of symbols in the same .comm area.  The N_GSYM stabs
3227    that are emitted only contain the offset in the common area.  This routine
3228    emits the N_BCOMM and N_ECOMM stabs.  */
3229
3230 static void
3231 dbxout_common_name (tree decl, const char *name, stab_code_type op)
3232 {
3233   dbxout_begin_complex_stabs ();
3234   stabstr_S (name);
3235   dbxout_finish_complex_stabs (decl, op, NULL_RTX, NULL, 0);
3236 }
3237
3238 /* Check decl to determine whether it is a VAR_DECL destined for storage in a
3239    common area.  If it is, the return value will be a non-null string giving
3240    the name of the common storage block it will go into.  If non-null, the
3241    value is the offset into the common block for that symbol's storage.  */
3242
3243 static const char *
3244 dbxout_common_check (tree decl, int *value)
3245 {
3246   rtx home;
3247   rtx sym_addr;
3248   const char *name = NULL;
3249
3250   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
3251      it does not have a value (the offset into the common area), or if it
3252      is thread local (as opposed to global) then it isn't common, and shouldn't
3253      be handled as such.
3254
3255      ??? DECL_THREAD_LOCAL_P check prevents problems with improper .stabs
3256      for thread-local symbols.  Can be handled via same mechanism as used
3257      in dwarf2out.c.  */
3258   if (TREE_CODE (decl) != VAR_DECL
3259       || !TREE_STATIC (decl)
3260       || !DECL_HAS_VALUE_EXPR_P (decl)
3261       || DECL_THREAD_LOCAL_P (decl)
3262       || !is_fortran ())
3263     return NULL;
3264
3265   home = DECL_RTL (decl);
3266   if (home == NULL_RTX || GET_CODE (home) != MEM)
3267     return NULL;
3268
3269   sym_addr = dbxout_expand_expr (DECL_VALUE_EXPR (decl));
3270   if (sym_addr == NULL_RTX || GET_CODE (sym_addr) != MEM)
3271     return NULL;
3272
3273   sym_addr = XEXP (sym_addr, 0);
3274   if (GET_CODE (sym_addr) == CONST)
3275     sym_addr = XEXP (sym_addr, 0);
3276   if ((GET_CODE (sym_addr) == SYMBOL_REF || GET_CODE (sym_addr) == PLUS)
3277       && DECL_INITIAL (decl) == 0)
3278     {
3279
3280       /* We have a sym that will go into a common area, meaning that it
3281          will get storage reserved with a .comm/.lcomm assembler pseudo-op.
3282
3283          Determine name of common area this symbol will be an offset into,
3284          and offset into that area.  Also retrieve the decl for the area
3285          that the symbol is offset into.  */
3286       tree cdecl = NULL;
3287
3288       switch (GET_CODE (sym_addr))
3289         {
3290         case PLUS:
3291           if (CONST_INT_P (XEXP (sym_addr, 0)))
3292             {
3293               name =
3294                 targetm.strip_name_encoding (XSTR (XEXP (sym_addr, 1), 0));
3295               *value = INTVAL (XEXP (sym_addr, 0));
3296               cdecl = SYMBOL_REF_DECL (XEXP (sym_addr, 1));
3297             }
3298           else
3299             {
3300               name =
3301                 targetm.strip_name_encoding (XSTR (XEXP (sym_addr, 0), 0));
3302               *value = INTVAL (XEXP (sym_addr, 1));
3303               cdecl = SYMBOL_REF_DECL (XEXP (sym_addr, 0));
3304             }
3305           break;
3306
3307         case SYMBOL_REF:
3308           name = targetm.strip_name_encoding (XSTR (sym_addr, 0));
3309           *value = 0;
3310           cdecl = SYMBOL_REF_DECL (sym_addr);
3311           break;
3312
3313         default:
3314           error ("common symbol debug info is not structured as "
3315                  "symbol+offset");
3316         }
3317
3318       /* Check area common symbol is offset into.  If this is not public, then
3319          it is not a symbol in a common block.  It must be a .lcomm symbol, not
3320          a .comm symbol.  */
3321       if (cdecl == NULL || !TREE_PUBLIC (cdecl))
3322         name = NULL;
3323     }
3324   else
3325     name = NULL;
3326
3327   return name;
3328 }
3329
3330 /* Output definitions of all the decls in a chain. Return nonzero if
3331    anything was output */
3332
3333 int
3334 dbxout_syms (tree syms)
3335 {
3336   int result = 0;
3337   const char *comm_prev = NULL;
3338   tree syms_prev = NULL;
3339
3340   while (syms)
3341     {
3342       int temp, copen, cclos;
3343       const char *comm_new;
3344
3345       /* Check for common symbol, and then progression into a new/different
3346          block of common symbols.  Emit closing/opening common bracket if
3347          necessary.  */
3348       comm_new = dbxout_common_check (syms, &temp);
3349       copen = comm_new != NULL
3350               && (comm_prev == NULL || strcmp (comm_new, comm_prev));
3351       cclos = comm_prev != NULL
3352               && (comm_new == NULL || strcmp (comm_new, comm_prev));
3353       if (cclos)
3354         dbxout_common_name (syms_prev, comm_prev, N_ECOMM);
3355       if (copen)
3356         {
3357           dbxout_common_name (syms, comm_new, N_BCOMM);
3358           syms_prev = syms;
3359         }
3360       comm_prev = comm_new;
3361
3362       result += dbxout_symbol (syms, 1);
3363       syms = DECL_CHAIN (syms);
3364     }
3365
3366   if (comm_prev != NULL)
3367     dbxout_common_name (syms_prev, comm_prev, N_ECOMM);
3368
3369   return result;
3370 }
3371 \f
3372 /* The following two functions output definitions of function parameters.
3373    Each parameter gets a definition locating it in the parameter list.
3374    Each parameter that is a register variable gets a second definition
3375    locating it in the register.
3376
3377    Printing or argument lists in gdb uses the definitions that
3378    locate in the parameter list.  But reference to the variable in
3379    expressions uses preferentially the definition as a register.  */
3380
3381 /* Output definitions, referring to storage in the parmlist,
3382    of all the parms in PARMS, which is a chain of PARM_DECL nodes.  */
3383
3384 void
3385 dbxout_parms (tree parms)
3386 {
3387   ++debug_nesting;
3388   emit_pending_bincls_if_required ();
3389
3390   for (; parms; parms = DECL_CHAIN (parms))
3391     if (DECL_NAME (parms)
3392         && TREE_TYPE (parms) != error_mark_node
3393         && DECL_RTL_SET_P (parms)
3394         && DECL_INCOMING_RTL (parms))
3395       {
3396         tree eff_type;
3397         char letter;
3398         stab_code_type code;
3399         int number;
3400
3401         /* Perform any necessary register eliminations on the parameter's rtl,
3402            so that the debugging output will be accurate.  */
3403         DECL_INCOMING_RTL (parms)
3404           = eliminate_regs (DECL_INCOMING_RTL (parms), VOIDmode, NULL_RTX);
3405         SET_DECL_RTL (parms,
3406                       eliminate_regs (DECL_RTL (parms), VOIDmode, NULL_RTX));
3407 #ifdef LEAF_REG_REMAP
3408         if (crtl->uses_only_leaf_regs)
3409           {
3410             leaf_renumber_regs_insn (DECL_INCOMING_RTL (parms));
3411             leaf_renumber_regs_insn (DECL_RTL (parms));
3412           }
3413 #endif
3414
3415         if (PARM_PASSED_IN_MEMORY (parms))
3416           {
3417             rtx inrtl = XEXP (DECL_INCOMING_RTL (parms), 0);
3418
3419             /* ??? Here we assume that the parm address is indexed
3420                off the frame pointer or arg pointer.
3421                If that is not true, we produce meaningless results,
3422                but do not crash.  */
3423             if (GET_CODE (inrtl) == PLUS
3424                 && CONST_INT_P (XEXP (inrtl, 1)))
3425               number = INTVAL (XEXP (inrtl, 1));
3426             else
3427               number = 0;
3428
3429             code = N_PSYM;
3430             number = DEBUGGER_ARG_OFFSET (number, inrtl);
3431             letter = 'p';
3432
3433             /* It is quite tempting to use TREE_TYPE (parms) instead
3434                of DECL_ARG_TYPE (parms) for the eff_type, so that gcc
3435                reports the actual type of the parameter, rather than
3436                the promoted type.  This certainly makes GDB's life
3437                easier, at least for some ports.  The change is a bad
3438                idea however, since GDB expects to be able access the
3439                type without performing any conversions.  So for
3440                example, if we were passing a float to an unprototyped
3441                function, gcc will store a double on the stack, but if
3442                we emit a stab saying the type is a float, then gdb
3443                will only read in a single value, and this will produce
3444                an erroneous value.  */
3445             eff_type = DECL_ARG_TYPE (parms);
3446           }
3447         else if (REG_P (DECL_RTL (parms)))
3448           {
3449             rtx best_rtl;
3450
3451             /* Parm passed in registers and lives in registers or nowhere.  */
3452             code = DBX_REGPARM_STABS_CODE;
3453             letter = DBX_REGPARM_STABS_LETTER;
3454
3455             /* For parms passed in registers, it is better to use the
3456                declared type of the variable, not the type it arrived in.  */
3457             eff_type = TREE_TYPE (parms);
3458
3459             /* If parm lives in a register, use that register; pretend
3460                the parm was passed there.  It would be more consistent
3461                to describe the register where the parm was passed, but
3462                in practice that register usually holds something else.
3463                If the parm lives nowhere, use the register where it
3464                was passed.  */
3465             if (REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
3466               best_rtl = DECL_RTL (parms);
3467             else if (GET_CODE (DECL_INCOMING_RTL (parms)) == PARALLEL)
3468               best_rtl = XEXP (XVECEXP (DECL_INCOMING_RTL (parms), 0, 0), 0);
3469             else
3470               best_rtl = DECL_INCOMING_RTL (parms);
3471
3472             number = DBX_REGISTER_NUMBER (REGNO (best_rtl));
3473           }
3474         else if (MEM_P (DECL_RTL (parms))
3475                  && REG_P (XEXP (DECL_RTL (parms), 0))
3476                  && REGNO (XEXP (DECL_RTL (parms), 0)) != HARD_FRAME_POINTER_REGNUM
3477                  && REGNO (XEXP (DECL_RTL (parms), 0)) != STACK_POINTER_REGNUM
3478 #if !HARD_FRAME_POINTER_IS_ARG_POINTER
3479                  && REGNO (XEXP (DECL_RTL (parms), 0)) != ARG_POINTER_REGNUM
3480 #endif
3481                  )
3482           {
3483             /* Parm was passed via invisible reference.
3484                That is, its address was passed in a register.
3485                Output it as if it lived in that register.
3486                The debugger will know from the type
3487                that it was actually passed by invisible reference.  */
3488
3489             code = DBX_REGPARM_STABS_CODE;
3490
3491             /* GDB likes this marked with a special letter.  */
3492             letter = (use_gnu_debug_info_extensions
3493                       ? 'a' : DBX_REGPARM_STABS_LETTER);
3494             eff_type = TREE_TYPE (parms);
3495
3496             /* DECL_RTL looks like (MEM (REG...).  Get the register number.
3497                If it is an unallocated pseudo-reg, then use the register where
3498                it was passed instead.
3499                ??? Why is DBX_REGISTER_NUMBER not used here?  */
3500
3501             if (REGNO (XEXP (DECL_RTL (parms), 0)) < FIRST_PSEUDO_REGISTER)
3502               number = REGNO (XEXP (DECL_RTL (parms), 0));
3503             else
3504               number = REGNO (DECL_INCOMING_RTL (parms));
3505           }
3506         else if (MEM_P (DECL_RTL (parms))
3507                  && MEM_P (XEXP (DECL_RTL (parms), 0)))
3508           {
3509             /* Parm was passed via invisible reference, with the reference
3510                living on the stack.  DECL_RTL looks like
3511                (MEM (MEM (PLUS (REG ...) (CONST_INT ...)))) or it
3512                could look like (MEM (MEM (REG))).  */
3513
3514             code = N_PSYM;
3515             letter = 'v';
3516             eff_type = TREE_TYPE (parms);
3517
3518             if (!REG_P (XEXP (XEXP (DECL_RTL (parms), 0), 0)))
3519               number = INTVAL (XEXP (XEXP (XEXP (DECL_RTL (parms), 0), 0), 1));
3520             else
3521               number = 0;
3522
3523             number = DEBUGGER_ARG_OFFSET (number,
3524                                           XEXP (XEXP (DECL_RTL (parms), 0), 0));
3525           }
3526         else if (MEM_P (DECL_RTL (parms))
3527                  && XEXP (DECL_RTL (parms), 0) != const0_rtx
3528                  /* ??? A constant address for a parm can happen
3529                     when the reg it lives in is equiv to a constant in memory.
3530                     Should make this not happen, after 2.4.  */
3531                  && ! CONSTANT_P (XEXP (DECL_RTL (parms), 0)))
3532           {
3533             /* Parm was passed in registers but lives on the stack.  */
3534
3535             code = N_PSYM;
3536             letter = 'p';
3537             eff_type = TREE_TYPE (parms);
3538
3539             /* DECL_RTL looks like (MEM (PLUS (REG...) (CONST_INT...))),
3540                in which case we want the value of that CONST_INT,
3541                or (MEM (REG ...)),
3542                in which case we use a value of zero.  */
3543             if (!REG_P (XEXP (DECL_RTL (parms), 0)))
3544               number = INTVAL (XEXP (XEXP (DECL_RTL (parms), 0), 1));
3545             else
3546               number = 0;
3547
3548             /* Make a big endian correction if the mode of the type of the
3549                parameter is not the same as the mode of the rtl.  */
3550             if (BYTES_BIG_ENDIAN
3551                 && TYPE_MODE (TREE_TYPE (parms)) != GET_MODE (DECL_RTL (parms))
3552                 && GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (parms))) < UNITS_PER_WORD)
3553               number += (GET_MODE_SIZE (GET_MODE (DECL_RTL (parms)))
3554                          - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (parms))));
3555           }
3556         else
3557           /* ??? We don't know how to represent this argument.  */
3558           continue;
3559
3560         dbxout_begin_complex_stabs ();
3561
3562         if (DECL_NAME (parms))
3563           {
3564             stabstr_I (DECL_NAME (parms));
3565             stabstr_C (':');
3566           }
3567         else
3568           stabstr_S ("(anon):");
3569         stabstr_C (letter);
3570         dbxout_type (eff_type, 0);
3571         dbxout_finish_complex_stabs (parms, code, 0, 0, number);
3572       }
3573   DBXOUT_DECR_NESTING;
3574 }
3575
3576 /* Output definitions for the places where parms live during the function,
3577    when different from where they were passed, when the parms were passed
3578    in memory.
3579
3580    It is not useful to do this for parms passed in registers
3581    that live during the function in different registers, because it is
3582    impossible to look in the passed register for the passed value,
3583    so we use the within-the-function register to begin with.
3584
3585    PARMS is a chain of PARM_DECL nodes.  */
3586
3587 void
3588 dbxout_reg_parms (tree parms)
3589 {
3590   ++debug_nesting;
3591
3592   for (; parms; parms = DECL_CHAIN (parms))
3593     if (DECL_NAME (parms) && PARM_PASSED_IN_MEMORY (parms))
3594       {
3595         /* Report parms that live in registers during the function
3596            but were passed in memory.  */
3597         if (REG_P (DECL_RTL (parms))
3598             && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
3599           dbxout_symbol_location (parms, TREE_TYPE (parms),
3600                                   0, DECL_RTL (parms));
3601         else if (GET_CODE (DECL_RTL (parms)) == CONCAT)
3602           dbxout_symbol_location (parms, TREE_TYPE (parms),
3603                                   0, DECL_RTL (parms));
3604         /* Report parms that live in memory but not where they were passed.  */
3605         else if (MEM_P (DECL_RTL (parms))
3606                  && ! rtx_equal_p (DECL_RTL (parms), DECL_INCOMING_RTL (parms)))
3607           dbxout_symbol_location (parms, TREE_TYPE (parms),
3608                                   0, DECL_RTL (parms));
3609       }
3610   DBXOUT_DECR_NESTING;
3611 }
3612 \f
3613 /* Given a chain of ..._TYPE nodes (as come in a parameter list),
3614    output definitions of those names, in raw form */
3615
3616 static void
3617 dbxout_args (tree args)
3618 {
3619   while (args)
3620     {
3621       stabstr_C (',');
3622       dbxout_type (TREE_VALUE (args), 0);
3623       args = TREE_CHAIN (args);
3624     }
3625 }
3626 \f
3627 #if defined (DBX_DEBUGGING_INFO)
3628
3629 /* Subroutine of dbxout_block.  Emit an N_LBRAC stab referencing LABEL.
3630    BEGIN_LABEL is the name of the beginning of the function, which may
3631    be required.  */
3632 static void
3633 dbx_output_lbrac (const char *label,
3634                   const char *begin_label ATTRIBUTE_UNUSED)
3635 {
3636   dbxout_begin_stabn (N_LBRAC);
3637   if (DBX_BLOCKS_FUNCTION_RELATIVE)
3638     dbxout_stab_value_label_diff (label, begin_label);
3639   else
3640     dbxout_stab_value_label (label);
3641 }
3642
3643 /* Subroutine of dbxout_block.  Emit an N_RBRAC stab referencing LABEL.
3644    BEGIN_LABEL is the name of the beginning of the function, which may
3645    be required.  */
3646 static void
3647 dbx_output_rbrac (const char *label,
3648                   const char *begin_label ATTRIBUTE_UNUSED)
3649 {
3650   dbxout_begin_stabn (N_RBRAC);
3651   if (DBX_BLOCKS_FUNCTION_RELATIVE)
3652     dbxout_stab_value_label_diff (label, begin_label);
3653   else
3654     dbxout_stab_value_label (label);
3655 }
3656
3657 /* Output everything about a symbol block (a BLOCK node
3658    that represents a scope level),
3659    including recursive output of contained blocks.
3660
3661    BLOCK is the BLOCK node.
3662    DEPTH is its depth within containing symbol blocks.
3663    ARGS is usually zero; but for the outermost block of the
3664    body of a function, it is a chain of PARM_DECLs for the function parameters.
3665    We output definitions of all the register parms
3666    as if they were local variables of that block.
3667
3668    If -g1 was used, we count blocks just the same, but output nothing
3669    except for the outermost block.
3670
3671    Actually, BLOCK may be several blocks chained together.
3672    We handle them all in sequence.  */
3673
3674 static void
3675 dbxout_block (tree block, int depth, tree args)
3676 {
3677   char begin_label[20];
3678   /* Reference current function start using LFBB.  */
3679   ASM_GENERATE_INTERNAL_LABEL (begin_label, "LFBB", scope_labelno);
3680
3681   while (block)
3682     {
3683       /* Ignore blocks never expanded or otherwise marked as real.  */
3684       if (TREE_USED (block) && TREE_ASM_WRITTEN (block))
3685         {
3686           int did_output;
3687           int blocknum = BLOCK_NUMBER (block);
3688
3689           /* In dbx format, the syms of a block come before the N_LBRAC.
3690              If nothing is output, we don't need the N_LBRAC, either.  */
3691           did_output = 0;
3692           if (debug_info_level != DINFO_LEVEL_TERSE || depth == 0)
3693             did_output = dbxout_syms (BLOCK_VARS (block));
3694           if (args)
3695             dbxout_reg_parms (args);
3696
3697           /* Now output an N_LBRAC symbol to represent the beginning of
3698              the block.  Use the block's tree-walk order to generate
3699              the assembler symbols LBBn and LBEn
3700              that final will define around the code in this block.  */
3701           if (did_output)
3702             {
3703               char buf[20];
3704               const char *scope_start;
3705
3706               if (depth == 0)
3707                 /* The outermost block doesn't get LBB labels; use
3708                    the LFBB local symbol emitted by dbxout_begin_prologue.  */
3709                 scope_start = begin_label;
3710               else
3711                 {
3712                   ASM_GENERATE_INTERNAL_LABEL (buf, "LBB", blocknum);
3713                   scope_start = buf;
3714                 }
3715
3716               dbx_output_lbrac (scope_start, begin_label);
3717             }
3718
3719           /* Output the subblocks.  */
3720           dbxout_block (BLOCK_SUBBLOCKS (block), depth + 1, NULL_TREE);
3721
3722           /* Refer to the marker for the end of the block.  */
3723           if (did_output)
3724             {
3725               char buf[100];
3726               if (depth == 0)
3727                 /* The outermost block doesn't get LBE labels;
3728                    use the "scope" label which will be emitted
3729                    by dbxout_function_end.  */
3730                 ASM_GENERATE_INTERNAL_LABEL (buf, "Lscope", scope_labelno);
3731               else
3732                 ASM_GENERATE_INTERNAL_LABEL (buf, "LBE", blocknum);
3733
3734               dbx_output_rbrac (buf, begin_label);
3735             }
3736         }
3737       block = BLOCK_CHAIN (block);
3738     }
3739 }
3740
3741 /* Output the information about a function and its arguments and result.
3742    Usually this follows the function's code,
3743    but on some systems, it comes before.  */
3744
3745 static void
3746 dbxout_begin_function (tree decl)
3747 {
3748   int saved_tree_used1;
3749
3750   saved_tree_used1 = TREE_USED (decl);
3751   TREE_USED (decl) = 1;
3752   if (DECL_NAME (DECL_RESULT (decl)) != 0)
3753     {
3754       int saved_tree_used2 = TREE_USED (DECL_RESULT (decl));
3755       TREE_USED (DECL_RESULT (decl)) = 1;
3756       dbxout_symbol (decl, 0);
3757       TREE_USED (DECL_RESULT (decl)) = saved_tree_used2;
3758     }
3759   else
3760     dbxout_symbol (decl, 0);
3761   TREE_USED (decl) = saved_tree_used1;
3762
3763   dbxout_parms (DECL_ARGUMENTS (decl));
3764   if (DECL_NAME (DECL_RESULT (decl)) != 0)
3765     dbxout_symbol (DECL_RESULT (decl), 1);
3766 }
3767 #endif /* DBX_DEBUGGING_INFO */
3768
3769 #endif /* DBX_DEBUGGING_INFO || XCOFF_DEBUGGING_INFO */
3770
3771 /* Record an element in the table of global destructors.  SYMBOL is
3772    a SYMBOL_REF of the function to be called; PRIORITY is a number
3773    between 0 and MAX_INIT_PRIORITY.  */
3774
3775 void
3776 default_stabs_asm_out_destructor (rtx symbol ATTRIBUTE_UNUSED,
3777                                   int priority ATTRIBUTE_UNUSED)
3778 {
3779 #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
3780   /* Tell GNU LD that this is part of the static destructor set.
3781      This will work for any system that uses stabs, most usefully
3782      aout systems.  */
3783   dbxout_begin_simple_stabs ("___DTOR_LIST__", 22 /* N_SETT */);
3784   dbxout_stab_value_label (XSTR (symbol, 0));
3785 #else
3786   sorry ("global destructors not supported on this target");
3787 #endif
3788 }
3789
3790 /* Likewise for global constructors.  */
3791
3792 void
3793 default_stabs_asm_out_constructor (rtx symbol ATTRIBUTE_UNUSED,
3794                                    int priority ATTRIBUTE_UNUSED)
3795 {
3796 #if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
3797   /* Tell GNU LD that this is part of the static destructor set.
3798      This will work for any system that uses stabs, most usefully
3799      aout systems.  */
3800   dbxout_begin_simple_stabs ("___CTOR_LIST__", 22 /* N_SETT */);
3801   dbxout_stab_value_label (XSTR (symbol, 0));
3802 #else
3803   sorry ("global constructors not supported on this target");
3804 #endif
3805 }
3806
3807 #include "gt-dbxout.h"