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