OSDN Git Service

f4541ea0763b8b45985e05cf1fba07fc1f320d41
[pf3gnuchains/gcc-fork.git] / gcc / sdbout.c
1 /* Output sdb-format symbol table information from GNU compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004, 2005, 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 /*  mike@tredysvr.Tredydev.Unisys.COM says:
23 I modified the struct.c example and have a nm of a .o resulting from the
24 AT&T C compiler.  From the example below I would conclude the following:
25
26 1. All .defs from structures are emitted as scanned.  The example below
27    clearly shows the symbol table entries for BoxRec2 are after the first
28    function.
29
30 2. All functions and their locals (including statics) are emitted as scanned.
31
32 3. All nested unnamed union and structure .defs must be emitted before
33    the structure in which they are nested.  The AT&T assembler is a
34    one pass beast as far as symbolics are concerned.
35
36 4. All structure .defs are emitted before the typedefs that refer to them.
37
38 5. All top level static and external variable definitions are moved to the
39    end of file with all top level statics occurring first before externs.
40
41 6. All undefined references are at the end of the file.
42 */
43
44 #include "config.h"
45 #include "system.h"
46 #include "coretypes.h"
47 #include "tm.h"
48 #include "debug.h"
49 #include "tree.h"
50 #include "ggc.h"
51 #include "varray.h"
52
53 static GTY(()) tree anonymous_types;
54
55 /* Counter to generate unique "names" for nameless struct members.  */
56
57 static GTY(()) int unnamed_struct_number;
58
59 /* Declarations whose debug info was deferred till end of compilation.  */
60
61 static GTY(()) varray_type deferred_global_decls;
62
63 /* The C front end may call sdbout_symbol before sdbout_init runs.
64    We save all such decls in this list and output them when we get
65    to sdbout_init.  */
66
67 static GTY(()) tree preinit_symbols;
68 static GTY(()) bool sdbout_initialized;
69
70 #ifdef SDB_DEBUGGING_INFO
71
72 #include "rtl.h"
73 #include "regs.h"
74 #include "flags.h"
75 #include "insn-config.h"
76 #include "reload.h"
77 #include "output.h"
78 #include "toplev.h"
79 #include "tm_p.h"
80 #include "gsyms.h"
81 #include "langhooks.h"
82 #include "target.h"
83
84 /* 1 if PARM is passed to this function in memory.  */
85
86 #define PARM_PASSED_IN_MEMORY(PARM) \
87  (MEM_P (DECL_INCOMING_RTL (PARM)))
88
89 /* A C expression for the integer offset value of an automatic variable
90    (C_AUTO) having address X (an RTX).  */
91 #ifndef DEBUGGER_AUTO_OFFSET
92 #define DEBUGGER_AUTO_OFFSET(X) \
93   (GET_CODE (X) == PLUS ? INTVAL (XEXP (X, 1)) : 0)
94 #endif
95
96 /* A C expression for the integer offset value of an argument (C_ARG)
97    having address X (an RTX).  The nominal offset is OFFSET.  */
98 #ifndef DEBUGGER_ARG_OFFSET
99 #define DEBUGGER_ARG_OFFSET(OFFSET, X) (OFFSET)
100 #endif
101
102 /* Line number of beginning of current function, minus one.
103    Negative means not in a function or not using sdb.  */
104
105 int sdb_begin_function_line = -1;
106
107
108 extern FILE *asm_out_file;
109
110 extern tree current_function_decl;
111
112 #include "sdbout.h"
113
114 static void sdbout_init                 (const char *);
115 static void sdbout_finish               (const char *);
116 static void sdbout_start_source_file    (unsigned int, const char *);
117 static void sdbout_end_source_file      (unsigned int);
118 static void sdbout_begin_block          (unsigned int, unsigned int);
119 static void sdbout_end_block            (unsigned int, unsigned int);
120 static void sdbout_source_line          (unsigned int, const char *, int, bool);
121 static void sdbout_end_epilogue         (unsigned int, const char *);
122 static void sdbout_global_decl          (tree);
123 #ifndef MIPS_DEBUGGING_INFO
124 static void sdbout_begin_prologue       (unsigned int, const char *);
125 #endif
126 static void sdbout_end_prologue         (unsigned int, const char *);
127 static void sdbout_begin_function       (tree);
128 static void sdbout_end_function         (unsigned int);
129 static void sdbout_toplevel_data        (tree);
130 static void sdbout_label                (rtx);
131 static char *gen_fake_label             (void);
132 static int plain_type                   (tree);
133 static int template_name_p              (tree);
134 static void sdbout_record_type_name     (tree);
135 static int plain_type_1                 (tree, int);
136 static void sdbout_block                (tree);
137 static void sdbout_syms                 (tree);
138 #ifdef SDB_ALLOW_FORWARD_REFERENCES
139 static void sdbout_queue_anonymous_type (tree);
140 static void sdbout_dequeue_anonymous_types (void);
141 #endif
142 static void sdbout_type                 (tree);
143 static void sdbout_field_types          (tree);
144 static void sdbout_one_type             (tree);
145 static void sdbout_parms                (tree);
146 static void sdbout_reg_parms            (tree);
147 static void sdbout_global_decl          (tree);
148
149 /* Random macros describing parts of SDB data.  */
150
151 /* Default value of delimiter is ";".  */
152 #ifndef SDB_DELIM
153 #define SDB_DELIM       ";"
154 #endif
155
156 /* Maximum number of dimensions the assembler will allow.  */
157 #ifndef SDB_MAX_DIM
158 #define SDB_MAX_DIM 4
159 #endif
160
161 #ifndef PUT_SDB_SCL
162 #define PUT_SDB_SCL(a) fprintf(asm_out_file, "\t.scl\t%d%s", (a), SDB_DELIM)
163 #endif
164
165 #ifndef PUT_SDB_INT_VAL
166 #define PUT_SDB_INT_VAL(a) \
167  do {                                                                   \
168    fprintf (asm_out_file, "\t.val\t" HOST_WIDE_INT_PRINT_DEC "%s",      \
169             (HOST_WIDE_INT) (a), SDB_DELIM);                            \
170  } while (0)
171
172 #endif
173
174 #ifndef PUT_SDB_VAL
175 #define PUT_SDB_VAL(a)                          \
176 ( fputs ("\t.val\t", asm_out_file),             \
177   output_addr_const (asm_out_file, (a)),        \
178   fprintf (asm_out_file, SDB_DELIM))
179 #endif
180
181 #ifndef PUT_SDB_DEF
182 #define PUT_SDB_DEF(a)                          \
183 do { fprintf (asm_out_file, "\t.def\t");        \
184      assemble_name (asm_out_file, a);   \
185      fprintf (asm_out_file, SDB_DELIM); } while (0)
186 #endif
187
188 #ifndef PUT_SDB_PLAIN_DEF
189 #define PUT_SDB_PLAIN_DEF(a) fprintf(asm_out_file,"\t.def\t.%s%s",a, SDB_DELIM)
190 #endif
191
192 #ifndef PUT_SDB_ENDEF
193 #define PUT_SDB_ENDEF fputs("\t.endef\n", asm_out_file)
194 #endif
195
196 #ifndef PUT_SDB_TYPE
197 #define PUT_SDB_TYPE(a) fprintf(asm_out_file, "\t.type\t0%o%s", a, SDB_DELIM)
198 #endif
199
200 #ifndef PUT_SDB_SIZE
201 #define PUT_SDB_SIZE(a) \
202  do {                                                                   \
203    fprintf (asm_out_file, "\t.size\t" HOST_WIDE_INT_PRINT_DEC "%s",     \
204             (HOST_WIDE_INT) (a), SDB_DELIM);                            \
205  } while(0)
206 #endif
207
208 #ifndef PUT_SDB_START_DIM
209 #define PUT_SDB_START_DIM fprintf(asm_out_file, "\t.dim\t")
210 #endif
211
212 #ifndef PUT_SDB_NEXT_DIM
213 #define PUT_SDB_NEXT_DIM(a) fprintf(asm_out_file, "%d,", a)
214 #endif
215
216 #ifndef PUT_SDB_LAST_DIM
217 #define PUT_SDB_LAST_DIM(a) fprintf(asm_out_file, "%d%s", a, SDB_DELIM)
218 #endif
219
220 #ifndef PUT_SDB_TAG
221 #define PUT_SDB_TAG(a)                          \
222 do { fprintf (asm_out_file, "\t.tag\t");        \
223      assemble_name (asm_out_file, a);   \
224      fprintf (asm_out_file, SDB_DELIM); } while (0)
225 #endif
226
227 #ifndef PUT_SDB_BLOCK_START
228 #define PUT_SDB_BLOCK_START(LINE)               \
229   fprintf (asm_out_file,                        \
230            "\t.def\t.bb%s\t.val\t.%s\t.scl\t100%s\t.line\t%d%s\t.endef\n", \
231            SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM)
232 #endif
233
234 #ifndef PUT_SDB_BLOCK_END
235 #define PUT_SDB_BLOCK_END(LINE)                 \
236   fprintf (asm_out_file,                        \
237            "\t.def\t.eb%s\t.val\t.%s\t.scl\t100%s\t.line\t%d%s\t.endef\n",  \
238            SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM)
239 #endif
240
241 #ifndef PUT_SDB_FUNCTION_START
242 #define PUT_SDB_FUNCTION_START(LINE)            \
243   fprintf (asm_out_file,                        \
244            "\t.def\t.bf%s\t.val\t.%s\t.scl\t101%s\t.line\t%d%s\t.endef\n", \
245            SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM)
246 #endif
247
248 #ifndef PUT_SDB_FUNCTION_END
249 #define PUT_SDB_FUNCTION_END(LINE)              \
250   fprintf (asm_out_file,                        \
251            "\t.def\t.ef%s\t.val\t.%s\t.scl\t101%s\t.line\t%d%s\t.endef\n", \
252            SDB_DELIM, SDB_DELIM, SDB_DELIM, (LINE), SDB_DELIM)
253 #endif
254
255 /* Return the sdb tag identifier string for TYPE
256    if TYPE has already been defined; otherwise return a null pointer.  */
257
258 #define KNOWN_TYPE_TAG(type)  TYPE_SYMTAB_POINTER (type)
259
260 /* Set the sdb tag identifier string for TYPE to NAME.  */
261
262 #define SET_KNOWN_TYPE_TAG(TYPE, NAME) \
263   TYPE_SYMTAB_POINTER (TYPE) = (const char *)(NAME)
264
265 /* Return the name (a string) of the struct, union or enum tag
266    described by the TREE_LIST node LINK.  This is 0 for an anonymous one.  */
267
268 #define TAG_NAME(link) \
269   (((link) && TREE_PURPOSE ((link)) \
270     && IDENTIFIER_POINTER (TREE_PURPOSE ((link)))) \
271    ? IDENTIFIER_POINTER (TREE_PURPOSE ((link))) : (char *) 0)
272
273 /* Ensure we don't output a negative line number.  */
274 #define MAKE_LINE_SAFE(line)  \
275   if ((int) line <= sdb_begin_function_line) \
276     line = sdb_begin_function_line + 1
277
278 /* Perform linker optimization of merging header file definitions together
279    for targets with MIPS_DEBUGGING_INFO defined.  This won't work without a
280    post 960826 version of GAS.  Nothing breaks with earlier versions of GAS,
281    the optimization just won't be done.  The native assembler already has the
282    necessary support.  */
283
284 #ifdef MIPS_DEBUGGING_INFO
285
286 /* ECOFF linkers have an optimization that does the same kind of thing as
287    N_BINCL/E_INCL in stabs: eliminate duplicate debug information in the
288    executable.  To achieve this, GCC must output a .file for each file
289    name change.  */
290
291 /* This is a stack of input files.  */
292
293 struct sdb_file
294 {
295   struct sdb_file *next;
296   const char *name;
297 };
298
299 /* This is the top of the stack.  */
300
301 static struct sdb_file *current_file;
302
303 #endif /* MIPS_DEBUGGING_INFO */
304
305 /* The debug hooks structure.  */
306 const struct gcc_debug_hooks sdb_debug_hooks =
307 {
308   sdbout_init,                           /* init */
309   sdbout_finish,                         /* finish */
310   debug_nothing_void,                    /* assembly_start */
311   debug_nothing_int_charstar,            /* define */
312   debug_nothing_int_charstar,            /* undef */
313   sdbout_start_source_file,              /* start_source_file */
314   sdbout_end_source_file,                /* end_source_file */
315   sdbout_begin_block,                    /* begin_block */
316   sdbout_end_block,                      /* end_block */
317   debug_true_const_tree,                 /* ignore_block */
318   sdbout_source_line,                    /* source_line */
319 #ifdef MIPS_DEBUGGING_INFO
320   /* Defer on MIPS systems so that parameter descriptions follow
321      function entry.  */
322   debug_nothing_int_charstar,            /* begin_prologue */
323   sdbout_end_prologue,                   /* end_prologue */
324 #else
325   sdbout_begin_prologue,                 /* begin_prologue */
326   debug_nothing_int_charstar,            /* end_prologue */
327 #endif
328   sdbout_end_epilogue,                   /* end_epilogue */
329   sdbout_begin_function,                 /* begin_function */
330   sdbout_end_function,                   /* end_function */
331   debug_nothing_tree,                    /* function_decl */
332   sdbout_global_decl,                    /* global_decl */
333   sdbout_symbol,                         /* type_decl */
334   debug_nothing_tree_tree_tree_bool,     /* imported_module_or_decl */
335   debug_nothing_tree,                    /* deferred_inline_function */
336   debug_nothing_tree,                    /* outlining_inline_function */
337   sdbout_label,                          /* label */
338   debug_nothing_int,                     /* handle_pch */
339   debug_nothing_rtx,                     /* var_location */
340   debug_nothing_void,                    /* switch_text_section */
341   debug_nothing_tree,                    /* direct_call */
342   debug_nothing_tree_int,                /* virtual_call_token */
343   debug_nothing_rtx_rtx,                 /* copy_call_info */
344   debug_nothing_uid,                     /* virtual_call */
345   debug_nothing_tree_tree,               /* set_name */
346   0                                      /* start_end_main_source_file */
347 };
348
349 /* Return a unique string to name an anonymous type.  */
350
351 static char *
352 gen_fake_label (void)
353 {
354   char label[10];
355   char *labelstr;
356   sprintf (label, ".%dfake", unnamed_struct_number);
357   unnamed_struct_number++;
358   labelstr = xstrdup (label);
359   return labelstr;
360 }
361
362 /* Return the number which describes TYPE for SDB.
363    For pointers, etc., this function is recursive.
364    Each record, union or enumeral type must already have had a
365    tag number output.  */
366
367 /* The number is given by d6d5d4d3d2d1bbbb
368    where bbbb is 4 bit basic type, and di indicate  one of notype,ptr,fn,array.
369    Thus, char *foo () has bbbb=T_CHAR
370                           d1=D_FCN
371                           d2=D_PTR
372  N_BTMASK=     017       1111     basic type field.
373  N_TSHIFT=       2                derived type shift
374  N_BTSHFT=       4                Basic type shift */
375
376 /* Produce the number that describes a pointer, function or array type.
377    PREV is the number describing the target, value or element type.
378    DT_type describes how to transform that type.  */
379 #define PUSH_DERIVED_LEVEL(DT_type,PREV)                \
380   ((((PREV) & ~(int) N_BTMASK) << (int) N_TSHIFT)               \
381    | ((int) DT_type << (int) N_BTSHFT)                  \
382    | ((PREV) & (int) N_BTMASK))
383
384 /* Number of elements used in sdb_dims.  */
385 static int sdb_n_dims = 0;
386
387 /* Table of array dimensions of current type.  */
388 static int sdb_dims[SDB_MAX_DIM];
389
390 /* Size of outermost array currently being processed.  */
391 static int sdb_type_size = -1;
392
393 static int
394 plain_type (tree type)
395 {
396   int val = plain_type_1 (type, 0);
397
398   /* If we have already saved up some array dimensions, print them now.  */
399   if (sdb_n_dims > 0)
400     {
401       int i;
402       PUT_SDB_START_DIM;
403       for (i = sdb_n_dims - 1; i > 0; i--)
404         PUT_SDB_NEXT_DIM (sdb_dims[i]);
405       PUT_SDB_LAST_DIM (sdb_dims[0]);
406       sdb_n_dims = 0;
407
408       sdb_type_size = int_size_in_bytes (type);
409       /* Don't kill sdb if type is not laid out or has variable size.  */
410       if (sdb_type_size < 0)
411         sdb_type_size = 0;
412     }
413   /* If we have computed the size of an array containing this type,
414      print it now.  */
415   if (sdb_type_size >= 0)
416     {
417       PUT_SDB_SIZE (sdb_type_size);
418       sdb_type_size = -1;
419     }
420   return val;
421 }
422
423 static int
424 template_name_p (tree name)
425 {
426   const char *ptr = IDENTIFIER_POINTER (name);
427   while (*ptr && *ptr != '<')
428     ptr++;
429
430   return *ptr != '\0';
431 }
432
433 static void
434 sdbout_record_type_name (tree type)
435 {
436   const char *name = 0;
437   int no_name;
438
439   if (KNOWN_TYPE_TAG (type))
440     return;
441
442   if (TYPE_NAME (type) != 0)
443     {
444       tree t = 0;
445
446       /* Find the IDENTIFIER_NODE for the type name.  */
447       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
448         t = TYPE_NAME (type);
449       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL)
450         {
451           t = DECL_NAME (TYPE_NAME (type));
452           /* The DECL_NAME for templates includes "<>", which breaks
453              most assemblers.  Use its assembler name instead, which
454              has been mangled into being safe.  */
455           if (t && template_name_p (t))
456             t = DECL_ASSEMBLER_NAME (TYPE_NAME (type));
457         }
458
459       /* Now get the name as a string, or invent one.  */
460       if (t != NULL_TREE)
461         name = IDENTIFIER_POINTER (t);
462     }
463
464   no_name = (name == 0 || *name == 0);
465   if (no_name)
466     name = gen_fake_label ();
467
468   SET_KNOWN_TYPE_TAG (type, name);
469 #ifdef SDB_ALLOW_FORWARD_REFERENCES
470   if (no_name)
471     sdbout_queue_anonymous_type (type);
472 #endif
473 }
474
475 /* Return the .type value for type TYPE.
476
477    LEVEL indicates how many levels deep we have recursed into the type.
478    The SDB debug format can only represent 6 derived levels of types.
479    After that, we must output inaccurate debug info.  We deliberately
480    stop before the 7th level, so that ADA recursive types will not give an
481    infinite loop.  */
482
483 static int
484 plain_type_1 (tree type, int level)
485 {
486   if (type == 0)
487     type = void_type_node;
488   else if (type == error_mark_node)
489     type = integer_type_node;
490   else
491     type = TYPE_MAIN_VARIANT (type);
492
493   switch (TREE_CODE (type))
494     {
495     case VOID_TYPE:
496       return T_VOID;
497     case BOOLEAN_TYPE:
498     case INTEGER_TYPE:
499       {
500         int size = int_size_in_bytes (type) * BITS_PER_UNIT;
501
502         /* Carefully distinguish all the standard types of C,
503            without messing up if the language is not C.
504            Note that we check only for the names that contain spaces;
505            other names might occur by coincidence in other languages.  */
506         if (TYPE_NAME (type) != 0
507             && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
508             && DECL_NAME (TYPE_NAME (type)) != 0
509             && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
510           {
511             const char *const name
512               = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
513
514             if (!strcmp (name, "char"))
515               return T_CHAR;
516             if (!strcmp (name, "unsigned char"))
517               return T_UCHAR;
518             if (!strcmp (name, "signed char"))
519               return T_CHAR;
520             if (!strcmp (name, "int"))
521               return T_INT;
522             if (!strcmp (name, "unsigned int"))
523               return T_UINT;
524             if (!strcmp (name, "short int"))
525               return T_SHORT;
526             if (!strcmp (name, "short unsigned int"))
527               return T_USHORT;
528             if (!strcmp (name, "long int"))
529               return T_LONG;
530             if (!strcmp (name, "long unsigned int"))
531               return T_ULONG;
532           }
533
534         if (size == INT_TYPE_SIZE)
535           return (TYPE_UNSIGNED (type) ? T_UINT : T_INT);
536         if (size == CHAR_TYPE_SIZE)
537           return (TYPE_UNSIGNED (type) ? T_UCHAR : T_CHAR);
538         if (size == SHORT_TYPE_SIZE)
539           return (TYPE_UNSIGNED (type) ? T_USHORT : T_SHORT);
540         if (size == LONG_TYPE_SIZE)
541           return (TYPE_UNSIGNED (type) ? T_ULONG : T_LONG);
542         if (size == LONG_LONG_TYPE_SIZE)        /* better than nothing */
543           return (TYPE_UNSIGNED (type) ? T_ULONG : T_LONG);
544         return 0;
545       }
546
547     case REAL_TYPE:
548       {
549         int precision = TYPE_PRECISION (type);
550         if (precision == FLOAT_TYPE_SIZE)
551           return T_FLOAT;
552         if (precision == DOUBLE_TYPE_SIZE)
553           return T_DOUBLE;
554 #ifdef EXTENDED_SDB_BASIC_TYPES
555         if (precision == LONG_DOUBLE_TYPE_SIZE)
556           return T_LNGDBL;
557 #else
558         if (precision == LONG_DOUBLE_TYPE_SIZE)
559           return T_DOUBLE;      /* better than nothing */
560 #endif
561         return 0;
562       }
563
564     case ARRAY_TYPE:
565       {
566         int m;
567         if (level >= 6)
568           return T_VOID;
569         else
570           m = plain_type_1 (TREE_TYPE (type), level+1);
571         if (sdb_n_dims < SDB_MAX_DIM)
572           sdb_dims[sdb_n_dims++]
573             = (TYPE_DOMAIN (type)
574                && TYPE_MIN_VALUE (TYPE_DOMAIN (type)) != 0
575                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != 0
576                && host_integerp (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
577                && host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0)
578                ? (tree_low_cst (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), 0)
579                   - tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0) + 1)
580                : 0);
581
582         return PUSH_DERIVED_LEVEL (DT_ARY, m);
583       }
584
585     case RECORD_TYPE:
586     case UNION_TYPE:
587     case QUAL_UNION_TYPE:
588     case ENUMERAL_TYPE:
589       {
590         const char *tag;
591 #ifdef SDB_ALLOW_FORWARD_REFERENCES
592         sdbout_record_type_name (type);
593 #endif
594 #ifndef SDB_ALLOW_UNKNOWN_REFERENCES
595         if ((TREE_ASM_WRITTEN (type) && KNOWN_TYPE_TAG (type) != 0)
596 #ifdef SDB_ALLOW_FORWARD_REFERENCES
597             || TYPE_MODE (type) != VOIDmode
598 #endif
599             )
600 #endif
601           {
602             /* Output the referenced structure tag name
603                only if the .def has already been finished.
604                At least on 386, the Unix assembler
605                cannot handle forward references to tags.  */
606             /* But the 88100, it requires them, sigh...  */
607             /* And the MIPS requires unknown refs as well...  */
608             tag = KNOWN_TYPE_TAG (type);
609             PUT_SDB_TAG (tag);
610             /* These 3 lines used to follow the close brace.
611                However, a size of 0 without a tag implies a tag of 0,
612                so if we don't know a tag, we can't mention the size.  */
613             sdb_type_size = int_size_in_bytes (type);
614             if (sdb_type_size < 0)
615               sdb_type_size = 0;
616           }
617         return ((TREE_CODE (type) == RECORD_TYPE) ? T_STRUCT
618                 : (TREE_CODE (type) == UNION_TYPE) ? T_UNION
619                 : (TREE_CODE (type) == QUAL_UNION_TYPE) ? T_UNION
620                 : T_ENUM);
621       }
622     case POINTER_TYPE:
623     case REFERENCE_TYPE:
624       {
625         int m;
626         if (level >= 6)
627           return T_VOID;
628         else
629           m = plain_type_1 (TREE_TYPE (type), level+1);
630         return PUSH_DERIVED_LEVEL (DT_PTR, m);
631       }
632     case FUNCTION_TYPE:
633     case METHOD_TYPE:
634       {
635         int m;
636         if (level >= 6)
637           return T_VOID;
638         else
639           m = plain_type_1 (TREE_TYPE (type), level+1);
640         return PUSH_DERIVED_LEVEL (DT_FCN, m);
641       }
642     default:
643       return 0;
644     }
645 }
646
647 /* Output the symbols defined in block number DO_BLOCK.
648
649    This function works by walking the tree structure of blocks,
650    counting blocks until it finds the desired block.  */
651
652 static int do_block = 0;
653
654 static void
655 sdbout_block (tree block)
656 {
657   while (block)
658     {
659       /* Ignore blocks never expanded or otherwise marked as real.  */
660       if (TREE_USED (block))
661         {
662           /* When we reach the specified block, output its symbols.  */
663           if (BLOCK_NUMBER (block) == do_block)
664             sdbout_syms (BLOCK_VARS (block));
665
666           /* If we are past the specified block, stop the scan.  */
667           if (BLOCK_NUMBER (block) > do_block)
668             return;
669
670           /* Scan the blocks within this block.  */
671           sdbout_block (BLOCK_SUBBLOCKS (block));
672         }
673
674       block = BLOCK_CHAIN (block);
675     }
676 }
677
678 /* Call sdbout_symbol on each decl in the chain SYMS.  */
679
680 static void
681 sdbout_syms (tree syms)
682 {
683   while (syms)
684     {
685       if (TREE_CODE (syms) != LABEL_DECL)
686         sdbout_symbol (syms, 1);
687       syms = TREE_CHAIN (syms);
688     }
689 }
690
691 /* Output SDB information for a symbol described by DECL.
692    LOCAL is nonzero if the symbol is not file-scope.  */
693
694 void
695 sdbout_symbol (tree decl, int local)
696 {
697   tree type = TREE_TYPE (decl);
698   tree context = NULL_TREE;
699   rtx value;
700   int regno = -1;
701   const char *name;
702
703   /* If we are called before sdbout_init is run, just save the symbol
704      for later.  */
705   if (!sdbout_initialized)
706     {
707       preinit_symbols = tree_cons (0, decl, preinit_symbols);
708       return;
709     }
710
711   sdbout_one_type (type);
712
713   switch (TREE_CODE (decl))
714     {
715     case CONST_DECL:
716       /* Enum values are defined by defining the enum type.  */
717       return;
718
719     case FUNCTION_DECL:
720       /* Don't mention a nested function under its parent.  */
721       context = decl_function_context (decl);
722       if (context == current_function_decl)
723         return;
724       /* Check DECL_INITIAL to distinguish declarations from definitions.
725          Don't output debug info here for declarations; they will have
726          a DECL_INITIAL value of 0.  */
727       if (! DECL_INITIAL (decl))
728         return;
729       if (!MEM_P (DECL_RTL (decl))
730           || GET_CODE (XEXP (DECL_RTL (decl), 0)) != SYMBOL_REF)
731         return;
732       PUT_SDB_DEF (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
733       PUT_SDB_VAL (XEXP (DECL_RTL (decl), 0));
734       PUT_SDB_SCL (TREE_PUBLIC (decl) ? C_EXT : C_STAT);
735       break;
736
737     case TYPE_DECL:
738       /* Done with tagged types.  */
739       if (DECL_NAME (decl) == 0)
740         return;
741       if (DECL_IGNORED_P (decl))
742         return;
743       /* Don't output intrinsic types.  GAS chokes on SDB .def
744          statements that contain identifiers with embedded spaces
745          (eg "unsigned long").  */
746       if (DECL_IS_BUILTIN (decl))
747         return;
748
749       /* Output typedef name.  */
750       if (template_name_p (DECL_NAME (decl)))
751         PUT_SDB_DEF (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
752       else
753         PUT_SDB_DEF (IDENTIFIER_POINTER (DECL_NAME (decl)));
754       PUT_SDB_SCL (C_TPDEF);
755       break;
756
757     case PARM_DECL:
758       /* Parm decls go in their own separate chains
759          and are output by sdbout_reg_parms and sdbout_parms.  */
760       gcc_unreachable ();
761
762     case VAR_DECL:
763       /* Don't mention a variable that is external.
764          Let the file that defines it describe it.  */
765       if (DECL_EXTERNAL (decl))
766         return;
767
768       /* Ignore __FUNCTION__, etc.  */
769       if (DECL_IGNORED_P (decl))
770         return;
771
772       /* If there was an error in the declaration, don't dump core
773          if there is no RTL associated with the variable doesn't
774          exist.  */
775       if (!DECL_RTL_SET_P (decl))
776         return;
777
778       SET_DECL_RTL (decl,
779                     eliminate_regs (DECL_RTL (decl), VOIDmode, NULL_RTX));
780 #ifdef LEAF_REG_REMAP
781       if (current_function_uses_only_leaf_regs)
782         leaf_renumber_regs_insn (DECL_RTL (decl));
783 #endif
784       value = DECL_RTL (decl);
785
786       /* Don't mention a variable at all
787          if it was completely optimized into nothingness.
788
789          If DECL was from an inline function, then its rtl
790          is not identically the rtl that was used in this
791          particular compilation.  */
792       if (REG_P (value))
793         {
794           regno = REGNO (value);
795           if (regno >= FIRST_PSEUDO_REGISTER)
796             return;
797         }
798       else if (GET_CODE (value) == SUBREG)
799         {
800           while (GET_CODE (value) == SUBREG)
801             value = SUBREG_REG (value);
802           if (REG_P (value))
803             {
804               if (REGNO (value) >= FIRST_PSEUDO_REGISTER)
805                 return;
806             }
807           regno = REGNO (alter_subreg (&value));
808           SET_DECL_RTL (decl, value);
809         }
810       /* Don't output anything if an auto variable
811          gets RTL that is static.
812          GAS version 2.2 can't handle such output.  */
813       else if (MEM_P (value) && CONSTANT_P (XEXP (value, 0))
814                && ! TREE_STATIC (decl))
815         return;
816
817       /* Emit any structure, union, or enum type that has not been output.
818          This occurs for tag-less structs (et al) used to declare variables
819          within functions.  */
820       if (TREE_CODE (type) == ENUMERAL_TYPE
821           || TREE_CODE (type) == RECORD_TYPE
822           || TREE_CODE (type) == UNION_TYPE
823           || TREE_CODE (type) == QUAL_UNION_TYPE)
824         {
825           if (COMPLETE_TYPE_P (type)            /* not a forward reference */
826               && KNOWN_TYPE_TAG (type) == 0)    /* not yet declared */
827             sdbout_one_type (type);
828         }
829
830       /* Defer SDB information for top-level initialized variables! */
831       if (! local
832           && MEM_P (value)
833           && DECL_INITIAL (decl))
834         return;
835
836       /* C++ in 2.3 makes nameless symbols.  That will be fixed later.
837          For now, avoid crashing.  */
838       if (DECL_NAME (decl) == NULL_TREE)
839         return;
840
841       /* Record the name for, starting a symtab entry.  */
842       if (local)
843         name = IDENTIFIER_POINTER (DECL_NAME (decl));
844       else
845         name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
846
847       if (MEM_P (value)
848           && GET_CODE (XEXP (value, 0)) == SYMBOL_REF)
849         {
850           PUT_SDB_DEF (name);
851           if (TREE_PUBLIC (decl))
852             {
853               PUT_SDB_VAL (XEXP (value, 0));
854               PUT_SDB_SCL (C_EXT);
855             }
856           else
857             {
858               PUT_SDB_VAL (XEXP (value, 0));
859               PUT_SDB_SCL (C_STAT);
860             }
861         }
862       else if (regno >= 0)
863         {
864           PUT_SDB_DEF (name);
865           PUT_SDB_INT_VAL (DBX_REGISTER_NUMBER (regno));
866           PUT_SDB_SCL (C_REG);
867         }
868       else if (MEM_P (value)
869                && (MEM_P (XEXP (value, 0))
870                    || (REG_P (XEXP (value, 0))
871                        && REGNO (XEXP (value, 0)) != HARD_FRAME_POINTER_REGNUM
872                        && REGNO (XEXP (value, 0)) != STACK_POINTER_REGNUM)))
873         /* If the value is indirect by memory or by a register
874            that isn't the frame pointer
875            then it means the object is variable-sized and address through
876            that register or stack slot.  COFF has no way to represent this
877            so all we can do is output the variable as a pointer.  */
878         {
879           PUT_SDB_DEF (name);
880           if (REG_P (XEXP (value, 0)))
881             {
882               PUT_SDB_INT_VAL (DBX_REGISTER_NUMBER (REGNO (XEXP (value, 0))));
883               PUT_SDB_SCL (C_REG);
884             }
885           else
886             {
887               /* DECL_RTL looks like (MEM (MEM (PLUS (REG...)
888                  (CONST_INT...)))).
889                  We want the value of that CONST_INT.  */
890               /* Encore compiler hates a newline in a macro arg, it seems.  */
891               PUT_SDB_INT_VAL (DEBUGGER_AUTO_OFFSET
892                                (XEXP (XEXP (value, 0), 0)));
893               PUT_SDB_SCL (C_AUTO);
894             }
895
896           /* Effectively do build_pointer_type, but don't cache this type,
897              since it might be temporary whereas the type it points to
898              might have been saved for inlining.  */
899           /* Don't use REFERENCE_TYPE because dbx can't handle that.  */
900           type = make_node (POINTER_TYPE);
901           TREE_TYPE (type) = TREE_TYPE (decl);
902         }
903       else if (MEM_P (value)
904                && ((GET_CODE (XEXP (value, 0)) == PLUS
905                     && REG_P (XEXP (XEXP (value, 0), 0))
906                     && CONST_INT_P (XEXP (XEXP (value, 0), 1)))
907                    /* This is for variables which are at offset zero from
908                       the frame pointer.  This happens on the Alpha.
909                       Non-frame pointer registers are excluded above.  */
910                    || (REG_P (XEXP (value, 0)))))
911         {
912           /* DECL_RTL looks like (MEM (PLUS (REG...) (CONST_INT...)))
913              or (MEM (REG...)).  We want the value of that CONST_INT
914              or zero.  */
915           PUT_SDB_DEF (name);
916           PUT_SDB_INT_VAL (DEBUGGER_AUTO_OFFSET (XEXP (value, 0)));
917           PUT_SDB_SCL (C_AUTO);
918         }
919       else
920         {
921           /* It is something we don't know how to represent for SDB.  */
922           return;
923         }
924       break;
925
926     default:
927       break;
928     }
929   PUT_SDB_TYPE (plain_type (type));
930   PUT_SDB_ENDEF;
931 }
932
933 /* Output SDB information for a top-level initialized variable
934    that has been delayed.  */
935
936 static void
937 sdbout_toplevel_data (tree decl)
938 {
939   tree type = TREE_TYPE (decl);
940
941   if (DECL_IGNORED_P (decl))
942     return;
943
944   gcc_assert (TREE_CODE (decl) == VAR_DECL);
945   gcc_assert (MEM_P (DECL_RTL (decl)));
946   gcc_assert (DECL_INITIAL (decl));
947
948   PUT_SDB_DEF (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
949   PUT_SDB_VAL (XEXP (DECL_RTL (decl), 0));
950   if (TREE_PUBLIC (decl))
951     {
952       PUT_SDB_SCL (C_EXT);
953     }
954   else
955     {
956       PUT_SDB_SCL (C_STAT);
957     }
958   PUT_SDB_TYPE (plain_type (type));
959   PUT_SDB_ENDEF;
960 }
961
962 #ifdef SDB_ALLOW_FORWARD_REFERENCES
963
964 /* Machinery to record and output anonymous types.  */
965
966 static void
967 sdbout_queue_anonymous_type (tree type)
968 {
969   anonymous_types = tree_cons (NULL_TREE, type, anonymous_types);
970 }
971
972 static void
973 sdbout_dequeue_anonymous_types (void)
974 {
975   tree types, link;
976
977   while (anonymous_types)
978     {
979       types = nreverse (anonymous_types);
980       anonymous_types = NULL_TREE;
981
982       for (link = types; link; link = TREE_CHAIN (link))
983         {
984           tree type = TREE_VALUE (link);
985
986           if (type && ! TREE_ASM_WRITTEN (type))
987             sdbout_one_type (type);
988         }
989     }
990 }
991
992 #endif
993
994 /* Given a chain of ..._TYPE nodes, all of which have names,
995    output definitions of those names, as typedefs.  */
996
997 void
998 sdbout_types (tree types)
999 {
1000   tree link;
1001
1002   for (link = types; link; link = TREE_CHAIN (link))
1003     sdbout_one_type (link);
1004
1005 #ifdef SDB_ALLOW_FORWARD_REFERENCES
1006   sdbout_dequeue_anonymous_types ();
1007 #endif
1008 }
1009
1010 static void
1011 sdbout_type (tree type)
1012 {
1013   if (type == error_mark_node)
1014     type = integer_type_node;
1015   PUT_SDB_TYPE (plain_type (type));
1016 }
1017
1018 /* Output types of the fields of type TYPE, if they are structs.
1019
1020    Formerly did not chase through pointer types, since that could be circular.
1021    They must come before TYPE, since forward refs are not allowed.
1022    Now james@bigtex.cactus.org says to try them.  */
1023
1024 static void
1025 sdbout_field_types (tree type)
1026 {
1027   tree tail;
1028
1029   for (tail = TYPE_FIELDS (type); tail; tail = TREE_CHAIN (tail))
1030     /* This condition should match the one for emitting the actual
1031        members below.  */
1032     if (TREE_CODE (tail) == FIELD_DECL
1033         && DECL_NAME (tail)
1034         && DECL_SIZE (tail)
1035         && host_integerp (DECL_SIZE (tail), 1)
1036         && host_integerp (bit_position (tail), 0))
1037       {
1038         if (POINTER_TYPE_P (TREE_TYPE (tail)))
1039           sdbout_one_type (TREE_TYPE (TREE_TYPE (tail)));
1040         else
1041           sdbout_one_type (TREE_TYPE (tail));
1042       }
1043 }
1044
1045 /* Use this to put out the top level defined record and union types
1046    for later reference.  If this is a struct with a name, then put that
1047    name out.  Other unnamed structs will have .xxfake labels generated so
1048    that they may be referred to later.
1049    The label will be stored in the KNOWN_TYPE_TAG slot of a type.
1050    It may NOT be called recursively.  */
1051
1052 static void
1053 sdbout_one_type (tree type)
1054 {
1055   if (current_function_decl != NULL_TREE
1056       && DECL_SECTION_NAME (current_function_decl) != NULL_TREE)
1057     ; /* Don't change section amid function.  */
1058   else
1059     switch_to_section (text_section);
1060
1061   switch (TREE_CODE (type))
1062     {
1063     case RECORD_TYPE:
1064     case UNION_TYPE:
1065     case QUAL_UNION_TYPE:
1066     case ENUMERAL_TYPE:
1067       type = TYPE_MAIN_VARIANT (type);
1068       /* Don't output a type twice.  */
1069       if (TREE_ASM_WRITTEN (type))
1070         /* James said test TREE_ASM_BEING_WRITTEN here.  */
1071         return;
1072
1073       /* Output nothing if type is not yet defined.  */
1074       if (!COMPLETE_TYPE_P (type))
1075         return;
1076
1077       TREE_ASM_WRITTEN (type) = 1;
1078
1079       /* This is reputed to cause trouble with the following case,
1080          but perhaps checking TYPE_SIZE above will fix it.  */
1081
1082       /* Here is a testcase:
1083
1084         struct foo {
1085           struct badstr *bbb;
1086         } forwardref;
1087
1088         typedef struct intermediate {
1089           int aaaa;
1090         } intermediate_ref;
1091
1092         typedef struct badstr {
1093           int ccccc;
1094         } badtype;   */
1095
1096       /* This change, which ought to make better output,
1097          used to make the COFF assembler unhappy.
1098          Changes involving KNOWN_TYPE_TAG may fix the problem.  */
1099       /* Before really doing anything, output types we want to refer to.  */
1100       /* Note that in version 1 the following two lines
1101          are not used if forward references are in use.  */
1102       if (TREE_CODE (type) != ENUMERAL_TYPE)
1103         sdbout_field_types (type);
1104
1105       /* Output a structure type.  */
1106       {
1107         int size = int_size_in_bytes (type);
1108         int member_scl = 0;
1109         tree tem;
1110
1111         /* Record the type tag, but not in its permanent place just yet.  */
1112         sdbout_record_type_name (type);
1113
1114         PUT_SDB_DEF (KNOWN_TYPE_TAG (type));
1115
1116         switch (TREE_CODE (type))
1117           {
1118           case UNION_TYPE:
1119           case QUAL_UNION_TYPE:
1120             PUT_SDB_SCL (C_UNTAG);
1121             PUT_SDB_TYPE (T_UNION);
1122             member_scl = C_MOU;
1123             break;
1124
1125           case RECORD_TYPE:
1126             PUT_SDB_SCL (C_STRTAG);
1127             PUT_SDB_TYPE (T_STRUCT);
1128             member_scl = C_MOS;
1129             break;
1130
1131           case ENUMERAL_TYPE:
1132             PUT_SDB_SCL (C_ENTAG);
1133             PUT_SDB_TYPE (T_ENUM);
1134             member_scl = C_MOE;
1135             break;
1136
1137           default:
1138             break;
1139           }
1140
1141         PUT_SDB_SIZE (size);
1142         PUT_SDB_ENDEF;
1143
1144         /* Print out the base class information with fields
1145            named after the types they hold.  */
1146         /* This is only relevant to aggregate types.  TYPE_BINFO is used
1147            for other purposes in an ENUMERAL_TYPE, so we must exclude that
1148            case.  */
1149         if (TREE_CODE (type) != ENUMERAL_TYPE && TYPE_BINFO (type))
1150           {
1151             int i;
1152             tree binfo, child;
1153
1154             for (binfo = TYPE_BINFO (type), i = 0;
1155                  BINFO_BASE_ITERATE (binfo, i, child); i++)
1156               {
1157                 tree child_type = BINFO_TYPE (child);
1158                 tree child_type_name;
1159
1160                 if (TYPE_NAME (child_type) == 0)
1161                   continue;
1162                 if (TREE_CODE (TYPE_NAME (child_type)) == IDENTIFIER_NODE)
1163                   child_type_name = TYPE_NAME (child_type);
1164                 else if (TREE_CODE (TYPE_NAME (child_type)) == TYPE_DECL)
1165                   {
1166                     child_type_name = DECL_NAME (TYPE_NAME (child_type));
1167                     if (child_type_name && template_name_p (child_type_name))
1168                       child_type_name
1169                         = DECL_ASSEMBLER_NAME (TYPE_NAME (child_type));
1170                   }
1171                 else
1172                   continue;
1173
1174                 PUT_SDB_DEF (IDENTIFIER_POINTER (child_type_name));
1175                 PUT_SDB_INT_VAL (tree_low_cst (BINFO_OFFSET (child), 0));
1176                 PUT_SDB_SCL (member_scl);
1177                 sdbout_type (BINFO_TYPE (child));
1178                 PUT_SDB_ENDEF;
1179               }
1180           }
1181
1182         /* Output the individual fields.  */
1183
1184         if (TREE_CODE (type) == ENUMERAL_TYPE)
1185           {
1186             for (tem = TYPE_VALUES (type); tem; tem = TREE_CHAIN (tem))
1187               {
1188                 tree value = TREE_VALUE (tem);
1189
1190                 if (TREE_CODE (value) == CONST_DECL)
1191                   value = DECL_INITIAL (value);
1192
1193                 if (host_integerp (value, 0))
1194                   {
1195                     PUT_SDB_DEF (IDENTIFIER_POINTER (TREE_PURPOSE (tem)));
1196                     PUT_SDB_INT_VAL (tree_low_cst (value, 0));
1197                     PUT_SDB_SCL (C_MOE);
1198                     PUT_SDB_TYPE (T_MOE);
1199                     PUT_SDB_ENDEF;
1200                   }
1201               }
1202           }
1203         else                    /* record or union type */
1204           for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem))
1205             /* Output the name, type, position (in bits), size (in bits)
1206                of each field.  */
1207
1208             /* Omit here the nameless fields that are used to skip bits.
1209                Also omit fields with variable size or position.
1210                Also omit non FIELD_DECL nodes that GNU C++ may put here.  */
1211             if (TREE_CODE (tem) == FIELD_DECL
1212                 && DECL_NAME (tem)
1213                 && DECL_SIZE (tem)
1214                 && host_integerp (DECL_SIZE (tem), 1)
1215                 && host_integerp (bit_position (tem), 0))
1216               {
1217                 const char *name;
1218
1219                 name = IDENTIFIER_POINTER (DECL_NAME (tem));
1220                 PUT_SDB_DEF (name);
1221                 if (DECL_BIT_FIELD_TYPE (tem))
1222                   {
1223                     PUT_SDB_INT_VAL (int_bit_position (tem));
1224                     PUT_SDB_SCL (C_FIELD);
1225                     sdbout_type (DECL_BIT_FIELD_TYPE (tem));
1226                     PUT_SDB_SIZE (tree_low_cst (DECL_SIZE (tem), 1));
1227                   }
1228                 else
1229                   {
1230                     PUT_SDB_INT_VAL (int_bit_position (tem) / BITS_PER_UNIT);
1231                     PUT_SDB_SCL (member_scl);
1232                     sdbout_type (TREE_TYPE (tem));
1233                   }
1234                 PUT_SDB_ENDEF;
1235               }
1236         /* Output end of a structure,union, or enumeral definition.  */
1237
1238         PUT_SDB_PLAIN_DEF ("eos");
1239         PUT_SDB_INT_VAL (size);
1240         PUT_SDB_SCL (C_EOS);
1241         PUT_SDB_TAG (KNOWN_TYPE_TAG (type));
1242         PUT_SDB_SIZE (size);
1243         PUT_SDB_ENDEF;
1244         break;
1245       }
1246
1247     default:
1248       break;
1249     }
1250 }
1251
1252 /* The following two functions output definitions of function parameters.
1253    Each parameter gets a definition locating it in the parameter list.
1254    Each parameter that is a register variable gets a second definition
1255    locating it in the register.
1256
1257    Printing or argument lists in gdb uses the definitions that
1258    locate in the parameter list.  But reference to the variable in
1259    expressions uses preferentially the definition as a register.  */
1260
1261 /* Output definitions, referring to storage in the parmlist,
1262    of all the parms in PARMS, which is a chain of PARM_DECL nodes.  */
1263
1264 static void
1265 sdbout_parms (tree parms)
1266 {
1267   for (; parms; parms = TREE_CHAIN (parms))
1268     if (DECL_NAME (parms))
1269       {
1270         int current_sym_value = 0;
1271         const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
1272
1273         if (name == 0 || *name == 0)
1274           name = gen_fake_label ();
1275
1276         /* Perform any necessary register eliminations on the parameter's rtl,
1277            so that the debugging output will be accurate.  */
1278         DECL_INCOMING_RTL (parms)
1279           = eliminate_regs (DECL_INCOMING_RTL (parms), VOIDmode, NULL_RTX);
1280         SET_DECL_RTL (parms,
1281                       eliminate_regs (DECL_RTL (parms), VOIDmode, NULL_RTX));
1282
1283         if (PARM_PASSED_IN_MEMORY (parms))
1284           {
1285             rtx addr = XEXP (DECL_INCOMING_RTL (parms), 0);
1286             tree type;
1287
1288             /* ??? Here we assume that the parm address is indexed
1289                off the frame pointer or arg pointer.
1290                If that is not true, we produce meaningless results,
1291                but do not crash.  */
1292             if (GET_CODE (addr) == PLUS
1293                 && CONST_INT_P (XEXP (addr, 1)))
1294               current_sym_value = INTVAL (XEXP (addr, 1));
1295             else
1296               current_sym_value = 0;
1297
1298             if (REG_P (DECL_RTL (parms))
1299                 && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
1300               type = DECL_ARG_TYPE (parms);
1301             else
1302               {
1303                 int original_sym_value = current_sym_value;
1304
1305                 /* This is the case where the parm is passed as an int or
1306                    double and it is converted to a char, short or float
1307                    and stored back in the parmlist.  In this case, describe
1308                    the parm with the variable's declared type, and adjust
1309                    the address if the least significant bytes (which we are
1310                    using) are not the first ones.  */
1311                 if (BYTES_BIG_ENDIAN
1312                     && TREE_TYPE (parms) != DECL_ARG_TYPE (parms))
1313                   current_sym_value +=
1314                     (GET_MODE_SIZE (TYPE_MODE (DECL_ARG_TYPE (parms)))
1315                      - GET_MODE_SIZE (GET_MODE (DECL_RTL (parms))));
1316
1317                 if (MEM_P (DECL_RTL (parms))
1318                     && GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS
1319                     && (GET_CODE (XEXP (XEXP (DECL_RTL (parms), 0), 1))
1320                         == CONST_INT)
1321                     && (INTVAL (XEXP (XEXP (DECL_RTL (parms), 0), 1))
1322                         == current_sym_value))
1323                   type = TREE_TYPE (parms);
1324                 else
1325                   {
1326                     current_sym_value = original_sym_value;
1327                     type = DECL_ARG_TYPE (parms);
1328                   }
1329               }
1330
1331             PUT_SDB_DEF (name);
1332             PUT_SDB_INT_VAL (DEBUGGER_ARG_OFFSET (current_sym_value, addr));
1333             PUT_SDB_SCL (C_ARG);
1334             PUT_SDB_TYPE (plain_type (type));
1335             PUT_SDB_ENDEF;
1336           }
1337         else if (REG_P (DECL_RTL (parms)))
1338           {
1339             rtx best_rtl;
1340             /* Parm passed in registers and lives in registers or nowhere.  */
1341
1342             /* If parm lives in a register, use that register;
1343                pretend the parm was passed there.  It would be more consistent
1344                to describe the register where the parm was passed,
1345                but in practice that register usually holds something else.  */
1346             if (REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER)
1347               best_rtl = DECL_RTL (parms);
1348             /* If the parm lives nowhere,
1349                use the register where it was passed.  */
1350             else
1351               best_rtl = DECL_INCOMING_RTL (parms);
1352
1353             PUT_SDB_DEF (name);
1354             PUT_SDB_INT_VAL (DBX_REGISTER_NUMBER (REGNO (best_rtl)));
1355             PUT_SDB_SCL (C_REGPARM);
1356             PUT_SDB_TYPE (plain_type (TREE_TYPE (parms)));
1357             PUT_SDB_ENDEF;
1358           }
1359         else if (MEM_P (DECL_RTL (parms))
1360                  && XEXP (DECL_RTL (parms), 0) != const0_rtx)
1361           {
1362             /* Parm was passed in registers but lives on the stack.  */
1363
1364             /* DECL_RTL looks like (MEM (PLUS (REG...) (CONST_INT...))),
1365                in which case we want the value of that CONST_INT,
1366                or (MEM (REG ...)) or (MEM (MEM ...)),
1367                in which case we use a value of zero.  */
1368             if (REG_P (XEXP (DECL_RTL (parms), 0))
1369                 || MEM_P (XEXP (DECL_RTL (parms), 0)))
1370               current_sym_value = 0;
1371             else
1372               current_sym_value = INTVAL (XEXP (XEXP (DECL_RTL (parms), 0), 1));
1373
1374             /* Again, this assumes the offset is based on the arg pointer.  */
1375             PUT_SDB_DEF (name);
1376             PUT_SDB_INT_VAL (DEBUGGER_ARG_OFFSET (current_sym_value,
1377                                                   XEXP (DECL_RTL (parms), 0)));
1378             PUT_SDB_SCL (C_ARG);
1379             PUT_SDB_TYPE (plain_type (TREE_TYPE (parms)));
1380             PUT_SDB_ENDEF;
1381           }
1382       }
1383 }
1384
1385 /* Output definitions for the places where parms live during the function,
1386    when different from where they were passed, when the parms were passed
1387    in memory.
1388
1389    It is not useful to do this for parms passed in registers
1390    that live during the function in different registers, because it is
1391    impossible to look in the passed register for the passed value,
1392    so we use the within-the-function register to begin with.
1393
1394    PARMS is a chain of PARM_DECL nodes.  */
1395
1396 static void
1397 sdbout_reg_parms (tree parms)
1398 {
1399   for (; parms; parms = TREE_CHAIN (parms))
1400     if (DECL_NAME (parms))
1401       {
1402         const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
1403
1404         /* Report parms that live in registers during the function
1405            but were passed in memory.  */
1406         if (REG_P (DECL_RTL (parms))
1407             && REGNO (DECL_RTL (parms)) < FIRST_PSEUDO_REGISTER
1408             && PARM_PASSED_IN_MEMORY (parms))
1409           {
1410             if (name == 0 || *name == 0)
1411               name = gen_fake_label ();
1412             PUT_SDB_DEF (name);
1413             PUT_SDB_INT_VAL (DBX_REGISTER_NUMBER (REGNO (DECL_RTL (parms))));
1414             PUT_SDB_SCL (C_REG);
1415             PUT_SDB_TYPE (plain_type (TREE_TYPE (parms)));
1416             PUT_SDB_ENDEF;
1417           }
1418         /* Report parms that live in memory but not where they were passed.  */
1419         else if (MEM_P (DECL_RTL (parms))
1420                  && GET_CODE (XEXP (DECL_RTL (parms), 0)) == PLUS
1421                  && CONST_INT_P (XEXP (XEXP (DECL_RTL (parms), 0), 1))
1422                  && PARM_PASSED_IN_MEMORY (parms)
1423                  && ! rtx_equal_p (DECL_RTL (parms), DECL_INCOMING_RTL (parms)))
1424           {
1425 #if 0 /* ??? It is not clear yet what should replace this.  */
1426             int offset = DECL_OFFSET (parms) / BITS_PER_UNIT;
1427             /* A parm declared char is really passed as an int,
1428                so it occupies the least significant bytes.
1429                On a big-endian machine those are not the low-numbered ones.  */
1430             if (BYTES_BIG_ENDIAN
1431                 && offset != -1
1432                 && TREE_TYPE (parms) != DECL_ARG_TYPE (parms))
1433               offset += (GET_MODE_SIZE (TYPE_MODE (DECL_ARG_TYPE (parms)))
1434                          - GET_MODE_SIZE (GET_MODE (DECL_RTL (parms))));
1435             if (INTVAL (XEXP (XEXP (DECL_RTL (parms), 0), 1)) != offset) {...}
1436 #endif
1437               {
1438                 if (name == 0 || *name == 0)
1439                   name = gen_fake_label ();
1440                 PUT_SDB_DEF (name);
1441                 PUT_SDB_INT_VAL (DEBUGGER_AUTO_OFFSET
1442                                  (XEXP (DECL_RTL (parms), 0)));
1443                 PUT_SDB_SCL (C_AUTO);
1444                 PUT_SDB_TYPE (plain_type (TREE_TYPE (parms)));
1445                 PUT_SDB_ENDEF;
1446               }
1447           }
1448       }
1449 }
1450
1451 /* Output debug information for a global DECL.  Called from toplev.c
1452    after compilation proper has finished.  */
1453
1454 static void
1455 sdbout_global_decl (tree decl)
1456 {
1457   if (TREE_CODE (decl) == VAR_DECL
1458       && !DECL_EXTERNAL (decl)
1459       && DECL_RTL_SET_P (decl))
1460     {
1461       /* The COFF linker can move initialized global vars to the end.
1462          And that can screw up the symbol ordering.  Defer those for
1463          sdbout_finish ().  */
1464       if (!DECL_INITIAL (decl) || !TREE_PUBLIC (decl))
1465         sdbout_symbol (decl, 0);
1466       else
1467         VARRAY_PUSH_TREE (deferred_global_decls, decl);
1468
1469       /* Output COFF information for non-global file-scope initialized
1470          variables.  */
1471       if (DECL_INITIAL (decl) && MEM_P (DECL_RTL (decl)))
1472         sdbout_toplevel_data (decl);
1473     }
1474 }
1475
1476 /* Output initialized global vars at the end, in the order of
1477    definition.  See comment in sdbout_global_decl.  */
1478
1479 static void
1480 sdbout_finish (const char *main_filename ATTRIBUTE_UNUSED)
1481 {
1482   size_t i;
1483
1484   for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_global_decls); i++)
1485     sdbout_symbol (VARRAY_TREE (deferred_global_decls, i), 0);
1486 }
1487
1488 /* Describe the beginning of an internal block within a function.
1489    Also output descriptions of variables defined in this block.
1490
1491    N is the number of the block, by order of beginning, counting from 1,
1492    and not counting the outermost (function top-level) block.
1493    The blocks match the BLOCKs in DECL_INITIAL (current_function_decl),
1494    if the count starts at 0 for the outermost one.  */
1495
1496 static void
1497 sdbout_begin_block (unsigned int line, unsigned int n)
1498 {
1499   tree decl = current_function_decl;
1500   MAKE_LINE_SAFE (line);
1501
1502   /* The SCO compiler does not emit a separate block for the function level
1503      scope, so we avoid it here also.  However, mips ECOFF compilers do emit
1504      a separate block, so we retain it when MIPS_DEBUGGING_INFO is defined.  */
1505 #ifndef MIPS_DEBUGGING_INFO
1506   if (n != 1)
1507 #endif
1508     PUT_SDB_BLOCK_START (line - sdb_begin_function_line);
1509
1510   if (n == 1)
1511     {
1512       /* Include the outermost BLOCK's variables in block 1.  */
1513       do_block = BLOCK_NUMBER (DECL_INITIAL (decl));
1514       sdbout_block (DECL_INITIAL (decl));
1515     }
1516   /* If -g1, suppress all the internal symbols of functions
1517      except for arguments.  */
1518   if (debug_info_level != DINFO_LEVEL_TERSE)
1519     {
1520       do_block = n;
1521       sdbout_block (DECL_INITIAL (decl));
1522     }
1523
1524 #ifdef SDB_ALLOW_FORWARD_REFERENCES
1525   sdbout_dequeue_anonymous_types ();
1526 #endif
1527 }
1528
1529 /* Describe the end line-number of an internal block within a function.  */
1530
1531 static void
1532 sdbout_end_block (unsigned int line, unsigned int n ATTRIBUTE_UNUSED)
1533 {
1534   MAKE_LINE_SAFE (line);
1535
1536   /* The SCO compiler does not emit a separate block for the function level
1537      scope, so we avoid it here also.  However, mips ECOFF compilers do emit
1538      a separate block, so we retain it when MIPS_DEBUGGING_INFO is defined.  */
1539 #ifndef MIPS_DEBUGGING_INFO
1540   if (n != 1)
1541 #endif
1542   PUT_SDB_BLOCK_END (line - sdb_begin_function_line);
1543 }
1544
1545 /* Output a line number symbol entry for source file FILENAME and line
1546    number LINE.  */
1547
1548 static void
1549 sdbout_source_line (unsigned int line, const char *filename ATTRIBUTE_UNUSED,
1550                     int discriminator ATTRIBUTE_UNUSED,
1551                     bool is_stmt ATTRIBUTE_UNUSED)
1552 {
1553   /* COFF relative line numbers must be positive.  */
1554   if ((int) line > sdb_begin_function_line)
1555     {
1556 #ifdef SDB_OUTPUT_SOURCE_LINE
1557       SDB_OUTPUT_SOURCE_LINE (asm_out_file, line);
1558 #else
1559       fprintf (asm_out_file, "\t.ln\t%d\n",
1560                ((sdb_begin_function_line > -1)
1561                 ? line - sdb_begin_function_line : 1));
1562 #endif
1563     }
1564 }
1565
1566 /* Output sdb info for the current function name.
1567    Called from assemble_start_function.  */
1568
1569 static void
1570 sdbout_begin_function (tree decl ATTRIBUTE_UNUSED)
1571 {
1572   sdbout_symbol (current_function_decl, 0);
1573 }
1574
1575 /* Called at beginning of function body (before or after prologue,
1576    depending on MIPS_DEBUGGING_INFO).  Record the function's starting
1577    line number, so we can output relative line numbers for the other
1578    lines.  Describe beginning of outermost block.  Also describe the
1579    parameter list.  */
1580
1581 #ifndef MIPS_DEBUGGING_INFO
1582 static void
1583 sdbout_begin_prologue (unsigned int line, const char *file ATTRIBUTE_UNUSED)
1584 {
1585   sdbout_end_prologue (line, file);
1586 }
1587 #endif
1588
1589 static void
1590 sdbout_end_prologue (unsigned int line, const char *file ATTRIBUTE_UNUSED)
1591 {
1592   sdb_begin_function_line = line - 1;
1593   PUT_SDB_FUNCTION_START (line);
1594   sdbout_parms (DECL_ARGUMENTS (current_function_decl));
1595   sdbout_reg_parms (DECL_ARGUMENTS (current_function_decl));
1596 }
1597
1598 /* Called at end of function (before epilogue).
1599    Describe end of outermost block.  */
1600
1601 static void
1602 sdbout_end_function (unsigned int line)
1603 {
1604 #ifdef SDB_ALLOW_FORWARD_REFERENCES
1605   sdbout_dequeue_anonymous_types ();
1606 #endif
1607
1608   MAKE_LINE_SAFE (line);
1609   PUT_SDB_FUNCTION_END (line - sdb_begin_function_line);
1610
1611   /* Indicate we are between functions, for line-number output.  */
1612   sdb_begin_function_line = -1;
1613 }
1614
1615 /* Output sdb info for the absolute end of a function.
1616    Called after the epilogue is output.  */
1617
1618 static void
1619 sdbout_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
1620                      const char *file ATTRIBUTE_UNUSED)
1621 {
1622   const char *const name ATTRIBUTE_UNUSED
1623     = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl));
1624
1625 #ifdef PUT_SDB_EPILOGUE_END
1626   PUT_SDB_EPILOGUE_END (name);
1627 #else
1628   fprintf (asm_out_file, "\t.def\t");
1629   assemble_name (asm_out_file, name);
1630   fprintf (asm_out_file, "%s\t.val\t.%s\t.scl\t-1%s\t.endef\n",
1631            SDB_DELIM, SDB_DELIM, SDB_DELIM);
1632 #endif
1633 }
1634
1635 /* Output sdb info for the given label.  Called only if LABEL_NAME (insn)
1636    is present.  */
1637
1638 static void
1639 sdbout_label (rtx insn)
1640 {
1641   PUT_SDB_DEF (LABEL_NAME (insn));
1642   PUT_SDB_VAL (insn);
1643   PUT_SDB_SCL (C_LABEL);
1644   PUT_SDB_TYPE (T_NULL);
1645   PUT_SDB_ENDEF;
1646 }
1647
1648 /* Change to reading from a new source file.  */
1649
1650 static void
1651 sdbout_start_source_file (unsigned int line ATTRIBUTE_UNUSED,
1652                           const char *filename ATTRIBUTE_UNUSED)
1653 {
1654 #ifdef MIPS_DEBUGGING_INFO
1655   struct sdb_file *n = XNEW (struct sdb_file);
1656
1657   n->next = current_file;
1658   n->name = filename;
1659   current_file = n;
1660   output_file_directive (asm_out_file, filename);
1661 #endif
1662 }
1663
1664 /* Revert to reading a previous source file.  */
1665
1666 static void
1667 sdbout_end_source_file (unsigned int line ATTRIBUTE_UNUSED)
1668 {
1669 #ifdef MIPS_DEBUGGING_INFO
1670   struct sdb_file *next;
1671
1672   next = current_file->next;
1673   free (current_file);
1674   current_file = next;
1675   output_file_directive (asm_out_file, current_file->name);
1676 #endif
1677 }
1678
1679 /* Set up for SDB output at the start of compilation.  */
1680
1681 static void
1682 sdbout_init (const char *input_file_name ATTRIBUTE_UNUSED)
1683 {
1684   tree t;
1685
1686 #ifdef MIPS_DEBUGGING_INFO
1687   current_file = XNEW (struct sdb_file);
1688   current_file->next = NULL;
1689   current_file->name = input_file_name;
1690 #endif
1691
1692   VARRAY_TREE_INIT (deferred_global_decls, 12, "deferred_global_decls");
1693
1694   /* Emit debug information which was queued by sdbout_symbol before
1695      we got here.  */
1696   sdbout_initialized = true;
1697
1698   for (t = nreverse (preinit_symbols); t; t = TREE_CHAIN (t))
1699     sdbout_symbol (TREE_VALUE (t), 0);
1700   preinit_symbols = 0;
1701 }
1702
1703 #else  /* SDB_DEBUGGING_INFO */
1704
1705 /* This should never be used, but its address is needed for comparisons.  */
1706 const struct gcc_debug_hooks sdb_debug_hooks =
1707 {
1708   0,            /* init */
1709   0,            /* finish */
1710   0,            /* assembly_start */
1711   0,            /* define */
1712   0,            /* undef */
1713   0,            /* start_source_file */
1714   0,            /* end_source_file */
1715   0,            /* begin_block */
1716   0,            /* end_block */
1717   0,            /* ignore_block */
1718   0,            /* source_line */
1719   0,            /* begin_prologue */
1720   0,            /* end_prologue */
1721   0,            /* end_epilogue */
1722   0,            /* begin_function */
1723   0,            /* end_function */
1724   0,            /* function_decl */
1725   0,            /* global_decl */
1726   0,            /* type_decl */
1727   0,            /* imported_module_or_decl */
1728   0,            /* deferred_inline_function */
1729   0,            /* outlining_inline_function */
1730   0,            /* label */
1731   0,            /* handle_pch */
1732   0,            /* var_location */
1733   0,            /* switch_text_section */
1734   0,            /* direct_call */
1735   0,            /* virtual_call_token */
1736   0,            /* copy_call_info */
1737   0,            /* virtual_call */
1738   0,            /* set_name */
1739   0             /* start_end_main_source_file */
1740 };
1741
1742
1743 #endif /* SDB_DEBUGGING_INFO */
1744
1745 #include "gt-sdbout.h"