OSDN Git Service

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