OSDN Git Service

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