2002-01-20 Daniel Jacobowitz <drow@mvista.com>
[deliverable/binutils-gdb.git] / gdb / hp-symtab-read.c
1 /* Read hp debug symbols and convert to internal format, for GDB.
2 Copyright 1993, 1996, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program 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 of the License, or
10 (at your option) any later version.
11
12 This program 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 this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA.
21
22 Written by the Center for Software Science at the University of Utah
23 and by Cygnus Support. */
24
25 /* Common include for hp-symtab-read.c and hp-psymtab-read.c.
26 * Note this has nested includes for a bunch of stuff.
27 */
28 #include "defs.h"
29 #include "symtab.h"
30 #include "gdbtypes.h"
31 #include "hpread.h"
32 #include "demangle.h"
33 #include "complaints.h"
34 \f
35
36
37
38 static struct complaint hpread_unhandled_end_common_complaint =
39 {
40 "unhandled symbol in hp-symtab-read.c: DNTT_TYPE_COMMON/DNTT_TYPE_END.\n", 0, 0
41 };
42
43 static struct complaint hpread_unhandled_type_complaint =
44 {
45 "hpread_type_translate: unhandled type code.", 0, 0
46 };
47
48 static struct complaint hpread_struct_complaint =
49 {
50 "hpread_read_struct_type: expected SVAR type...", 0, 0
51 };
52
53 static struct complaint hpread_array_complaint =
54 {
55 "error in hpread_array_type.", 0, 0
56 };
57
58 static struct complaint hpread_type_lookup_complaint =
59 {
60 "error in hpread_type_lookup().", 0, 0
61 };
62
63
64 static struct complaint hpread_unexpected_end_complaint =
65 {
66 "internal error in hp-symtab-read.c: Unexpected DNTT_TYPE_END kind.", 0, 0
67 };
68
69 static struct complaint hpread_tagdef_complaint =
70 {
71 "error processing class tagdef", 0, 0
72 };
73
74 static struct complaint hpread_unhandled_common_complaint =
75 {
76 "unhandled symbol in hp-symtab-read.c: DNTT_TYPE_COMMON.", 0, 0
77 };
78
79 static struct complaint hpread_unhandled_blockdata_complaint =
80 {
81 "unhandled symbol in hp-symtab-read.c: DNTT_TYPE_BLOCKDATA.", 0, 0
82 };
83
84
85 /* Forward procedure declarations */
86
87 static unsigned long hpread_get_scope_start (sltpointer, struct objfile *);
88
89 static unsigned long hpread_get_line (sltpointer, struct objfile *);
90
91 static CORE_ADDR hpread_get_location (sltpointer, struct objfile *);
92
93 static void hpread_psymtab_to_symtab_1 (struct partial_symtab *);
94
95 void hpread_psymtab_to_symtab (struct partial_symtab *);
96
97 static struct symtab *hpread_expand_symtab
98 (struct objfile *, int, int, CORE_ADDR, int,
99 struct section_offsets *, char *);
100
101 static int hpread_type_translate (dnttpointer);
102
103 static struct type **hpread_lookup_type (dnttpointer, struct objfile *);
104
105 static struct type *hpread_alloc_type (dnttpointer, struct objfile *);
106
107 static struct type *hpread_read_enum_type
108 (dnttpointer, union dnttentry *, struct objfile *);
109
110 static struct type *hpread_read_function_type
111 (dnttpointer, union dnttentry *, struct objfile *, int);
112
113 static struct type *hpread_read_doc_function_type
114 (dnttpointer, union dnttentry *, struct objfile *, int);
115
116 static struct type *hpread_read_struct_type
117 (dnttpointer, union dnttentry *, struct objfile *);
118
119 static struct type *hpread_get_nth_template_arg (struct objfile *, int);
120
121 static struct type *hpread_read_templ_arg_type
122 (dnttpointer, union dnttentry *, struct objfile *, char *);
123
124 static struct type *hpread_read_set_type
125 (dnttpointer, union dnttentry *, struct objfile *);
126
127 static struct type *hpread_read_array_type
128 (dnttpointer, union dnttentry *dn_bufp, struct objfile *objfile);
129
130 static struct type *hpread_read_subrange_type
131 (dnttpointer, union dnttentry *, struct objfile *);
132
133 static struct type *hpread_type_lookup (dnttpointer, struct objfile *);
134
135 static sltpointer hpread_record_lines
136 (struct subfile *, sltpointer, sltpointer, struct objfile *, CORE_ADDR);
137
138 static void hpread_process_one_debug_symbol
139 (union dnttentry *, char *, struct section_offsets *,
140 struct objfile *, CORE_ADDR, int, char *, int, int *);
141
142 static int hpread_get_scope_depth (union dnttentry *, struct objfile *, int);
143
144 static void fix_static_member_physnames
145 (struct type *, char *, struct objfile *);
146
147 static void fixup_class_method_type
148 (struct type *, struct type *, struct objfile *);
149
150 static void hpread_adjust_bitoffsets (struct type *, int);
151
152 static dnttpointer hpread_get_next_skip_over_anon_unions
153 (int, dnttpointer, union dnttentry **, struct objfile *);
154
155 /* Global to indicate presence of HP-compiled objects,
156 in particular, SOM executable file with SOM debug info
157 Defined in symtab.c, used in hppa-tdep.c. */
158 extern int hp_som_som_object_present;
159
160 /* Static used to indicate a class type that requires a
161 fix-up of one of its method types */
162 static struct type *fixup_class = NULL;
163
164 /* Static used to indicate the method type that is to be
165 used to fix-up the type for fixup_class */
166 static struct type *fixup_method = NULL;
167 \f
168
169
170 /* Get the nesting depth for the source line identified by INDEX. */
171
172 static unsigned long
173 hpread_get_scope_start (sltpointer index, struct objfile *objfile)
174 {
175 union sltentry *sl_bufp;
176
177 sl_bufp = hpread_get_slt (index, objfile);
178 return sl_bufp->sspec.backptr.dnttp.index;
179 }
180
181 /* Get the source line number the the line identified by INDEX. */
182
183 static unsigned long
184 hpread_get_line (sltpointer index, struct objfile *objfile)
185 {
186 union sltentry *sl_bufp;
187
188 sl_bufp = hpread_get_slt (index, objfile);
189 return sl_bufp->snorm.line;
190 }
191
192 /* Find the code address associated with a given sltpointer */
193
194 static CORE_ADDR
195 hpread_get_location (sltpointer index, struct objfile *objfile)
196 {
197 union sltentry *sl_bufp;
198 int i;
199
200 /* code location of special sltentrys is determined from context */
201 sl_bufp = hpread_get_slt (index, objfile);
202
203 if (sl_bufp->snorm.sltdesc == SLT_END)
204 {
205 /* find previous normal sltentry and get address */
206 for (i = 0; ((sl_bufp->snorm.sltdesc != SLT_NORMAL) &&
207 (sl_bufp->snorm.sltdesc != SLT_NORMAL_OFFSET) &&
208 (sl_bufp->snorm.sltdesc != SLT_EXIT)); i++)
209 sl_bufp = hpread_get_slt (index - i, objfile);
210 if (sl_bufp->snorm.sltdesc == SLT_NORMAL_OFFSET)
211 return sl_bufp->snormoff.address;
212 else
213 return sl_bufp->snorm.address;
214 }
215
216 /* find next normal sltentry and get address */
217 for (i = 0; ((sl_bufp->snorm.sltdesc != SLT_NORMAL) &&
218 (sl_bufp->snorm.sltdesc != SLT_NORMAL_OFFSET) &&
219 (sl_bufp->snorm.sltdesc != SLT_EXIT)); i++)
220 sl_bufp = hpread_get_slt (index + i, objfile);
221 if (sl_bufp->snorm.sltdesc == SLT_NORMAL_OFFSET)
222 return sl_bufp->snormoff.address;
223 else
224 return sl_bufp->snorm.address;
225 }
226 \f
227
228 /* Return 1 if an HP debug symbol of type KIND has a name associated with
229 * it, else return 0. (This function is not currently used, but I'll
230 * leave it here in case it proves useful later on. - RT).
231 */
232
233 int
234 hpread_has_name (enum dntt_entry_type kind)
235 {
236 switch (kind)
237 {
238 case DNTT_TYPE_SRCFILE:
239 case DNTT_TYPE_MODULE:
240 case DNTT_TYPE_FUNCTION:
241 case DNTT_TYPE_DOC_FUNCTION:
242 case DNTT_TYPE_ENTRY:
243 case DNTT_TYPE_IMPORT:
244 case DNTT_TYPE_LABEL:
245 case DNTT_TYPE_FPARAM:
246 case DNTT_TYPE_SVAR:
247 case DNTT_TYPE_DVAR:
248 case DNTT_TYPE_CONST:
249 case DNTT_TYPE_TYPEDEF:
250 case DNTT_TYPE_TAGDEF:
251 case DNTT_TYPE_MEMENUM:
252 case DNTT_TYPE_FIELD:
253 case DNTT_TYPE_SA:
254 case DNTT_TYPE_BLOCKDATA:
255 case DNTT_TYPE_MEMFUNC:
256 case DNTT_TYPE_DOC_MEMFUNC:
257 return 1;
258
259 case DNTT_TYPE_BEGIN:
260 case DNTT_TYPE_END:
261 case DNTT_TYPE_POINTER:
262 case DNTT_TYPE_ENUM:
263 case DNTT_TYPE_SET:
264 case DNTT_TYPE_ARRAY:
265 case DNTT_TYPE_STRUCT:
266 case DNTT_TYPE_UNION:
267 case DNTT_TYPE_VARIANT:
268 case DNTT_TYPE_FILE:
269 case DNTT_TYPE_FUNCTYPE:
270 case DNTT_TYPE_SUBRANGE:
271 case DNTT_TYPE_WITH:
272 case DNTT_TYPE_COMMON:
273 case DNTT_TYPE_COBSTRUCT:
274 case DNTT_TYPE_XREF:
275 case DNTT_TYPE_MACRO:
276 case DNTT_TYPE_CLASS_SCOPE:
277 case DNTT_TYPE_REFERENCE:
278 case DNTT_TYPE_PTRMEM:
279 case DNTT_TYPE_PTRMEMFUNC:
280 case DNTT_TYPE_CLASS:
281 case DNTT_TYPE_GENFIELD:
282 case DNTT_TYPE_VFUNC:
283 case DNTT_TYPE_MEMACCESS:
284 case DNTT_TYPE_INHERITANCE:
285 case DNTT_TYPE_FRIEND_CLASS:
286 case DNTT_TYPE_FRIEND_FUNC:
287 case DNTT_TYPE_MODIFIER:
288 case DNTT_TYPE_OBJECT_ID:
289 case DNTT_TYPE_TEMPLATE:
290 case DNTT_TYPE_TEMPLATE_ARG:
291 case DNTT_TYPE_FUNC_TEMPLATE:
292 case DNTT_TYPE_LINK:
293 /* DNTT_TYPE_DYN_ARRAY_DESC ? */
294 /* DNTT_TYPE_DESC_SUBRANGE ? */
295 /* DNTT_TYPE_BEGIN_EXT ? */
296 /* DNTT_TYPE_INLN ? */
297 /* DNTT_TYPE_INLN_LIST ? */
298 /* DNTT_TYPE_ALIAS ? */
299 default:
300 return 0;
301 }
302 }
303
304 /* Do the dirty work of reading in the full symbol from a partial symbol
305 table. */
306
307 static void
308 hpread_psymtab_to_symtab_1 (struct partial_symtab *pst)
309 {
310 struct cleanup *old_chain;
311 int i;
312
313 /* Get out quick if passed junk. */
314 if (!pst)
315 return;
316
317 /* Complain if we've already read in this symbol table. */
318 if (pst->readin)
319 {
320 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
321 pst->filename);
322 return;
323 }
324
325 /* Read in all partial symtabs on which this one is dependent */
326 for (i = 0; i < pst->number_of_dependencies; i++)
327 if (!pst->dependencies[i]->readin)
328 {
329 /* Inform about additional files that need to be read in. */
330 if (info_verbose)
331 {
332 fputs_filtered (" ", gdb_stdout);
333 wrap_here ("");
334 fputs_filtered ("and ", gdb_stdout);
335 wrap_here ("");
336 printf_filtered ("%s...", pst->dependencies[i]->filename);
337 wrap_here (""); /* Flush output */
338 gdb_flush (gdb_stdout);
339 }
340 hpread_psymtab_to_symtab_1 (pst->dependencies[i]);
341 }
342
343 /* If it's real... */
344 if (LDSYMLEN (pst))
345 {
346 /* Init stuff necessary for reading in symbols */
347 buildsym_init ();
348 old_chain = make_cleanup (really_free_pendings, 0);
349
350 pst->symtab =
351 hpread_expand_symtab (pst->objfile, LDSYMOFF (pst), LDSYMLEN (pst),
352 pst->textlow, pst->texthigh - pst->textlow,
353 pst->section_offsets, pst->filename);
354 sort_symtab_syms (pst->symtab);
355
356 do_cleanups (old_chain);
357 }
358
359 pst->readin = 1;
360 }
361
362 /* Read in all of the symbols for a given psymtab for real.
363 Be verbose about it if the user wants that. */
364
365 void
366 hpread_psymtab_to_symtab (struct partial_symtab *pst)
367 {
368 /* Get out quick if given junk. */
369 if (!pst)
370 return;
371
372 /* Sanity check. */
373 if (pst->readin)
374 {
375 fprintf (stderr, "Psymtab for %s already read in. Shouldn't happen.\n",
376 pst->filename);
377 return;
378 }
379
380 /* elz: setting the flag to indicate that the code of the target
381 was compiled using an HP compiler (aCC, cc)
382 the processing_acc_compilation variable is declared in the
383 file buildsym.h, the HP_COMPILED_TARGET is defined to be equal
384 to 3 in the file tm_hppa.h */
385
386 processing_gcc_compilation = 0;
387
388 if (LDSYMLEN (pst) || pst->number_of_dependencies)
389 {
390 /* Print the message now, before reading the string table,
391 to avoid disconcerting pauses. */
392 if (info_verbose)
393 {
394 printf_filtered ("Reading in symbols for %s...", pst->filename);
395 gdb_flush (gdb_stdout);
396 }
397
398 hpread_psymtab_to_symtab_1 (pst);
399
400 /* Match with global symbols. This only needs to be done once,
401 after all of the symtabs and dependencies have been read in. */
402 scan_file_globals (pst->objfile);
403
404 /* Finish up the debug error message. */
405 if (info_verbose)
406 printf_filtered ("done.\n");
407 }
408 }
409
410 /* Read in a defined section of a specific object file's symbols.
411
412 DESC is the file descriptor for the file, positioned at the
413 beginning of the symtab
414 SYM_OFFSET is the offset within the file of
415 the beginning of the symbols we want to read
416 SYM_SIZE is the size of the symbol info to read in.
417 TEXT_OFFSET is the beginning of the text segment we are reading symbols for
418 TEXT_SIZE is the size of the text segment read in.
419 SECTION_OFFSETS are the relocation offsets which get added to each symbol. */
420
421 static struct symtab *
422 hpread_expand_symtab (struct objfile *objfile, int sym_offset, int sym_size,
423 CORE_ADDR text_offset, int text_size,
424 struct section_offsets *section_offsets, char *filename)
425 {
426 char *namestring;
427 union dnttentry *dn_bufp;
428 unsigned max_symnum;
429 int at_module_boundary = 0;
430 /* 1 => at end, -1 => at beginning */
431
432 int sym_index = sym_offset / sizeof (struct dntt_type_block);
433
434 current_objfile = objfile;
435 subfile_stack = 0;
436
437 last_source_file = 0;
438
439 /* Demangling style -- if EDG style already set, don't change it,
440 as HP style causes some problems with the KAI EDG compiler */
441 if (current_demangling_style != edg_demangling)
442 {
443 /* Otherwise, ensure that we are using HP style demangling */
444 set_demangling_style (HP_DEMANGLING_STYLE_STRING);
445 }
446
447 dn_bufp = hpread_get_lntt (sym_index, objfile);
448 if (!((dn_bufp->dblock.kind == (unsigned char) DNTT_TYPE_SRCFILE) ||
449 (dn_bufp->dblock.kind == (unsigned char) DNTT_TYPE_MODULE)))
450 {
451 start_symtab ("globals", NULL, 0);
452 record_debugformat ("HP");
453 }
454
455 /* The psymtab builder (hp-psymtab-read.c) is the one that
456 * determined the "sym_size" argument (i.e. how many DNTT symbols
457 * are in this symtab), which we use to compute "max_symnum"
458 * (point in DNTT to which we read).
459 *
460 * Perhaps this should be changed so that
461 * process_one_debug_symbol() "knows" when
462 * to stop reading (based on reading from the MODULE to the matching
463 * END), and take out this reliance on a #-syms being passed in...
464 * (I'm worried about the reliability of this number). But I'll
465 * leave it as-is, for now. - RT
466 *
467 * The change above has been made. I've left the "for" loop control
468 * in to prepare for backing this out again. -JB
469 */
470 max_symnum = sym_size / sizeof (struct dntt_type_block);
471 /* No reason to multiply on pst side and divide on sym side... FIXME */
472
473 /* Read in and process each debug symbol within the specified range.
474 */
475 for (symnum = 0;
476 symnum < max_symnum;
477 symnum++)
478 {
479 QUIT; /* Allow this to be interruptable */
480 dn_bufp = hpread_get_lntt (sym_index + symnum, objfile);
481
482 if (dn_bufp->dblock.extension)
483 continue;
484
485 /* Yow! We call SET_NAMESTRING on things without names! */
486 SET_NAMESTRING (dn_bufp, &namestring, objfile);
487
488 hpread_process_one_debug_symbol (dn_bufp, namestring, section_offsets,
489 objfile, text_offset, text_size,
490 filename, symnum + sym_index,
491 &at_module_boundary
492 );
493
494 /* OLD COMMENTS: This routine is only called for psts. All psts
495 * correspond to MODULES. If we ever do lazy-reading of globals
496 * from the LNTT, then there will be a pst which ends when the
497 * LNTT ends, and not at an END MODULE entry. Then we'll have
498 * to re-visit this break.
499
500 if( at_end_of_module )
501 break;
502
503 */
504
505 /* We no longer break out of the loop when we reach the end of a
506 module. The reason is that with CTTI, the compiler can generate
507 function symbols (for template function instantiations) which are not
508 in any module; typically they show up beyond a module's end, and
509 before the next module's start. We include them in the current
510 module. However, we still don't trust the MAX_SYMNUM value from
511 the psymtab, so we break out if we enter a new module. */
512
513 if (at_module_boundary == -1)
514 break;
515 }
516
517 current_objfile = NULL;
518 hp_som_som_object_present = 1; /* Indicate we've processed an HP SOM SOM file */
519
520 return end_symtab (text_offset + text_size, objfile, SECT_OFF_TEXT (objfile));
521 }
522 \f
523
524
525
526 /* Convert basic types from HP debug format into GDB internal format. */
527
528 static int
529 hpread_type_translate (dnttpointer typep)
530 {
531 if (!typep.dntti.immediate)
532 {
533 error ("error in hpread_type_translate\n.");
534 return FT_VOID;
535 }
536
537 switch (typep.dntti.type)
538 {
539 case HP_TYPE_BOOLEAN:
540 case HP_TYPE_BOOLEAN_S300_COMPAT:
541 case HP_TYPE_BOOLEAN_VAX_COMPAT:
542 return FT_BOOLEAN;
543 case HP_TYPE_CHAR: /* C signed char, C++ plain char */
544
545 case HP_TYPE_WIDE_CHAR:
546 return FT_CHAR;
547 case HP_TYPE_INT:
548 if (typep.dntti.bitlength <= 8)
549 return FT_SIGNED_CHAR; /* C++ signed char */
550 if (typep.dntti.bitlength <= 16)
551 return FT_SHORT;
552 if (typep.dntti.bitlength <= 32)
553 return FT_INTEGER;
554 return FT_LONG_LONG;
555 case HP_TYPE_LONG:
556 if (typep.dntti.bitlength <= 8)
557 return FT_SIGNED_CHAR; /* C++ signed char. */
558 return FT_LONG;
559 case HP_TYPE_UNSIGNED_LONG:
560 if (typep.dntti.bitlength <= 8)
561 return FT_UNSIGNED_CHAR; /* C/C++ unsigned char */
562 if (typep.dntti.bitlength <= 16)
563 return FT_UNSIGNED_SHORT;
564 if (typep.dntti.bitlength <= 32)
565 return FT_UNSIGNED_LONG;
566 return FT_UNSIGNED_LONG_LONG;
567 case HP_TYPE_UNSIGNED_INT:
568 if (typep.dntti.bitlength <= 8)
569 return FT_UNSIGNED_CHAR;
570 if (typep.dntti.bitlength <= 16)
571 return FT_UNSIGNED_SHORT;
572 if (typep.dntti.bitlength <= 32)
573 return FT_UNSIGNED_INTEGER;
574 return FT_UNSIGNED_LONG_LONG;
575 case HP_TYPE_REAL:
576 case HP_TYPE_REAL_3000:
577 case HP_TYPE_DOUBLE:
578 if (typep.dntti.bitlength == 64)
579 return FT_DBL_PREC_FLOAT;
580 if (typep.dntti.bitlength == 128)
581 return FT_EXT_PREC_FLOAT;
582 return FT_FLOAT;
583 case HP_TYPE_COMPLEX:
584 case HP_TYPE_COMPLEXS3000:
585 if (typep.dntti.bitlength == 128)
586 return FT_DBL_PREC_COMPLEX;
587 if (typep.dntti.bitlength == 192)
588 return FT_EXT_PREC_COMPLEX;
589 return FT_COMPLEX;
590 case HP_TYPE_VOID:
591 return FT_VOID;
592 case HP_TYPE_STRING200:
593 case HP_TYPE_LONGSTRING200:
594 case HP_TYPE_FTN_STRING_SPEC:
595 case HP_TYPE_MOD_STRING_SPEC:
596 case HP_TYPE_MOD_STRING_3000:
597 case HP_TYPE_FTN_STRING_S300_COMPAT:
598 case HP_TYPE_FTN_STRING_VAX_COMPAT:
599 return FT_STRING;
600 case HP_TYPE_TEMPLATE_ARG:
601 return FT_TEMPLATE_ARG;
602 case HP_TYPE_TEXT:
603 case HP_TYPE_FLABEL:
604 case HP_TYPE_PACKED_DECIMAL:
605 case HP_TYPE_ANYPOINTER:
606 case HP_TYPE_GLOBAL_ANYPOINTER:
607 case HP_TYPE_LOCAL_ANYPOINTER:
608 default:
609 warning ("hpread_type_translate: unhandled type code.\n");
610 return FT_VOID;
611 }
612 }
613
614 /* Given a position in the DNTT, return a pointer to the
615 * already-built "struct type" (if any), for the type defined
616 * at that position.
617 */
618
619 static struct type **
620 hpread_lookup_type (dnttpointer hp_type, struct objfile *objfile)
621 {
622 unsigned old_len;
623 int index = hp_type.dnttp.index;
624 int size_changed = 0;
625
626 /* The immediate flag indicates this doesn't actually point to
627 * a type DNTT.
628 */
629 if (hp_type.dntti.immediate)
630 return NULL;
631
632 /* For each objfile, we maintain a "type vector".
633 * This an array of "struct type *"'s with one pointer per DNTT index.
634 * Given a DNTT index, we look in this array to see if we have
635 * already processed this DNTT and if it is a type definition.
636 * If so, then we can locate a pointer to the already-built
637 * "struct type", and not build it again.
638 *
639 * The need for this arises because our DNTT-walking code wanders
640 * around. In particular, it will encounter the same type multiple
641 * times (once for each object of that type). We don't want to
642 * built multiple "struct type"'s for the same thing.
643 *
644 * Having said this, I should point out that this type-vector is
645 * an expensive way to keep track of this. If most DNTT entries are
646 * 3 words, the type-vector will be 1/3 the size of the DNTT itself.
647 * Alternative solutions:
648 * - Keep a compressed or hashed table. Less memory, but more expensive
649 * to search and update.
650 * - (Suggested by JB): Overwrite the DNTT entry itself
651 * with the info. Create a new type code "ALREADY_BUILT", and modify
652 * the DNTT to have that type code and point to the already-built entry.
653 * -RT
654 */
655
656 if (index < LNTT_SYMCOUNT (objfile))
657 {
658 if (index >= TYPE_VECTOR_LENGTH (objfile))
659 {
660 old_len = TYPE_VECTOR_LENGTH (objfile);
661
662 /* See if we need to allocate a type-vector. */
663 if (old_len == 0)
664 {
665 TYPE_VECTOR_LENGTH (objfile) = LNTT_SYMCOUNT (objfile) + GNTT_SYMCOUNT (objfile);
666 TYPE_VECTOR (objfile) = (struct type **)
667 xmmalloc (objfile->md, TYPE_VECTOR_LENGTH (objfile) * sizeof (struct type *));
668 memset (&TYPE_VECTOR (objfile)[old_len], 0,
669 (TYPE_VECTOR_LENGTH (objfile) - old_len) *
670 sizeof (struct type *));
671 }
672
673 /* See if we need to resize type-vector. With my change to
674 * initially allocate a correct-size type-vector, this code
675 * should no longer trigger.
676 */
677 while (index >= TYPE_VECTOR_LENGTH (objfile))
678 {
679 TYPE_VECTOR_LENGTH (objfile) *= 2;
680 size_changed = 1;
681 }
682 if (size_changed)
683 {
684 TYPE_VECTOR (objfile) = (struct type **)
685 xmrealloc (objfile->md,
686 (char *) TYPE_VECTOR (objfile),
687 (TYPE_VECTOR_LENGTH (objfile) * sizeof (struct type *)));
688
689 memset (&TYPE_VECTOR (objfile)[old_len], 0,
690 (TYPE_VECTOR_LENGTH (objfile) - old_len) *
691 sizeof (struct type *));
692 }
693
694 }
695 return &TYPE_VECTOR (objfile)[index];
696 }
697 else
698 return NULL;
699 }
700
701 /* Possibly allocate a GDB internal type so we can internalize HP_TYPE.
702 Note we'll just return the address of a GDB internal type if we already
703 have it lying around. */
704
705 static struct type *
706 hpread_alloc_type (dnttpointer hp_type, struct objfile *objfile)
707 {
708 struct type **type_addr;
709
710 type_addr = hpread_lookup_type (hp_type, objfile);
711 if (*type_addr == 0)
712 {
713 *type_addr = alloc_type (objfile);
714
715 /* A hack - if we really are a C++ class symbol, then this default
716 * will get overriden later on.
717 */
718 TYPE_CPLUS_SPECIFIC (*type_addr)
719 = (struct cplus_struct_type *) &cplus_struct_default;
720 }
721
722 return *type_addr;
723 }
724
725 /* Read a native enumerated type and return it in GDB internal form. */
726
727 static struct type *
728 hpread_read_enum_type (dnttpointer hp_type, union dnttentry *dn_bufp,
729 struct objfile *objfile)
730 {
731 struct type *type;
732 struct pending **symlist, *osyms, *syms;
733 struct pending *local_list = NULL;
734 int o_nsyms, nsyms = 0;
735 dnttpointer mem;
736 union dnttentry *memp;
737 char *name;
738 long n;
739 struct symbol *sym;
740
741 /* Allocate a GDB type. If we've already read in this enum type,
742 * it'll return the already built GDB type, so stop here.
743 * (Note: I added this check, to conform with what's done for
744 * struct, union, class.
745 * I assume this is OK. - RT)
746 */
747 type = hpread_alloc_type (hp_type, objfile);
748 if (TYPE_CODE (type) == TYPE_CODE_ENUM)
749 return type;
750
751 /* HP C supports "sized enums", where a specifier such as "short" or
752 "char" can be used to get enums of different sizes. So don't assume
753 an enum is always 4 bytes long. pai/1997-08-21 */
754 TYPE_LENGTH (type) = dn_bufp->denum.bitlength / 8;
755
756 symlist = &file_symbols;
757 osyms = *symlist;
758 o_nsyms = osyms ? osyms->nsyms : 0;
759
760 /* Get a name for each member and add it to our list of members.
761 * The list of "mem" SOM records we are walking should all be
762 * SOM type DNTT_TYPE_MEMENUM (not checked).
763 */
764 mem = dn_bufp->denum.firstmem;
765 while (mem.word && mem.word != DNTTNIL)
766 {
767 memp = hpread_get_lntt (mem.dnttp.index, objfile);
768
769 name = VT (objfile) + memp->dmember.name;
770 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
771 sizeof (struct symbol));
772 memset (sym, 0, sizeof (struct symbol));
773 SYMBOL_NAME (sym) = obsavestring (name, strlen (name),
774 &objfile->symbol_obstack);
775 SYMBOL_CLASS (sym) = LOC_CONST;
776 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
777 SYMBOL_VALUE (sym) = memp->dmember.value;
778 add_symbol_to_list (sym, symlist);
779 nsyms++;
780 mem = memp->dmember.nextmem;
781 }
782
783 /* Now that we know more about the enum, fill in more info. */
784 TYPE_CODE (type) = TYPE_CODE_ENUM;
785 TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
786 TYPE_NFIELDS (type) = nsyms;
787 TYPE_FIELDS (type) = (struct field *)
788 obstack_alloc (&objfile->type_obstack, sizeof (struct field) * nsyms);
789
790 /* Find the symbols for the members and put them into the type.
791 The symbols can be found in the symlist that we put them on
792 to cause them to be defined. osyms contains the old value
793 of that symlist; everything up to there was defined by us.
794
795 Note that we preserve the order of the enum constants, so
796 that in something like "enum {FOO, LAST_THING=FOO}" we print
797 FOO, not LAST_THING. */
798 for (syms = *symlist, n = 0; syms; syms = syms->next)
799 {
800 int j = 0;
801 if (syms == osyms)
802 j = o_nsyms;
803 for (; j < syms->nsyms; j++, n++)
804 {
805 struct symbol *xsym = syms->symbol[j];
806 SYMBOL_TYPE (xsym) = type;
807 TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
808 TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
809 TYPE_FIELD_BITSIZE (type, n) = 0;
810 }
811 if (syms == osyms)
812 break;
813 }
814
815 return type;
816 }
817
818 /* Read and internalize a native function debug symbol. */
819
820 static struct type *
821 hpread_read_function_type (dnttpointer hp_type, union dnttentry *dn_bufp,
822 struct objfile *objfile, int newblock)
823 {
824 struct type *type, *type1;
825 struct pending *syms;
826 struct pending *local_list = NULL;
827 int nsyms = 0;
828 dnttpointer param;
829 union dnttentry *paramp;
830 char *name;
831 long n;
832 struct symbol *sym;
833 int record_args = 1;
834
835 /* See if we've already read in this type. */
836 type = hpread_alloc_type (hp_type, objfile);
837 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
838 {
839 record_args = 0; /* already read in, don't modify type */
840 }
841 else
842 {
843 /* Nope, so read it in and store it away. */
844 if (dn_bufp->dblock.kind == DNTT_TYPE_FUNCTION ||
845 dn_bufp->dblock.kind == DNTT_TYPE_MEMFUNC)
846 type1 = lookup_function_type (hpread_type_lookup (dn_bufp->dfunc.retval,
847 objfile));
848 else if (dn_bufp->dblock.kind == DNTT_TYPE_FUNCTYPE)
849 type1 = lookup_function_type (hpread_type_lookup (dn_bufp->dfunctype.retval,
850 objfile));
851 else /* expect DNTT_TYPE_FUNC_TEMPLATE */
852 type1 = lookup_function_type (hpread_type_lookup (dn_bufp->dfunc_template.retval,
853 objfile));
854 memcpy ((char *) type, (char *) type1, sizeof (struct type));
855
856 /* Mark it -- in the middle of processing */
857 TYPE_FLAGS (type) |= TYPE_FLAG_INCOMPLETE;
858 }
859
860 /* Now examine each parameter noting its type, location, and a
861 wealth of other information. */
862 if (dn_bufp->dblock.kind == DNTT_TYPE_FUNCTION ||
863 dn_bufp->dblock.kind == DNTT_TYPE_MEMFUNC)
864 param = dn_bufp->dfunc.firstparam;
865 else if (dn_bufp->dblock.kind == DNTT_TYPE_FUNCTYPE)
866 param = dn_bufp->dfunctype.firstparam;
867 else /* expect DNTT_TYPE_FUNC_TEMPLATE */
868 param = dn_bufp->dfunc_template.firstparam;
869 while (param.word && param.word != DNTTNIL)
870 {
871 paramp = hpread_get_lntt (param.dnttp.index, objfile);
872 nsyms++;
873 param = paramp->dfparam.nextparam;
874
875 /* Get the name. */
876 name = VT (objfile) + paramp->dfparam.name;
877 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
878 sizeof (struct symbol));
879 (void) memset (sym, 0, sizeof (struct symbol));
880 SYMBOL_NAME (sym) = obsavestring (name, strlen (name),
881 &objfile->symbol_obstack);
882
883 /* Figure out where it lives. */
884 if (paramp->dfparam.regparam)
885 SYMBOL_CLASS (sym) = LOC_REGPARM;
886 else if (paramp->dfparam.indirect)
887 SYMBOL_CLASS (sym) = LOC_REF_ARG;
888 else
889 SYMBOL_CLASS (sym) = LOC_ARG;
890 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
891 if (paramp->dfparam.copyparam)
892 {
893 SYMBOL_VALUE (sym) = paramp->dfparam.location;
894 #ifdef HPREAD_ADJUST_STACK_ADDRESS
895 SYMBOL_VALUE (sym)
896 += HPREAD_ADJUST_STACK_ADDRESS (CURRENT_FUNCTION_VALUE (objfile));
897 #endif
898 /* This is likely a pass-by-invisible reference parameter,
899 Hack on the symbol class to make GDB happy. */
900 /* ??rehrauer: This appears to be broken w/r/t to passing
901 C values of type float and struct. Perhaps this ought
902 to be highighted as a special case, but for now, just
903 allowing these to be LOC_ARGs seems to work fine.
904 */
905 #if 0
906 SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR;
907 #endif
908 }
909 else
910 SYMBOL_VALUE (sym) = paramp->dfparam.location;
911
912 /* Get its type. */
913 SYMBOL_TYPE (sym) = hpread_type_lookup (paramp->dfparam.type, objfile);
914 /* Add it to the symbol list. */
915 /* Note 1 (RT) At the moment, add_symbol_to_list() is also being
916 * called on FPARAM symbols from the process_one_debug_symbol()
917 * level... so parameters are getting added twice! (this shows
918 * up in the symbol dump you get from "maint print symbols ...").
919 * Note 2 (RT) I took out the processing of FPARAM from the
920 * process_one_debug_symbol() level, so at the moment parameters are only
921 * being processed here. This seems to have no ill effect.
922 */
923 /* Note 3 (pai/1997-08-11) I removed the add_symbol_to_list() which put
924 each fparam on the local_symbols list from here. Now we use the
925 local_list to which fparams are added below, and set the param_symbols
926 global to point to that at the end of this routine. */
927 /* elz: I added this new list of symbols which is local to the function.
928 this list is the one which is actually used to build the type for the
929 function rather than the gloabal list pointed to by symlist.
930 Using a global list to keep track of the parameters is wrong, because
931 this function is called recursively if one parameter happend to be
932 a function itself with more parameters in it. Adding parameters to the
933 same global symbol list would not work!
934 Actually it did work in case of cc compiled programs where you do
935 not check the parameter lists of the arguments. */
936 add_symbol_to_list (sym, &local_list);
937
938 }
939
940 /* If type was read in earlier, don't bother with modifying
941 the type struct */
942 if (!record_args)
943 goto finish;
944
945 /* Note how many parameters we found. */
946 TYPE_NFIELDS (type) = nsyms;
947 TYPE_FIELDS (type) = (struct field *)
948 obstack_alloc (&objfile->type_obstack,
949 sizeof (struct field) * nsyms);
950
951 /* Find the symbols for the parameters and
952 use them to fill parameter-type information into the function-type.
953 The parameter symbols can be found in the local_list that we just put them on. */
954 /* Note that we preserve the order of the parameters, so
955 that in something like "enum {FOO, LAST_THING=FOO}" we print
956 FOO, not LAST_THING. */
957
958 /* get the parameters types from the local list not the global list
959 so that the type can be correctly constructed for functions which
960 have function as parameters */
961 for (syms = local_list, n = 0; syms; syms = syms->next)
962 {
963 int j = 0;
964 for (j = 0; j < syms->nsyms; j++, n++)
965 {
966 struct symbol *xsym = syms->symbol[j];
967 TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
968 TYPE_FIELD_TYPE (type, n) = SYMBOL_TYPE (xsym);
969 TYPE_FIELD_ARTIFICIAL (type, n) = 0;
970 TYPE_FIELD_BITSIZE (type, n) = 0;
971 }
972 }
973 /* Mark it as having been processed */
974 TYPE_FLAGS (type) &= ~(TYPE_FLAG_INCOMPLETE);
975
976 /* Check whether we need to fix-up a class type with this function's type */
977 if (fixup_class && (fixup_method == type))
978 {
979 fixup_class_method_type (fixup_class, fixup_method, objfile);
980 fixup_class = NULL;
981 fixup_method = NULL;
982 }
983
984 /* Set the param list of this level of the context stack
985 to our local list. Do this only if this function was
986 called for creating a new block, and not if it was called
987 simply to get the function type. This prevents recursive
988 invocations from trashing param_symbols. */
989 finish:
990 if (newblock)
991 param_symbols = local_list;
992
993 return type;
994 }
995
996
997 /* Read and internalize a native DOC function debug symbol. */
998 /* This is almost identical to hpread_read_function_type(), except
999 * for references to dn_bufp->ddocfunc instead of db_bufp->dfunc.
1000 * Since debug information for DOC functions is more likely to be
1001 * volatile, please leave it this way.
1002 */
1003 static struct type *
1004 hpread_read_doc_function_type (dnttpointer hp_type, union dnttentry *dn_bufp,
1005 struct objfile *objfile, int newblock)
1006 {
1007 struct type *type, *type1;
1008 struct pending *syms;
1009 struct pending *local_list = NULL;
1010 int nsyms = 0;
1011 dnttpointer param;
1012 union dnttentry *paramp;
1013 char *name;
1014 long n;
1015 struct symbol *sym;
1016 int record_args = 1;
1017
1018 /* See if we've already read in this type. */
1019 type = hpread_alloc_type (hp_type, objfile);
1020 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
1021 {
1022 record_args = 0; /* already read in, don't modify type */
1023 }
1024 else
1025 {
1026 /* Nope, so read it in and store it away. */
1027 if (dn_bufp->dblock.kind == DNTT_TYPE_DOC_FUNCTION ||
1028 dn_bufp->dblock.kind == DNTT_TYPE_DOC_MEMFUNC)
1029 type1 = lookup_function_type (hpread_type_lookup (dn_bufp->ddocfunc.retval,
1030 objfile));
1031 memcpy ((char *) type, (char *) type1, sizeof (struct type));
1032
1033 /* Mark it -- in the middle of processing */
1034 TYPE_FLAGS (type) |= TYPE_FLAG_INCOMPLETE;
1035 }
1036
1037 /* Now examine each parameter noting its type, location, and a
1038 wealth of other information. */
1039 if (dn_bufp->dblock.kind == DNTT_TYPE_DOC_FUNCTION ||
1040 dn_bufp->dblock.kind == DNTT_TYPE_DOC_MEMFUNC)
1041 param = dn_bufp->ddocfunc.firstparam;
1042 while (param.word && param.word != DNTTNIL)
1043 {
1044 paramp = hpread_get_lntt (param.dnttp.index, objfile);
1045 nsyms++;
1046 param = paramp->dfparam.nextparam;
1047
1048 /* Get the name. */
1049 name = VT (objfile) + paramp->dfparam.name;
1050 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
1051 sizeof (struct symbol));
1052 (void) memset (sym, 0, sizeof (struct symbol));
1053 SYMBOL_NAME (sym) = name;
1054
1055 /* Figure out where it lives. */
1056 if (paramp->dfparam.regparam)
1057 SYMBOL_CLASS (sym) = LOC_REGPARM;
1058 else if (paramp->dfparam.indirect)
1059 SYMBOL_CLASS (sym) = LOC_REF_ARG;
1060 else
1061 SYMBOL_CLASS (sym) = LOC_ARG;
1062 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
1063 if (paramp->dfparam.copyparam)
1064 {
1065 SYMBOL_VALUE (sym) = paramp->dfparam.location;
1066 #ifdef HPREAD_ADJUST_STACK_ADDRESS
1067 SYMBOL_VALUE (sym)
1068 += HPREAD_ADJUST_STACK_ADDRESS (CURRENT_FUNCTION_VALUE (objfile));
1069 #endif
1070 /* This is likely a pass-by-invisible reference parameter,
1071 Hack on the symbol class to make GDB happy. */
1072 /* ??rehrauer: This appears to be broken w/r/t to passing
1073 C values of type float and struct. Perhaps this ought
1074 to be highighted as a special case, but for now, just
1075 allowing these to be LOC_ARGs seems to work fine.
1076 */
1077 #if 0
1078 SYMBOL_CLASS (sym) = LOC_REGPARM_ADDR;
1079 #endif
1080 }
1081 else
1082 SYMBOL_VALUE (sym) = paramp->dfparam.location;
1083
1084 /* Get its type. */
1085 SYMBOL_TYPE (sym) = hpread_type_lookup (paramp->dfparam.type, objfile);
1086 /* Add it to the symbol list. */
1087 /* Note 1 (RT) At the moment, add_symbol_to_list() is also being
1088 * called on FPARAM symbols from the process_one_debug_symbol()
1089 * level... so parameters are getting added twice! (this shows
1090 * up in the symbol dump you get from "maint print symbols ...").
1091 * Note 2 (RT) I took out the processing of FPARAM from the
1092 * process_one_debug_symbol() level, so at the moment parameters are only
1093 * being processed here. This seems to have no ill effect.
1094 */
1095 /* Note 3 (pai/1997-08-11) I removed the add_symbol_to_list() which put
1096 each fparam on the local_symbols list from here. Now we use the
1097 local_list to which fparams are added below, and set the param_symbols
1098 global to point to that at the end of this routine. */
1099
1100 /* elz: I added this new list of symbols which is local to the function.
1101 this list is the one which is actually used to build the type for the
1102 function rather than the gloabal list pointed to by symlist.
1103 Using a global list to keep track of the parameters is wrong, because
1104 this function is called recursively if one parameter happend to be
1105 a function itself with more parameters in it. Adding parameters to the
1106 same global symbol list would not work!
1107 Actually it did work in case of cc compiled programs where you do not check the
1108 parameter lists of the arguments. */
1109 add_symbol_to_list (sym, &local_list);
1110 }
1111
1112 /* If type was read in earlier, don't bother with modifying
1113 the type struct */
1114 if (!record_args)
1115 goto finish;
1116
1117 /* Note how many parameters we found. */
1118 TYPE_NFIELDS (type) = nsyms;
1119 TYPE_FIELDS (type) = (struct field *)
1120 obstack_alloc (&objfile->type_obstack,
1121 sizeof (struct field) * nsyms);
1122
1123 /* Find the symbols for the parameters and
1124 use them to fill parameter-type information into the function-type.
1125 The parameter symbols can be found in the local_list that we just put them on. */
1126 /* Note that we preserve the order of the parameters, so
1127 that in something like "enum {FOO, LAST_THING=FOO}" we print
1128 FOO, not LAST_THING. */
1129
1130 /* get the parameters types from the local list not the global list
1131 so that the type can be correctly constructed for functions which
1132 have function as parameters
1133 */
1134 for (syms = local_list, n = 0; syms; syms = syms->next)
1135 {
1136 int j = 0;
1137 for (j = 0; j < syms->nsyms; j++, n++)
1138 {
1139 struct symbol *xsym = syms->symbol[j];
1140 TYPE_FIELD_NAME (type, n) = SYMBOL_NAME (xsym);
1141 TYPE_FIELD_TYPE (type, n) = SYMBOL_TYPE (xsym);
1142 TYPE_FIELD_ARTIFICIAL (type, n) = 0;
1143 TYPE_FIELD_BITSIZE (type, n) = 0;
1144 }
1145 }
1146
1147 /* Mark it as having been processed */
1148 TYPE_FLAGS (type) &= ~(TYPE_FLAG_INCOMPLETE);
1149
1150 /* Check whether we need to fix-up a class type with this function's type */
1151 if (fixup_class && (fixup_method == type))
1152 {
1153 fixup_class_method_type (fixup_class, fixup_method, objfile);
1154 fixup_class = NULL;
1155 fixup_method = NULL;
1156 }
1157
1158 /* Set the param list of this level of the context stack
1159 to our local list. Do this only if this function was
1160 called for creating a new block, and not if it was called
1161 simply to get the function type. This prevents recursive
1162 invocations from trashing param_symbols. */
1163 finish:
1164 if (newblock)
1165 param_symbols = local_list;
1166
1167 return type;
1168 }
1169
1170
1171
1172 /* A file-level variable which keeps track of the current-template
1173 * being processed. Set in hpread_read_struct_type() while processing
1174 * a template type. Referred to in hpread_get_nth_templ_arg().
1175 * Yes, this is a kludge, but it arises from the kludge that already
1176 * exists in symtab.h, namely the fact that they encode
1177 * "template argument n" with fundamental type FT_TEMPLATE_ARG and
1178 * bitlength n. This means that deep in processing fundamental types
1179 * I need to ask the question "what template am I in the middle of?".
1180 * The alternative to stuffing a global would be to pass an argument
1181 * down the chain of calls just for this purpose.
1182 *
1183 * There may be problems handling nested templates... tough.
1184 */
1185 static struct type *current_template = NULL;
1186
1187 /* Read in and internalize a structure definition.
1188 * This same routine is called for struct, union, and class types.
1189 * Also called for templates, since they build a very similar
1190 * type entry as for class types.
1191 */
1192
1193 static struct type *
1194 hpread_read_struct_type (dnttpointer hp_type, union dnttentry *dn_bufp,
1195 struct objfile *objfile)
1196 {
1197 /* The data members get linked together into a list of struct nextfield's */
1198 struct nextfield
1199 {
1200 struct nextfield *next;
1201 struct field field;
1202 unsigned char attributes; /* store visibility and virtuality info */
1203 #define ATTR_VIRTUAL 1
1204 #define ATTR_PRIVATE 2
1205 #define ATTR_PROTECT 3
1206 };
1207
1208
1209 /* The methods get linked together into a list of struct next_fn_field's */
1210 struct next_fn_field
1211 {
1212 struct next_fn_field *next;
1213 struct fn_fieldlist field;
1214 struct fn_field fn_field;
1215 int num_fn_fields;
1216 };
1217
1218 /* The template args get linked together into a list of struct next_template's */
1219 struct next_template
1220 {
1221 struct next_template *next;
1222 struct template_arg arg;
1223 };
1224
1225 /* The template instantiations get linked together into a list of these... */
1226 struct next_instantiation
1227 {
1228 struct next_instantiation *next;
1229 struct type *t;
1230 };
1231
1232 struct type *type;
1233 struct type *baseclass;
1234 struct type *memtype;
1235 struct nextfield *list = 0, *tmp_list = 0;
1236 struct next_fn_field *fn_list = 0;
1237 struct next_fn_field *fn_p;
1238 struct next_template *t_new, *t_list = 0;
1239 struct nextfield *new;
1240 struct next_fn_field *fn_new;
1241 struct next_instantiation *i_new, *i_list = 0;
1242 int n, nfields = 0, n_fn_fields = 0, n_fn_fields_total = 0;
1243 int n_base_classes = 0, n_templ_args = 0;
1244 int ninstantiations = 0;
1245 dnttpointer field, fn_field, parent;
1246 union dnttentry *fieldp, *fn_fieldp, *parentp;
1247 int i;
1248 int static_member = 0;
1249 int const_member = 0;
1250 int volatile_member = 0;
1251 unsigned long vtbl_offset;
1252 int need_bitvectors = 0;
1253 char *method_name = NULL;
1254 char *method_alias = NULL;
1255
1256
1257 /* Is it something we've already dealt with? */
1258 type = hpread_alloc_type (hp_type, objfile);
1259 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
1260 (TYPE_CODE (type) == TYPE_CODE_UNION) ||
1261 (TYPE_CODE (type) == TYPE_CODE_CLASS) ||
1262 (TYPE_CODE (type) == TYPE_CODE_TEMPLATE))
1263 return type;
1264
1265 /* Get the basic type correct. */
1266 if (dn_bufp->dblock.kind == DNTT_TYPE_STRUCT)
1267 {
1268 TYPE_CODE (type) = TYPE_CODE_STRUCT;
1269 TYPE_LENGTH (type) = dn_bufp->dstruct.bitlength / 8;
1270 }
1271 else if (dn_bufp->dblock.kind == DNTT_TYPE_UNION)
1272 {
1273 TYPE_CODE (type) = TYPE_CODE_UNION;
1274 TYPE_LENGTH (type) = dn_bufp->dunion.bitlength / 8;
1275 }
1276 else if (dn_bufp->dblock.kind == DNTT_TYPE_CLASS)
1277 {
1278 TYPE_CODE (type) = TYPE_CODE_CLASS;
1279 TYPE_LENGTH (type) = dn_bufp->dclass.bitlength / 8;
1280
1281 /* Overrides the TYPE_CPLUS_SPECIFIC(type) with allocated memory
1282 * rather than &cplus_struct_default.
1283 */
1284 allocate_cplus_struct_type (type);
1285
1286 /* Fill in declared-type.
1287 * (The C++ compiler will emit TYPE_CODE_CLASS
1288 * for all 3 of "class", "struct"
1289 * "union", and we have to look at the "class_decl" field if we
1290 * want to know how it was really declared)
1291 */
1292 /* (0==class, 1==union, 2==struct) */
1293 TYPE_DECLARED_TYPE (type) = dn_bufp->dclass.class_decl;
1294 }
1295 else if (dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
1296 {
1297 /* Get the basic type correct. */
1298 TYPE_CODE (type) = TYPE_CODE_TEMPLATE;
1299 allocate_cplus_struct_type (type);
1300 TYPE_DECLARED_TYPE (type) = DECLARED_TYPE_TEMPLATE;
1301 }
1302 else
1303 return type;
1304
1305
1306 TYPE_FLAGS (type) &= ~TYPE_FLAG_STUB;
1307
1308 /* For classes, read the parent list.
1309 * Question (RT): Do we need to do this for templates also?
1310 */
1311 if (dn_bufp->dblock.kind == DNTT_TYPE_CLASS)
1312 {
1313
1314 /* First read the parent-list (classes from which we derive fields) */
1315 parent = dn_bufp->dclass.parentlist;
1316 while (parent.word && parent.word != DNTTNIL)
1317 {
1318 parentp = hpread_get_lntt (parent.dnttp.index, objfile);
1319
1320 /* "parentp" should point to a DNTT_TYPE_INHERITANCE record */
1321
1322 /* Get space to record the next field/data-member. */
1323 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1324 new->next = list;
1325 list = new;
1326
1327 FIELD_BITSIZE (list->field) = 0;
1328
1329 /* The "classname" field is actually a DNTT pointer to the base class */
1330 baseclass = hpread_type_lookup (parentp->dinheritance.classname,
1331 objfile);
1332 FIELD_TYPE (list->field) = baseclass;
1333
1334 list->field.name = type_name_no_tag (FIELD_TYPE (list->field));
1335
1336 list->attributes = 0;
1337
1338 /* Check for virtuality of base, and set the
1339 * offset of the base subobject within the object.
1340 * (Offset set to -1 for virtual bases (for now).)
1341 */
1342 if (parentp->dinheritance.Virtual)
1343 {
1344 B_SET (&(list->attributes), ATTR_VIRTUAL);
1345 parentp->dinheritance.offset = -1;
1346 }
1347 else
1348 FIELD_BITPOS (list->field) = parentp->dinheritance.offset;
1349
1350 /* Check visibility */
1351 switch (parentp->dinheritance.visibility)
1352 {
1353 case 1:
1354 B_SET (&(list->attributes), ATTR_PROTECT);
1355 break;
1356 case 2:
1357 B_SET (&(list->attributes), ATTR_PRIVATE);
1358 break;
1359 }
1360
1361 n_base_classes++;
1362 nfields++;
1363
1364 parent = parentp->dinheritance.next;
1365 }
1366 }
1367
1368 /* For templates, read the template argument list.
1369 * This must be done before processing the member list, because
1370 * the member list may refer back to this. E.g.:
1371 * template <class T1, class T2> class q2 {
1372 * public:
1373 * T1 a;
1374 * T2 b;
1375 * };
1376 * We need to read the argument list "T1", "T2" first.
1377 */
1378 if (dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
1379 {
1380 /* Kludge alert: This stuffs a global "current_template" which
1381 * is referred to by hpread_get_nth_templ_arg(). The global
1382 * is cleared at the end of this routine.
1383 */
1384 current_template = type;
1385
1386 /* Read in the argument list */
1387 field = dn_bufp->dtemplate.arglist;
1388 while (field.word && field.word != DNTTNIL)
1389 {
1390 /* Get this template argument */
1391 fieldp = hpread_get_lntt (field.dnttp.index, objfile);
1392 if (fieldp->dblock.kind != DNTT_TYPE_TEMPLATE_ARG)
1393 {
1394 warning ("Invalid debug info: Template argument entry is of wrong kind");
1395 break;
1396 }
1397 /* Bump the count */
1398 n_templ_args++;
1399 /* Allocate and fill in a struct next_template */
1400 t_new = (struct next_template *) alloca (sizeof (struct next_template));
1401 t_new->next = t_list;
1402 t_list = t_new;
1403 t_list->arg.name = VT (objfile) + fieldp->dtempl_arg.name;
1404 t_list->arg.type = hpread_read_templ_arg_type (field, fieldp,
1405 objfile, t_list->arg.name);
1406 /* Walk to the next template argument */
1407 field = fieldp->dtempl_arg.nextarg;
1408 }
1409 }
1410
1411 TYPE_NTEMPLATE_ARGS (type) = n_templ_args;
1412
1413 if (n_templ_args > 0)
1414 TYPE_TEMPLATE_ARGS (type) = (struct template_arg *)
1415 obstack_alloc (&objfile->type_obstack, sizeof (struct template_arg) * n_templ_args);
1416 for (n = n_templ_args; t_list; t_list = t_list->next)
1417 {
1418 n -= 1;
1419 TYPE_TEMPLATE_ARG (type, n) = t_list->arg;
1420 }
1421
1422 /* Next read in and internalize all the fields/members. */
1423 if (dn_bufp->dblock.kind == DNTT_TYPE_STRUCT)
1424 field = dn_bufp->dstruct.firstfield;
1425 else if (dn_bufp->dblock.kind == DNTT_TYPE_UNION)
1426 field = dn_bufp->dunion.firstfield;
1427 else if (dn_bufp->dblock.kind == DNTT_TYPE_CLASS)
1428 field = dn_bufp->dclass.memberlist;
1429 else if (dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
1430 field = dn_bufp->dtemplate.memberlist;
1431 else
1432 field.word = DNTTNIL;
1433
1434 while (field.word && field.word != DNTTNIL)
1435 {
1436 fieldp = hpread_get_lntt (field.dnttp.index, objfile);
1437
1438 /* At this point "fieldp" may point to either a DNTT_TYPE_FIELD
1439 * or a DNTT_TYPE_GENFIELD record.
1440 */
1441 vtbl_offset = 0;
1442 static_member = 0;
1443 const_member = 0;
1444 volatile_member = 0;
1445
1446 if (fieldp->dblock.kind == DNTT_TYPE_GENFIELD)
1447 {
1448
1449 /* The type will be GENFIELD if the field is a method or
1450 * a static member (or some other cases -- see below)
1451 */
1452
1453 /* Follow a link to get to the record for the field. */
1454 fn_field = fieldp->dgenfield.field;
1455 fn_fieldp = hpread_get_lntt (fn_field.dnttp.index, objfile);
1456
1457 /* Virtual funcs are indicated by a VFUNC which points to the
1458 * real entry
1459 */
1460 if (fn_fieldp->dblock.kind == DNTT_TYPE_VFUNC)
1461 {
1462 vtbl_offset = fn_fieldp->dvfunc.vtbl_offset;
1463 fn_field = fn_fieldp->dvfunc.funcptr;
1464 fn_fieldp = hpread_get_lntt (fn_field.dnttp.index, objfile);
1465 }
1466
1467 /* A function's entry may be preceded by a modifier which
1468 * labels it static/constant/volatile.
1469 */
1470 if (fn_fieldp->dblock.kind == DNTT_TYPE_MODIFIER)
1471 {
1472 static_member = fn_fieldp->dmodifier.m_static;
1473 const_member = fn_fieldp->dmodifier.m_const;
1474 volatile_member = fn_fieldp->dmodifier.m_volatile;
1475 fn_field = fn_fieldp->dmodifier.type;
1476 fn_fieldp = hpread_get_lntt (fn_field.dnttp.index, objfile);
1477 }
1478
1479 /* Check whether we have a method */
1480 if ((fn_fieldp->dblock.kind == DNTT_TYPE_MEMFUNC) ||
1481 (fn_fieldp->dblock.kind == DNTT_TYPE_FUNCTION) ||
1482 (fn_fieldp->dblock.kind == DNTT_TYPE_DOC_MEMFUNC) ||
1483 (fn_fieldp->dblock.kind == DNTT_TYPE_DOC_FUNCTION))
1484 {
1485 /* Method found */
1486
1487 short ix = 0;
1488
1489 /* Look up function type of method */
1490 memtype = hpread_type_lookup (fn_field, objfile);
1491
1492 /* Methods can be seen before classes in the SOM records.
1493 If we are processing this class because it's a parameter of a
1494 method, at this point the method's type is actually incomplete;
1495 we'll have to fix it up later; mark the class for this. */
1496
1497 if (TYPE_INCOMPLETE (memtype))
1498 {
1499 TYPE_FLAGS (type) |= TYPE_FLAG_INCOMPLETE;
1500 if (fixup_class)
1501 warning ("Two classes to fix up for method?? Type information may be incorrect for some classes.");
1502 if (fixup_method)
1503 warning ("Two methods to be fixed up at once?? Type information may be incorrect for some classes.");
1504 fixup_class = type; /* remember this class has to be fixed up */
1505 fixup_method = memtype; /* remember the method type to be used in fixup */
1506 }
1507
1508 /* HP aCC generates operator names without the "operator" keyword, and
1509 generates null strings as names for operators that are
1510 user-defined type conversions to basic types (e.g. operator int ()).
1511 So try to reconstruct name as best as possible. */
1512
1513 method_name = (char *) (VT (objfile) + fn_fieldp->dfunc.name);
1514 method_alias = (char *) (VT (objfile) + fn_fieldp->dfunc.alias);
1515
1516 if (!method_name || /* no name */
1517 !*method_name || /* or null name */
1518 cplus_mangle_opname (method_name, DMGL_ANSI)) /* or name is an operator like "<" */
1519 {
1520 char *tmp_name = cplus_demangle (method_alias, DMGL_ANSI);
1521 char *op_string = strstr (tmp_name, "operator");
1522 method_name = xmalloc (strlen (op_string) + 1); /* don't overwrite VT! */
1523 strcpy (method_name, op_string);
1524 }
1525
1526 /* First check if a method of the same name has already been seen. */
1527 fn_p = fn_list;
1528 while (fn_p)
1529 {
1530 if (STREQ (fn_p->field.name, method_name))
1531 break;
1532 fn_p = fn_p->next;
1533 }
1534
1535 /* If no such method was found, allocate a new entry in the list */
1536 if (!fn_p)
1537 {
1538 /* Get space to record this member function */
1539 /* Note: alloca used; this will disappear on routine exit */
1540 fn_new = (struct next_fn_field *) alloca (sizeof (struct next_fn_field));
1541 fn_new->next = fn_list;
1542 fn_list = fn_new;
1543
1544 /* Fill in the fields of the struct nextfield */
1545
1546 /* Record the (unmangled) method name */
1547 fn_list->field.name = method_name;
1548 /* Initial space for overloaded methods */
1549 /* Note: xmalloc is used; this will persist after this routine exits */
1550 fn_list->field.fn_fields = (struct fn_field *) xmalloc (5 * (sizeof (struct fn_field)));
1551 fn_list->field.length = 1; /* Init # of overloaded instances */
1552 fn_list->num_fn_fields = 5; /* # of entries for which space allocated */
1553 fn_p = fn_list;
1554 ix = 0; /* array index for fn_field */
1555 /* Bump the total count of the distinctly named methods */
1556 n_fn_fields++;
1557 }
1558 else
1559 /* Another overloaded instance of an already seen method name */
1560 {
1561 if (++(fn_p->field.length) > fn_p->num_fn_fields)
1562 {
1563 /* Increase space allocated for overloaded instances */
1564 fn_p->field.fn_fields
1565 = (struct fn_field *) xrealloc (fn_p->field.fn_fields,
1566 (fn_p->num_fn_fields + 5) * sizeof (struct fn_field));
1567 fn_p->num_fn_fields += 5;
1568 }
1569 ix = fn_p->field.length - 1; /* array index for fn_field */
1570 }
1571
1572 /* "physname" is intended to be the name of this overloaded instance. */
1573 if ((fn_fieldp->dfunc.language == HP_LANGUAGE_CPLUSPLUS) &&
1574 method_alias &&
1575 *method_alias) /* not a null string */
1576 fn_p->field.fn_fields[ix].physname = method_alias;
1577 else
1578 fn_p->field.fn_fields[ix].physname = method_name;
1579 /* What's expected here is the function type */
1580 /* But mark it as NULL if the method was incompletely processed
1581 We'll fix this up later when the method is fully processed */
1582 if (TYPE_INCOMPLETE (memtype))
1583 {
1584 fn_p->field.fn_fields[ix].type = NULL;
1585 fn_p->field.fn_fields[ix].args = NULL;
1586 }
1587 else
1588 {
1589 fn_p->field.fn_fields[ix].type = memtype;
1590
1591 /* The argument list */
1592 fn_p->field.fn_fields[ix].type->type_specific.arg_types =
1593 (struct type **) obstack_alloc (&objfile->type_obstack,
1594 sizeof (struct type *) * (memtype->nfields + 1));
1595 for (i = 0; i < memtype->nfields; i++)
1596 fn_p->field.fn_fields[ix].type->type_specific.arg_types[i] = memtype->fields[i].type;
1597 /* void termination */
1598 fn_p->field.fn_fields[ix].type->type_specific.arg_types[memtype->nfields] = builtin_type_void;
1599
1600 /* pai: It's not clear why this args field has to be set. Perhaps
1601 * it should be eliminated entirely. */
1602 fn_p->field.fn_fields[ix].args =
1603 (struct type **) obstack_alloc (&objfile->type_obstack,
1604 sizeof (struct type *) * (memtype->nfields + 1));
1605 for (i = 0; i < memtype->nfields; i++)
1606 fn_p->field.fn_fields[ix].args[i] = memtype->fields[i].type;
1607 /* null-terminated, unlike arg_types above e */
1608 fn_p->field.fn_fields[ix].args[memtype->nfields] = NULL;
1609 }
1610 /* For virtual functions, fill in the voffset field with the
1611 * virtual table offset. (This is just copied over from the
1612 * SOM record; not sure if it is what GDB expects here...).
1613 * But if the function is a static method, set it to 1.
1614 *
1615 * Note that we have to add 1 because 1 indicates a static
1616 * method, and 0 indicates a non-static, non-virtual method */
1617
1618 if (static_member)
1619 fn_p->field.fn_fields[ix].voffset = VOFFSET_STATIC;
1620 else
1621 fn_p->field.fn_fields[ix].voffset = vtbl_offset ? vtbl_offset + 1 : 0;
1622
1623 /* Also fill in the fcontext field with the current
1624 * class. (The latter isn't quite right: should be the baseclass
1625 * that defines the virtual function... Note we do have
1626 * a variable "baseclass" that we could stuff into the fcontext
1627 * field, but "baseclass" isn't necessarily right either,
1628 * since the virtual function could have been defined more
1629 * than one level up).
1630 */
1631
1632 if (vtbl_offset != 0)
1633 fn_p->field.fn_fields[ix].fcontext = type;
1634 else
1635 fn_p->field.fn_fields[ix].fcontext = NULL;
1636
1637 /* Other random fields pertaining to this method */
1638 fn_p->field.fn_fields[ix].is_const = const_member;
1639 fn_p->field.fn_fields[ix].is_volatile = volatile_member; /* ?? */
1640 switch (fieldp->dgenfield.visibility)
1641 {
1642 case 1:
1643 fn_p->field.fn_fields[ix].is_protected = 1;
1644 fn_p->field.fn_fields[ix].is_private = 0;
1645 break;
1646 case 2:
1647 fn_p->field.fn_fields[ix].is_protected = 0;
1648 fn_p->field.fn_fields[ix].is_private = 1;
1649 break;
1650 default: /* public */
1651 fn_p->field.fn_fields[ix].is_protected = 0;
1652 fn_p->field.fn_fields[ix].is_private = 0;
1653 }
1654 fn_p->field.fn_fields[ix].is_stub = 0;
1655
1656 /* HP aCC emits both MEMFUNC and FUNCTION entries for a method;
1657 if the class points to the FUNCTION, there is usually separate
1658 code for the method; but if we have a MEMFUNC, the method has
1659 been inlined (and there is usually no FUNCTION entry)
1660 FIXME Not sure if this test is accurate. pai/1997-08-22 */
1661 if ((fn_fieldp->dblock.kind == DNTT_TYPE_MEMFUNC) ||
1662 (fn_fieldp->dblock.kind == DNTT_TYPE_DOC_MEMFUNC))
1663 fn_p->field.fn_fields[ix].is_inlined = 1;
1664 else
1665 fn_p->field.fn_fields[ix].is_inlined = 0;
1666
1667 fn_p->field.fn_fields[ix].dummy = 0;
1668
1669 /* Bump the total count of the member functions */
1670 n_fn_fields_total++;
1671
1672 }
1673 else if (fn_fieldp->dblock.kind == DNTT_TYPE_SVAR)
1674 {
1675 /* This case is for static data members of classes */
1676
1677 /* pai:: FIXME -- check that "staticmem" bit is set */
1678
1679 /* Get space to record this static member */
1680 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1681 new->next = list;
1682 list = new;
1683
1684 list->field.name = VT (objfile) + fn_fieldp->dsvar.name;
1685 FIELD_BITSIZE (list->field) = -1; /* indicates static member */
1686 SET_FIELD_PHYSNAME (list->field, 0); /* initialize to empty */
1687 memtype = hpread_type_lookup (fn_fieldp->dsvar.type, objfile);
1688
1689 FIELD_TYPE (list->field) = memtype;
1690 list->attributes = 0;
1691 switch (fieldp->dgenfield.visibility)
1692 {
1693 case 1:
1694 B_SET (&(list->attributes), ATTR_PROTECT);
1695 break;
1696 case 2:
1697 B_SET (&(list->attributes), ATTR_PRIVATE);
1698 break;
1699 }
1700 nfields++;
1701 }
1702
1703 else if (fn_fieldp->dblock.kind == DNTT_TYPE_FIELD)
1704 {
1705 /* FIELDs follow GENFIELDs for fields of anonymous unions.
1706 Code below is replicated from the case for FIELDs further
1707 below, except that fieldp is replaced by fn_fieldp */
1708 if (!fn_fieldp->dfield.a_union)
1709 warning ("Debug info inconsistent: FIELD of anonymous union doesn't have a_union bit set");
1710 /* Get space to record the next field/data-member. */
1711 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1712 new->next = list;
1713 list = new;
1714
1715 list->field.name = VT (objfile) + fn_fieldp->dfield.name;
1716 FIELD_BITPOS (list->field) = fn_fieldp->dfield.bitoffset;
1717 if (fn_fieldp->dfield.bitlength % 8)
1718 list->field.bitsize = fn_fieldp->dfield.bitlength;
1719 else
1720 list->field.bitsize = 0;
1721
1722 memtype = hpread_type_lookup (fn_fieldp->dfield.type, objfile);
1723 list->field.type = memtype;
1724 list->attributes = 0;
1725 switch (fn_fieldp->dfield.visibility)
1726 {
1727 case 1:
1728 B_SET (&(list->attributes), ATTR_PROTECT);
1729 break;
1730 case 2:
1731 B_SET (&(list->attributes), ATTR_PRIVATE);
1732 break;
1733 }
1734 nfields++;
1735 }
1736 else if (fn_fieldp->dblock.kind == DNTT_TYPE_SVAR)
1737 {
1738 /* Field of anonymous union; union is not inside a class */
1739 if (!fn_fieldp->dsvar.a_union)
1740 warning ("Debug info inconsistent: SVAR field in anonymous union doesn't have a_union bit set");
1741 /* Get space to record the next field/data-member. */
1742 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1743 new->next = list;
1744 list = new;
1745
1746 list->field.name = VT (objfile) + fn_fieldp->dsvar.name;
1747 FIELD_BITPOS (list->field) = 0; /* FIXME is this always true? */
1748 FIELD_BITSIZE (list->field) = 0; /* use length from type */
1749 memtype = hpread_type_lookup (fn_fieldp->dsvar.type, objfile);
1750 list->field.type = memtype;
1751 list->attributes = 0;
1752 /* No info to set visibility -- always public */
1753 nfields++;
1754 }
1755 else if (fn_fieldp->dblock.kind == DNTT_TYPE_DVAR)
1756 {
1757 /* Field of anonymous union; union is not inside a class */
1758 if (!fn_fieldp->ddvar.a_union)
1759 warning ("Debug info inconsistent: DVAR field in anonymous union doesn't have a_union bit set");
1760 /* Get space to record the next field/data-member. */
1761 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1762 new->next = list;
1763 list = new;
1764
1765 list->field.name = VT (objfile) + fn_fieldp->ddvar.name;
1766 FIELD_BITPOS (list->field) = 0; /* FIXME is this always true? */
1767 FIELD_BITSIZE (list->field) = 0; /* use length from type */
1768 memtype = hpread_type_lookup (fn_fieldp->ddvar.type, objfile);
1769 list->field.type = memtype;
1770 list->attributes = 0;
1771 /* No info to set visibility -- always public */
1772 nfields++;
1773 }
1774 else
1775 { /* Not a method, nor a static data member, nor an anon union field */
1776
1777 /* This case is for miscellaneous type entries (local enums,
1778 local function templates, etc.) that can be present
1779 inside a class. */
1780
1781 /* Enums -- will be handled by other code that takes care
1782 of DNTT_TYPE_ENUM; here we see only DNTT_TYPE_MEMENUM so
1783 it's not clear we could have handled them here at all. */
1784 /* FUNC_TEMPLATE: is handled by other code (?). */
1785 /* MEMACCESS: modified access for inherited member. Not
1786 sure what to do with this, ignoriing it at present. */
1787
1788 /* What other entries can appear following a GENFIELD which
1789 we do not handle above? (MODIFIER, VFUNC handled above.) */
1790
1791 if ((fn_fieldp->dblock.kind != DNTT_TYPE_MEMACCESS) &&
1792 (fn_fieldp->dblock.kind != DNTT_TYPE_MEMENUM) &&
1793 (fn_fieldp->dblock.kind != DNTT_TYPE_FUNC_TEMPLATE))
1794 warning ("Internal error: Unexpected debug record kind %d found following DNTT_GENFIELD",
1795 fn_fieldp->dblock.kind);
1796 }
1797 /* walk to the next FIELD or GENFIELD */
1798 field = fieldp->dgenfield.nextfield;
1799
1800 }
1801 else if (fieldp->dblock.kind == DNTT_TYPE_FIELD)
1802 {
1803
1804 /* Ordinary structure/union/class field */
1805 struct type *anon_union_type;
1806
1807 /* Get space to record the next field/data-member. */
1808 new = (struct nextfield *) alloca (sizeof (struct nextfield));
1809 new->next = list;
1810 list = new;
1811
1812 list->field.name = VT (objfile) + fieldp->dfield.name;
1813
1814
1815 /* A FIELD by itself (without a GENFIELD) can also be a static member */
1816 if (fieldp->dfield.staticmem)
1817 {
1818 FIELD_BITPOS (list->field) = -1;
1819 FIELD_BITSIZE (list->field) = 0;
1820 }
1821 else
1822 /* Non-static data member */
1823 {
1824 FIELD_BITPOS (list->field) = fieldp->dfield.bitoffset;
1825 if (fieldp->dfield.bitlength % 8)
1826 FIELD_BITSIZE (list->field) = fieldp->dfield.bitlength;
1827 else
1828 FIELD_BITSIZE (list->field) = 0;
1829 }
1830
1831 memtype = hpread_type_lookup (fieldp->dfield.type, objfile);
1832 FIELD_TYPE (list->field) = memtype;
1833 list->attributes = 0;
1834 switch (fieldp->dfield.visibility)
1835 {
1836 case 1:
1837 B_SET (&(list->attributes), ATTR_PROTECT);
1838 break;
1839 case 2:
1840 B_SET (&(list->attributes), ATTR_PRIVATE);
1841 break;
1842 }
1843 nfields++;
1844
1845
1846 /* Note 1: First, we have to check if the current field is an anonymous
1847 union. If it is, then *its* fields are threaded along in the
1848 nextfield chain. :-( This was supposed to help debuggers, but is
1849 really just a nuisance since we deal with anonymous unions anyway by
1850 checking that the name is null. So anyway, we skip over the fields
1851 of the anonymous union. pai/1997-08-22 */
1852 /* Note 2: In addition, the bitoffsets for the fields of the anon union
1853 are relative to the enclosing struct, *NOT* relative to the anon
1854 union! This is an even bigger nuisance -- we have to go in and munge
1855 the anon union's type information appropriately. pai/1997-08-22 */
1856
1857 /* Both tasks noted above are done by a separate function. This takes us
1858 to the next FIELD or GENFIELD, skipping anon unions, and recursively
1859 processing intermediate types. */
1860 field = hpread_get_next_skip_over_anon_unions (1, field, &fieldp, objfile);
1861
1862 }
1863 else
1864 {
1865 /* neither field nor genfield ?? is this possible?? */
1866 /* pai:: FIXME walk to the next -- how? */
1867 warning ("Internal error: unexpected DNTT kind %d encountered as field of struct",
1868 fieldp->dblock.kind);
1869 warning ("Skipping remaining fields of struct");
1870 break; /* get out of loop of fields */
1871 }
1872 }
1873
1874 /* If it's a template, read in the instantiation list */
1875 if (dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
1876 {
1877 ninstantiations = 0;
1878 field = dn_bufp->dtemplate.expansions;
1879 while (field.word && field.word != DNTTNIL)
1880 {
1881 fieldp = hpread_get_lntt (field.dnttp.index, objfile);
1882
1883 /* The expansions or nextexp should point to a tagdef */
1884 if (fieldp->dblock.kind != DNTT_TYPE_TAGDEF)
1885 break;
1886
1887 i_new = (struct next_instantiation *) alloca (sizeof (struct next_instantiation));
1888 i_new->next = i_list;
1889 i_list = i_new;
1890 i_list->t = hpread_type_lookup (field, objfile);
1891 ninstantiations++;
1892
1893 /* And the "type" field of that should point to a class */
1894 field = fieldp->dtag.type;
1895 fieldp = hpread_get_lntt (field.dnttp.index, objfile);
1896 if (fieldp->dblock.kind != DNTT_TYPE_CLASS)
1897 break;
1898
1899 /* Get the next expansion */
1900 field = fieldp->dclass.nextexp;
1901 }
1902 }
1903 TYPE_NINSTANTIATIONS (type) = ninstantiations;
1904 if (ninstantiations > 0)
1905 TYPE_INSTANTIATIONS (type) = (struct type **)
1906 obstack_alloc (&objfile->type_obstack, sizeof (struct type *) * ninstantiations);
1907 for (n = ninstantiations; i_list; i_list = i_list->next)
1908 {
1909 n -= 1;
1910 TYPE_INSTANTIATION (type, n) = i_list->t;
1911 }
1912
1913
1914 /* Copy the field-list to GDB's symbol table */
1915 TYPE_NFIELDS (type) = nfields;
1916 TYPE_N_BASECLASSES (type) = n_base_classes;
1917 TYPE_FIELDS (type) = (struct field *)
1918 obstack_alloc (&objfile->type_obstack, sizeof (struct field) * nfields);
1919 /* Copy the saved-up fields into the field vector. */
1920 for (n = nfields, tmp_list = list; tmp_list; tmp_list = tmp_list->next)
1921 {
1922 n -= 1;
1923 TYPE_FIELD (type, n) = tmp_list->field;
1924 }
1925
1926 /* Copy the "function-field-list" (i.e., the list of member
1927 * functions in the class) to GDB's symbol table
1928 */
1929 TYPE_NFN_FIELDS (type) = n_fn_fields;
1930 TYPE_NFN_FIELDS_TOTAL (type) = n_fn_fields_total;
1931 TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
1932 obstack_alloc (&objfile->type_obstack, sizeof (struct fn_fieldlist) * n_fn_fields);
1933 for (n = n_fn_fields; fn_list; fn_list = fn_list->next)
1934 {
1935 n -= 1;
1936 TYPE_FN_FIELDLIST (type, n) = fn_list->field;
1937 }
1938
1939 /* pai:: FIXME -- perhaps each bitvector should be created individually */
1940 for (n = nfields, tmp_list = list; tmp_list; tmp_list = tmp_list->next)
1941 {
1942 n -= 1;
1943 if (tmp_list->attributes)
1944 {
1945 need_bitvectors = 1;
1946 break;
1947 }
1948 }
1949
1950 if (need_bitvectors)
1951 {
1952 /* pai:: this step probably redundant */
1953 ALLOCATE_CPLUS_STRUCT_TYPE (type);
1954
1955 TYPE_FIELD_VIRTUAL_BITS (type) =
1956 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1957 B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), nfields);
1958
1959 TYPE_FIELD_PRIVATE_BITS (type) =
1960 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1961 B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
1962
1963 TYPE_FIELD_PROTECTED_BITS (type) =
1964 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1965 B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
1966
1967 /* this field vector isn't actually used with HP aCC */
1968 TYPE_FIELD_IGNORE_BITS (type) =
1969 (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
1970 B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
1971
1972 while (nfields-- > 0)
1973 {
1974 if (B_TST (&(list->attributes), ATTR_VIRTUAL))
1975 SET_TYPE_FIELD_VIRTUAL (type, nfields);
1976 if (B_TST (&(list->attributes), ATTR_PRIVATE))
1977 SET_TYPE_FIELD_PRIVATE (type, nfields);
1978 if (B_TST (&(list->attributes), ATTR_PROTECT))
1979 SET_TYPE_FIELD_PROTECTED (type, nfields);
1980
1981 list = list->next;
1982 }
1983 }
1984 else
1985 {
1986 TYPE_FIELD_VIRTUAL_BITS (type) = NULL;
1987 TYPE_FIELD_PROTECTED_BITS (type) = NULL;
1988 TYPE_FIELD_PRIVATE_BITS (type) = NULL;
1989 }
1990
1991 if (has_vtable (type))
1992 {
1993 /* Allocate space for class runtime information */
1994 TYPE_RUNTIME_PTR (type) = (struct runtime_info *) xmalloc (sizeof (struct runtime_info));
1995 /* Set flag for vtable */
1996 TYPE_VTABLE (type) = 1;
1997 /* The first non-virtual base class with a vtable. */
1998 TYPE_PRIMARY_BASE (type) = primary_base_class (type);
1999 /* The virtual base list. */
2000 TYPE_VIRTUAL_BASE_LIST (type) = virtual_base_list (type);
2001 }
2002 else
2003 TYPE_RUNTIME_PTR (type) = NULL;
2004
2005 /* If this is a local type (C++ - declared inside a function), record file name & line # */
2006 if (hpread_get_scope_depth (dn_bufp, objfile, 1 /* no need for real depth */ ))
2007 {
2008 TYPE_LOCALTYPE_PTR (type) = (struct local_type_info *) xmalloc (sizeof (struct local_type_info));
2009 TYPE_LOCALTYPE_FILE (type) = (char *) xmalloc (strlen (current_subfile->name) + 1);
2010 strcpy (TYPE_LOCALTYPE_FILE (type), current_subfile->name);
2011 if (current_subfile->line_vector && (current_subfile->line_vector->nitems > 0))
2012 TYPE_LOCALTYPE_LINE (type) = current_subfile->line_vector->item[current_subfile->line_vector->nitems - 1].line;
2013 else
2014 TYPE_LOCALTYPE_LINE (type) = 0;
2015 }
2016 else
2017 TYPE_LOCALTYPE_PTR (type) = NULL;
2018
2019 /* Clear the global saying what template we are in the middle of processing */
2020 current_template = NULL;
2021
2022 /* Fix up any cv-qualified versions of this type. */
2023 finish_cv_type (type);
2024
2025 return type;
2026 }
2027
2028 /* Adjust the physnames for each static member of a struct
2029 or class type to be something like "A::x"; then various
2030 other pieces of code that do a lookup_symbol on the phyname
2031 work correctly.
2032 TYPE is a pointer to the struct/class type
2033 NAME is a char * (string) which is the class/struct name
2034 Void return */
2035
2036 static void
2037 fix_static_member_physnames (struct type *type, char *class_name,
2038 struct objfile *objfile)
2039 {
2040 int i;
2041
2042 /* We fix the member names only for classes or structs */
2043 if (TYPE_CODE (type) != TYPE_CODE_STRUCT)
2044 return;
2045
2046 for (i = 0; i < TYPE_NFIELDS (type); i++)
2047 if (TYPE_FIELD_STATIC (type, i))
2048 {
2049 if (TYPE_FIELD_STATIC_PHYSNAME (type, i))
2050 return; /* physnames are already set */
2051
2052 SET_FIELD_PHYSNAME (type->fields[i],
2053 obstack_alloc (&objfile->type_obstack,
2054 strlen (class_name) + strlen (TYPE_FIELD_NAME (type, i)) + 3));
2055 strcpy (TYPE_FIELD_STATIC_PHYSNAME (type, i), class_name);
2056 strcat (TYPE_FIELD_STATIC_PHYSNAME (type, i), "::");
2057 strcat (TYPE_FIELD_STATIC_PHYSNAME (type, i), TYPE_FIELD_NAME (type, i));
2058 }
2059 }
2060
2061 /* Fix-up the type structure for a CLASS so that the type entry
2062 * for a method (previously marked with a null type in hpread_read_struct_type()
2063 * is set correctly to METHOD.
2064 * OBJFILE is as for other such functions.
2065 * Void return. */
2066
2067 static void
2068 fixup_class_method_type (struct type *class, struct type *method,
2069 struct objfile *objfile)
2070 {
2071 int i, j, k;
2072
2073 if (!class || !method || !objfile)
2074 return;
2075
2076 /* Only for types that have methods */
2077 if ((TYPE_CODE (class) != TYPE_CODE_CLASS) &&
2078 (TYPE_CODE (class) != TYPE_CODE_UNION))
2079 return;
2080
2081 /* Loop over all methods and find the one marked with a NULL type */
2082 for (i = 0; i < TYPE_NFN_FIELDS (class); i++)
2083 for (j = 0; j < TYPE_FN_FIELDLIST_LENGTH (class, i); j++)
2084 if (TYPE_FN_FIELD_TYPE (TYPE_FN_FIELDLIST1 (class, i), j) == NULL)
2085 {
2086 /* Set the method type */
2087 TYPE_FN_FIELD_TYPE (TYPE_FN_FIELDLIST1 (class, i), j) = method;
2088 /* The argument list */
2089 (TYPE_FN_FIELD_TYPE (TYPE_FN_FIELDLIST1 (class, i), j))->type_specific.arg_types
2090 = (struct type **) obstack_alloc (&objfile->type_obstack,
2091 sizeof (struct type *) * (method->nfields + 1));
2092 for (k = 0; k < method->nfields; k++)
2093 (TYPE_FN_FIELD_TYPE (TYPE_FN_FIELDLIST1 (class, i), j))->type_specific.arg_types[k] = method->fields[k].type;
2094 /* void termination */
2095 (TYPE_FN_FIELD_TYPE (TYPE_FN_FIELDLIST1 (class, i), j))->type_specific.arg_types[method->nfields] = builtin_type_void;
2096
2097 /* pai: It's not clear why this args field has to be set. Perhaps
2098 * it should be eliminated entirely. */
2099 (TYPE_FN_FIELD (TYPE_FN_FIELDLIST1 (class, i), j)).args
2100 = (struct type **) obstack_alloc (&objfile->type_obstack,
2101 sizeof (struct type *) * (method->nfields + 1));
2102 for (k = 0; k < method->nfields; k++)
2103 (TYPE_FN_FIELD (TYPE_FN_FIELDLIST1 (class, i), j)).args[k] = method->fields[k].type;
2104 /* null-terminated, unlike arg_types above */
2105 (TYPE_FN_FIELD (TYPE_FN_FIELDLIST1 (class, i), j)).args[method->nfields] = NULL;
2106
2107 /* Break out of both loops -- only one method to fix up in a class */
2108 goto finish;
2109 }
2110
2111 finish:
2112 TYPE_FLAGS (class) &= ~TYPE_FLAG_INCOMPLETE;
2113 }
2114
2115
2116 /* If we're in the middle of processing a template, get a pointer
2117 * to the Nth template argument.
2118 * An example may make this clearer:
2119 * template <class T1, class T2> class q2 {
2120 * public:
2121 * T1 a;
2122 * T2 b;
2123 * };
2124 * The type for "a" will be "first template arg" and
2125 * the type for "b" will be "second template arg".
2126 * We need to look these up in order to fill in "a" and "b"'s type.
2127 * This is called from hpread_type_lookup().
2128 */
2129 static struct type *
2130 hpread_get_nth_template_arg (struct objfile *objfile, int n)
2131 {
2132 if (current_template != NULL)
2133 return TYPE_TEMPLATE_ARG (current_template, n).type;
2134 else
2135 return lookup_fundamental_type (objfile, FT_TEMPLATE_ARG);
2136 }
2137
2138 /* Read in and internalize a TEMPL_ARG (template arg) symbol. */
2139
2140 static struct type *
2141 hpread_read_templ_arg_type (dnttpointer hp_type, union dnttentry *dn_bufp,
2142 struct objfile *objfile, char *name)
2143 {
2144 struct type *type;
2145
2146 /* See if it's something we've already deal with. */
2147 type = hpread_alloc_type (hp_type, objfile);
2148 if (TYPE_CODE (type) == TYPE_CODE_TEMPLATE_ARG)
2149 return type;
2150
2151 /* Nope. Fill in the appropriate fields. */
2152 TYPE_CODE (type) = TYPE_CODE_TEMPLATE_ARG;
2153 TYPE_LENGTH (type) = 0;
2154 TYPE_NFIELDS (type) = 0;
2155 TYPE_NAME (type) = name;
2156 return type;
2157 }
2158
2159 /* Read in and internalize a set debug symbol. */
2160
2161 static struct type *
2162 hpread_read_set_type (dnttpointer hp_type, union dnttentry *dn_bufp,
2163 struct objfile *objfile)
2164 {
2165 struct type *type;
2166
2167 /* See if it's something we've already deal with. */
2168 type = hpread_alloc_type (hp_type, objfile);
2169 if (TYPE_CODE (type) == TYPE_CODE_SET)
2170 return type;
2171
2172 /* Nope. Fill in the appropriate fields. */
2173 TYPE_CODE (type) = TYPE_CODE_SET;
2174 TYPE_LENGTH (type) = dn_bufp->dset.bitlength / 8;
2175 TYPE_NFIELDS (type) = 0;
2176 TYPE_TARGET_TYPE (type) = hpread_type_lookup (dn_bufp->dset.subtype,
2177 objfile);
2178 return type;
2179 }
2180
2181 /* Read in and internalize an array debug symbol. */
2182
2183 static struct type *
2184 hpread_read_array_type (dnttpointer hp_type, union dnttentry *dn_bufp,
2185 struct objfile *objfile)
2186 {
2187 struct type *type;
2188
2189 /* Allocate an array type symbol.
2190 * Why no check for already-read here, like in the other
2191 * hpread_read_xxx_type routines? Because it kept us
2192 * from properly determining the size of the array!
2193 */
2194 type = hpread_alloc_type (hp_type, objfile);
2195
2196 TYPE_CODE (type) = TYPE_CODE_ARRAY;
2197
2198 /* Although the hp-symtab.h does not *require* this to be the case,
2199 * GDB is assuming that "arrayisbytes" and "elemisbytes" be consistent.
2200 * I.e., express both array-length and element-length in bits,
2201 * or express both array-length and element-length in bytes.
2202 */
2203 if (!((dn_bufp->darray.arrayisbytes && dn_bufp->darray.elemisbytes) ||
2204 (!dn_bufp->darray.arrayisbytes && !dn_bufp->darray.elemisbytes)))
2205 {
2206 warning ("error in hpread_array_type.\n");
2207 return NULL;
2208 }
2209 else if (dn_bufp->darray.arraylength == 0x7fffffff)
2210 {
2211 /* The HP debug format represents char foo[]; as an array with
2212 * length 0x7fffffff. Internally GDB wants to represent this
2213 * as an array of length zero.
2214 */
2215 TYPE_LENGTH (type) = 0;
2216 }
2217 else if (dn_bufp->darray.arrayisbytes)
2218 TYPE_LENGTH (type) = dn_bufp->darray.arraylength;
2219 else /* arraylength is in bits */
2220 TYPE_LENGTH (type) = dn_bufp->darray.arraylength / 8;
2221
2222 TYPE_TARGET_TYPE (type) = hpread_type_lookup (dn_bufp->darray.elemtype,
2223 objfile);
2224
2225 /* The one "field" is used to store the subscript type */
2226 /* Since C and C++ multi-dimensional arrays are simply represented
2227 * as: array of array of ..., we only need one subscript-type
2228 * per array. This subscript type is typically a subrange of integer.
2229 * If this gets extended to support languages like Pascal, then
2230 * we need to fix this to represent multi-dimensional arrays properly.
2231 */
2232 TYPE_NFIELDS (type) = 1;
2233 TYPE_FIELDS (type) = (struct field *)
2234 obstack_alloc (&objfile->type_obstack, sizeof (struct field));
2235 TYPE_FIELD_TYPE (type, 0) = hpread_type_lookup (dn_bufp->darray.indextype,
2236 objfile);
2237 return type;
2238 }
2239
2240 /* Read in and internalize a subrange debug symbol. */
2241 static struct type *
2242 hpread_read_subrange_type (dnttpointer hp_type, union dnttentry *dn_bufp,
2243 struct objfile *objfile)
2244 {
2245 struct type *type;
2246
2247 /* Is it something we've already dealt with. */
2248 type = hpread_alloc_type (hp_type, objfile);
2249 if (TYPE_CODE (type) == TYPE_CODE_RANGE)
2250 return type;
2251
2252 /* Nope, internalize it. */
2253 TYPE_CODE (type) = TYPE_CODE_RANGE;
2254 TYPE_LENGTH (type) = dn_bufp->dsubr.bitlength / 8;
2255 TYPE_NFIELDS (type) = 2;
2256 TYPE_FIELDS (type)
2257 = (struct field *) obstack_alloc (&objfile->type_obstack,
2258 2 * sizeof (struct field));
2259
2260 if (dn_bufp->dsubr.dyn_low)
2261 TYPE_FIELD_BITPOS (type, 0) = 0;
2262 else
2263 TYPE_FIELD_BITPOS (type, 0) = dn_bufp->dsubr.lowbound;
2264
2265 if (dn_bufp->dsubr.dyn_high)
2266 TYPE_FIELD_BITPOS (type, 1) = -1;
2267 else
2268 TYPE_FIELD_BITPOS (type, 1) = dn_bufp->dsubr.highbound;
2269 TYPE_TARGET_TYPE (type) = hpread_type_lookup (dn_bufp->dsubr.subtype,
2270 objfile);
2271 return type;
2272 }
2273
2274 /* struct type * hpread_type_lookup(hp_type, objfile)
2275 * Arguments:
2276 * hp_type: A pointer into the DNTT specifying what type we
2277 * are about to "look up"., or else [for fundamental types
2278 * like int, float, ...] an "immediate" structure describing
2279 * the type.
2280 * objfile: ?
2281 * Return value: A pointer to a "struct type" (representation of a
2282 * type in GDB's internal symbol table - see gdbtypes.h)
2283 * Routine description:
2284 * There are a variety of places when scanning the DNTT when we
2285 * need to interpret a "type" field. The simplest and most basic
2286 * example is when we're processing the symbol table record
2287 * for a data symbol (a SVAR or DVAR record). That has
2288 * a "type" field specifying the type of the data symbol. That
2289 * "type" field is either an "immediate" type specification (for the
2290 * fundamental types) or a DNTT pointer (for more complicated types).
2291 * For the more complicated types, we may or may not have already
2292 * processed the pointed-to type. (Multiple data symbols can of course
2293 * share the same type).
2294 * The job of hpread_type_lookup() is to process this "type" field.
2295 * Most of the real work is done in subroutines. Here we interpret
2296 * the immediate flag. If not immediate, chase the DNTT pointer to
2297 * find our way to the SOM record describing the type, switch on
2298 * the SOM kind, and then call an appropriate subroutine depending
2299 * on what kind of type we are constructing. (e.g., an array type,
2300 * a struct/class type, etc).
2301 */
2302 static struct type *
2303 hpread_type_lookup (dnttpointer hp_type, struct objfile *objfile)
2304 {
2305 union dnttentry *dn_bufp;
2306 struct type *tmp_type;
2307
2308 /* First see if it's a simple builtin type. */
2309 if (hp_type.dntti.immediate)
2310 {
2311 /* If this is a template argument, the argument number is
2312 * encoded in the bitlength. All other cases, just return
2313 * GDB's representation of this fundamental type.
2314 */
2315 if (hp_type.dntti.type == HP_TYPE_TEMPLATE_ARG)
2316 return hpread_get_nth_template_arg (objfile, hp_type.dntti.bitlength);
2317 else
2318 return lookup_fundamental_type (objfile,
2319 hpread_type_translate (hp_type));
2320 }
2321
2322 /* Not a builtin type. We'll have to read it in. */
2323 if (hp_type.dnttp.index < LNTT_SYMCOUNT (objfile))
2324 dn_bufp = hpread_get_lntt (hp_type.dnttp.index, objfile);
2325 else
2326 /* This is a fancy way of returning NULL */
2327 return lookup_fundamental_type (objfile, FT_VOID);
2328
2329 switch (dn_bufp->dblock.kind)
2330 {
2331 case DNTT_TYPE_SRCFILE:
2332 case DNTT_TYPE_MODULE:
2333 case DNTT_TYPE_ENTRY:
2334 case DNTT_TYPE_BEGIN:
2335 case DNTT_TYPE_END:
2336 case DNTT_TYPE_IMPORT:
2337 case DNTT_TYPE_LABEL:
2338 case DNTT_TYPE_FPARAM:
2339 case DNTT_TYPE_SVAR:
2340 case DNTT_TYPE_DVAR:
2341 case DNTT_TYPE_CONST:
2342 case DNTT_TYPE_MEMENUM:
2343 case DNTT_TYPE_VARIANT:
2344 case DNTT_TYPE_FILE:
2345 case DNTT_TYPE_WITH:
2346 case DNTT_TYPE_COMMON:
2347 case DNTT_TYPE_COBSTRUCT:
2348 case DNTT_TYPE_XREF:
2349 case DNTT_TYPE_SA:
2350 case DNTT_TYPE_MACRO:
2351 case DNTT_TYPE_BLOCKDATA:
2352 case DNTT_TYPE_CLASS_SCOPE:
2353 case DNTT_TYPE_MEMACCESS:
2354 case DNTT_TYPE_INHERITANCE:
2355 case DNTT_TYPE_OBJECT_ID:
2356 case DNTT_TYPE_FRIEND_CLASS:
2357 case DNTT_TYPE_FRIEND_FUNC:
2358 /* These are not types - something went wrong. */
2359 /* This is a fancy way of returning NULL */
2360 return lookup_fundamental_type (objfile, FT_VOID);
2361
2362 case DNTT_TYPE_FUNCTION:
2363 /* We wind up here when dealing with class member functions
2364 * (called from hpread_read_struct_type(), i.e. when processing
2365 * the class definition itself).
2366 */
2367 return hpread_read_function_type (hp_type, dn_bufp, objfile, 0);
2368
2369 case DNTT_TYPE_DOC_FUNCTION:
2370 return hpread_read_doc_function_type (hp_type, dn_bufp, objfile, 0);
2371
2372 case DNTT_TYPE_TYPEDEF:
2373 {
2374 /* A typedef - chase it down by making a recursive call */
2375 struct type *structtype = hpread_type_lookup (dn_bufp->dtype.type,
2376 objfile);
2377
2378 /* The following came from the base hpread.c that we inherited.
2379 * It is WRONG so I have commented it out. - RT
2380 *...
2381
2382 char *suffix;
2383 suffix = VT (objfile) + dn_bufp->dtype.name;
2384 TYPE_NAME (structtype) = suffix;
2385
2386 * ... further explanation ....
2387 *
2388 * What we have here is a typedef pointing to a typedef.
2389 * E.g.,
2390 * typedef int foo;
2391 * typedef foo fum;
2392 *
2393 * What we desire to build is (these are pictures
2394 * of "struct type"'s):
2395 *
2396 * +---------+ +----------+ +------------+
2397 * | typedef | | typedef | | fund. type |
2398 * | type| -> | type| -> | |
2399 * | "fum" | | "foo" | | "int" |
2400 * +---------+ +----------+ +------------+
2401 *
2402 * What this commented-out code is doing is smashing the
2403 * name of pointed-to-type to be the same as the pointed-from
2404 * type. So we wind up with something like:
2405 *
2406 * +---------+ +----------+ +------------+
2407 * | typedef | | typedef | | fund. type |
2408 * | type| -> | type| -> | |
2409 * | "fum" | | "fum" | | "fum" |
2410 * +---------+ +----------+ +------------+
2411 *
2412 */
2413
2414 return structtype;
2415 }
2416
2417 case DNTT_TYPE_TAGDEF:
2418 {
2419 /* Just a little different from above. We have to tack on
2420 * an identifier of some kind (struct, union, enum, class, etc).
2421 */
2422 struct type *structtype = hpread_type_lookup (dn_bufp->dtype.type,
2423 objfile);
2424 char *prefix, *suffix;
2425 suffix = VT (objfile) + dn_bufp->dtype.name;
2426
2427 /* Lookup the next type in the list. It should be a structure,
2428 * union, class, enum, or template type.
2429 * We will need to attach that to our name.
2430 */
2431 if (dn_bufp->dtype.type.dnttp.index < LNTT_SYMCOUNT (objfile))
2432 dn_bufp = hpread_get_lntt (dn_bufp->dtype.type.dnttp.index, objfile);
2433 else
2434 {
2435 complain (&hpread_type_lookup_complaint);
2436 return NULL;
2437 }
2438
2439 if (dn_bufp->dblock.kind == DNTT_TYPE_STRUCT)
2440 {
2441 prefix = "struct ";
2442 }
2443 else if (dn_bufp->dblock.kind == DNTT_TYPE_UNION)
2444 {
2445 prefix = "union ";
2446 }
2447 else if (dn_bufp->dblock.kind == DNTT_TYPE_CLASS)
2448 {
2449 /* Further field for CLASS saying how it was really declared */
2450 /* 0==class, 1==union, 2==struct */
2451 if (dn_bufp->dclass.class_decl == 0)
2452 prefix = "class ";
2453 else if (dn_bufp->dclass.class_decl == 1)
2454 prefix = "union ";
2455 else if (dn_bufp->dclass.class_decl == 2)
2456 prefix = "struct ";
2457 else
2458 prefix = "";
2459 }
2460 else if (dn_bufp->dblock.kind == DNTT_TYPE_ENUM)
2461 {
2462 prefix = "enum ";
2463 }
2464 else if (dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
2465 {
2466 prefix = "template ";
2467 }
2468 else
2469 {
2470 prefix = "";
2471 }
2472
2473 /* Build the correct name. */
2474 structtype->name
2475 = (char *) obstack_alloc (&objfile->type_obstack,
2476 strlen (prefix) + strlen (suffix) + 1);
2477 TYPE_NAME (structtype) = strcpy (TYPE_NAME (structtype), prefix);
2478 TYPE_NAME (structtype) = strcat (TYPE_NAME (structtype), suffix);
2479 TYPE_TAG_NAME (structtype) = suffix;
2480
2481 /* For classes/structs, we have to set the static member "physnames"
2482 to point to strings like "Class::Member" */
2483 if (TYPE_CODE (structtype) == TYPE_CODE_STRUCT)
2484 fix_static_member_physnames (structtype, suffix, objfile);
2485
2486 return structtype;
2487 }
2488
2489 case DNTT_TYPE_POINTER:
2490 /* Pointer type - call a routine in gdbtypes.c that constructs
2491 * the appropriate GDB type.
2492 */
2493 return make_pointer_type (
2494 hpread_type_lookup (dn_bufp->dptr.pointsto,
2495 objfile),
2496 NULL);
2497
2498 case DNTT_TYPE_REFERENCE:
2499 /* C++ reference type - call a routine in gdbtypes.c that constructs
2500 * the appropriate GDB type.
2501 */
2502 return make_reference_type (
2503 hpread_type_lookup (dn_bufp->dreference.pointsto,
2504 objfile),
2505 NULL);
2506
2507 case DNTT_TYPE_ENUM:
2508 return hpread_read_enum_type (hp_type, dn_bufp, objfile);
2509 case DNTT_TYPE_SET:
2510 return hpread_read_set_type (hp_type, dn_bufp, objfile);
2511 case DNTT_TYPE_SUBRANGE:
2512 return hpread_read_subrange_type (hp_type, dn_bufp, objfile);
2513 case DNTT_TYPE_ARRAY:
2514 return hpread_read_array_type (hp_type, dn_bufp, objfile);
2515 case DNTT_TYPE_STRUCT:
2516 case DNTT_TYPE_UNION:
2517 return hpread_read_struct_type (hp_type, dn_bufp, objfile);
2518 case DNTT_TYPE_FIELD:
2519 return hpread_type_lookup (dn_bufp->dfield.type, objfile);
2520
2521 case DNTT_TYPE_FUNCTYPE:
2522 /* Here we want to read the function SOMs and return a
2523 * type for it. We get here, for instance, when processing
2524 * pointer-to-function type.
2525 */
2526 return hpread_read_function_type (hp_type, dn_bufp, objfile, 0);
2527
2528 case DNTT_TYPE_PTRMEM:
2529 /* Declares a C++ pointer-to-data-member type.
2530 * The "pointsto" field defines the class,
2531 * while the "memtype" field defines the pointed-to-type.
2532 */
2533 {
2534 struct type *ptrmemtype;
2535 struct type *class_type;
2536 struct type *memtype;
2537 memtype = hpread_type_lookup (dn_bufp->dptrmem.memtype,
2538 objfile),
2539 class_type = hpread_type_lookup (dn_bufp->dptrmem.pointsto,
2540 objfile),
2541 ptrmemtype = alloc_type (objfile);
2542 smash_to_member_type (ptrmemtype, class_type, memtype);
2543 return make_pointer_type (ptrmemtype, NULL);
2544 }
2545 break;
2546
2547 case DNTT_TYPE_PTRMEMFUNC:
2548 /* Defines a C++ pointer-to-function-member type.
2549 * The "pointsto" field defines the class,
2550 * while the "memtype" field defines the pointed-to-type.
2551 */
2552 {
2553 struct type *ptrmemtype;
2554 struct type *class_type;
2555 struct type *functype;
2556 struct type *retvaltype;
2557 int nargs;
2558 int i;
2559 struct type **args_type;
2560 class_type = hpread_type_lookup (dn_bufp->dptrmem.pointsto,
2561 objfile);
2562 functype = hpread_type_lookup (dn_bufp->dptrmem.memtype,
2563 objfile);
2564 retvaltype = TYPE_TARGET_TYPE (functype);
2565 nargs = TYPE_NFIELDS (functype);
2566 args_type = (struct type **) xmalloc ((nargs + 1) * sizeof (struct type *));
2567 for (i = 0; i < nargs; i++)
2568 {
2569 args_type[i] = TYPE_FIELD_TYPE (functype, i);
2570 }
2571 args_type[nargs] = NULL;
2572 ptrmemtype = alloc_type (objfile);
2573 smash_to_method_type (ptrmemtype, class_type, retvaltype, args_type);
2574 return make_pointer_type (ptrmemtype, NULL);
2575 }
2576 break;
2577
2578 case DNTT_TYPE_CLASS:
2579 return hpread_read_struct_type (hp_type, dn_bufp, objfile);
2580
2581 case DNTT_TYPE_GENFIELD:
2582 /* Chase pointer from GENFIELD to FIELD, and make recursive
2583 * call on that.
2584 */
2585 return hpread_type_lookup (dn_bufp->dgenfield.field, objfile);
2586
2587 case DNTT_TYPE_VFUNC:
2588 /* C++ virtual function.
2589 * We get here in the course of processing a class type which
2590 * contains virtual functions. Just go through another level
2591 * of indirection to get to the pointed-to function SOM.
2592 */
2593 return hpread_type_lookup (dn_bufp->dvfunc.funcptr, objfile);
2594
2595 case DNTT_TYPE_MODIFIER:
2596 /* Check the modifiers and then just make a recursive call on
2597 * the "type" pointed to by the modifier DNTT.
2598 *
2599 * pai:: FIXME -- do we ever want to handle "m_duplicate" and
2600 * "m_void" modifiers? Is static_flag really needed here?
2601 * (m_static used for methods of classes, elsewhere).
2602 */
2603 tmp_type = make_cv_type (dn_bufp->dmodifier.m_const,
2604 dn_bufp->dmodifier.m_volatile,
2605 hpread_type_lookup (dn_bufp->dmodifier.type, objfile),
2606 0);
2607 return tmp_type;
2608
2609
2610 case DNTT_TYPE_MEMFUNC:
2611 /* Member function. Treat like a function.
2612 * I think we get here in the course of processing a
2613 * pointer-to-member-function type...
2614 */
2615 return hpread_read_function_type (hp_type, dn_bufp, objfile, 0);
2616
2617 case DNTT_TYPE_DOC_MEMFUNC:
2618 return hpread_read_doc_function_type (hp_type, dn_bufp, objfile, 0);
2619
2620 case DNTT_TYPE_TEMPLATE:
2621 /* Template - sort of the header for a template definition,
2622 * which like a class, points to a member list and also points
2623 * to a TEMPLATE_ARG list of type-arguments.
2624 */
2625 return hpread_read_struct_type (hp_type, dn_bufp, objfile);
2626
2627 case DNTT_TYPE_TEMPLATE_ARG:
2628 {
2629 char *name;
2630 /* The TEMPLATE record points to an argument list of
2631 * TEMPLATE_ARG records, each of which describes one
2632 * of the type-arguments.
2633 */
2634 name = VT (objfile) + dn_bufp->dtempl_arg.name;
2635 return hpread_read_templ_arg_type (hp_type, dn_bufp, objfile, name);
2636 }
2637
2638 case DNTT_TYPE_FUNC_TEMPLATE:
2639 /* We wind up here when processing a TEMPLATE type,
2640 * if the template has member function(s).
2641 * Treat it like a FUNCTION.
2642 */
2643 return hpread_read_function_type (hp_type, dn_bufp, objfile, 0);
2644
2645 case DNTT_TYPE_LINK:
2646 /* The LINK record is used to link up templates with instantiations.
2647 * There is no type associated with the LINK record per se.
2648 */
2649 return lookup_fundamental_type (objfile, FT_VOID);
2650
2651 /* Also not yet handled... */
2652 /* case DNTT_TYPE_DYN_ARRAY_DESC: */
2653 /* case DNTT_TYPE_DESC_SUBRANGE: */
2654 /* case DNTT_TYPE_BEGIN_EXT: */
2655 /* case DNTT_TYPE_INLN: */
2656 /* case DNTT_TYPE_INLN_LIST: */
2657 /* case DNTT_TYPE_ALIAS: */
2658 default:
2659 /* A fancy way of returning NULL */
2660 return lookup_fundamental_type (objfile, FT_VOID);
2661 }
2662 }
2663
2664 static sltpointer
2665 hpread_record_lines (struct subfile *subfile, sltpointer s_idx,
2666 sltpointer e_idx, struct objfile *objfile,
2667 CORE_ADDR offset)
2668 {
2669 union sltentry *sl_bufp;
2670
2671 while (s_idx <= e_idx)
2672 {
2673 sl_bufp = hpread_get_slt (s_idx, objfile);
2674 /* Only record "normal" entries in the SLT. */
2675 if (sl_bufp->snorm.sltdesc == SLT_NORMAL
2676 || sl_bufp->snorm.sltdesc == SLT_EXIT)
2677 record_line (subfile, sl_bufp->snorm.line,
2678 sl_bufp->snorm.address + offset);
2679 else if (sl_bufp->snorm.sltdesc == SLT_NORMAL_OFFSET)
2680 record_line (subfile, sl_bufp->snormoff.line,
2681 sl_bufp->snormoff.address + offset);
2682 s_idx++;
2683 }
2684 return e_idx;
2685 }
2686
2687 /* Given a function "f" which is a member of a class, find
2688 * the classname that it is a member of. Used to construct
2689 * the name (e.g., "c::f") which GDB will put in the
2690 * "demangled name" field of the function's symbol.
2691 * Called from hpread_process_one_debug_symbol()
2692 * If "f" is not a member function, return NULL.
2693 */
2694 char *
2695 class_of (struct type *functype)
2696 {
2697 struct type *first_param_type;
2698 char *first_param_name;
2699 struct type *pointed_to_type;
2700 char *class_name;
2701
2702 /* Check that the function has a first argument "this",
2703 * and that "this" is a pointer to a class. If not,
2704 * functype is not a member function, so return NULL.
2705 */
2706 if (TYPE_NFIELDS (functype) == 0)
2707 return NULL;
2708 first_param_name = TYPE_FIELD_NAME (functype, 0);
2709 if (first_param_name == NULL)
2710 return NULL; /* paranoia */
2711 if (strcmp (first_param_name, "this"))
2712 return NULL;
2713 first_param_type = TYPE_FIELD_TYPE (functype, 0);
2714 if (first_param_type == NULL)
2715 return NULL; /* paranoia */
2716 if (TYPE_CODE (first_param_type) != TYPE_CODE_PTR)
2717 return NULL;
2718
2719 /* Get the thing that "this" points to, check that
2720 * it's a class, and get its class name.
2721 */
2722 pointed_to_type = TYPE_TARGET_TYPE (first_param_type);
2723 if (pointed_to_type == NULL)
2724 return NULL; /* paranoia */
2725 if (TYPE_CODE (pointed_to_type) != TYPE_CODE_CLASS)
2726 return NULL;
2727 class_name = TYPE_NAME (pointed_to_type);
2728 if (class_name == NULL)
2729 return NULL; /* paranoia */
2730
2731 /* The class name may be of the form "class c", in which case
2732 * we want to strip off the leading "class ".
2733 */
2734 if (strncmp (class_name, "class ", 6) == 0)
2735 class_name += 6;
2736
2737 return class_name;
2738 }
2739
2740 /* Internalize one native debug symbol.
2741 * Called in a loop from hpread_expand_symtab().
2742 * Arguments:
2743 * dn_bufp:
2744 * name:
2745 * section_offsets:
2746 * objfile:
2747 * text_offset:
2748 * text_size:
2749 * filename:
2750 * index: Index of this symbol
2751 * at_module_boundary_p Pointer to boolean flag to control caller's loop.
2752 */
2753
2754 static void
2755 hpread_process_one_debug_symbol (union dnttentry *dn_bufp, char *name,
2756 struct section_offsets *section_offsets,
2757 struct objfile *objfile, CORE_ADDR text_offset,
2758 int text_size, char *filename, int index,
2759 int *at_module_boundary_p)
2760 {
2761 unsigned long desc;
2762 int type;
2763 CORE_ADDR valu;
2764 int offset = ANOFFSET (section_offsets, SECT_OFF_TEXT (objfile));
2765 int data_offset = ANOFFSET (section_offsets, SECT_OFF_DATA (objfile));
2766 union dnttentry *dn_temp;
2767 dnttpointer hp_type;
2768 struct symbol *sym;
2769 struct context_stack *new;
2770 char *class_scope_name;
2771
2772 /* Allocate one GDB debug symbol and fill in some default values. */
2773 sym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
2774 sizeof (struct symbol));
2775 memset (sym, 0, sizeof (struct symbol));
2776 SYMBOL_NAME (sym) = obsavestring (name, strlen (name), &objfile->symbol_obstack);
2777 SYMBOL_LANGUAGE (sym) = language_auto;
2778 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
2779 SYMBOL_LINE (sym) = 0;
2780 SYMBOL_VALUE (sym) = 0;
2781 SYMBOL_CLASS (sym) = LOC_TYPEDEF;
2782
2783 /* Just a trick in case the SOM debug symbol is a type definition.
2784 * There are routines that are set up to build a GDB type symbol, given
2785 * a SOM dnttpointer. So we set up a dummy SOM dnttpointer "hp_type".
2786 * This allows us to call those same routines.
2787 */
2788 hp_type.dnttp.extension = 1;
2789 hp_type.dnttp.immediate = 0;
2790 hp_type.dnttp.global = 0;
2791 hp_type.dnttp.index = index;
2792
2793 /* This "type" is the type of SOM record.
2794 * Switch on SOM type.
2795 */
2796 type = dn_bufp->dblock.kind;
2797 switch (type)
2798 {
2799 case DNTT_TYPE_SRCFILE:
2800 /* This type of symbol indicates from which source file or
2801 * include file any following data comes. It may indicate:
2802 *
2803 * o The start of an entirely new source file (and thus
2804 * a new module)
2805 *
2806 * o The start of a different source file due to #include
2807 *
2808 * o The end of an include file and the return to the original
2809 * file. Thus if "foo.c" includes "bar.h", we see first
2810 * a SRCFILE for foo.c, then one for bar.h, and then one for
2811 * foo.c again.
2812 *
2813 * If it indicates the start of a new module then we must
2814 * finish the symbol table of the previous module
2815 * (if any) and start accumulating a new symbol table.
2816 */
2817
2818 valu = text_offset;
2819 if (!last_source_file)
2820 {
2821 /*
2822 * A note on "last_source_file": this is a char* pointing
2823 * to the actual file name. "start_symtab" sets it,
2824 * "end_symtab" clears it.
2825 *
2826 * So if "last_source_file" is NULL, then either this is
2827 * the first record we are looking at, or a previous call
2828 * to "end_symtab()" was made to close out the previous
2829 * module. Since we're now quitting the scan loop when we
2830 * see a MODULE END record, we should never get here, except
2831 * in the case that we're not using the quick look-up tables
2832 * and have to use the old system as a fall-back.
2833 */
2834 start_symtab (name, NULL, valu);
2835 record_debugformat ("HP");
2836 SL_INDEX (objfile) = dn_bufp->dsfile.address;
2837 }
2838
2839 else
2840 {
2841 /* Either a new include file, or a SRCFILE record
2842 * saying we are back in the main source (or out of
2843 * a nested include file) again.
2844 */
2845 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
2846 SL_INDEX (objfile),
2847 dn_bufp->dsfile.address,
2848 objfile, offset);
2849 }
2850
2851 /* A note on "start_subfile". This routine will check
2852 * the name we pass it and look for an existing subfile
2853 * of that name. There's thus only one sub-file for the
2854 * actual source (e.g. for "foo.c" in foo.c), despite the
2855 * fact that we'll see lots of SRCFILE entries for foo.c
2856 * inside foo.c.
2857 */
2858 start_subfile (name, NULL);
2859 break;
2860
2861 case DNTT_TYPE_MODULE:
2862 /*
2863 * We no longer ignore DNTT_TYPE_MODULE symbols. The module
2864 * represents the meaningful semantic structure of a compilation
2865 * unit. We expect to start the psymtab-to-symtab expansion
2866 * looking at a MODULE entry, and to end it at the corresponding
2867 * END MODULE entry.
2868 *
2869 *--Begin outdated comments
2870 *
2871 * This record signifies the start of a new source module
2872 * In C/C++ there is no explicit "module" construct in the language,
2873 * but each compilation unit is implicitly a module and they
2874 * do emit the DNTT_TYPE_MODULE records.
2875 * The end of the module is marked by a matching DNTT_TYPE_END record.
2876 *
2877 * The reason GDB gets away with ignoring the DNTT_TYPE_MODULE record
2878 * is it notices the DNTT_TYPE_END record for the previous
2879 * module (see comments under DNTT_TYPE_END case), and then treats
2880 * the next DNTT_TYPE_SRCFILE record as if it were the module-start record.
2881 * (i.e., it makes a start_symtab() call).
2882 * This scheme seems a little convoluted, but I'll leave it
2883 * alone on the principle "if it ain't broke don't fix
2884 * it". (RT).
2885 *
2886 *-- End outdated comments
2887 */
2888
2889 valu = text_offset;
2890 if (!last_source_file)
2891 {
2892 /* Start of a new module. We know this because "last_source_file"
2893 * is NULL, which can only happen the first time or if we just
2894 * made a call to end_symtab() to close out the previous module.
2895 */
2896 start_symtab (name, NULL, valu);
2897 SL_INDEX (objfile) = dn_bufp->dmodule.address;
2898 }
2899 else
2900 {
2901 /* This really shouldn't happen if we're using the quick
2902 * look-up tables, as it would mean we'd scanned past an
2903 * END MODULE entry. But if we're not using the tables,
2904 * we started the module on the SRCFILE entry, so it's ok.
2905 * For now, accept this.
2906 */
2907 /* warning( "Error expanding psymtab, missed module end, found entry for %s",
2908 * name );
2909 */
2910 *at_module_boundary_p = -1;
2911 }
2912
2913 start_subfile (name, NULL);
2914 break;
2915
2916 case DNTT_TYPE_FUNCTION:
2917 case DNTT_TYPE_ENTRY:
2918 /* A function or secondary entry point. */
2919 valu = dn_bufp->dfunc.lowaddr + offset;
2920
2921 /* Record lines up to this point. */
2922 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
2923 SL_INDEX (objfile),
2924 dn_bufp->dfunc.address,
2925 objfile, offset);
2926
2927 WITHIN_FUNCTION (objfile) = 1;
2928 CURRENT_FUNCTION_VALUE (objfile) = valu;
2929
2930 /* Stack must be empty now. */
2931 if (context_stack_depth != 0)
2932 complain (&lbrac_unmatched_complaint, (char *) symnum);
2933 new = push_context (0, valu);
2934
2935 /* Built a type for the function. This includes processing
2936 * the symbol records for the function parameters.
2937 */
2938 SYMBOL_CLASS (sym) = LOC_BLOCK;
2939 SYMBOL_TYPE (sym) = hpread_read_function_type (hp_type, dn_bufp, objfile, 1);
2940
2941 /* The "SYMBOL_NAME" field is expected to be the mangled name
2942 * (if any), which we get from the "alias" field of the SOM record
2943 * if that exists.
2944 */
2945 if ((dn_bufp->dfunc.language == HP_LANGUAGE_CPLUSPLUS) &&
2946 dn_bufp->dfunc.alias && /* has an alias */
2947 *(char *) (VT (objfile) + dn_bufp->dfunc.alias)) /* not a null string */
2948 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->dfunc.alias;
2949 else
2950 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->dfunc.name;
2951
2952 /* Special hack to get around HP compilers' insistence on
2953 * reporting "main" as "_MAIN_" for C/C++ */
2954 if ((strcmp (SYMBOL_NAME (sym), "_MAIN_") == 0) &&
2955 (strcmp (VT (objfile) + dn_bufp->dfunc.name, "main") == 0))
2956 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->dfunc.name;
2957
2958 /* The SYMBOL_CPLUS_DEMANGLED_NAME field is expected to
2959 * be the demangled name.
2960 */
2961 if (dn_bufp->dfunc.language == HP_LANGUAGE_CPLUSPLUS)
2962 {
2963 /* SYMBOL_INIT_DEMANGLED_NAME is a macro which winds up
2964 * calling the demangler in libiberty (cplus_demangle()) to
2965 * do the job. This generally does the job, even though
2966 * it's intended for the GNU compiler and not the aCC compiler
2967 * Note that SYMBOL_INIT_DEMANGLED_NAME calls the
2968 * demangler with arguments DMGL_PARAMS | DMGL_ANSI.
2969 * Generally, we don't want params when we display
2970 * a demangled name, but when I took out the DMGL_PARAMS,
2971 * some things broke, so I'm leaving it in here, and
2972 * working around the issue in stack.c. - RT
2973 */
2974 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
2975 if ((SYMBOL_NAME (sym) == VT (objfile) + dn_bufp->dfunc.alias) &&
2976 (!SYMBOL_CPLUS_DEMANGLED_NAME (sym)))
2977 {
2978
2979 /* Well, the symbol name is mangled, but the
2980 * demangler in libiberty failed so the demangled
2981 * field is still NULL. Try to
2982 * do the job ourselves based on the "name" field
2983 * in the SOM record. A complication here is that
2984 * the name field contains only the function name
2985 * (like "f"), whereas we want the class qualification
2986 * (as in "c::f"). Try to reconstruct that.
2987 */
2988 char *basename;
2989 char *classname;
2990 char *dem_name;
2991 basename = VT (objfile) + dn_bufp->dfunc.name;
2992 classname = class_of (SYMBOL_TYPE (sym));
2993 if (classname)
2994 {
2995 dem_name = xmalloc (strlen (basename) + strlen (classname) + 3);
2996 strcpy (dem_name, classname);
2997 strcat (dem_name, "::");
2998 strcat (dem_name, basename);
2999 SYMBOL_CPLUS_DEMANGLED_NAME (sym) = dem_name;
3000 SYMBOL_LANGUAGE (sym) = language_cplus;
3001 }
3002 }
3003 }
3004
3005 /* Add the function symbol to the list of symbols in this blockvector */
3006 if (dn_bufp->dfunc.global)
3007 add_symbol_to_list (sym, &global_symbols);
3008 else
3009 add_symbol_to_list (sym, &file_symbols);
3010 new->name = sym;
3011
3012 /* Search forward to the next BEGIN and also read
3013 * in the line info up to that point.
3014 * Not sure why this is needed.
3015 * In HP FORTRAN this code is harmful since there
3016 * may not be a BEGIN after the FUNCTION.
3017 * So I made it C/C++ specific. - RT
3018 */
3019 if (dn_bufp->dfunc.language == HP_LANGUAGE_C ||
3020 dn_bufp->dfunc.language == HP_LANGUAGE_CPLUSPLUS)
3021 {
3022 while (dn_bufp->dblock.kind != DNTT_TYPE_BEGIN)
3023 {
3024 dn_bufp = hpread_get_lntt (++index, objfile);
3025 if (dn_bufp->dblock.extension)
3026 continue;
3027 }
3028 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3029 SL_INDEX (objfile),
3030 dn_bufp->dbegin.address,
3031 objfile, offset);
3032 SYMBOL_LINE (sym) = hpread_get_line (dn_bufp->dbegin.address, objfile);
3033 }
3034 record_line (current_subfile, SYMBOL_LINE (sym), valu);
3035 break;
3036
3037 case DNTT_TYPE_DOC_FUNCTION:
3038 valu = dn_bufp->ddocfunc.lowaddr + offset;
3039
3040 /* Record lines up to this point. */
3041 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3042 SL_INDEX (objfile),
3043 dn_bufp->ddocfunc.address,
3044 objfile, offset);
3045
3046 WITHIN_FUNCTION (objfile) = 1;
3047 CURRENT_FUNCTION_VALUE (objfile) = valu;
3048 /* Stack must be empty now. */
3049 if (context_stack_depth != 0)
3050 complain (&lbrac_unmatched_complaint, (char *) symnum);
3051 new = push_context (0, valu);
3052
3053 /* Built a type for the function. This includes processing
3054 * the symbol records for the function parameters.
3055 */
3056 SYMBOL_CLASS (sym) = LOC_BLOCK;
3057 SYMBOL_TYPE (sym) = hpread_read_doc_function_type (hp_type, dn_bufp, objfile, 1);
3058
3059 /* The "SYMBOL_NAME" field is expected to be the mangled name
3060 * (if any), which we get from the "alias" field of the SOM record
3061 * if that exists.
3062 */
3063 if ((dn_bufp->ddocfunc.language == HP_LANGUAGE_CPLUSPLUS) &&
3064 dn_bufp->ddocfunc.alias && /* has an alias */
3065 *(char *) (VT (objfile) + dn_bufp->ddocfunc.alias)) /* not a null string */
3066 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->ddocfunc.alias;
3067 else
3068 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->ddocfunc.name;
3069
3070 /* Special hack to get around HP compilers' insistence on
3071 * reporting "main" as "_MAIN_" for C/C++ */
3072 if ((strcmp (SYMBOL_NAME (sym), "_MAIN_") == 0) &&
3073 (strcmp (VT (objfile) + dn_bufp->ddocfunc.name, "main") == 0))
3074 SYMBOL_NAME (sym) = VT (objfile) + dn_bufp->ddocfunc.name;
3075
3076 if (dn_bufp->ddocfunc.language == HP_LANGUAGE_CPLUSPLUS)
3077 {
3078
3079 /* SYMBOL_INIT_DEMANGLED_NAME is a macro which winds up
3080 * calling the demangler in libiberty (cplus_demangle()) to
3081 * do the job. This generally does the job, even though
3082 * it's intended for the GNU compiler and not the aCC compiler
3083 * Note that SYMBOL_INIT_DEMANGLED_NAME calls the
3084 * demangler with arguments DMGL_PARAMS | DMGL_ANSI.
3085 * Generally, we don't want params when we display
3086 * a demangled name, but when I took out the DMGL_PARAMS,
3087 * some things broke, so I'm leaving it in here, and
3088 * working around the issue in stack.c. - RT
3089 */
3090 SYMBOL_INIT_DEMANGLED_NAME (sym, &objfile->symbol_obstack);
3091
3092 if ((SYMBOL_NAME (sym) == VT (objfile) + dn_bufp->ddocfunc.alias) &&
3093 (!SYMBOL_CPLUS_DEMANGLED_NAME (sym)))
3094 {
3095
3096 /* Well, the symbol name is mangled, but the
3097 * demangler in libiberty failed so the demangled
3098 * field is still NULL. Try to
3099 * do the job ourselves based on the "name" field
3100 * in the SOM record. A complication here is that
3101 * the name field contains only the function name
3102 * (like "f"), whereas we want the class qualification
3103 * (as in "c::f"). Try to reconstruct that.
3104 */
3105 char *basename;
3106 char *classname;
3107 char *dem_name;
3108 basename = VT (objfile) + dn_bufp->ddocfunc.name;
3109 classname = class_of (SYMBOL_TYPE (sym));
3110 if (classname)
3111 {
3112 dem_name = xmalloc (strlen (basename) + strlen (classname) + 3);
3113 strcpy (dem_name, classname);
3114 strcat (dem_name, "::");
3115 strcat (dem_name, basename);
3116 SYMBOL_CPLUS_DEMANGLED_NAME (sym) = dem_name;
3117 SYMBOL_LANGUAGE (sym) = language_cplus;
3118 }
3119 }
3120 }
3121
3122 /* Add the function symbol to the list of symbols in this blockvector */
3123 if (dn_bufp->ddocfunc.global)
3124 add_symbol_to_list (sym, &global_symbols);
3125 else
3126 add_symbol_to_list (sym, &file_symbols);
3127 new->name = sym;
3128
3129 /* Search forward to the next BEGIN and also read
3130 * in the line info up to that point.
3131 * Not sure why this is needed.
3132 * In HP FORTRAN this code is harmful since there
3133 * may not be a BEGIN after the FUNCTION.
3134 * So I made it C/C++ specific. - RT
3135 */
3136 if (dn_bufp->ddocfunc.language == HP_LANGUAGE_C ||
3137 dn_bufp->ddocfunc.language == HP_LANGUAGE_CPLUSPLUS)
3138 {
3139 while (dn_bufp->dblock.kind != DNTT_TYPE_BEGIN)
3140 {
3141 dn_bufp = hpread_get_lntt (++index, objfile);
3142 if (dn_bufp->dblock.extension)
3143 continue;
3144 }
3145 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3146 SL_INDEX (objfile),
3147 dn_bufp->dbegin.address,
3148 objfile, offset);
3149 SYMBOL_LINE (sym) = hpread_get_line (dn_bufp->dbegin.address, objfile);
3150 }
3151 record_line (current_subfile, SYMBOL_LINE (sym), valu);
3152 break;
3153
3154 case DNTT_TYPE_BEGIN:
3155 /* Begin a new scope. */
3156 if (context_stack_depth == 1 /* this means we're at function level */ &&
3157 context_stack[0].name != NULL /* this means it's a function */ &&
3158 context_stack[0].depth == 0 /* this means it's the first BEGIN
3159 we've seen after the FUNCTION */
3160 )
3161 {
3162 /* This is the first BEGIN after a FUNCTION.
3163 * We ignore this one, since HP compilers always insert
3164 * at least one BEGIN, i.e. it's:
3165 *
3166 * FUNCTION
3167 * argument symbols
3168 * BEGIN
3169 * local symbols
3170 * (possibly nested BEGIN ... END's if there are inner { } blocks)
3171 * END
3172 * END
3173 *
3174 * By ignoring this first BEGIN, the local symbols get treated
3175 * as belonging to the function scope, and "print func::local_sym"
3176 * works (which is what we want).
3177 */
3178
3179 /* All we do here is increase the depth count associated with
3180 * the FUNCTION entry in the context stack. This ensures that
3181 * the next BEGIN we see (if any), representing a real nested { }
3182 * block, will get processed.
3183 */
3184
3185 context_stack[0].depth++;
3186
3187 }
3188 else
3189 {
3190
3191 /* Record lines up to this SLT pointer. */
3192 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3193 SL_INDEX (objfile),
3194 dn_bufp->dbegin.address,
3195 objfile, offset);
3196 /* Calculate start address of new scope */
3197 valu = hpread_get_location (dn_bufp->dbegin.address, objfile);
3198 valu += offset; /* Relocate for dynamic loading */
3199 /* We use the scope start DNTT index as nesting depth identifier! */
3200 desc = hpread_get_scope_start (dn_bufp->dbegin.address, objfile);
3201 new = push_context (desc, valu);
3202 }
3203 break;
3204
3205 case DNTT_TYPE_END:
3206 /* End a scope. */
3207
3208 /* Valid end kinds are:
3209 * MODULE
3210 * FUNCTION
3211 * WITH
3212 * COMMON
3213 * BEGIN
3214 * CLASS_SCOPE
3215 */
3216
3217 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3218 SL_INDEX (objfile),
3219 dn_bufp->dend.address,
3220 objfile, offset);
3221 switch (dn_bufp->dend.endkind)
3222 {
3223 case DNTT_TYPE_MODULE:
3224 /* Ending a module ends the symbol table for that module.
3225 * Calling end_symtab() has the side effect of clearing the
3226 * last_source_file pointer, which in turn signals
3227 * process_one_debug_symbol() to treat the next DNTT_TYPE_SRCFILE
3228 * record as a module-begin.
3229 */
3230 valu = text_offset + text_size + offset;
3231
3232 /* Tell our caller that we're done with expanding the
3233 * debug information for a module.
3234 */
3235 *at_module_boundary_p = 1;
3236
3237 /* Don't do this, as our caller will do it!
3238
3239 * (void) end_symtab (valu, objfile, 0);
3240 */
3241 break;
3242
3243 case DNTT_TYPE_FUNCTION:
3244 /* Ending a function, well, ends the function's scope. */
3245 dn_temp = hpread_get_lntt (dn_bufp->dend.beginscope.dnttp.index,
3246 objfile);
3247 valu = dn_temp->dfunc.hiaddr + offset;
3248 /* Insert func params into local list */
3249 merge_symbol_lists (&param_symbols, &local_symbols);
3250 new = pop_context ();
3251 /* Make a block for the local symbols within. */
3252 finish_block (new->name, &local_symbols, new->old_blocks,
3253 new->start_addr, valu, objfile);
3254 WITHIN_FUNCTION (objfile) = 0; /* This may have to change for Pascal */
3255 local_symbols = new->locals;
3256 param_symbols = new->params;
3257 break;
3258
3259 case DNTT_TYPE_BEGIN:
3260 if (context_stack_depth == 1 &&
3261 context_stack[0].name != NULL &&
3262 context_stack[0].depth == 1)
3263 {
3264 /* This is the END corresponding to the
3265 * BEGIN which we ignored - see DNTT_TYPE_BEGIN case above.
3266 */
3267 context_stack[0].depth--;
3268 }
3269 else
3270 {
3271 /* Ending a local scope. */
3272 valu = hpread_get_location (dn_bufp->dend.address, objfile);
3273 /* Why in the hell is this needed? */
3274 valu += offset + 9; /* Relocate for dynamic loading */
3275 new = pop_context ();
3276 desc = dn_bufp->dend.beginscope.dnttp.index;
3277 if (desc != new->depth)
3278 complain (&lbrac_mismatch_complaint, (char *) symnum);
3279
3280 /* Make a block for the local symbols within. */
3281 finish_block (new->name, &local_symbols, new->old_blocks,
3282 new->start_addr, valu, objfile);
3283 local_symbols = new->locals;
3284 param_symbols = new->params;
3285 }
3286 break;
3287
3288 case DNTT_TYPE_WITH:
3289 /* Since we ignore the DNTT_TYPE_WITH that starts the scope,
3290 * we can ignore the DNTT_TYPE_END that ends it.
3291 */
3292 break;
3293
3294 case DNTT_TYPE_COMMON:
3295 /* End a FORTRAN common block. We don't currently handle these */
3296 complain (&hpread_unhandled_end_common_complaint);
3297 break;
3298
3299 case DNTT_TYPE_CLASS_SCOPE:
3300
3301 /* pai: FIXME Not handling nested classes for now -- must
3302 * maintain a stack */
3303 class_scope_name = NULL;
3304
3305 #if 0
3306 /* End a class scope */
3307 valu = hpread_get_location (dn_bufp->dend.address, objfile);
3308 /* Why in the hell is this needed? */
3309 valu += offset + 9; /* Relocate for dynamic loading */
3310 new = pop_context ();
3311 desc = dn_bufp->dend.beginscope.dnttp.index;
3312 if (desc != new->depth)
3313 complain (&lbrac_mismatch_complaint, (char *) symnum);
3314 /* Make a block for the local symbols within. */
3315 finish_block (new->name, &local_symbols, new->old_blocks,
3316 new->start_addr, valu, objfile);
3317 local_symbols = new->locals;
3318 param_symbols = new->params;
3319 #endif
3320 break;
3321
3322 default:
3323 complain (&hpread_unexpected_end_complaint);
3324 break;
3325 }
3326 break;
3327
3328 /* DNTT_TYPE_IMPORT is not handled */
3329
3330 case DNTT_TYPE_LABEL:
3331 SYMBOL_NAMESPACE (sym) = LABEL_NAMESPACE;
3332 break;
3333
3334 case DNTT_TYPE_FPARAM:
3335 /* Function parameters. */
3336 /* Note 1: This code was present in the 4.16 sources, and then
3337 removed, because fparams are handled in
3338 hpread_read_function_type(). However, while fparam symbols
3339 are indeed handled twice, this code here cannot be removed
3340 because then they don't get added to the local symbol list of
3341 the function's code block, which leads to a failure to look
3342 up locals, "this"-relative member names, etc. So I've put
3343 this code back in. pai/1997-07-21 */
3344 /* Note 2: To fix a defect, we stopped adding FPARAMS to local_symbols
3345 in hpread_read_function_type(), so FPARAMS had to be handled
3346 here. I changed the location to be the appropriate argument
3347 kinds rather than LOC_LOCAL. pai/1997-08-08 */
3348 /* Note 3: Well, the fix in Note 2 above broke argument printing
3349 in traceback frames, and further it makes assumptions about the
3350 order of the FPARAM entries from HP compilers (cc and aCC in particular
3351 generate them in reverse orders -- fixing one breaks for the other).
3352 So I've added code in hpread_read_function_type() to add fparams
3353 to a param_symbols list for the current context level. These are
3354 then merged into local_symbols when a function end is reached.
3355 pai/1997-08-11 */
3356
3357 break; /* do nothing; handled in hpread_read_function_type() */
3358
3359 #if 0 /* Old code */
3360 if (dn_bufp->dfparam.regparam)
3361 SYMBOL_CLASS (sym) = LOC_REGISTER;
3362 else if (dn_bufp->dfparam.indirect)
3363 SYMBOL_CLASS (sym) = LOC_REF_ARG;
3364 else
3365 SYMBOL_CLASS (sym) = LOC_ARG;
3366 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
3367 if (dn_bufp->dfparam.copyparam)
3368 {
3369 SYMBOL_VALUE (sym) = dn_bufp->dfparam.location;
3370 #ifdef HPREAD_ADJUST_STACK_ADDRESS
3371 SYMBOL_VALUE (sym)
3372 += HPREAD_ADJUST_STACK_ADDRESS (CURRENT_FUNCTION_VALUE (objfile));
3373 #endif
3374 }
3375 else
3376 SYMBOL_VALUE (sym) = dn_bufp->dfparam.location;
3377 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->dfparam.type, objfile);
3378 add_symbol_to_list (sym, &fparam_symbols);
3379 break;
3380 #endif
3381
3382 case DNTT_TYPE_SVAR:
3383 /* Static variables. */
3384 SYMBOL_CLASS (sym) = LOC_STATIC;
3385
3386 /* Note: There is a case that arises with globals in shared
3387 * libraries where we need to set the address to LOC_INDIRECT.
3388 * This case is if you have a global "g" in one library, and
3389 * it is referenced "extern <type> g;" in another library.
3390 * If we're processing the symbols for the referencing library,
3391 * we'll see a global "g", but in this case the address given
3392 * in the symbol table contains a pointer to the real "g".
3393 * We use the storage class LOC_INDIRECT to indicate this. RT
3394 */
3395 if (is_in_import_list (SYMBOL_NAME (sym), objfile))
3396 SYMBOL_CLASS (sym) = LOC_INDIRECT;
3397
3398 SYMBOL_VALUE_ADDRESS (sym) = dn_bufp->dsvar.location + data_offset;
3399 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->dsvar.type, objfile);
3400
3401 if (dn_bufp->dsvar.global)
3402 add_symbol_to_list (sym, &global_symbols);
3403
3404 else if (WITHIN_FUNCTION (objfile))
3405 add_symbol_to_list (sym, &local_symbols);
3406
3407 else
3408 add_symbol_to_list (sym, &file_symbols);
3409
3410 if (dn_bufp->dsvar.thread_specific)
3411 {
3412 /* Thread-local variable.
3413 */
3414 SYMBOL_CLASS (sym) = LOC_THREAD_LOCAL_STATIC;
3415 SYMBOL_BASEREG (sym) = CR27_REGNUM;
3416
3417 if (objfile->flags & OBJF_SHARED)
3418 {
3419 /*
3420 * This variable is not only thread local but
3421 * in a shared library.
3422 *
3423 * Alas, the shared lib structures are private
3424 * to "somsolib.c". But C lets us point to one.
3425 */
3426 struct so_list *so;
3427
3428 if (objfile->obj_private == NULL)
3429 error ("Internal error in reading shared library information.");
3430
3431 so = ((obj_private_data_t *) (objfile->obj_private))->so_info;
3432 if (so == NULL)
3433 error ("Internal error in reading shared library information.");
3434
3435 /* Thread-locals in shared libraries do NOT have the
3436 * standard offset ("data_offset"), so we re-calculate
3437 * where to look for this variable, using a call-back
3438 * to interpret the private shared-library data.
3439 */
3440 SYMBOL_VALUE_ADDRESS (sym) = dn_bufp->dsvar.location +
3441 so_lib_thread_start_addr (so);
3442 }
3443 }
3444 break;
3445
3446 case DNTT_TYPE_DVAR:
3447 /* Dynamic variables. */
3448 if (dn_bufp->ddvar.regvar)
3449 SYMBOL_CLASS (sym) = LOC_REGISTER;
3450 else
3451 SYMBOL_CLASS (sym) = LOC_LOCAL;
3452
3453 SYMBOL_VALUE (sym) = dn_bufp->ddvar.location;
3454 #ifdef HPREAD_ADJUST_STACK_ADDRESS
3455 SYMBOL_VALUE (sym)
3456 += HPREAD_ADJUST_STACK_ADDRESS (CURRENT_FUNCTION_VALUE (objfile));
3457 #endif
3458 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->ddvar.type, objfile);
3459 if (dn_bufp->ddvar.global)
3460 add_symbol_to_list (sym, &global_symbols);
3461 else if (WITHIN_FUNCTION (objfile))
3462 add_symbol_to_list (sym, &local_symbols);
3463 else
3464 add_symbol_to_list (sym, &file_symbols);
3465 break;
3466
3467 case DNTT_TYPE_CONST:
3468 /* A constant (pascal?). */
3469 SYMBOL_CLASS (sym) = LOC_CONST;
3470 SYMBOL_VALUE (sym) = dn_bufp->dconst.location;
3471 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->dconst.type, objfile);
3472 if (dn_bufp->dconst.global)
3473 add_symbol_to_list (sym, &global_symbols);
3474 else if (WITHIN_FUNCTION (objfile))
3475 add_symbol_to_list (sym, &local_symbols);
3476 else
3477 add_symbol_to_list (sym, &file_symbols);
3478 break;
3479
3480 case DNTT_TYPE_TYPEDEF:
3481 /* A typedef. We do want to process these, since a name is
3482 * added to the namespace for the typedef'ed name.
3483 */
3484 SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE;
3485 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->dtype.type, objfile);
3486 if (dn_bufp->dtype.global)
3487 add_symbol_to_list (sym, &global_symbols);
3488 else if (WITHIN_FUNCTION (objfile))
3489 add_symbol_to_list (sym, &local_symbols);
3490 else
3491 add_symbol_to_list (sym, &file_symbols);
3492 break;
3493
3494 case DNTT_TYPE_TAGDEF:
3495 {
3496 int global = dn_bufp->dtag.global;
3497 /* Structure, union, enum, template, or class tag definition */
3498 /* We do want to process these, since a name is
3499 * added to the namespace for the tag name (and if C++ class,
3500 * for the typename also).
3501 */
3502 SYMBOL_NAMESPACE (sym) = STRUCT_NAMESPACE;
3503
3504 /* The tag contains in its "type" field a pointer to the
3505 * DNTT_TYPE_STRUCT, DNTT_TYPE_UNION, DNTT_TYPE_ENUM,
3506 * DNTT_TYPE_CLASS or DNTT_TYPE_TEMPLATE
3507 * record that actually defines the type.
3508 */
3509 SYMBOL_TYPE (sym) = hpread_type_lookup (dn_bufp->dtype.type, objfile);
3510 TYPE_NAME (sym->type) = SYMBOL_NAME (sym);
3511 TYPE_TAG_NAME (sym->type) = SYMBOL_NAME (sym);
3512 if (dn_bufp->dtag.global)
3513 add_symbol_to_list (sym, &global_symbols);
3514 else if (WITHIN_FUNCTION (objfile))
3515 add_symbol_to_list (sym, &local_symbols);
3516 else
3517 add_symbol_to_list (sym, &file_symbols);
3518
3519 /* If this is a C++ class, then we additionally
3520 * need to define a typedef for the
3521 * class type. E.g., so that the name "c" becomes visible as
3522 * a type name when the user says "class c { ... }".
3523 * In order to figure this out, we need to chase down the "type"
3524 * field to get to the DNTT_TYPE_CLASS record.
3525 *
3526 * We also add the typename for ENUM. Though this isn't
3527 * strictly correct, it is necessary because of the debug info
3528 * generated by the aCC compiler, in which we cannot
3529 * distinguish between:
3530 * enum e { ... };
3531 * and
3532 * typedef enum { ... } e;
3533 * I.e., the compiler emits the same debug info for the above
3534 * two cases, in both cases "e" appearing as a tagdef.
3535 * Therefore go ahead and generate the typename so that
3536 * "ptype e" will work in the above cases.
3537 *
3538 * We also add the typename for TEMPLATE, so as to allow "ptype t"
3539 * when "t" is a template name.
3540 */
3541 if (dn_bufp->dtype.type.dnttp.index < LNTT_SYMCOUNT (objfile))
3542 dn_bufp = hpread_get_lntt (dn_bufp->dtag.type.dnttp.index, objfile);
3543 else
3544 {
3545 complain (&hpread_tagdef_complaint);
3546 return;
3547 }
3548 if (dn_bufp->dblock.kind == DNTT_TYPE_CLASS ||
3549 dn_bufp->dblock.kind == DNTT_TYPE_ENUM ||
3550 dn_bufp->dblock.kind == DNTT_TYPE_TEMPLATE)
3551 {
3552 struct symbol *newsym;
3553
3554 newsym = (struct symbol *) obstack_alloc (&objfile->symbol_obstack,
3555 sizeof (struct symbol));
3556 memset (newsym, 0, sizeof (struct symbol));
3557 SYMBOL_NAME (newsym) = name;
3558 SYMBOL_LANGUAGE (newsym) = language_auto;
3559 SYMBOL_NAMESPACE (newsym) = VAR_NAMESPACE;
3560 SYMBOL_LINE (newsym) = 0;
3561 SYMBOL_VALUE (newsym) = 0;
3562 SYMBOL_CLASS (newsym) = LOC_TYPEDEF;
3563 SYMBOL_TYPE (newsym) = sym->type;
3564 if (global)
3565 add_symbol_to_list (newsym, &global_symbols);
3566 else if (WITHIN_FUNCTION (objfile))
3567 add_symbol_to_list (newsym, &local_symbols);
3568 else
3569 add_symbol_to_list (newsym, &file_symbols);
3570 }
3571 }
3572 break;
3573
3574 case DNTT_TYPE_POINTER:
3575 /* Declares a pointer type. Should not be necessary to do anything
3576 * with the type at this level; these are processed
3577 * at the hpread_type_lookup() level.
3578 */
3579 break;
3580
3581 case DNTT_TYPE_ENUM:
3582 /* Declares an enum type. Should not be necessary to do anything
3583 * with the type at this level; these are processed
3584 * at the hpread_type_lookup() level.
3585 */
3586 break;
3587
3588 case DNTT_TYPE_MEMENUM:
3589 /* Member of enum */
3590 /* Ignored at this level, but hpread_read_enum_type() will take
3591 * care of walking the list of enumeration members.
3592 */
3593 break;
3594
3595 case DNTT_TYPE_SET:
3596 /* Declares a set type. Should not be necessary to do anything
3597 * with the type at this level; these are processed
3598 * at the hpread_type_lookup() level.
3599 */
3600 break;
3601
3602 case DNTT_TYPE_SUBRANGE:
3603 /* Declares a subrange type. Should not be necessary to do anything
3604 * with the type at this level; these are processed
3605 * at the hpread_type_lookup() level.
3606 */
3607 break;
3608
3609 case DNTT_TYPE_ARRAY:
3610 /* Declares an array type. Should not be necessary to do anything
3611 * with the type at this level; these are processed
3612 * at the hpread_type_lookup() level.
3613 */
3614 break;
3615
3616 case DNTT_TYPE_STRUCT:
3617 case DNTT_TYPE_UNION:
3618 /* Declares an struct/union type.
3619 * Should not be necessary to do anything
3620 * with the type at this level; these are processed
3621 * at the hpread_type_lookup() level.
3622 */
3623 break;
3624
3625 case DNTT_TYPE_FIELD:
3626 /* Structure/union/class field */
3627 /* Ignored at this level, but hpread_read_struct_type() will take
3628 * care of walking the list of structure/union/class members.
3629 */
3630 break;
3631
3632 /* DNTT_TYPE_VARIANT is not handled by GDB */
3633
3634 /* DNTT_TYPE_FILE is not handled by GDB */
3635
3636 case DNTT_TYPE_FUNCTYPE:
3637 /* Function type */
3638 /* Ignored at this level, handled within hpread_type_lookup() */
3639 break;
3640
3641 case DNTT_TYPE_WITH:
3642 /* This is emitted within methods to indicate "with <class>"
3643 * scoping rules (i.e., indicate that the class data members
3644 * are directly visible).
3645 * However, since GDB already infers this by looking at the
3646 * "this" argument, interpreting the DNTT_TYPE_WITH
3647 * symbol record is unnecessary.
3648 */
3649 break;
3650
3651 case DNTT_TYPE_COMMON:
3652 /* FORTRAN common. Not yet handled. */
3653 complain (&hpread_unhandled_common_complaint);
3654 break;
3655
3656 /* DNTT_TYPE_COBSTRUCT is not handled by GDB. */
3657 /* DNTT_TYPE_XREF is not handled by GDB. */
3658 /* DNTT_TYPE_SA is not handled by GDB. */
3659 /* DNTT_TYPE_MACRO is not handled by GDB */
3660
3661 case DNTT_TYPE_BLOCKDATA:
3662 /* Not sure what this is - part of FORTRAN support maybe?
3663 * Anyway, not yet handled.
3664 */
3665 complain (&hpread_unhandled_blockdata_complaint);
3666 break;
3667
3668 case DNTT_TYPE_CLASS_SCOPE:
3669
3670
3671
3672 /* The compiler brackets member functions with a CLASS_SCOPE/END
3673 * pair of records, presumably to put them in a different scope
3674 * from the module scope where they are normally defined.
3675 * E.g., in the situation:
3676 * void f() { ... }
3677 * void c::f() { ...}
3678 * The member function "c::f" will be bracketed by a CLASS_SCOPE/END.
3679 * This causes "break f" at the module level to pick the
3680 * the file-level function f(), not the member function
3681 * (which needs to be referenced via "break c::f").
3682 *
3683 * Here we record the class name to generate the demangled names of
3684 * member functions later.
3685 *
3686 * FIXME Not being used now for anything -- cplus_demangle seems
3687 * enough for getting the class-qualified names of functions. We
3688 * may need this for handling nested classes and types. */
3689
3690 /* pai: FIXME Not handling nested classes for now -- need to
3691 * maintain a stack */
3692
3693 dn_temp = hpread_get_lntt (dn_bufp->dclass_scope.type.dnttp.index, objfile);
3694 if (dn_temp->dblock.kind == DNTT_TYPE_TAGDEF)
3695 class_scope_name = VT (objfile) + dn_temp->dtag.name;
3696 else
3697 class_scope_name = NULL;
3698
3699 #if 0
3700
3701 /* Begin a new scope. */
3702 SL_INDEX (objfile) = hpread_record_lines (current_subfile,
3703 SL_INDEX (objfile),
3704 dn_bufp->dclass_scope.address,
3705 objfile, offset);
3706 valu = hpread_get_location (dn_bufp->dclass_scope.address, objfile);
3707 valu += offset; /* Relocate for dynamic loading */
3708 desc = hpread_get_scope_start (dn_bufp->dclass_scope.address, objfile);
3709 /* We use the scope start DNTT index as the nesting depth identifier! */
3710 new = push_context (desc, valu);
3711 #endif
3712 break;
3713
3714 case DNTT_TYPE_REFERENCE:
3715 /* Declares a C++ reference type. Should not be necessary to do anything
3716 * with the type at this level; these are processed
3717 * at the hpread_type_lookup() level.
3718 */
3719 break;
3720
3721 case DNTT_TYPE_PTRMEM:
3722 /* Declares a C++ pointer-to-data-member type. This does not
3723 * need to be handled at this level; being a type description it
3724 * is instead handled at the hpread_type_lookup() level.
3725 */
3726 break;
3727
3728 case DNTT_TYPE_PTRMEMFUNC:
3729 /* Declares a C++ pointer-to-function-member type. This does not
3730 * need to be handled at this level; being a type description it
3731 * is instead handled at the hpread_type_lookup() level.
3732 */
3733 break;
3734
3735 case DNTT_TYPE_CLASS:
3736 /* Declares a class type.
3737 * Should not be necessary to do anything
3738 * with the type at this level; these are processed
3739 * at the hpread_type_lookup() level.
3740 */
3741 break;
3742
3743 case DNTT_TYPE_GENFIELD:
3744 /* I believe this is used for class member functions */
3745 /* Ignored at this level, but hpread_read_struct_type() will take
3746 * care of walking the list of class members.
3747 */
3748 break;
3749
3750 case DNTT_TYPE_VFUNC:
3751 /* Virtual function */
3752 /* This does not have to be handled at this level; handled in
3753 * the course of processing class symbols.
3754 */
3755 break;
3756
3757 case DNTT_TYPE_MEMACCESS:
3758 /* DDE ignores this symbol table record.
3759 * It has something to do with "modified access" to class members.
3760 * I'll assume we can safely ignore it too.
3761 */
3762 break;
3763
3764 case DNTT_TYPE_INHERITANCE:
3765 /* These don't have to be handled here, since they are handled
3766 * within hpread_read_struct_type() in the process of constructing
3767 * a class type.
3768 */
3769 break;
3770
3771 case DNTT_TYPE_FRIEND_CLASS:
3772 case DNTT_TYPE_FRIEND_FUNC:
3773 /* These can safely be ignored, as GDB doesn't need this
3774 * info. DDE only uses it in "describe". We may later want
3775 * to extend GDB's "ptype" to give this info, but for now
3776 * it seems safe enough to ignore it.
3777 */
3778 break;
3779
3780 case DNTT_TYPE_MODIFIER:
3781 /* Intended to supply "modified access" to a type */
3782 /* From the way DDE handles this, it looks like it always
3783 * modifies a type. Therefore it is safe to ignore it at this
3784 * level, and handle it in hpread_type_lookup().
3785 */
3786 break;
3787
3788 case DNTT_TYPE_OBJECT_ID:
3789 /* Just ignore this - that's all DDE does */
3790 break;
3791
3792 case DNTT_TYPE_MEMFUNC:
3793 /* Member function */
3794 /* This does not have to be handled at this level; handled in
3795 * the course of processing class symbols.
3796 */
3797 break;
3798
3799 case DNTT_TYPE_DOC_MEMFUNC:
3800 /* Member function */
3801 /* This does not have to be handled at this level; handled in
3802 * the course of processing class symbols.
3803 */
3804 break;
3805
3806 case DNTT_TYPE_TEMPLATE:
3807 /* Template - sort of the header for a template definition,
3808 * which like a class, points to a member list and also points
3809 * to a TEMPLATE_ARG list of type-arguments.
3810 * We do not need to process TEMPLATE records at this level though.
3811 */
3812 break;
3813
3814 case DNTT_TYPE_TEMPLATE_ARG:
3815 /* The TEMPLATE record points to an argument list of
3816 * TEMPLATE_ARG records, each of which describes one
3817 * of the type-arguments.
3818 * We do not need to process TEMPLATE_ARG records at this level though.
3819 */
3820 break;
3821
3822 case DNTT_TYPE_FUNC_TEMPLATE:
3823 /* This will get emitted for member functions of templates.
3824 * But we don't need to process this record at this level though,
3825 * we will process it in the course of processing a TEMPLATE
3826 * record.
3827 */
3828 break;
3829
3830 case DNTT_TYPE_LINK:
3831 /* The LINK record is used to link up templates with instantiations. */
3832 /* It is not clear why this is needed, and furthermore aCC does
3833 * not appear to generate this, so I think we can safely ignore it. - RT
3834 */
3835 break;
3836
3837 /* DNTT_TYPE_DYN_ARRAY_DESC is not handled by GDB */
3838 /* DNTT_TYPE_DESC_SUBRANGE is not handled by GDB */
3839 /* DNTT_TYPE_BEGIN_EXT is not handled by GDB */
3840 /* DNTT_TYPE_INLN is not handled by GDB */
3841 /* DNTT_TYPE_INLN_LIST is not handled by GDB */
3842 /* DNTT_TYPE_ALIAS is not handled by GDB */
3843
3844 default:
3845 break;
3846 }
3847 }
3848
3849 /* Get nesting depth for a DNTT entry.
3850 * DN_BUFP points to a DNTT entry.
3851 * OBJFILE is the object file.
3852 * REPORT_NESTED is a flag; if 0, real nesting depth is
3853 * reported, if it is 1, the function simply returns a
3854 * non-zero value if the nesting depth is anything > 0.
3855 *
3856 * Return value is an integer. 0 => not a local type / name
3857 * positive return => type or name is local to some
3858 * block or function.
3859 */
3860
3861
3862 /* elz: ATTENTION: FIXME: NOTE: WARNING!!!!
3863 this function now returns 0 right away. It was taking too much time
3864 at start up. Now, though, the local types are not handled correctly.
3865 */
3866
3867
3868 static int
3869 hpread_get_scope_depth (union dnttentry *dn_bufp, struct objfile *objfile,
3870 int report_nested)
3871 {
3872 register int index;
3873 register union dnttentry *dn_tmp;
3874 register short depth = 0;
3875 /****************************/
3876 return 0;
3877 /****************************/
3878
3879 index = (((char *) dn_bufp) - LNTT (objfile)) / (sizeof (struct dntt_type_block));
3880
3881 while (--index >= 0)
3882 {
3883 dn_tmp = hpread_get_lntt (index, objfile);
3884 switch (dn_tmp->dblock.kind)
3885 {
3886 case DNTT_TYPE_MODULE:
3887 return depth;
3888 case DNTT_TYPE_END:
3889 /* index is signed int; dnttp.index is 29-bit unsigned int! */
3890 index = (int) dn_tmp->dend.beginscope.dnttp.index;
3891 break;
3892 case DNTT_TYPE_BEGIN:
3893 case DNTT_TYPE_FUNCTION:
3894 case DNTT_TYPE_DOC_FUNCTION:
3895 case DNTT_TYPE_WITH:
3896 case DNTT_TYPE_COMMON:
3897 case DNTT_TYPE_CLASS_SCOPE:
3898 depth++;
3899 if (report_nested)
3900 return 1;
3901 break;
3902 default:
3903 break;
3904 }
3905 }
3906 return depth;
3907 }
3908
3909 /* Adjust the bitoffsets for all fields of an anonymous union of
3910 type TYPE by negative BITS. This handles HP aCC's hideous habit
3911 of giving members of anonymous unions bit offsets relative to the
3912 enclosing structure instead of relative to the union itself. */
3913
3914 static void
3915 hpread_adjust_bitoffsets (struct type *type, int bits)
3916 {
3917 register int i;
3918
3919 /* This is done only for unions; caller had better check that
3920 it is an anonymous one. */
3921 if (TYPE_CODE (type) != TYPE_CODE_UNION)
3922 return;
3923
3924 /* Adjust each field; since this is a union, there are no base
3925 classes. Also no static membes. Also, no need for recursion as
3926 the members of this union if themeselves structs or unions, have
3927 the correct bitoffsets; if an anonymous union is a member of this
3928 anonymous union, the code in hpread_read_struct_type() will
3929 adjust for that. */
3930
3931 for (i = 0; i < TYPE_NFIELDS (type); i++)
3932 TYPE_FIELD_BITPOS (type, i) -= bits;
3933 }
3934
3935 /* Because of quirks in HP compilers' treatment of anonymous unions inside
3936 classes, we have to chase through a chain of threaded FIELD entries.
3937 If we encounter an anonymous union in the chain, we must recursively skip over
3938 that too.
3939
3940 This function does a "next" in the chain of FIELD entries, but transparently
3941 skips over anonymous unions' fields (recursively).
3942
3943 Inputs are the number of times to do "next" at the top level, the dnttpointer
3944 (FIELD) and entry pointer (FIELDP) for the dntt record corresponding to it,
3945 and the ubiquitous objfile parameter. (Note: FIELDP is a **.) Return value
3946 is a dnttpointer for the new field after all the skipped ones */
3947
3948 static dnttpointer
3949 hpread_get_next_skip_over_anon_unions (int skip_fields, dnttpointer field,
3950 union dnttentry **fieldp,
3951 struct objfile *objfile)
3952 {
3953 struct type *anon_type;
3954 register int i;
3955 int bitoffset;
3956 char *name;
3957
3958 for (i = 0; i < skip_fields; i++)
3959 {
3960 /* Get type of item we're looking at now; recursively processes the types
3961 of these intermediate items we skip over, so they aren't lost. */
3962 anon_type = hpread_type_lookup ((*fieldp)->dfield.type, objfile);
3963 anon_type = CHECK_TYPEDEF (anon_type);
3964 bitoffset = (*fieldp)->dfield.bitoffset;
3965 name = VT (objfile) + (*fieldp)->dfield.name;
3966 /* First skip over one item to avoid stack death on recursion */
3967 field = (*fieldp)->dfield.nextfield;
3968 *fieldp = hpread_get_lntt (field.dnttp.index, objfile);
3969 /* Do we have another anonymous union? If so, adjust the bitoffsets
3970 of its members and skip over its members. */
3971 if ((TYPE_CODE (anon_type) == TYPE_CODE_UNION) &&
3972 (!name || STREQ (name, "")))
3973 {
3974 hpread_adjust_bitoffsets (anon_type, bitoffset);
3975 field = hpread_get_next_skip_over_anon_unions (TYPE_NFIELDS (anon_type), field, fieldp, objfile);
3976 }
3977 }
3978 return field;
3979 }
This page took 0.220569 seconds and 4 git commands to generate.