Added new slot to objfile struct to be shared by all stab-reading formats.
[deliverable/binutils-gdb.git] / gdb / paread.c
CommitLineData
684a832f
SG
1/* Read HP PA/Risc object files for GDB.
2 Copyright 1991, 1992 Free Software Foundation, Inc.
3 Written by Fred Fish at Cygnus Support.
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
684a832f
SG
21#include "defs.h"
22#include "bfd.h"
1225fcbd 23#include <time.h> /* For time_t in libbfd.h. */
ddf5d7e8 24#include <sys/types.h> /* For time_t, if not in time.h. */
684a832f 25#include "libbfd.h"
61a29659 26#include "som.h"
684a832f
SG
27#include <syms.h>
28#include "symtab.h"
29#include "symfile.h"
30#include "objfiles.h"
31#include "buildsym.h"
2731625a 32#include "stabsread.h"
684a832f
SG
33#include "gdb-stabs.h"
34#include "complaints.h"
35#include <string.h>
36#include "demangle.h"
37#include <sys/file.h>
1225fcbd
JK
38
39/* Size of n_value and n_strx fields in a stab symbol. */
40#define BYTES_IN_WORD 4
41
0213d96f 42#include "aout/aout64.h"
684a832f
SG
43
44/* Various things we might complain about... */
45
46static void
47pa_symfile_init PARAMS ((struct objfile *));
48
49static void
50pa_new_init PARAMS ((struct objfile *));
51
fa9265e5
SG
52static void
53read_unwind_info PARAMS ((struct objfile *));
54
684a832f
SG
55static void
56pa_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
57
58static void
59pa_symfile_finish PARAMS ((struct objfile *));
60
61static void
62pa_symtab_read PARAMS ((bfd *, CORE_ADDR, struct objfile *));
63
64static void
65free_painfo PARAMS ((PTR));
66
67static struct section_offsets *
68pa_symfile_offsets PARAMS ((struct objfile *, CORE_ADDR));
69
70static void
71record_minimal_symbol PARAMS ((char *, CORE_ADDR,
72 enum minimal_symbol_type,
73 struct objfile *));
74
75static void
76record_minimal_symbol (name, address, ms_type, objfile)
77 char *name;
78 CORE_ADDR address;
79 enum minimal_symbol_type ms_type;
80 struct objfile *objfile;
81{
82 name = obsavestring (name, strlen (name), &objfile -> symbol_obstack);
83 prim_record_minimal_symbol (name, address, ms_type);
84}
85
86/*
87
88LOCAL FUNCTION
89
90 pa_symtab_read -- read the symbol table of a PA file
91
92SYNOPSIS
93
94 void pa_symtab_read (bfd *abfd, CORE_ADDR addr,
95 struct objfile *objfile)
96
97DESCRIPTION
98
99 Given an open bfd, a base address to relocate symbols to, and a
100 flag that specifies whether or not this bfd is for an executable
101 or not (may be shared library for example), add all the global
102 function and data symbols to the minimal symbol table.
103*/
104
105static void
106pa_symtab_read (abfd, addr, objfile)
107 bfd *abfd;
108 CORE_ADDR addr;
109 struct objfile *objfile;
110{
111 unsigned int number_of_symbols;
112 unsigned int i;
113 int val;
114 char *stringtab;
3cde1ffa
JK
115 struct symbol_dictionary_record *buf, *bufp, *endbufp;
116 char *symname;
0213d96f 117 CONST int symsize = sizeof (struct symbol_dictionary_record);
684a832f 118
0213d96f 119 number_of_symbols = bfd_get_symcount (abfd);
684a832f 120
0213d96f
SG
121 buf = alloca (symsize * number_of_symbols);
122 bfd_seek (abfd, obj_sym_filepos (abfd), L_SET);
123 val = bfd_read (buf, symsize * number_of_symbols, 1, abfd);
124 if (val != symsize * number_of_symbols)
684a832f
SG
125 error ("Couldn't read symbol dictionary!");
126
0213d96f
SG
127 stringtab = alloca (obj_stringtab_size (abfd));
128 bfd_seek (abfd, obj_str_filepos (abfd), L_SET);
129 val = bfd_read (stringtab, obj_stringtab_size (abfd), 1, abfd);
130 if (val != obj_stringtab_size (abfd))
684a832f 131 error ("Can't read in HP string table.");
3cde1ffa
JK
132
133 endbufp = buf + number_of_symbols;
134 for (bufp = buf; bufp < endbufp; ++bufp)
684a832f
SG
135 {
136 enum minimal_symbol_type ms_type;
137
138 QUIT;
139
3cde1ffa
JK
140 switch (bufp->symbol_scope)
141 {
142 case SS_UNIVERSAL:
143 switch (bufp->symbol_type)
144 {
145 case ST_SYM_EXT:
146 case ST_ARG_EXT:
147 continue;
148
149 case ST_CODE:
150 case ST_PRI_PROG:
151 case ST_SEC_PROG:
152 case ST_ENTRY:
153 case ST_MILLICODE:
154 symname = bufp->name.n_strx + stringtab;
155 ms_type = mst_text;
156 bufp->symbol_value &= ~0x3; /* clear out permission bits */
157 break;
158 case ST_DATA:
159 symname = bufp->name.n_strx + stringtab;
160 ms_type = mst_data;
161 break;
162 default:
163 continue;
164 }
165 break;
166
247145e6
JK
167#if 0
168 /* SS_GLOBAL and SS_LOCAL are two names for the same thing (!). */
3cde1ffa 169 case SS_GLOBAL:
247145e6 170#endif
3cde1ffa
JK
171 case SS_LOCAL:
172 switch (bufp->symbol_type)
173 {
174 case ST_SYM_EXT:
175 case ST_ARG_EXT:
176 continue;
177
178 case ST_CODE:
179 symname = bufp->name.n_strx + stringtab;
247145e6
JK
180 ms_type = mst_file_text;
181 bufp->symbol_value &= ~0x3; /* clear out permission bits */
182
183 check_strange_names:
3cde1ffa
JK
184 /* GAS leaves symbols with the prefixes "LS$", "LBB$",
185 and "LBE$" in .o files after assembling. And thus
186 they appear in the final executable. This can
187 cause problems if these special symbols have the
247145e6 188 same value as real symbols. So ignore them. Also "LC$". */
3cde1ffa 189 if (*symname == 'L'
247145e6 190 && (symname[2] == '$' || symname[3] == '$'))
3cde1ffa 191 continue;
3cde1ffa
JK
192 break;
193
194 case ST_PRI_PROG:
195 case ST_SEC_PROG:
196 case ST_ENTRY:
197 case ST_MILLICODE:
198 symname = bufp->name.n_strx + stringtab;
199 ms_type = mst_file_text;
200 bufp->symbol_value &= ~0x3; /* clear out permission bits */
201 break;
247145e6 202
3cde1ffa
JK
203 case ST_DATA:
204 symname = bufp->name.n_strx + stringtab;
205 ms_type = mst_file_data;
247145e6
JK
206 goto check_strange_names;
207
3cde1ffa
JK
208 default:
209 continue;
210 }
247145e6
JK
211 break;
212
3cde1ffa
JK
213 default:
214 continue;
215 }
684a832f 216
0213d96f 217 if (bufp->name.n_strx > obj_stringtab_size (abfd))
684a832f
SG
218 error ("Invalid symbol data; bad HP string table offset: %d",
219 bufp->name.n_strx);
220
3cde1ffa 221 record_minimal_symbol (symname,
684a832f
SG
222 bufp->symbol_value, ms_type,
223 objfile);
224 }
225
226 install_minimal_symbols (objfile);
227}
228
fa9265e5
SG
229/* Read in the backtrace information stored in the `$UNWIND_START$' section of
230 the object file. This info is used mainly by find_unwind_entry() to find
231 out the stack frame size and frame pointer used by procedures. We put
232 everything on the psymbol obstack in the objfile so that it automatically
233 gets freed when the objfile is destroyed. */
234
235static void
236read_unwind_info (objfile)
237 struct objfile *objfile;
238{
239 asection *unwind_sec;
240 struct obj_unwind_info *ui;
241
242 ui = obstack_alloc (&objfile->psymbol_obstack,
243 sizeof (struct obj_unwind_info));
244
245 ui->table = NULL;
246 ui->cache = NULL;
247 ui->last = -1;
248
249 unwind_sec = bfd_get_section_by_name (objfile->obfd,
250 "$UNWIND_START$");
251 if (unwind_sec)
252 {
253 int size;
254 int i, *ip;
255
256 size = bfd_section_size (objfile->obfd, unwind_sec);
257 ui->table = obstack_alloc (&objfile->psymbol_obstack, size);
258 ui->last = size / sizeof (struct unwind_table_entry) - 1;
259
260 bfd_get_section_contents (objfile->obfd, unwind_sec, ui->table,
261 0, size);
262
263 OBJ_UNWIND_INFO (objfile) = ui;
264 }
265}
266
684a832f
SG
267/* Scan and build partial symbols for a symbol file.
268 We have been initialized by a call to pa_symfile_init, which
269 currently does nothing.
270
271 SECTION_OFFSETS is a set of offsets to apply to relocate the symbols
272 in each section. This is ignored, as it isn't needed for the PA.
273
274 MAINLINE is true if we are reading the main symbol
275 table (as opposed to a shared lib or dynamically loaded file).
276
277 This function only does the minimum work necessary for letting the
278 user "name" things symbolically; it does not read the entire symtab.
279 Instead, it reads the external and static symbols and puts them in partial
280 symbol tables. When more extensive information is requested of a
281 file, the corresponding partial symbol table is mutated into a full
282 fledged symbol table by going back and reading the symbols
283 for real.
284
285 We look for sections with specific names, to tell us what debug
286 format to look for: FIXME!!!
287
288 pastab_build_psymtabs() handles STABS symbols.
289
290 Note that PA files have a "minimal" symbol table, which is vaguely
291 reminiscent of a COFF symbol table, but has only the minimal information
292 necessary for linking. We process this also, and use the information to
293 build gdb's minimal symbol table. This gives us some minimal debugging
294 capability even for files compiled without -g. */
295
296static void
297pa_symfile_read (objfile, section_offsets, mainline)
298 struct objfile *objfile;
299 struct section_offsets *section_offsets;
300 int mainline;
301{
302 bfd *abfd = objfile->obfd;
303 struct cleanup *back_to;
304 CORE_ADDR offset;
305
306 init_minimal_symbol_collection ();
307 back_to = make_cleanup (discard_minimal_symbols, 0);
308
309 make_cleanup (free_painfo, (PTR) objfile);
310
311 /* Process the normal PA symbol table first. */
312
313 /* FIXME, should take a section_offsets param, not just an offset. */
314
315 offset = ANOFFSET (section_offsets, 0);
316 pa_symtab_read (abfd, offset, objfile);
317
318 /* Now process debugging information, which is contained in
319 special PA sections. */
320
321 pastab_build_psymtabs (objfile, section_offsets, mainline);
322
fa9265e5
SG
323 read_unwind_info(objfile);
324
684a832f
SG
325 do_cleanups (back_to);
326}
327
965a5c32 328/* This cleans up the objfile's sym_stab_info pointer, and the chain of
684a832f
SG
329 stab_section_info's, that might be dangling from it. */
330
331static void
332free_painfo (objp)
333 PTR objp;
334{
335 struct objfile *objfile = (struct objfile *)objp;
336 struct dbx_symfile_info *dbxinfo = (struct dbx_symfile_info *)
965a5c32 337 objfile->sym_stab_info;
684a832f
SG
338 struct stab_section_info *ssi, *nssi;
339
340 ssi = dbxinfo->stab_section_info;
341 while (ssi)
342 {
343 nssi = ssi->next;
344 mfree (objfile->md, ssi);
345 ssi = nssi;
346 }
347
348 dbxinfo->stab_section_info = 0; /* Just say No mo info about this. */
349}
350
351/* Initialize anything that needs initializing when a completely new symbol
352 file is specified (not just adding some symbols from another file, e.g. a
353 shared library).
354
355 We reinitialize buildsym, since we may be reading stabs from a PA file. */
356
357static void
358pa_new_init (ignore)
359 struct objfile *ignore;
360{
361 stabsread_new_init ();
362 buildsym_new_init ();
363}
364
365/* Perform any local cleanups required when we are done with a particular
366 objfile. I.E, we are in the process of discarding all symbol information
367 for an objfile, freeing up all memory held for it, and unlinking the
368 objfile struct from the global list of known objfiles. */
369
370static void
371pa_symfile_finish (objfile)
372 struct objfile *objfile;
373{
965a5c32 374 if (objfile -> sym_stab_info != NULL)
684a832f 375 {
965a5c32 376 mfree (objfile -> md, objfile -> sym_stab_info);
684a832f
SG
377 }
378}
379
684a832f
SG
380/* PA specific initialization routine for reading symbols.
381
382 It is passed a pointer to a struct sym_fns which contains, among other
383 things, the BFD for the file whose symbols are being read, and a slot for
384 a pointer to "private data" which we can fill with goodies.
385
386 This routine is almost a complete ripoff of dbx_symfile_init. The
387 common parts of these routines should be extracted and used instead of
388 duplicating this code. FIXME. */
389
390static void
391pa_symfile_init (objfile)
392 struct objfile *objfile;
393{
394 int val;
395 bfd *sym_bfd = objfile->obfd;
396 char *name = bfd_get_filename (sym_bfd);
0213d96f
SG
397 asection *stabsect; /* Section containing symbol table entries */
398 asection *stringsect; /* Section containing symbol name strings */
399
400 stabsect = bfd_get_section_by_name (sym_bfd, "$GDB_SYMBOLS$");
401 stringsect = bfd_get_section_by_name (sym_bfd, "$GDB_STRINGS$");
684a832f
SG
402
403 /* Allocate struct to keep track of the symfile */
965a5c32 404 objfile->sym_stab_info = (PTR)
684a832f
SG
405 xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
406
965a5c32 407 memset ((PTR) objfile->sym_stab_info, 0, sizeof (struct dbx_symfile_info));
0213d96f
SG
408
409 if (!stabsect)
410 return;
411
412 if (!stringsect)
413 error ("Found stabs, but not string section");
414
684a832f 415 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
0213d96f
SG
416#define STRING_TABLE_OFFSET (stringsect->filepos)
417#define SYMBOL_TABLE_OFFSET (stabsect->filepos)
684a832f
SG
418
419 /* FIXME POKING INSIDE BFD DATA STRUCTURES */
420
421 DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
422 DBX_TEXT_SECT (objfile) = bfd_get_section_by_name (sym_bfd, ".text");
423 if (!DBX_TEXT_SECT (objfile))
424 error ("Can't find .text section in symbol file");
425
1225fcbd
JK
426 /* FIXME: I suspect this should be external_nlist. The size of host
427 types like long and bfd_vma should not affect how we read the
428 file. */
0213d96f
SG
429 DBX_SYMBOL_SIZE (objfile) = sizeof (struct internal_nlist);
430 DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
431 / DBX_SYMBOL_SIZE (objfile);
684a832f
SG
432 DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
433
434 /* Read the string table and stash it away in the psymbol_obstack. It is
435 only needed as long as we need to expand psymbols into full symbols,
436 so when we blow away the psymbol the string table goes away as well.
437 Note that gdb used to use the results of attempting to malloc the
438 string table, based on the size it read, as a form of sanity check
439 for botched byte swapping, on the theory that a byte swapped string
440 table size would be so totally bogus that the malloc would fail. Now
441 that we put in on the psymbol_obstack, we can't do this since gdb gets
442 a fatal error (out of virtual memory) if the size is bogus. We can
443 however at least check to see if the size is zero or some negative
444 value. */
445
0213d96f 446 DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stringsect);
684a832f
SG
447
448 if (DBX_SYMCOUNT (objfile) == 0
449 || DBX_STRINGTAB_SIZE (objfile) == 0)
450 return;
451
452 if (DBX_STRINGTAB_SIZE (objfile) <= 0
453 || DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
454 error ("ridiculous string table size (%d bytes).",
455 DBX_STRINGTAB_SIZE (objfile));
456
457 DBX_STRINGTAB (objfile) =
458 (char *) obstack_alloc (&objfile -> psymbol_obstack,
459 DBX_STRINGTAB_SIZE (objfile));
460
461 /* Now read in the string table in one big gulp. */
462
463 val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
464 if (val < 0)
465 perror_with_name (name);
466 val = bfd_read (DBX_STRINGTAB (objfile), DBX_STRINGTAB_SIZE (objfile), 1,
467 sym_bfd);
93af329a
JK
468 if (val == 0)
469 error ("End of file reading string table");
470 else if (val < 0)
471 /* It's possible bfd_read should be setting bfd_error, and we should be
472 checking that. But currently it doesn't set bfd_error. */
684a832f 473 perror_with_name (name);
93af329a
JK
474 else if (val != DBX_STRINGTAB_SIZE (objfile))
475 error ("Short read reading string table");
684a832f
SG
476}
477
478/* PA specific parsing routine for section offsets.
479
480 Plain and simple for now. */
481
482static struct section_offsets *
483pa_symfile_offsets (objfile, addr)
484 struct objfile *objfile;
485 CORE_ADDR addr;
486{
487 struct section_offsets *section_offsets;
488 int i;
489
490 section_offsets = (struct section_offsets *)
491 obstack_alloc (&objfile -> psymbol_obstack,
492 sizeof (struct section_offsets) +
493 sizeof (section_offsets->offsets) * (SECT_OFF_MAX-1));
494
495 for (i = 0; i < SECT_OFF_MAX; i++)
496 ANOFFSET (section_offsets, i) = addr;
497
498 return section_offsets;
499}
500\f
501/* Register that we are able to handle PA object file formats. */
502
503/* This is probably a mistake. FIXME. Why can't the HP's use an ordinary
504 file format name with an -hppa suffix? */
505static struct sym_fns pa_sym_fns =
506{
507 "hppa", /* sym_name: name or name prefix of BFD target type */
508 4, /* sym_namelen: number of significant sym_name chars */
509 pa_new_init, /* sym_new_init: init anything gbl to entire symtab */
510 pa_symfile_init, /* sym_init: read initial info, setup for sym_read() */
511 pa_symfile_read, /* sym_read: read a symbol file into symtab */
512 pa_symfile_finish, /* sym_finish: finished with file, cleanup */
513 pa_symfile_offsets, /* sym_offsets: Translate ext. to int. relocation */
514 NULL /* next: pointer to next struct sym_fns */
515};
516
517void
518_initialize_paread ()
519{
520 add_symtab_fns (&pa_sym_fns);
521}
This page took 0.097224 seconds and 4 git commands to generate.