OSDN Git Service

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