]>
Commit | Line | Data |
---|---|---|
c906108c SS |
1 | /* hpread.h |
2 | * Common include file for: | |
3 | * hp_symtab_read.c | |
4 | * hp_psymtab_read.c | |
5 | */ | |
6 | ||
7 | /* Copyright 1993, 1996 Free Software Foundation, Inc. | |
8 | ||
9 | This file is part of GDB. | |
10 | ||
11 | This program is free software; you can redistribute it and/or modify | |
12 | it under the terms of the GNU General Public License as published by | |
13 | the Free Software Foundation; either version 2 of the License, or | |
14 | (at your option) any later version. | |
15 | ||
16 | This program is distributed in the hope that it will be useful, | |
17 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | GNU General Public License for more details. | |
20 | ||
21 | You should have received a copy of the GNU General Public License | |
22 | along with this program; if not, write to the Free Software | |
c5aa993b JM |
23 | Foundation, Inc., 59 Temple Place - Suite 330, |
24 | Boston, MA 02111-1307, USA. | |
c906108c SS |
25 | |
26 | Written by the Center for Software Science at the University of Utah | |
27 | and by Cygnus Support. */ | |
28 | ||
29 | #include "defs.h" | |
30 | #include "bfd.h" | |
31 | #include "gdb_string.h" | |
32 | #include "hp-symtab.h" | |
33 | #include "syms.h" | |
34 | #include "symtab.h" | |
35 | #include "symfile.h" | |
36 | #include "objfiles.h" | |
37 | #include "buildsym.h" | |
38 | #include "complaints.h" | |
39 | #include "gdb-stabs.h" | |
40 | #include "gdbtypes.h" | |
41 | #include "demangle.h" | |
42 | ||
43 | /* Private information attached to an objfile which we use to find | |
44 | and internalize the HP C debug symbols within that objfile. */ | |
45 | ||
46 | struct hpread_symfile_info | |
c5aa993b JM |
47 | { |
48 | /* The contents of each of the debug sections (there are 4 of them). */ | |
49 | char *gntt; | |
50 | char *lntt; | |
51 | char *slt; | |
52 | char *vt; | |
c906108c | 53 | |
c5aa993b JM |
54 | /* We keep the size of the $VT$ section for range checking. */ |
55 | unsigned int vt_size; | |
c906108c | 56 | |
c5aa993b JM |
57 | /* Some routines still need to know the number of symbols in the |
58 | main debug sections ($LNTT$ and $GNTT$). */ | |
59 | unsigned int lntt_symcount; | |
60 | unsigned int gntt_symcount; | |
c906108c | 61 | |
c5aa993b JM |
62 | /* To keep track of all the types we've processed. */ |
63 | struct type **type_vector; | |
64 | int type_vector_length; | |
c906108c | 65 | |
c5aa993b JM |
66 | /* Keeps track of the beginning of a range of source lines. */ |
67 | sltpointer sl_index; | |
c906108c | 68 | |
c5aa993b JM |
69 | /* Some state variables we'll need. */ |
70 | int within_function; | |
c906108c | 71 | |
c5aa993b JM |
72 | /* Keep track of the current function's address. We may need to look |
73 | up something based on this address. */ | |
74 | unsigned int current_function_value; | |
75 | }; | |
c906108c SS |
76 | |
77 | /* Accessor macros to get at the fields. */ | |
78 | #define HPUX_SYMFILE_INFO(o) \ | |
79 | ((struct hpread_symfile_info *)((o)->sym_private)) | |
80 | #define GNTT(o) (HPUX_SYMFILE_INFO(o)->gntt) | |
81 | #define LNTT(o) (HPUX_SYMFILE_INFO(o)->lntt) | |
82 | #define SLT(o) (HPUX_SYMFILE_INFO(o)->slt) | |
83 | #define VT(o) (HPUX_SYMFILE_INFO(o)->vt) | |
84 | #define VT_SIZE(o) (HPUX_SYMFILE_INFO(o)->vt_size) | |
85 | #define LNTT_SYMCOUNT(o) (HPUX_SYMFILE_INFO(o)->lntt_symcount) | |
86 | #define GNTT_SYMCOUNT(o) (HPUX_SYMFILE_INFO(o)->gntt_symcount) | |
87 | #define TYPE_VECTOR(o) (HPUX_SYMFILE_INFO(o)->type_vector) | |
88 | #define TYPE_VECTOR_LENGTH(o) (HPUX_SYMFILE_INFO(o)->type_vector_length) | |
89 | #define SL_INDEX(o) (HPUX_SYMFILE_INFO(o)->sl_index) | |
90 | #define WITHIN_FUNCTION(o) (HPUX_SYMFILE_INFO(o)->within_function) | |
91 | #define CURRENT_FUNCTION_VALUE(o) (HPUX_SYMFILE_INFO(o)->current_function_value) | |
92 | ||
93 | /* Given the native debug symbol SYM, set NAMEP to the name associated | |
94 | with the debug symbol. Note we may be called with a debug symbol which | |
95 | has no associated name, in that case we return an empty string. | |
96 | ||
97 | Also note we "know" that the name for any symbol is always in the | |
98 | same place. Hence we don't have to conditionalize on the symbol type. */ | |
99 | #define SET_NAMESTRING(SYM, NAMEP, OBJFILE) \ | |
100 | if (! hpread_has_name ((SYM)->dblock.kind)) \ | |
101 | *NAMEP = ""; \ | |
102 | else if (((unsigned)(SYM)->dsfile.name) >= VT_SIZE (OBJFILE)) \ | |
103 | { \ | |
104 | complain (&string_table_offset_complaint, (char *) symnum); \ | |
105 | *NAMEP = ""; \ | |
106 | } \ | |
107 | else \ | |
108 | *NAMEP = (SYM)->dsfile.name + VT (OBJFILE) | |
109 | \f | |
110 | /* We put a pointer to this structure in the read_symtab_private field | |
111 | of the psymtab. */ | |
112 | ||
113 | struct symloc | |
c5aa993b JM |
114 | { |
115 | /* The offset within the file symbol table of first local symbol for | |
116 | this file. */ | |
c906108c | 117 | |
c5aa993b | 118 | int ldsymoff; |
c906108c | 119 | |
c5aa993b JM |
120 | /* Length (in bytes) of the section of the symbol table devoted to |
121 | this file's symbols (actually, the section bracketed may contain | |
122 | more than just this file's symbols). If ldsymlen is 0, the only | |
123 | reason for this thing's existence is the dependency list. | |
124 | Nothing else will happen when it is read in. */ | |
c906108c | 125 | |
c5aa993b JM |
126 | int ldsymlen; |
127 | }; | |
c906108c SS |
128 | |
129 | #define LDSYMOFF(p) (((struct symloc *)((p)->read_symtab_private))->ldsymoff) | |
130 | #define LDSYMLEN(p) (((struct symloc *)((p)->read_symtab_private))->ldsymlen) | |
131 | #define SYMLOC(p) ((struct symloc *)((p)->read_symtab_private)) | |
132 | \f | |
133 | /* FIXME: Shouldn't this stuff be in a .h file somewhere? */ | |
134 | /* Nonzero means give verbose info on gdb action. */ | |
135 | extern int info_verbose; | |
136 | ||
137 | /* Complaints about the symbols we have encountered. */ | |
138 | extern struct complaint string_table_offset_complaint; | |
139 | extern struct complaint lbrac_unmatched_complaint; | |
140 | extern struct complaint lbrac_mismatch_complaint; | |
141 | ||
a14ed312 | 142 | extern union sltentry *hpread_get_slt (int, struct objfile *); |
c906108c | 143 | |
a14ed312 | 144 | extern union dnttentry *hpread_get_lntt (int, struct objfile *); |
c906108c | 145 | |
a14ed312 | 146 | int hpread_has_name (enum dntt_entry_type); |
c906108c SS |
147 | |
148 | /* end of hpread.h */ |