]> Git Repo - binutils.git/blame - gdb/objfiles.c
Add and use definition for IN_SOLIB_TRAMPOLINE which allows wait_for_inferior
[binutils.git] / gdb / objfiles.c
CommitLineData
1ab3bf1b
JG
1/* GDB routines for manipulating objfiles.
2 Copyright 1992 Free Software Foundation, Inc.
3 Contributed by Cygnus Support, using pieces from other GDB modules.
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
21/* This file contains support routines for creating, manipulating, and
22 destroying objfile structures. */
23
1ab3bf1b
JG
24#include "defs.h"
25#include "bfd.h" /* Binary File Description */
26#include "symtab.h"
27#include "symfile.h"
28
318bf84f
FF
29#include <sys/types.h>
30#include <sys/stat.h>
31#include <fcntl.h>
1ab3bf1b
JG
32#include <obstack.h>
33
318bf84f
FF
34/* Prototypes for local functions */
35
36static int
b0246b3b 37open_mapped_file PARAMS ((char *filename, long mtime, int mapped));
318bf84f
FF
38
39static CORE_ADDR
40map_to_address PARAMS ((void));
41
1ab3bf1b
JG
42/* Externally visible variables that are owned by this module. */
43
44struct objfile *object_files; /* Linked list of all objfiles */
318bf84f 45int mapped_symbol_files; /* Try to use mapped symbol files */
1ab3bf1b 46
b0246b3b
FF
47/* Given a pointer to an initialized bfd (ABFD) and a flag that indicates
48 whether or not an objfile is to be mapped (MAPPED), allocate a new objfile
49 struct, fill it in as best we can, link it into the list of all known
50 objfiles, and return a pointer to the new objfile struct. */
1ab3bf1b
JG
51
52struct objfile *
b0246b3b 53allocate_objfile (abfd, mapped)
1ab3bf1b 54 bfd *abfd;
318bf84f 55 int mapped;
1ab3bf1b 56{
318bf84f
FF
57 struct objfile *objfile = NULL;
58 int fd;
59 void *md;
60 CORE_ADDR mapto;
61
62 mapped |= mapped_symbol_files;
63
64#if !defined(NO_MMALLOC) && defined(HAVE_MMAP)
65
66 /* If we can support mapped symbol files, try to open/reopen the mapped file
67 that corresponds to the file from which we wish to read symbols. If the
68 objfile is to be mapped, we must malloc the structure itself using the
69 mmap version, and arrange that all memory allocation for the objfile uses
70 the mmap routines. If we are reusing an existing mapped file, from which
71 we get our objfile pointer, we have to make sure that we update the
72 pointers to the alloc/free functions in the obstack, in case these
73 functions have moved within the current gdb. */
74
b0246b3b
FF
75 fd = open_mapped_file (bfd_get_filename (abfd), bfd_get_mtime (abfd),
76 mapped);
318bf84f
FF
77 if (fd >= 0)
78 {
b0246b3b 79 if (((mapto = map_to_address ()) == 0) ||
318bf84f
FF
80 ((md = mmalloc_attach (fd, (void *) mapto)) == NULL))
81 {
82 close (fd);
83 }
84 else if ((objfile = (struct objfile *) mmalloc_getkey (md, 0)) != NULL)
85 {
86 objfile -> md = md;
87 /* Update pointers to functions to *our* copies */
88 obstack_chunkfun (&objfile -> psymbol_obstack, xmmalloc);
89 obstack_freefun (&objfile -> psymbol_obstack, mfree);
90 obstack_chunkfun (&objfile -> symbol_obstack, xmmalloc);
91 obstack_freefun (&objfile -> symbol_obstack, mfree);
92 obstack_chunkfun (&objfile -> type_obstack, xmmalloc);
93 obstack_freefun (&objfile -> type_obstack, mfree);
94 /* Update memory corruption handler function addresses */
95 init_malloc (objfile -> md);
96 }
97 else
98 {
99 objfile = (struct objfile *) xmmalloc (md, sizeof (struct objfile));
100 (void) memset (objfile, 0, sizeof (struct objfile));
101 objfile -> md = md;
102 objfile -> flags |= OBJF_MAPPED;
103 mmalloc_setkey (objfile -> md, 0, objfile);
104 obstack_full_begin (&objfile -> psymbol_obstack, 0, 0,
105 xmmalloc, mfree, objfile -> md,
106 OBSTACK_MMALLOC_LIKE);
107 obstack_full_begin (&objfile -> symbol_obstack, 0, 0,
108 xmmalloc, mfree, objfile -> md,
109 OBSTACK_MMALLOC_LIKE);
110 obstack_full_begin (&objfile -> type_obstack, 0, 0,
111 xmmalloc, mfree, objfile -> md,
112 OBSTACK_MMALLOC_LIKE);
113 /* Set up to detect internal memory corruption */
114 init_malloc (objfile -> md);
115 }
116 }
117
118 if (mapped && (objfile == NULL))
119 {
b0246b3b
FF
120 warning ("symbol table for '%s' will not be mapped",
121 bfd_get_filename (abfd));
318bf84f 122 }
1ab3bf1b 123
318bf84f 124#else /* defined(NO_MMALLOC) || !defined(HAVE_MMAP) */
1ab3bf1b 125
318bf84f 126 if (mapped)
1ab3bf1b 127 {
318bf84f
FF
128 warning ("this version of gdb does not support mapped symbol tables.");
129
130 /* Turn off the global flag so we don't try to do mapped symbol tables
131 any more, which shuts up gdb unless the user specifically gives the
132 "mapped" keyword again. */
133
134 mapped_symbol_files = 0;
1ab3bf1b 135 }
318bf84f
FF
136
137#endif /* !defined(NO_MMALLOC) && defined(HAVE_MMAP) */
138
139 /* If we don't support mapped symbol files, didn't ask for the file to be
140 mapped, or failed to open the mapped file for some reason, then revert
141 back to an unmapped objfile. */
142
143 if (objfile == NULL)
1ab3bf1b
JG
144 {
145 objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
146 (void) memset (objfile, 0, sizeof (struct objfile));
318bf84f
FF
147 objfile -> md = NULL;
148 obstack_full_begin (&objfile -> psymbol_obstack, 0, 0, xmalloc, free,
149 (void *) 0, 0);
150 obstack_full_begin (&objfile -> symbol_obstack, 0, 0, xmalloc, free,
151 (void *) 0, 0);
152 obstack_full_begin (&objfile -> type_obstack, 0, 0, xmalloc, free,
153 (void *) 0, 0);
154
1ab3bf1b
JG
155 }
156
b0246b3b
FF
157 /* Update the per-objfile information that comes from the bfd, ensuring
158 that any data that is reference is saved in the per-objfile data
159 region. */
1ab3bf1b
JG
160
161 objfile -> obfd = abfd;
b0246b3b 162 objfile -> name = mstrsave (objfile -> md, bfd_get_filename (abfd));
1ab3bf1b
JG
163 objfile -> mtime = bfd_get_mtime (abfd);
164
1ab3bf1b
JG
165 /* Push this file onto the head of the linked list of other such files. */
166
167 objfile -> next = object_files;
168 object_files = objfile;
169
170 return (objfile);
171}
172
173
174/* Destroy an objfile and all the symtabs and psymtabs under it. Note
175 that as much as possible is allocated on the symbol_obstack and
176 psymbol_obstack, so that the memory can be efficiently freed. */
177
178void
179free_objfile (objfile)
180 struct objfile *objfile;
181{
182 struct objfile *ofp;
183
184 if (objfile -> name)
185 {
318bf84f 186 mfree (objfile -> md, objfile -> name);
1ab3bf1b
JG
187 }
188 if (objfile -> obfd)
189 {
190 bfd_close (objfile -> obfd);
191 }
192
193 /* Remove it from the chain of all objfiles. */
194
195 if (object_files == objfile)
196 {
197 object_files = objfile -> next;
198 }
199 else
200 {
201 for (ofp = object_files; ofp; ofp = ofp -> next)
202 {
203 if (ofp -> next == objfile)
204 {
205 ofp -> next = objfile -> next;
206 }
207 }
208 }
209
210 obstack_free (&objfile -> psymbol_obstack, 0);
211 obstack_free (&objfile -> symbol_obstack, 0);
212 obstack_free (&objfile -> type_obstack, 0);
213
214#if 0 /* FIXME!! */
215
216 /* Before the symbol table code was redone to make it easier to
217 selectively load and remove information particular to a specific
218 linkage unit, gdb used to do these things whenever the monolithic
219 symbol table was blown away. How much still needs to be done
220 is unknown, but we play it safe for now and keep each action until
221 it is shown to be no longer needed. */
222
223 clear_symtab_users_once ();
224#if defined (CLEAR_SOLIB)
225 CLEAR_SOLIB ();
226#endif
227 clear_pc_function_cache ();
228
229#endif
230
318bf84f 231 /* The last thing we do is free the objfile struct itself */
1ab3bf1b 232
318bf84f 233 mfree (objfile -> md, objfile);
1ab3bf1b
JG
234}
235
cba0d141
JG
236
237/* Free all the object files at once. */
238
239void
240free_all_objfiles ()
241{
242 struct objfile *objfile, *temp;
243
244 ALL_OBJFILES_SAFE (objfile, temp)
245 {
246 free_objfile (objfile);
247 }
248}
249
1ab3bf1b
JG
250/* Many places in gdb want to test just to see if we have any partial
251 symbols available. This function returns zero if none are currently
252 available, nonzero otherwise. */
253
254int
255have_partial_symbols ()
256{
257 struct objfile *ofp;
258 int havethem = 0;
259
260 for (ofp = object_files; ofp; ofp = ofp -> next)
261 {
262 if (ofp -> psymtabs != NULL)
263 {
264 havethem++;
265 break;
266 }
267 }
268 return (havethem);
269}
270
271/* Many places in gdb want to test just to see if we have any full
272 symbols available. This function returns zero if none are currently
273 available, nonzero otherwise. */
274
275int
276have_full_symbols ()
277{
278 struct objfile *ofp;
279 int havethem = 0;
280
281 for (ofp = object_files; ofp; ofp = ofp -> next)
282 {
283 if (ofp -> symtabs != NULL)
284 {
285 havethem++;
286 break;
287 }
288 }
289 return (havethem);
290}
291
292/* Many places in gdb want to test just to see if we have any minimal
293 symbols available. This function returns zero if none are currently
294 available, nonzero otherwise. */
295
296int
297have_minimal_symbols ()
298{
299 struct objfile *ofp;
300 int havethem = 0;
301
302 for (ofp = object_files; ofp; ofp = ofp -> next)
303 {
304 if (ofp -> msymbols != NULL)
305 {
306 havethem++;
307 break;
308 }
309 }
310 return (havethem);
311}
312
313/* Call the function specified by FUNC for each currently available objfile,
314 for as long as this function continues to return NULL. If the function
315 ever returns non-NULL, then the iteration over the objfiles is terminated,
316 and the result is returned to the caller. The function called has full
317 control over the form and content of the information returned via the
318 non-NULL result, which may be as simple as a pointer to the objfile that
319 the iteration terminated on, or as complex as a pointer to a private
320 structure containing multiple results. */
321
322PTR
323iterate_over_objfiles (func, arg1, arg2, arg3)
324 PTR (*func) PARAMS ((struct objfile *, PTR, PTR, PTR));
325 PTR arg1;
326 PTR arg2;
327 PTR arg3;
328{
329 register struct objfile *objfile;
330 PTR result = NULL;
331
332 for (objfile = object_files;
333 objfile != NULL && result == NULL;
334 objfile = objfile -> next)
335 {
336 result = (*func)(objfile, arg1, arg2, arg3);
337 }
338 return (result);
339}
340
341/* Call the function specified by FUNC for each currently available symbol
342 table, for as long as this function continues to return NULL. If the
343 function ever returns non-NULL, then the iteration over the symbol tables
344 is terminated, and the result is returned to the caller. The function
345 called has full control over the form and content of the information
346 returned via the non-NULL result, which may be as simple as a pointer
347 to the symtab that the iteration terminated on, or as complex as a
348 pointer to a private structure containing multiple results. */
349
350PTR
351iterate_over_symtabs (func, arg1, arg2, arg3)
352 PTR (*func) PARAMS ((struct objfile *, struct symtab *, PTR, PTR, PTR));
353 PTR arg1;
354 PTR arg2;
355 PTR arg3;
356{
357 register struct objfile *objfile;
358 register struct symtab *symtab;
359 PTR result = NULL;
360
361 for (objfile = object_files;
362 objfile != NULL && result == NULL;
363 objfile = objfile -> next)
364 {
365 for (symtab = objfile -> symtabs;
366 symtab != NULL && result == NULL;
367 symtab = symtab -> next)
368 {
369 result = (*func)(objfile, symtab, arg1, arg2, arg3);
370 }
371 }
372 return (result);
373}
374
375/* Call the function specified by FUNC for each currently available partial
376 symbol table, for as long as this function continues to return NULL. If
377 the function ever returns non-NULL, then the iteration over the partial
378 symbol tables is terminated, and the result is returned to the caller.
379
380 The function called has full control over the form and content of the
381 information returned via the non-NULL result, which may be as simple as a
382 pointer to the partial symbol table that the iteration terminated on, or
383 as complex as a pointer to a private structure containing multiple
384 results. */
385
386PTR
387iterate_over_psymtabs (func, arg1, arg2, arg3)
388 PTR (*func) PARAMS ((struct objfile *, struct partial_symtab *,
389 PTR, PTR, PTR));
390 PTR arg1;
391 PTR arg2;
392 PTR arg3;
393{
394 register struct objfile *objfile;
395 register struct partial_symtab *psymtab;
396 PTR result = NULL;
397
398 for (objfile = object_files;
399 objfile != NULL && result == NULL;
400 objfile = objfile -> next)
401 {
402 for (psymtab = objfile -> psymtabs;
403 psymtab != NULL && result == NULL;
404 psymtab = psymtab -> next)
405 {
406 result = (*func)(objfile, psymtab, arg1, arg2, arg3);
407 }
408 }
409 return (result);
410}
318bf84f
FF
411
412
b0246b3b 413/* Look for a mapped symbol file that corresponds to FILENAME and is more
318bf84f 414 recent than MTIME. If MAPPED is nonzero, the user has asked that gdb
b0246b3b
FF
415 use a mapped symbol file for this file, so create a new one if one does
416 not currently exist.
318bf84f
FF
417
418 If found, then return an open file descriptor for the file, otherwise
419 return -1.
420
421 This routine is responsible for implementing the policy that generates
422 the name of the mapped symbol file from the name of a file containing
423 symbols that gdb would like to read. */
424
425static int
b0246b3b
FF
426open_mapped_file (filename, mtime, mapped)
427 char *filename;
318bf84f
FF
428 long mtime;
429 int mapped;
430{
431 int fd;
432 char *symfilename;
433 struct stat sbuf;
434
435 /* For now, all we do is look in the local directory for a file with
436 the name of the base file and an extension of ".syms" */
437
b0246b3b 438 symfilename = concat ("./", basename (filename), ".syms", (char *) NULL);
318bf84f
FF
439
440 /* Check to see if the desired file already exists and is more recent than
441 the corresponding base file (specified by the passed MTIME parameter).
442 The open will fail if the file does not already exist. */
443
444 if ((fd = open (symfilename, O_RDWR)) >= 0)
445 {
446 if (fstat (fd, &sbuf) != 0)
447 {
448 close (fd);
449 perror_with_name (symfilename);
450 }
451 else if (sbuf.st_mtime > mtime)
452 {
453 return (fd);
454 }
455 else
456 {
457 close (fd);
458 fd = -1;
459 }
460 }
461
462 /* Either the file does not already exist, or the base file has changed
463 since it was created. In either case, if the user has specified use of
464 a mapped file, then create a new mapped file, truncating any existing
465 one.
466
467 In the case where there is an existing file, but it is out of date, and
468 the user did not specify mapped, the existing file is just silently
469 ignored. Perhaps we should warn about this case (FIXME?).
470
471 By default the file is rw for everyone, with the user's umask taking
472 care of turning off the permissions the user wants off. */
473
474 if (mapped)
475 {
476 fd = open (symfilename, O_RDWR | O_CREAT | O_TRUNC, 0666);
477 }
478
479 return (fd);
480}
481
482/* Return the base address at which we would like the next objfile's
483 mapped data to start.
484
485 For now, we use the kludge that the configuration specifies a base
486 address to which it is safe to map the first mmalloc heap, and an
487 increment to add to this address for each successive heap. There are
488 a lot of issues to deal with here to make this work reasonably, including:
489
490 Avoid memory collisions with existing mapped address spaces
491
492 Reclaim address spaces when their mmalloc heaps are unmapped
493
494 When mmalloc heaps are shared between processes they have to be
495 mapped at the same addresses in each
496
497 Once created, a mmalloc heap that is to be mapped back in must be
498 mapped at the original address. I.E. each objfile will expect to
499 be remapped at it's original address. This becomes a problem if
500 the desired address is already in use.
501
502 etc, etc, etc.
503
504 */
505
506
507static CORE_ADDR
508map_to_address ()
509{
510
511#if defined(MMAP_BASE_ADDRESS) && defined (MMAP_INCREMENT)
512
513 static CORE_ADDR next = MMAP_BASE_ADDRESS;
514 CORE_ADDR mapto = next;
515
516 next += MMAP_INCREMENT;
517 return (mapto);
518
519#else
520
521 return (0);
522
523#endif
524
525}
This page took 0.088154 seconds and 4 git commands to generate.