OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [symfile.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* Generic symbol file reading for the GNU debugger, GDB.
2
   Copyright 1990-1996, 1998, 2000 Free Software Foundation, Inc.
3
   Contributed by Cygnus Support, using pieces from other GDB modules.
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
#include "defs.h"
23
#include "symtab.h"
24
#include "gdbtypes.h"
25
#include "gdbcore.h"
26
#include "frame.h"
27
#include "target.h"
28
#include "value.h"
29
#include "symfile.h"
30
#include "objfiles.h"
31
#include "gdbcmd.h"
32
#include "breakpoint.h"
33
#include "language.h"
34
#include "complaints.h"
35
#include "demangle.h"
36
#include "inferior.h"           /* for write_pc */
37
#include "gdb-stabs.h"
38
#include "obstack.h"
39
 
40
#include <assert.h>
41
#include <sys/types.h>
42
#include <fcntl.h>
43
#include "gdb_string.h"
44
#include "gdb_stat.h"
45
#include <ctype.h>
46
#include <time.h>
47
 
48
#ifndef O_BINARY
49
#define O_BINARY 0
50
#endif
51
 
52
#ifdef HPUXHPPA
53
 
54
/* Some HP-UX related globals to clear when a new "main"
55
   symbol file is loaded. HP-specific.  */
56
 
57
extern int hp_som_som_object_present;
58
extern int hp_cxx_exception_support_initialized;
59
#define RESET_HP_UX_GLOBALS() do {\
60
                                    hp_som_som_object_present = 0;             /* indicates HP-compiled code */        \
61
                                    hp_cxx_exception_support_initialized = 0;  /* must reinitialize exception stuff */ \
62
                              } while (0)
63
#endif
64
 
65
int (*ui_load_progress_hook) (const char *section, unsigned long num);
66
void (*show_load_progress) (const char *section,
67
                            unsigned long section_sent,
68
                            unsigned long section_size,
69
                            unsigned long total_sent,
70
                            unsigned long total_size);
71
void (*pre_add_symbol_hook) PARAMS ((char *));
72
void (*post_add_symbol_hook) PARAMS ((void));
73
void (*target_new_objfile_hook) PARAMS ((struct objfile *));
74
 
75
/* Global variables owned by this file */
76
int readnow_symbol_files;       /* Read full symbols immediately */
77
 
78
struct complaint oldsyms_complaint =
79
{
80
  "Replacing old symbols for `%s'", 0, 0
81
};
82
 
83
struct complaint empty_symtab_complaint =
84
{
85
  "Empty symbol table found for `%s'", 0, 0
86
};
87
 
88
struct complaint unknown_option_complaint =
89
{
90
  "Unknown option `%s' ignored", 0, 0
91
};
92
 
93
/* External variables and functions referenced. */
94
 
95
extern int info_verbose;
96
 
97
extern void report_transfer_performance PARAMS ((unsigned long,
98
                                                 time_t, time_t));
99
 
100
/* Functions this file defines */
101
 
102
#if 0
103
static int simple_read_overlay_region_table PARAMS ((void));
104
static void simple_free_overlay_region_table PARAMS ((void));
105
#endif
106
 
107
static void set_initial_language PARAMS ((void));
108
 
109
static void load_command PARAMS ((char *, int));
110
 
111
static void add_symbol_file_command PARAMS ((char *, int));
112
 
113
static void add_shared_symbol_files_command PARAMS ((char *, int));
114
 
115
static void cashier_psymtab PARAMS ((struct partial_symtab *));
116
 
117
static int compare_psymbols PARAMS ((const void *, const void *));
118
 
119
static int compare_symbols PARAMS ((const void *, const void *));
120
 
121
bfd *symfile_bfd_open PARAMS ((char *));
122
 
123
static void find_sym_fns PARAMS ((struct objfile *));
124
 
125
static void decrement_reading_symtab PARAMS ((void *));
126
 
127
static void overlay_invalidate_all PARAMS ((void));
128
 
129
static int overlay_is_mapped PARAMS ((struct obj_section *));
130
 
131
void list_overlays_command PARAMS ((char *, int));
132
 
133
void map_overlay_command PARAMS ((char *, int));
134
 
135
void unmap_overlay_command PARAMS ((char *, int));
136
 
137
static void overlay_auto_command PARAMS ((char *, int));
138
 
139
static void overlay_manual_command PARAMS ((char *, int));
140
 
141
static void overlay_off_command PARAMS ((char *, int));
142
 
143
static void overlay_load_command PARAMS ((char *, int));
144
 
145
static void overlay_command PARAMS ((char *, int));
146
 
147
static void simple_free_overlay_table PARAMS ((void));
148
 
149
static void read_target_long_array PARAMS ((CORE_ADDR, unsigned int *, int));
150
 
151
static int simple_read_overlay_table PARAMS ((void));
152
 
153
static int simple_overlay_update_1 PARAMS ((struct obj_section *));
154
 
155
static void add_filename_language PARAMS ((char *ext, enum language lang));
156
 
157
static void set_ext_lang_command PARAMS ((char *args, int from_tty));
158
 
159
static void info_ext_lang_command PARAMS ((char *args, int from_tty));
160
 
161
static void init_filename_language_table PARAMS ((void));
162
 
163
void _initialize_symfile PARAMS ((void));
164
 
165
/* List of all available sym_fns.  On gdb startup, each object file reader
166
   calls add_symtab_fns() to register information on each format it is
167
   prepared to read. */
168
 
169
static struct sym_fns *symtab_fns = NULL;
170
 
171
/* Flag for whether user will be reloading symbols multiple times.
172
   Defaults to ON for VxWorks, otherwise OFF.  */
173
 
174
#ifdef SYMBOL_RELOADING_DEFAULT
175
int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
176
#else
177
int symbol_reloading = 0;
178
#endif
179
 
180
/* If non-zero, then on HP-UX (i.e., platforms that use somsolib.c),
181
   this variable is interpreted as a threshhold.  If adding a new
182
   library's symbol table to those already known to the debugger would
183
   exceed this threshhold, then the shlib's symbols are not added.
184
 
185
   If non-zero on other platforms, shared library symbols will be added
186
   automatically when the inferior is created, new libraries are loaded,
187
   or when attaching to the inferior.  This is almost always what users
188
   will want to have happen; but for very large programs, the startup
189
   time will be excessive, and so if this is a problem, the user can
190
   clear this flag and then add the shared library symbols as needed.
191
   Note that there is a potential for confusion, since if the shared
192
   library symbols are not loaded, commands like "info fun" will *not*
193
   report all the functions that are actually present.
194
 
195
   Note that HP-UX interprets this variable to mean, "threshhold size
196
   in megabytes, where zero means never add".  Other platforms interpret
197
   this variable to mean, "always add if non-zero, never add if zero."
198
 */
199
 
200
int auto_solib_add = 1;
201
 
202
 
203
/* Since this function is called from within qsort, in an ANSI environment
204
   it must conform to the prototype for qsort, which specifies that the
205
   comparison function takes two "void *" pointers. */
206
 
207
static int
208
compare_symbols (s1p, s2p)
209
     const PTR s1p;
210
     const PTR s2p;
211
{
212
  register struct symbol **s1, **s2;
213
 
214
  s1 = (struct symbol **) s1p;
215
  s2 = (struct symbol **) s2p;
216
 
217
  return (STRCMP (SYMBOL_NAME (*s1), SYMBOL_NAME (*s2)));
218
}
219
 
220
/*
221
 
222
   LOCAL FUNCTION
223
 
224
   compare_psymbols -- compare two partial symbols by name
225
 
226
   DESCRIPTION
227
 
228
   Given pointers to pointers to two partial symbol table entries,
229
   compare them by name and return -N, 0, or +N (ala strcmp).
230
   Typically used by sorting routines like qsort().
231
 
232
   NOTES
233
 
234
   Does direct compare of first two characters before punting
235
   and passing to strcmp for longer compares.  Note that the
236
   original version had a bug whereby two null strings or two
237
   identically named one character strings would return the
238
   comparison of memory following the null byte.
239
 
240
 */
241
 
242
static int
243
compare_psymbols (s1p, s2p)
244
     const PTR s1p;
245
     const PTR s2p;
246
{
247
  register char *st1 = SYMBOL_NAME (*(struct partial_symbol **) s1p);
248
  register char *st2 = SYMBOL_NAME (*(struct partial_symbol **) s2p);
249
 
250
  if ((st1[0] - st2[0]) || !st1[0])
251
    {
252
      return (st1[0] - st2[0]);
253
    }
254
  else if ((st1[1] - st2[1]) || !st1[1])
255
    {
256
      return (st1[1] - st2[1]);
257
    }
258
  else
259
    {
260
      /* Note: I replaced the STRCMP line (commented out below)
261
       * with a simpler "strcmp()" which compares the 2 strings
262
       * from the beginning. (STRCMP is a macro which first compares
263
       * the initial characters, then falls back on strcmp).
264
       * The reason is that the STRCMP line was tickling a C compiler
265
       * bug on HP-UX 10.30, which is avoided with the simpler
266
       * code. The performance gain from the more complicated code
267
       * is negligible, given that we have already checked the
268
       * initial 2 characters above. I reported the compiler bug,
269
       * and once it is fixed the original line can be put back. RT
270
       */
271
      /* return ( STRCMP (st1 + 2, st2 + 2)); */
272
      return (strcmp (st1, st2));
273
    }
274
}
275
 
276
void
277
sort_pst_symbols (pst)
278
     struct partial_symtab *pst;
279
{
280
  /* Sort the global list; don't sort the static list */
281
 
282
  qsort (pst->objfile->global_psymbols.list + pst->globals_offset,
283
         pst->n_global_syms, sizeof (struct partial_symbol *),
284
         compare_psymbols);
285
}
286
 
287
/* Call sort_block_syms to sort alphabetically the symbols of one block.  */
288
 
289
void
290
sort_block_syms (b)
291
     register struct block *b;
292
{
293
  qsort (&BLOCK_SYM (b, 0), BLOCK_NSYMS (b),
294
         sizeof (struct symbol *), compare_symbols);
295
}
296
 
297
/* Call sort_symtab_syms to sort alphabetically
298
   the symbols of each block of one symtab.  */
299
 
300
void
301
sort_symtab_syms (s)
302
     register struct symtab *s;
303
{
304
  register struct blockvector *bv;
305
  int nbl;
306
  int i;
307
  register struct block *b;
308
 
309
  if (s == 0)
310
    return;
311
  bv = BLOCKVECTOR (s);
312
  nbl = BLOCKVECTOR_NBLOCKS (bv);
313
  for (i = 0; i < nbl; i++)
314
    {
315
      b = BLOCKVECTOR_BLOCK (bv, i);
316
      if (BLOCK_SHOULD_SORT (b))
317
        sort_block_syms (b);
318
    }
319
}
320
 
321
/* Make a null terminated copy of the string at PTR with SIZE characters in
322
   the obstack pointed to by OBSTACKP .  Returns the address of the copy.
323
   Note that the string at PTR does not have to be null terminated, I.E. it
324
   may be part of a larger string and we are only saving a substring. */
325
 
326
char *
327
obsavestring (ptr, size, obstackp)
328
     char *ptr;
329
     int size;
330
     struct obstack *obstackp;
331
{
332
  register char *p = (char *) obstack_alloc (obstackp, size + 1);
333
  /* Open-coded memcpy--saves function call time.  These strings are usually
334
     short.  FIXME: Is this really still true with a compiler that can
335
     inline memcpy? */
336
  {
337
    register char *p1 = ptr;
338
    register char *p2 = p;
339
    char *end = ptr + size;
340
    while (p1 != end)
341
      *p2++ = *p1++;
342
  }
343
  p[size] = 0;
344
  return p;
345
}
346
 
347
/* Concatenate strings S1, S2 and S3; return the new string.  Space is found
348
   in the obstack pointed to by OBSTACKP.  */
349
 
350
char *
351
obconcat (obstackp, s1, s2, s3)
352
     struct obstack *obstackp;
353
     const char *s1, *s2, *s3;
354
{
355
  register int len = strlen (s1) + strlen (s2) + strlen (s3) + 1;
356
  register char *val = (char *) obstack_alloc (obstackp, len);
357
  strcpy (val, s1);
358
  strcat (val, s2);
359
  strcat (val, s3);
360
  return val;
361
}
362
 
363
/* True if we are nested inside psymtab_to_symtab. */
364
 
365
int currently_reading_symtab = 0;
366
 
367
static void
368
decrement_reading_symtab (dummy)
369
     void *dummy;
370
{
371
  currently_reading_symtab--;
372
}
373
 
374
/* Get the symbol table that corresponds to a partial_symtab.
375
   This is fast after the first time you do it.  In fact, there
376
   is an even faster macro PSYMTAB_TO_SYMTAB that does the fast
377
   case inline.  */
378
 
379
struct symtab *
380
psymtab_to_symtab (pst)
381
     register struct partial_symtab *pst;
382
{
383
  /* If it's been looked up before, return it. */
384
  if (pst->symtab)
385
    return pst->symtab;
386
 
387
  /* If it has not yet been read in, read it.  */
388
  if (!pst->readin)
389
    {
390
      struct cleanup *back_to = make_cleanup (decrement_reading_symtab, NULL);
391
      currently_reading_symtab++;
392
      (*pst->read_symtab) (pst);
393
      do_cleanups (back_to);
394
    }
395
 
396
  return pst->symtab;
397
}
398
 
399
/* Initialize entry point information for this objfile. */
400
 
401
void
402
init_entry_point_info (objfile)
403
     struct objfile *objfile;
404
{
405
  /* Save startup file's range of PC addresses to help blockframe.c
406
     decide where the bottom of the stack is.  */
407
 
408
  if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
409
    {
410
      /* Executable file -- record its entry point so we'll recognize
411
         the startup file because it contains the entry point.  */
412
      objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
413
    }
414
  else
415
    {
416
      /* Examination of non-executable.o files.  Short-circuit this stuff.  */
417
      objfile->ei.entry_point = INVALID_ENTRY_POINT;
418
    }
419
  objfile->ei.entry_file_lowpc = INVALID_ENTRY_LOWPC;
420
  objfile->ei.entry_file_highpc = INVALID_ENTRY_HIGHPC;
421
  objfile->ei.entry_func_lowpc = INVALID_ENTRY_LOWPC;
422
  objfile->ei.entry_func_highpc = INVALID_ENTRY_HIGHPC;
423
  objfile->ei.main_func_lowpc = INVALID_ENTRY_LOWPC;
424
  objfile->ei.main_func_highpc = INVALID_ENTRY_HIGHPC;
425
}
426
 
427
/* Get current entry point address.  */
428
 
429
CORE_ADDR
430
entry_point_address ()
431
{
432
  return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
433
}
434
 
435
/* Remember the lowest-addressed loadable section we've seen.
436
   This function is called via bfd_map_over_sections.
437
 
438
   In case of equal vmas, the section with the largest size becomes the
439
   lowest-addressed loadable section.
440
 
441
   If the vmas and sizes are equal, the last section is considered the
442
   lowest-addressed loadable section.  */
443
 
444
void
445
find_lowest_section (abfd, sect, obj)
446
     bfd *abfd;
447
     asection *sect;
448
     PTR obj;
449
{
450
  asection **lowest = (asection **) obj;
451
 
452
  if (0 == (bfd_get_section_flags (abfd, sect) & SEC_LOAD))
453
    return;
454
  if (!*lowest)
455
    *lowest = sect;             /* First loadable section */
456
  else if (bfd_section_vma (abfd, *lowest) > bfd_section_vma (abfd, sect))
457
    *lowest = sect;             /* A lower loadable section */
458
  else if (bfd_section_vma (abfd, *lowest) == bfd_section_vma (abfd, sect)
459
           && (bfd_section_size (abfd, (*lowest))
460
               <= bfd_section_size (abfd, sect)))
461
    *lowest = sect;
462
}
463
 
464
 
465
/* Build (allocate and populate) a section_addr_info struct from
466
   an existing section table. */
467
 
468
extern struct section_addr_info *
469
build_section_addr_info_from_section_table (const struct section_table *start,
470
                                            const struct section_table *end)
471
{
472
  struct section_addr_info *sap;
473
  const struct section_table *stp;
474
  int oidx;
475
 
476
  sap = xmalloc (sizeof (struct section_addr_info));
477
  memset (sap, 0, sizeof (struct section_addr_info));
478
 
479
  for (stp = start, oidx = 0; stp != end; stp++)
480
    {
481
      if (strcmp (stp->the_bfd_section->name, ".text") == 0)
482
        sap->text_addr = stp->addr;
483
      else if (strcmp (stp->the_bfd_section->name, ".data") == 0)
484
        sap->data_addr = stp->addr;
485
      else if (strcmp (stp->the_bfd_section->name, ".bss") == 0)
486
        sap->bss_addr = stp->addr;
487
 
488
      if (stp->the_bfd_section->flags & (SEC_ALLOC | SEC_LOAD)
489
          && oidx < MAX_SECTIONS)
490
        {
491
          sap->other[oidx].addr = stp->addr;
492
          sap->other[oidx].name = xstrdup (stp->the_bfd_section->name);
493
          sap->other[oidx].sectindex = stp->the_bfd_section->index;
494
          oidx++;
495
        }
496
    }
497
 
498
  return sap;
499
}
500
 
501
 
502
/* Free all memory allocated by build_section_addr_info_from_section_table. */
503
 
504
extern void
505
free_section_addr_info (struct section_addr_info *sap)
506
{
507
  int idx;
508
 
509
  for (idx = 0; idx < MAX_SECTIONS; idx++)
510
    if (sap->other[idx].name)
511
      free (sap->other[idx].name);
512
  free (sap);
513
}
514
 
515
 
516
/* Parse the user's idea of an offset for dynamic linking, into our idea
517
   of how to represent it for fast symbol reading.  This is the default
518
   version of the sym_fns.sym_offsets function for symbol readers that
519
   don't need to do anything special.  It allocates a section_offsets table
520
   for the objectfile OBJFILE and stuffs ADDR into all of the offsets.  */
521
 
522
void
523
default_symfile_offsets (objfile, addrs)
524
     struct objfile *objfile;
525
     struct section_addr_info *addrs;
526
{
527
  int i;
528
 
529
  objfile->num_sections = SECT_OFF_MAX;
530
  objfile->section_offsets = (struct section_offsets *)
531
    obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
532
  memset (objfile->section_offsets, 0, SIZEOF_SECTION_OFFSETS);
533
 
534
  /* If user explicitly specified values for data and bss, set them here. */
535
 
536
  if (addrs->text_addr)
537
    ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT) = addrs->text_addr;
538
  if (addrs->data_addr)
539
    ANOFFSET (objfile->section_offsets, SECT_OFF_DATA) = addrs->data_addr;
540
  if (addrs->bss_addr)
541
    ANOFFSET (objfile->section_offsets, SECT_OFF_BSS)  = addrs->bss_addr;
542
 
543
  /* Now calculate offsets for other sections. */
544
  for (i = 0; i < MAX_SECTIONS && addrs->other[i].name; i++)
545
    {
546
      struct other_sections *osp ;
547
 
548
      osp = &addrs->other[i] ;
549
      if (addrs->other[i].addr == 0)
550
        continue;
551
#if 0
552
      if (strcmp (".text", osp->name) == 0)
553
        SECT_OFF_TEXT = osp->sectindex ;
554
      else if (strcmp (".data", osp->name) == 0)
555
        SECT_OFF_DATA = osp->sectindex ;
556
      else if (strcmp (".bss", osp->name) == 0)
557
        SECT_OFF_BSS =  osp->sectindex ;
558
#endif
559
      /* Record all sections in offsets */
560
      ANOFFSET (objfile->section_offsets, osp->sectindex) = osp->addr;
561
    }
562
}
563
 
564
 
565
/* Process a symbol file, as either the main file or as a dynamically
566
   loaded file.
567
 
568
   OBJFILE is where the symbols are to be read from.
569
 
570
   ADDR is the address where the text segment was loaded, unless the
571
   objfile is the main symbol file, in which case it is zero.
572
 
573
   MAINLINE is nonzero if this is the main symbol file, or zero if
574
   it's an extra symbol file such as dynamically loaded code.
575
 
576
   VERBO is nonzero if the caller has printed a verbose message about
577
   the symbol reading (and complaints can be more terse about it).  */
578
 
579
void
580
syms_from_objfile (objfile, addrs, mainline, verbo)
581
     struct objfile *objfile;
582
     struct section_addr_info *addrs;
583
     int mainline;
584
     int verbo;
585
{
586
  asection *lower_sect;
587
  asection *sect;
588
  CORE_ADDR lower_offset;
589
  struct section_addr_info local_addr;
590
  struct cleanup *old_chain;
591
  int i;
592
 
593
  /* If ADDRS is NULL, initialize the local section_addr_info struct and
594
     point ADDRS to it.  We now establish the convention that an addr of
595
     zero means no load address was specified. */
596
 
597
  if (addrs == NULL)
598
    {
599
      memset (&local_addr, 0, sizeof (local_addr));
600
      addrs = &local_addr;
601
    }
602
 
603
  init_entry_point_info (objfile);
604
  find_sym_fns (objfile);
605
 
606
  /* Make sure that partially constructed symbol tables will be cleaned up
607
     if an error occurs during symbol reading.  */
608
  old_chain = make_cleanup ((make_cleanup_func) free_objfile, objfile);
609
 
610
  if (mainline)
611
    {
612
      /* We will modify the main symbol table, make sure that all its users
613
         will be cleaned up if an error occurs during symbol reading.  */
614
      make_cleanup ((make_cleanup_func) clear_symtab_users, 0);
615
 
616
      /* Since no error yet, throw away the old symbol table.  */
617
 
618
      if (symfile_objfile != NULL)
619
        {
620
          free_objfile (symfile_objfile);
621
          symfile_objfile = NULL;
622
        }
623
 
624
      /* Currently we keep symbols from the add-symbol-file command.
625
         If the user wants to get rid of them, they should do "symbol-file"
626
         without arguments first.  Not sure this is the best behavior
627
         (PR 2207).  */
628
 
629
      (*objfile->sf->sym_new_init) (objfile);
630
    }
631
 
632
  /* Convert addr into an offset rather than an absolute address.
633
     We find the lowest address of a loaded segment in the objfile,
634
     and assume that <addr> is where that got loaded.
635
 
636
     We no longer warn if the lowest section is not a text segment (as
637
     happens for the PA64 port.  */
638
  if (mainline)
639
    {
640
      /* No offset from objfile addresses.  */
641
      addrs -> text_addr = 0;
642
      addrs -> data_addr = 0;
643
      addrs -> bss_addr = 0;
644
    }
645
  else
646
    {
647
      /* Find lowest loadable section to be used as starting point for
648
         continguous sections. FIXME!! won't work without call to find
649
         .text first, but this assumes text is lowest section. */
650
      lower_sect = bfd_get_section_by_name (objfile->obfd, ".text");
651
      if (lower_sect == NULL)
652
        bfd_map_over_sections (objfile->obfd, find_lowest_section,
653
                               (PTR) &lower_sect);
654
      if (lower_sect == NULL)
655
        warning ("no loadable sections found in added symbol-file %s",
656
                 objfile->name);
657
      else if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE)
658
               == 0)
659
        warning ("Lowest section in %s is %s at %s",
660
                 objfile->name,
661
                 bfd_section_name (objfile->obfd, lower_sect),
662
                 paddr (bfd_section_vma (objfile->obfd, lower_sect)));
663
      if (lower_sect != NULL)
664
        lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
665
      else
666
        lower_offset = 0;
667
 
668
       /* Calculate offsets for the loadable sections.
669
         FIXME! Sections must be in order of increasing loadable section
670
         so that contiguous sections can use the lower-offset!!!
671
 
672
          Adjust offsets if the segments are not contiguous.
673
          If the section is contiguous, its offset should be set to
674
         the offset of the highest loadable section lower than it
675
         (the loadable section directly below it in memory).
676
         this_offset = lower_offset = lower_addr - lower_orig_addr */
677
 
678
      /* FIXME: These sections will not need special treatment because ALL
679
         sections are in the other sections table */
680
 
681
      if (addrs->text_addr != 0)
682
        {
683
          sect = bfd_get_section_by_name (objfile->obfd, ".text");
684
          if (sect)
685
            {
686
              addrs->text_addr -= bfd_section_vma (objfile->obfd, sect);
687
              lower_offset = addrs->text_addr;
688
            }
689
        }
690
      else
691
        /* ??? who's below me? */
692
        addrs->text_addr = lower_offset;
693
 
694
      if (addrs->data_addr != 0)
695
        {
696
          sect = bfd_get_section_by_name (objfile->obfd, ".data");
697
          if (sect)
698
            {
699
              addrs->data_addr -= bfd_section_vma (objfile->obfd, sect);
700
              lower_offset = addrs->data_addr;
701
            }
702
        }
703
      else
704
        addrs->data_addr = lower_offset;
705
 
706
      if (addrs->bss_addr != 0)
707
        {
708
          sect = bfd_get_section_by_name (objfile->obfd, ".bss");
709
          if (sect)
710
            {
711
              addrs->bss_addr -= bfd_section_vma (objfile->obfd, sect);
712
              lower_offset = addrs->bss_addr;
713
            }
714
        }
715
      else
716
        addrs->bss_addr = lower_offset;
717
 
718
       /* Now calculate offsets for other sections. */
719
      for (i=0 ; i < MAX_SECTIONS && addrs->other[i].name; i++)
720
        {
721
 
722
          if (addrs->other[i].addr != 0)
723
            {
724
              sect=bfd_get_section_by_name(objfile->obfd, addrs->other[i].name);
725
              if (sect)
726
                {
727
                  addrs->other[i].addr -= bfd_section_vma (objfile->obfd, sect);
728
                  lower_offset = addrs->other[i].addr;
729
                  addrs->other[i].sectindex = sect->index ;
730
                }
731
              else
732
                {
733
                  warning ("section %s not found in %s", addrs->other[i].name,
734
                           objfile->name);
735
                  addrs->other[i].addr = 0;
736
                }
737
            }
738
          else
739
            addrs->other[i].addr = lower_offset;
740
        }
741
    }
742
 
743
  /* Initialize symbol reading routines for this objfile, allow complaints to
744
     appear for this new file, and record how verbose to be, then do the
745
     initial symbol reading for this file. */
746
 
747
  (*objfile->sf->sym_init) (objfile);
748
  clear_complaints (1, verbo);
749
 
750
  (*objfile->sf->sym_offsets) (objfile, addrs);
751
 
752
#ifndef IBM6000_TARGET
753
  /* This is a SVR4/SunOS specific hack, I think.  In any event, it
754
     screws RS/6000.  sym_offsets should be doing this sort of thing,
755
     because it knows the mapping between bfd sections and
756
     section_offsets.  */
757
  /* This is a hack.  As far as I can tell, section offsets are not
758
     target dependent.  They are all set to addr with a couple of
759
     exceptions.  The exceptions are sysvr4 shared libraries, whose
760
     offsets are kept in solib structures anyway and rs6000 xcoff
761
     which handles shared libraries in a completely unique way.
762
 
763
     Section offsets are built similarly, except that they are built
764
     by adding addr in all cases because there is no clear mapping
765
     from section_offsets into actual sections.  Note that solib.c
766
     has a different algorithm for finding section offsets.
767
 
768
     These should probably all be collapsed into some target
769
     independent form of shared library support.  FIXME.  */
770
 
771
  if (addrs)
772
    {
773
      struct obj_section *s;
774
 
775
        /* Map section offsets in "addr" back to the object's
776
           sections by comparing the section names with bfd's
777
           section names.  Then adjust the section address by
778
           the offset. */ /* for gdb/13815 */
779
 
780
      ALL_OBJFILE_OSECTIONS (objfile, s)
781
        {
782
          CORE_ADDR s_addr = 0;
783
          int i;
784
 
785
          if (strcmp (s->the_bfd_section->name, ".text") == 0)
786
            s_addr = addrs->text_addr;
787
          else if (strcmp (s->the_bfd_section->name, ".data") == 0)
788
            s_addr = addrs->data_addr;
789
          else if (strcmp (s->the_bfd_section->name, ".bss") == 0)
790
            s_addr = addrs->bss_addr;
791
          else
792
            for (i = 0;
793
                 !s_addr && i < MAX_SECTIONS && addrs->other[i].name;
794
                 i++)
795
              if (strcmp (s->the_bfd_section->name, addrs->other[i].name) == 0)
796
                s_addr = addrs->other[i].addr; /* end added for gdb/13815 */
797
 
798
          s->addr -= s->offset;
799
          s->addr += s_addr;
800
          s->endaddr -= s->offset;
801
          s->endaddr += s_addr;
802
          s->offset += s_addr;
803
        }
804
    }
805
#endif /* not IBM6000_TARGET */
806
 
807
  (*objfile->sf->sym_read) (objfile, mainline);
808
 
809
  if (!have_partial_symbols () && !have_full_symbols ())
810
    {
811
      wrap_here ("");
812
      printf_filtered ("(no debugging symbols found)...");
813
      wrap_here ("");
814
    }
815
 
816
  /* Don't allow char * to have a typename (else would get caddr_t).
817
     Ditto void *.  FIXME: Check whether this is now done by all the
818
     symbol readers themselves (many of them now do), and if so remove
819
     it from here.  */
820
 
821
  TYPE_NAME (lookup_pointer_type (builtin_type_char)) = 0;
822
  TYPE_NAME (lookup_pointer_type (builtin_type_void)) = 0;
823
 
824
  /* Mark the objfile has having had initial symbol read attempted.  Note
825
     that this does not mean we found any symbols... */
826
 
827
  objfile->flags |= OBJF_SYMS;
828
 
829
  /* Discard cleanups as symbol reading was successful.  */
830
 
831
  discard_cleanups (old_chain);
832
 
833
  /* Call this after reading in a new symbol table to give target
834
     dependant code a crack at the new symbols.  For instance, this
835
     could be used to update the values of target-specific symbols GDB
836
     needs to keep track of (such as _sigtramp, or whatever).  */
837
 
838
  TARGET_SYMFILE_POSTREAD (objfile);
839
}
840
 
841
/* Perform required actions after either reading in the initial
842
   symbols for a new objfile, or mapping in the symbols from a reusable
843
   objfile. */
844
 
845
void
846
new_symfile_objfile (objfile, mainline, verbo)
847
     struct objfile *objfile;
848
     int mainline;
849
     int verbo;
850
{
851
 
852
  /* If this is the main symbol file we have to clean up all users of the
853
     old main symbol file. Otherwise it is sufficient to fixup all the
854
     breakpoints that may have been redefined by this symbol file.  */
855
  if (mainline)
856
    {
857
      /* OK, make it the "real" symbol file.  */
858
      symfile_objfile = objfile;
859
 
860
      clear_symtab_users ();
861
    }
862
  else
863
    {
864
      breakpoint_re_set ();
865
    }
866
 
867
  /* We're done reading the symbol file; finish off complaints.  */
868
  clear_complaints (0, verbo);
869
}
870
 
871
/* Process a symbol file, as either the main file or as a dynamically
872
   loaded file.
873
 
874
   NAME is the file name (which will be tilde-expanded and made
875
   absolute herein) (but we don't free or modify NAME itself).
876
   FROM_TTY says how verbose to be.  MAINLINE specifies whether this
877
   is the main symbol file, or whether it's an extra symbol file such
878
   as dynamically loaded code.  If !mainline, ADDR is the address
879
   where the text segment was loaded.
880
 
881
   Upon success, returns a pointer to the objfile that was added.
882
   Upon failure, jumps back to command level (never returns). */
883
 
884
struct objfile *
885
symbol_file_add (name, from_tty, addrs, mainline, flags)
886
     char *name;
887
     int from_tty;
888
     struct section_addr_info *addrs;
889
     int mainline;
890
     int flags;
891
{
892
  struct objfile *objfile;
893
  struct partial_symtab *psymtab;
894
  bfd *abfd;
895
 
896
  /* Open a bfd for the file, and give user a chance to burp if we'd be
897
     interactively wiping out any existing symbols.  */
898
 
899
  abfd = symfile_bfd_open (name);
900
 
901
  if ((have_full_symbols () || have_partial_symbols ())
902
      && mainline
903
      && from_tty
904
      && !query ("Load new symbol table from \"%s\"? ", name))
905
    error ("Not confirmed.");
906
 
907
  objfile = allocate_objfile (abfd, flags);
908
 
909
  /* If the objfile uses a mapped symbol file, and we have a psymtab for
910
     it, then skip reading any symbols at this time. */
911
 
912
  if ((objfile->flags & OBJF_MAPPED) && (objfile->flags & OBJF_SYMS))
913
    {
914
      /* We mapped in an existing symbol table file that already has had
915
         initial symbol reading performed, so we can skip that part.  Notify
916
         the user that instead of reading the symbols, they have been mapped.
917
       */
918
      if (from_tty || info_verbose)
919
        {
920
          printf_filtered ("Mapped symbols for %s...", name);
921
          wrap_here ("");
922
          gdb_flush (gdb_stdout);
923
        }
924
      init_entry_point_info (objfile);
925
      find_sym_fns (objfile);
926
    }
927
  else
928
    {
929
      /* We either created a new mapped symbol table, mapped an existing
930
         symbol table file which has not had initial symbol reading
931
         performed, or need to read an unmapped symbol table. */
932
      if (from_tty || info_verbose)
933
        {
934
          if (pre_add_symbol_hook)
935
            pre_add_symbol_hook (name);
936
          else
937
            {
938
              printf_filtered ("Reading symbols from %s...", name);
939
              wrap_here ("");
940
              gdb_flush (gdb_stdout);
941
            }
942
        }
943
      syms_from_objfile (objfile, addrs, mainline, from_tty);
944
    }
945
 
946
  /* We now have at least a partial symbol table.  Check to see if the
947
     user requested that all symbols be read on initial access via either
948
     the gdb startup command line or on a per symbol file basis.  Expand
949
     all partial symbol tables for this objfile if so. */
950
 
951
  if ((flags & OBJF_READNOW) || readnow_symbol_files)
952
    {
953
      if (from_tty || info_verbose)
954
        {
955
          printf_filtered ("expanding to full symbols...");
956
          wrap_here ("");
957
          gdb_flush (gdb_stdout);
958
        }
959
 
960
      for (psymtab = objfile->psymtabs;
961
           psymtab != NULL;
962
           psymtab = psymtab->next)
963
        {
964
          psymtab_to_symtab (psymtab);
965
        }
966
    }
967
 
968
  if (from_tty || info_verbose)
969
    {
970
      if (post_add_symbol_hook)
971
        post_add_symbol_hook ();
972
      else
973
        {
974
          printf_filtered ("done.\n");
975
          gdb_flush (gdb_stdout);
976
        }
977
    }
978
 
979
  new_symfile_objfile (objfile, mainline, from_tty);
980
 
981
  if (target_new_objfile_hook)
982
    target_new_objfile_hook (objfile);
983
 
984
  return (objfile);
985
}
986
 
987
/* This is the symbol-file command.  Read the file, analyze its
988
   symbols, and add a struct symtab to a symtab list.  The syntax of
989
   the command is rather bizarre--(1) buildargv implements various
990
   quoting conventions which are undocumented and have little or
991
   nothing in common with the way things are quoted (or not quoted)
992
   elsewhere in GDB, (2) options are used, which are not generally
993
   used in GDB (perhaps "set mapped on", "set readnow on" would be
994
   better), (3) the order of options matters, which is contrary to GNU
995
   conventions (because it is confusing and inconvenient).  */
996
 
997
void
998
symbol_file_command (args, from_tty)
999
     char *args;
1000
     int from_tty;
1001
{
1002
  char **argv;
1003
  char *name = NULL;
1004
  CORE_ADDR text_relocation = 0; /* text_relocation */
1005
  struct cleanup *cleanups;
1006
  int flags = OBJF_USERLOADED;
1007
 
1008
  dont_repeat ();
1009
 
1010
  if (args == NULL)
1011
    {
1012
      if ((have_full_symbols () || have_partial_symbols ())
1013
          && from_tty
1014
          && !query ("Discard symbol table from `%s'? ",
1015
                     symfile_objfile->name))
1016
        error ("Not confirmed.");
1017
      free_all_objfiles ();
1018
 
1019
      /* solib descriptors may have handles to objfiles.  Since their
1020
         storage has just been released, we'd better wipe the solib
1021
         descriptors as well.
1022
       */
1023
#if defined(SOLIB_RESTART)
1024
      SOLIB_RESTART ();
1025
#endif
1026
 
1027
      symfile_objfile = NULL;
1028
      if (from_tty)
1029
        {
1030
          printf_unfiltered ("No symbol file now.\n");
1031
        }
1032
#ifdef HPUXHPPA
1033
      RESET_HP_UX_GLOBALS ();
1034
#endif
1035
    }
1036
  else
1037
    {
1038
      if ((argv = buildargv (args)) == NULL)
1039
        {
1040
          nomem (0);
1041
        }
1042
      cleanups = make_cleanup_freeargv (argv);
1043
      while (*argv != NULL)
1044
        {
1045
          if (STREQ (*argv, "-mapped"))
1046
            {
1047
              flags |= OBJF_MAPPED;
1048
            }
1049
          else if (STREQ (*argv, "-readnow"))
1050
            {
1051
              flags |= OBJF_READNOW;
1052
            }
1053
          else if (**argv == '-')
1054
            {
1055
              error ("unknown option `%s'", *argv);
1056
            }
1057
          else
1058
            {
1059
              char *p;
1060
 
1061
              name = *argv;
1062
 
1063
              /* this is for rombug remote only, to get the text relocation by
1064
                 using link command */
1065
              p = strrchr (name, '/');
1066
              if (p != NULL)
1067
                p++;
1068
              else
1069
                p = name;
1070
 
1071
              target_link (p, &text_relocation);
1072
 
1073
              if (text_relocation == (CORE_ADDR) 0)
1074
                return;
1075
              else if (text_relocation == (CORE_ADDR) -1)
1076
                {
1077
                  symbol_file_add (name, from_tty, NULL, 1, flags);
1078
#ifdef HPUXHPPA
1079
                  RESET_HP_UX_GLOBALS ();
1080
#endif
1081
                }
1082
              else
1083
                {
1084
                  struct section_addr_info section_addrs;
1085
                  memset (&section_addrs, 0, sizeof (section_addrs));
1086
                  section_addrs.text_addr = (CORE_ADDR) text_relocation;
1087
                  symbol_file_add (name, from_tty, &section_addrs, 0, flags);
1088
                }
1089
 
1090
              /* Getting new symbols may change our opinion about what is
1091
                 frameless.  */
1092
              reinit_frame_cache ();
1093
 
1094
              set_initial_language ();
1095
            }
1096
          argv++;
1097
        }
1098
 
1099
      if (name == NULL)
1100
        {
1101
          error ("no symbol file name was specified");
1102
        }
1103
      TUIDO (((TuiOpaqueFuncPtr) tuiDisplayMainFunction));
1104
      do_cleanups (cleanups);
1105
    }
1106
}
1107
 
1108
/* Set the initial language.
1109
 
1110
   A better solution would be to record the language in the psymtab when reading
1111
   partial symbols, and then use it (if known) to set the language.  This would
1112
   be a win for formats that encode the language in an easily discoverable place,
1113
   such as DWARF.  For stabs, we can jump through hoops looking for specially
1114
   named symbols or try to intuit the language from the specific type of stabs
1115
   we find, but we can't do that until later when we read in full symbols.
1116
   FIXME.  */
1117
 
1118
static void
1119
set_initial_language ()
1120
{
1121
  struct partial_symtab *pst;
1122
  enum language lang = language_unknown;
1123
 
1124
  pst = find_main_psymtab ();
1125
  if (pst != NULL)
1126
    {
1127
      if (pst->filename != NULL)
1128
        {
1129
          lang = deduce_language_from_filename (pst->filename);
1130
        }
1131
      if (lang == language_unknown)
1132
        {
1133
          /* Make C the default language */
1134
          lang = language_c;
1135
        }
1136
      set_language (lang);
1137
      expected_language = current_language;     /* Don't warn the user */
1138
    }
1139
}
1140
 
1141
/* Open file specified by NAME and hand it off to BFD for preliminary
1142
   analysis.  Result is a newly initialized bfd *, which includes a newly
1143
   malloc'd` copy of NAME (tilde-expanded and made absolute).
1144
   In case of trouble, error() is called.  */
1145
 
1146
bfd *
1147
symfile_bfd_open (name)
1148
     char *name;
1149
{
1150
  bfd *sym_bfd;
1151
  int desc;
1152
  char *absolute_name;
1153
 
1154
 
1155
 
1156
  name = tilde_expand (name);   /* Returns 1st new malloc'd copy */
1157
 
1158
  /* Look down path for it, allocate 2nd new malloc'd copy.  */
1159
  desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name);
1160
#if defined(__GO32__) || defined(_WIN32)
1161
  if (desc < 0)
1162
    {
1163
      char *exename = alloca (strlen (name) + 5);
1164
      strcat (strcpy (exename, name), ".exe");
1165
      desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY,
1166
                    0, &absolute_name);
1167
    }
1168
#endif
1169
  if (desc < 0)
1170
    {
1171
      make_cleanup (free, name);
1172
      perror_with_name (name);
1173
    }
1174
  free (name);                  /* Free 1st new malloc'd copy */
1175
  name = absolute_name;         /* Keep 2nd malloc'd copy in bfd */
1176
  /* It'll be freed in free_objfile(). */
1177
 
1178
  sym_bfd = bfd_fdopenr (name, gnutarget, desc);
1179
  if (!sym_bfd)
1180
    {
1181
      close (desc);
1182
      make_cleanup (free, name);
1183
      error ("\"%s\": can't open to read symbols: %s.", name,
1184
             bfd_errmsg (bfd_get_error ()));
1185
    }
1186
  sym_bfd->cacheable = true;
1187
 
1188
  if (!bfd_check_format (sym_bfd, bfd_object))
1189
    {
1190
      /* FIXME: should be checking for errors from bfd_close (for one thing,
1191
         on error it does not free all the storage associated with the
1192
         bfd).  */
1193
      bfd_close (sym_bfd);      /* This also closes desc */
1194
      make_cleanup (free, name);
1195
      error ("\"%s\": can't read symbols: %s.", name,
1196
             bfd_errmsg (bfd_get_error ()));
1197
    }
1198
  return (sym_bfd);
1199
}
1200
 
1201
/* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
1202
   startup by the _initialize routine in each object file format reader,
1203
   to register information about each format the the reader is prepared
1204
   to handle. */
1205
 
1206
void
1207
add_symtab_fns (sf)
1208
     struct sym_fns *sf;
1209
{
1210
  sf->next = symtab_fns;
1211
  symtab_fns = sf;
1212
}
1213
 
1214
 
1215
/* Initialize to read symbols from the symbol file sym_bfd.  It either
1216
   returns or calls error().  The result is an initialized struct sym_fns
1217
   in the objfile structure, that contains cached information about the
1218
   symbol file.  */
1219
 
1220
static void
1221
find_sym_fns (objfile)
1222
     struct objfile *objfile;
1223
{
1224
  struct sym_fns *sf;
1225
  enum bfd_flavour our_flavour = bfd_get_flavour (objfile->obfd);
1226
  char *our_target = bfd_get_target (objfile->obfd);
1227
 
1228
  /* Special kludge for RS/6000 and PowerMac.  See xcoffread.c.  */
1229
  if (STREQ (our_target, "aixcoff-rs6000") ||
1230
      STREQ (our_target, "xcoff-powermac"))
1231
    our_flavour = (enum bfd_flavour) -1;
1232
 
1233
  /* Special kludge for apollo.  See dstread.c.  */
1234
  if (STREQN (our_target, "apollo", 6))
1235
    our_flavour = (enum bfd_flavour) -2;
1236
 
1237
  for (sf = symtab_fns; sf != NULL; sf = sf->next)
1238
    {
1239
      if (our_flavour == sf->sym_flavour)
1240
        {
1241
          objfile->sf = sf;
1242
          return;
1243
        }
1244
    }
1245
  error ("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown.",
1246
         bfd_get_target (objfile->obfd));
1247
}
1248
 
1249
/* This function runs the load command of our current target.  */
1250
 
1251
static void
1252
load_command (arg, from_tty)
1253
     char *arg;
1254
     int from_tty;
1255
{
1256
  if (arg == NULL)
1257
    arg = get_exec_file (1);
1258
  target_load (arg, from_tty);
1259
}
1260
 
1261
/* This version of "load" should be usable for any target.  Currently
1262
   it is just used for remote targets, not inftarg.c or core files,
1263
   on the theory that only in that case is it useful.
1264
 
1265
   Avoiding xmodem and the like seems like a win (a) because we don't have
1266
   to worry about finding it, and (b) On VMS, fork() is very slow and so
1267
   we don't want to run a subprocess.  On the other hand, I'm not sure how
1268
   performance compares.  */
1269
 
1270
static int download_write_size = 512;
1271
static int validate_download = 0;
1272
 
1273
void
1274
generic_load (char *args, int from_tty)
1275
{
1276
  asection *s;
1277
  bfd *loadfile_bfd;
1278
  time_t start_time, end_time;  /* Start and end times of download */
1279
  unsigned long data_count = 0;  /* Number of bytes transferred to memory */
1280
  unsigned long write_count = 0; /* Number of writes needed. */
1281
  unsigned long load_offset;    /* offset to add to vma for each section */
1282
  char *filename;
1283
  struct cleanup *old_cleanups;
1284
  char *offptr;
1285
  CORE_ADDR total_size = 0;
1286
  CORE_ADDR total_sent = 0;
1287
 
1288
  /* Parse the input argument - the user can specify a load offset as
1289
     a second argument. */
1290
  filename = xmalloc (strlen (args) + 1);
1291
  old_cleanups = make_cleanup (free, filename);
1292
  strcpy (filename, args);
1293
  offptr = strchr (filename, ' ');
1294
  if (offptr != NULL)
1295
    {
1296
      char *endptr;
1297
      load_offset = strtoul (offptr, &endptr, 0);
1298
      if (offptr == endptr)
1299
        error ("Invalid download offset:%s\n", offptr);
1300
      *offptr = '\0';
1301
    }
1302
  else
1303
    load_offset = 0;
1304
 
1305
  /* Open the file for loading. */
1306
  loadfile_bfd = bfd_openr (filename, gnutarget);
1307
  if (loadfile_bfd == NULL)
1308
    {
1309
      perror_with_name (filename);
1310
      return;
1311
    }
1312
 
1313
  /* FIXME: should be checking for errors from bfd_close (for one thing,
1314
     on error it does not free all the storage associated with the
1315
     bfd).  */
1316
  make_cleanup ((make_cleanup_func) bfd_close, loadfile_bfd);
1317
 
1318
  if (!bfd_check_format (loadfile_bfd, bfd_object))
1319
    {
1320
      error ("\"%s\" is not an object file: %s", filename,
1321
             bfd_errmsg (bfd_get_error ()));
1322
    }
1323
 
1324
  for (s = loadfile_bfd->sections; s; s = s->next)
1325
    if (s->flags & SEC_LOAD)
1326
      total_size += bfd_get_section_size_before_reloc (s);
1327
 
1328
  start_time = time (NULL);
1329
 
1330
  for (s = loadfile_bfd->sections; s; s = s->next)
1331
    {
1332
      if (s->flags & SEC_LOAD)
1333
        {
1334
          CORE_ADDR size = bfd_get_section_size_before_reloc (s);
1335
          if (size > 0)
1336
            {
1337
              char *buffer;
1338
              struct cleanup *old_chain;
1339
              CORE_ADDR lma = s->lma + load_offset;
1340
              CORE_ADDR block_size;
1341
              int err;
1342
              const char *sect_name = bfd_get_section_name (loadfile_bfd, s);
1343
              CORE_ADDR sent;
1344
 
1345
              if (download_write_size > 0 && size > download_write_size)
1346
                block_size = download_write_size;
1347
              else
1348
                block_size = size;
1349
 
1350
              buffer = xmalloc (size);
1351
              old_chain = make_cleanup (free, buffer);
1352
 
1353
              /* Is this really necessary?  I guess it gives the user something
1354
                 to look at during a long download.  */
1355
#ifdef UI_OUT
1356
              ui_out_message (uiout, 0, "Loading section %s, size 0x%s lma 0x%s\n",
1357
                           sect_name, paddr_nz (size), paddr_nz (lma));
1358
#else
1359
              fprintf_unfiltered (gdb_stdout,
1360
                                  "Loading section %s, size 0x%s lma 0x%s\n",
1361
                                  sect_name, paddr_nz (size), paddr_nz (lma));
1362
#endif
1363
 
1364
              bfd_get_section_contents (loadfile_bfd, s, buffer, 0, size);
1365
 
1366
              sent = 0;
1367
              do
1368
                {
1369
                  CORE_ADDR len;
1370
                  CORE_ADDR this_transfer = size - sent;
1371
                  if (this_transfer >= block_size)
1372
                    this_transfer = block_size;
1373
                  len = target_write_memory_partial (lma, buffer,
1374
                                                     this_transfer, &err);
1375
                  if (err)
1376
                    break;
1377
                  if (validate_download)
1378
                    {
1379
                      /* Broken memories and broken monitors manifest
1380
                         themselves here when bring new computers to
1381
                         life.  This doubles already slow downloads.  */
1382
                      /* NOTE: cagney/1999-10-18: A more efficient
1383
                         implementation might add a verify_memory()
1384
                         method to the target vector and then use
1385
                         that.  remote.c could implement that method
1386
                         using the ``qCRC'' packet.  */
1387
                      char *check = xmalloc (len);
1388
                      struct cleanup *verify_cleanups = make_cleanup (free, check);
1389
                      if (target_read_memory (lma, check, len) != 0)
1390
                        error ("Download verify read failed at 0x%s",
1391
                               paddr (lma));
1392
                      if (memcmp (buffer, check, len) != 0)
1393
                        error ("Download verify compare failed at 0x%s",
1394
                               paddr (lma));
1395
                      do_cleanups (verify_cleanups);
1396
                    }
1397
                  data_count += len;
1398
                  lma += len;
1399
                  buffer += len;
1400
                  write_count += 1;
1401
                  sent += len;
1402
                  total_sent += len;
1403
                  if (quit_flag
1404
                      || (ui_load_progress_hook != NULL
1405
                          && ui_load_progress_hook (sect_name, sent)))
1406
                    error ("Canceled the download");
1407
 
1408
                  if (show_load_progress != NULL)
1409
                    show_load_progress (sect_name, sent, size, total_sent, total_size);
1410
                }
1411
              while (sent < size);
1412
 
1413
              if (err != 0)
1414
                error ("Memory access error while loading section %s.", sect_name);
1415
 
1416
              do_cleanups (old_chain);
1417
            }
1418
        }
1419
    }
1420
 
1421
  end_time = time (NULL);
1422
  {
1423
    CORE_ADDR entry;
1424
    entry = bfd_get_start_address (loadfile_bfd);
1425
#ifdef UI_OUT
1426
   ui_out_text (uiout, "Start address ");
1427
   ui_out_field_fmt (uiout, "address", "0x%s" , paddr_nz (entry));
1428
   ui_out_text (uiout, ", load size ");
1429
   ui_out_field_fmt (uiout, "load-size", "%ld" , data_count);
1430
   ui_out_text (uiout, "\n");
1431
 
1432
#else
1433
    fprintf_unfiltered (gdb_stdout,
1434
                        "Start address 0x%s , load size %ld\n",
1435
                        paddr_nz (entry), data_count);
1436
#endif
1437
    /* We were doing this in remote-mips.c, I suspect it is right
1438
       for other targets too.  */
1439
    write_pc (entry);
1440
  }
1441
 
1442
  /* FIXME: are we supposed to call symbol_file_add or not?  According to
1443
     a comment from remote-mips.c (where a call to symbol_file_add was
1444
     commented out), making the call confuses GDB if more than one file is
1445
     loaded in.  remote-nindy.c had no call to symbol_file_add, but remote-vx.c
1446
     does.  */
1447
 
1448
  print_transfer_performance (gdb_stdout, data_count, write_count,
1449
                              end_time - start_time);
1450
 
1451
  do_cleanups (old_cleanups);
1452
}
1453
 
1454
/* Report how fast the transfer went. */
1455
 
1456
/* DEPRECATED: cagney/1999-10-18: report_transfer_performance is being
1457
   replaced by print_transfer_performance (with a very different
1458
   function signature). */
1459
 
1460
void
1461
report_transfer_performance (data_count, start_time, end_time)
1462
     unsigned long data_count;
1463
     time_t start_time, end_time;
1464
{
1465
  print_transfer_performance (gdb_stdout, data_count, end_time - start_time, 0);
1466
}
1467
 
1468
void
1469
print_transfer_performance (struct ui_file *stream,
1470
                            unsigned long data_count,
1471
                            unsigned long write_count,
1472
                            unsigned long time_count)
1473
{
1474
#ifdef UI_OUT
1475
  ui_out_text (uiout, "Transfer rate: ");
1476
  if (time_count > 0)
1477
    {
1478
      ui_out_field_fmt (uiout, "transfer-rate", "%ld",
1479
                        (data_count * 8) / time_count);
1480
      ui_out_text (uiout, " bits/sec");
1481
    }
1482
  else
1483
    {
1484
      ui_out_field_fmt (uiout, "transferred-bits", "%ld", (data_count * 8));
1485
      ui_out_text (uiout, " bits in <1 sec");
1486
    }
1487
  if (write_count > 0)
1488
    {
1489
      ui_out_text (uiout, ", ");
1490
      ui_out_field_fmt (uiout, "write-rate", "%ld", data_count / write_count);
1491
      ui_out_text (uiout, " bytes/write");
1492
    }
1493
  ui_out_text (uiout, ".\n");
1494
#else
1495
  fprintf_unfiltered (stream, "Transfer rate: ");
1496
  if (time_count > 0)
1497
    fprintf_unfiltered (stream, "%ld bits/sec", (data_count * 8) / time_count);
1498
  else
1499
    fprintf_unfiltered (stream, "%ld bits in <1 sec", (data_count * 8));
1500
  if (write_count > 0)
1501
    fprintf_unfiltered (stream, ", %ld bytes/write", data_count / write_count);
1502
  fprintf_unfiltered (stream, ".\n");
1503
#endif
1504
}
1505
 
1506
/* This function allows the addition of incrementally linked object files.
1507
   It does not modify any state in the target, only in the debugger.  */
1508
 
1509
/* ARGSUSED */
1510
static void
1511
add_symbol_file_command (args, from_tty)
1512
     char *args;
1513
     int from_tty;
1514
{
1515
  char *name = NULL;
1516
  int flags = OBJF_USERLOADED;
1517
  char *arg;
1518
  int expecting_option = 0;
1519
  int option_index = 0;
1520
  int argcnt = 0;
1521
  int sec_num = 0;
1522
  int i;
1523
  struct
1524
  {
1525
    enum { OPT_SECTION } type;
1526
    char *name;
1527
    char *value;
1528
  } opt[SECT_OFF_MAX];
1529
  struct section_addr_info section_addrs;
1530
 
1531
  dont_repeat ();
1532
 
1533
  if (args == NULL)
1534
    {
1535
      error ("add-symbol-file takes a file name and an address");
1536
    }
1537
 
1538
  /* Make a copy of the string that we can safely write into. */
1539
 
1540
  args = xstrdup (args);
1541
  make_cleanup (free, args);
1542
 
1543
  /* Ensure section_addrs is initialized */
1544
  memset (&section_addrs, 0, sizeof (section_addrs));
1545
 
1546
  /* Pick off any -option args and the file name. */
1547
 
1548
  while (*args != '\000')
1549
    {
1550
      while (isspace (*args))
1551
        {
1552
          args++;
1553
        }
1554
      arg = args;
1555
      while ((*args != '\000') && !isspace (*args))
1556
        {
1557
          args++;
1558
        }
1559
      if (*args != '\000')
1560
        {
1561
          *args++ = '\000';
1562
        }
1563
      if (*arg != '-')
1564
        {
1565
          if (expecting_option)
1566
            {
1567
              opt[option_index++].value = arg;
1568
              expecting_option = 0;
1569
            }
1570
          else
1571
            {
1572
              switch (argcnt)
1573
                {
1574
                case 0:
1575
                  name = arg;
1576
                  break;
1577
                case 1:
1578
                  opt[option_index].type = OPT_SECTION;
1579
                  opt[option_index].name = ".text";
1580
                  opt[option_index++].value = arg;
1581
                  break;
1582
                case 2:
1583
                  opt[option_index].type = OPT_SECTION;
1584
                  opt[option_index].name = ".data";
1585
                  opt[option_index++].value = arg;
1586
                  break;
1587
                case 3:
1588
                  opt[option_index].type = OPT_SECTION;
1589
                  opt[option_index].name = ".bss";
1590
                  opt[option_index++].value = arg;
1591
                  break;
1592
                default:
1593
                  warning ("Too many arguments entered; see \"help add-symbol-file\" for command syntax.");
1594
                }
1595
              argcnt++;
1596
            }
1597
        }
1598
      else if (STREQ (arg, "-mapped"))
1599
        {
1600
          flags |= OBJF_MAPPED;
1601
        }
1602
      else if (STREQ (arg, "-readnow"))
1603
        {
1604
          flags |= OBJF_READNOW;
1605
        }
1606
      else if (STREQN (arg, "-T", 2))
1607
        {
1608
          if (option_index >= SECT_OFF_MAX)
1609
            {
1610
              warning ("Number of options exceeds maximum allowed.");
1611
            }
1612
          else
1613
            {
1614
              expecting_option = 1;
1615
              opt[option_index].type = OPT_SECTION;
1616
              opt[option_index].name = arg + 2;
1617
            }
1618
        }
1619
      else
1620
        {
1621
          error ("Unknown option `%s'", arg);
1622
        }
1623
    }
1624
 
1625
  if (name == NULL)
1626
    {
1627
      error ("add-symbol-file takes a file name");
1628
    }
1629
  name = tilde_expand (name);
1630
  make_cleanup (free, name);
1631
 
1632
  if (option_index > 0)
1633
    {
1634
      /* Print the prompt for the query below.
1635
         We have to split this up into 3 print statements because
1636
         local_hex_string returns a local static string. */
1637
 
1638
      printf_filtered ("add symbol table from file \"%s\" at\n", name);
1639
      for (i = 0; i < option_index; i++)
1640
        {
1641
          switch (opt[i].type)
1642
            {
1643
            case OPT_SECTION:
1644
              {
1645
                CORE_ADDR addr;
1646
                char *val = opt[i].value;
1647
                char *sec = opt[i].name;
1648
 
1649
                val = opt[i].value;
1650
                if (val[0] == '0' && val[1] == 'x')
1651
                  addr = strtoul (val+2, NULL, 16);
1652
                else
1653
                  addr = strtoul (val, NULL, 10);
1654
 
1655
                if (strcmp (sec, ".text") == 0)
1656
                  section_addrs.text_addr = addr;
1657
                else if (strcmp (sec, ".data") == 0)
1658
                  section_addrs.data_addr = addr;
1659
                else if (strcmp (sec, ".bss") == 0)
1660
                  section_addrs.bss_addr = addr;
1661
                /* Add the section to the others even if it is a
1662
                   text data or bss section. This is redundent but
1663
                   eventually, none will be given special treatment */
1664
                {
1665
                  section_addrs.other[sec_num].name = xstrdup (sec);
1666
                  make_cleanup (free, section_addrs.other[sec_num].name);
1667
                  section_addrs.other[sec_num++].addr = addr;
1668
                  printf_filtered ("\t%s_addr = %s\n",
1669
                                   sec,
1670
                                   local_hex_string ((unsigned long)addr));
1671
                }
1672
 
1673
                /* The object's sections are initialized when a
1674
                   call is made to build_objfile_section_table (objfile).
1675
                   This happens in reread_symbols.
1676
                   At this point, we don't know what file type this is,
1677
                   so we can't determine what section names are valid.  */
1678
              }
1679
              break;
1680
            default:
1681
              complain (&unknown_option_complaint, opt[i].name);
1682
            }
1683
        }
1684
      /* Eventually, these hard coded names will be obsolete */
1685
      /* All the addresses will be on the others section */
1686
    }
1687
  else
1688
    {
1689
      CORE_ADDR text_addr;
1690
      target_link (name, &text_addr);
1691
      if (text_addr == (CORE_ADDR) -1)
1692
        error("Don't know how to get text start location for this file");
1693
      section_addrs.text_addr = text_addr;
1694
      section_addrs.data_addr = 0;
1695
      section_addrs.bss_addr = 0;
1696
      printf_filtered("add symbol table from file \"%s\" at text_addr = %s?\n",
1697
                      name, local_hex_string ((unsigned long)text_addr));
1698
    }
1699
  if (from_tty && (!query ("%s", "")))
1700
    error ("Not confirmed.");
1701
 
1702
  symbol_file_add (name, from_tty, &section_addrs, 0, flags);
1703
 
1704
  /* Getting new symbols may change our opinion about what is
1705
     frameless.  */
1706
  reinit_frame_cache ();
1707
}
1708
 
1709
static void
1710
add_shared_symbol_files_command (args, from_tty)
1711
     char *args;
1712
     int from_tty;
1713
{
1714
#ifdef ADD_SHARED_SYMBOL_FILES
1715
  ADD_SHARED_SYMBOL_FILES (args, from_tty);
1716
#else
1717
  error ("This command is not available in this configuration of GDB.");
1718
#endif
1719
}
1720
 
1721
/* Re-read symbols if a symbol-file has changed.  */
1722
void
1723
reread_symbols ()
1724
{
1725
  struct objfile *objfile;
1726
  long new_modtime;
1727
  int reread_one = 0;
1728
  struct stat new_statbuf;
1729
  int res;
1730
 
1731
  /* With the addition of shared libraries, this should be modified,
1732
     the load time should be saved in the partial symbol tables, since
1733
     different tables may come from different source files.  FIXME.
1734
     This routine should then walk down each partial symbol table
1735
     and see if the symbol table that it originates from has been changed */
1736
 
1737
  for (objfile = object_files; objfile; objfile = objfile->next)
1738
    {
1739
      if (objfile->obfd)
1740
        {
1741
#ifdef IBM6000_TARGET
1742
          /* If this object is from a shared library, then you should
1743
             stat on the library name, not member name. */
1744
 
1745
          if (objfile->obfd->my_archive)
1746
            res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
1747
          else
1748
#endif
1749
            res = stat (objfile->name, &new_statbuf);
1750
          if (res != 0)
1751
            {
1752
              /* FIXME, should use print_sys_errmsg but it's not filtered. */
1753
              printf_filtered ("`%s' has disappeared; keeping its symbols.\n",
1754
                               objfile->name);
1755
              continue;
1756
            }
1757
          new_modtime = new_statbuf.st_mtime;
1758
          if (new_modtime != objfile->mtime)
1759
            {
1760
              struct cleanup *old_cleanups;
1761
              struct section_offsets *offsets;
1762
              int num_offsets;
1763
              char *obfd_filename;
1764
 
1765
              printf_filtered ("`%s' has changed; re-reading symbols.\n",
1766
                               objfile->name);
1767
 
1768
              /* There are various functions like symbol_file_add,
1769
                 symfile_bfd_open, syms_from_objfile, etc., which might
1770
                 appear to do what we want.  But they have various other
1771
                 effects which we *don't* want.  So we just do stuff
1772
                 ourselves.  We don't worry about mapped files (for one thing,
1773
                 any mapped file will be out of date).  */
1774
 
1775
              /* If we get an error, blow away this objfile (not sure if
1776
                 that is the correct response for things like shared
1777
                 libraries).  */
1778
              old_cleanups = make_cleanup ((make_cleanup_func) free_objfile,
1779
                                           objfile);
1780
              /* We need to do this whenever any symbols go away.  */
1781
              make_cleanup ((make_cleanup_func) clear_symtab_users, 0);
1782
 
1783
              /* Clean up any state BFD has sitting around.  We don't need
1784
                 to close the descriptor but BFD lacks a way of closing the
1785
                 BFD without closing the descriptor.  */
1786
              obfd_filename = bfd_get_filename (objfile->obfd);
1787
              if (!bfd_close (objfile->obfd))
1788
                error ("Can't close BFD for %s: %s", objfile->name,
1789
                       bfd_errmsg (bfd_get_error ()));
1790
              objfile->obfd = bfd_openr (obfd_filename, gnutarget);
1791
              if (objfile->obfd == NULL)
1792
                error ("Can't open %s to read symbols.", objfile->name);
1793
              /* bfd_openr sets cacheable to true, which is what we want.  */
1794
              if (!bfd_check_format (objfile->obfd, bfd_object))
1795
                error ("Can't read symbols from %s: %s.", objfile->name,
1796
                       bfd_errmsg (bfd_get_error ()));
1797
 
1798
              /* Save the offsets, we will nuke them with the rest of the
1799
                 psymbol_obstack.  */
1800
              num_offsets = objfile->num_sections;
1801
              offsets = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
1802
              memcpy (offsets, objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
1803
 
1804
              /* Nuke all the state that we will re-read.  Much of the following
1805
                 code which sets things to NULL really is necessary to tell
1806
                 other parts of GDB that there is nothing currently there.  */
1807
 
1808
              /* FIXME: Do we have to free a whole linked list, or is this
1809
                 enough?  */
1810
              if (objfile->global_psymbols.list)
1811
                mfree (objfile->md, objfile->global_psymbols.list);
1812
              memset (&objfile->global_psymbols, 0,
1813
                      sizeof (objfile->global_psymbols));
1814
              if (objfile->static_psymbols.list)
1815
                mfree (objfile->md, objfile->static_psymbols.list);
1816
              memset (&objfile->static_psymbols, 0,
1817
                      sizeof (objfile->static_psymbols));
1818
 
1819
              /* Free the obstacks for non-reusable objfiles */
1820
              free_bcache (&objfile->psymbol_cache);
1821
              obstack_free (&objfile->psymbol_obstack, 0);
1822
              obstack_free (&objfile->symbol_obstack, 0);
1823
              obstack_free (&objfile->type_obstack, 0);
1824
              objfile->sections = NULL;
1825
              objfile->symtabs = NULL;
1826
              objfile->psymtabs = NULL;
1827
              objfile->free_psymtabs = NULL;
1828
              objfile->msymbols = NULL;
1829
              objfile->minimal_symbol_count = 0;
1830
              memset (&objfile->msymbol_hash, 0,
1831
                      sizeof (objfile->msymbol_hash));
1832
              memset (&objfile->msymbol_demangled_hash, 0,
1833
                      sizeof (objfile->msymbol_demangled_hash));
1834
              objfile->fundamental_types = NULL;
1835
              if (objfile->sf != NULL)
1836
                {
1837
                  (*objfile->sf->sym_finish) (objfile);
1838
                }
1839
 
1840
              /* We never make this a mapped file.  */
1841
              objfile->md = NULL;
1842
              /* obstack_specify_allocation also initializes the obstack so
1843
                 it is empty.  */
1844
              obstack_specify_allocation (&objfile->psymbol_cache.cache, 0, 0,
1845
                                          xmalloc, free);
1846
              obstack_specify_allocation (&objfile->psymbol_obstack, 0, 0,
1847
                                          xmalloc, free);
1848
              obstack_specify_allocation (&objfile->symbol_obstack, 0, 0,
1849
                                          xmalloc, free);
1850
              obstack_specify_allocation (&objfile->type_obstack, 0, 0,
1851
                                          xmalloc, free);
1852
              if (build_objfile_section_table (objfile))
1853
                {
1854
                  error ("Can't find the file sections in `%s': %s",
1855
                         objfile->name, bfd_errmsg (bfd_get_error ()));
1856
                }
1857
 
1858
              /* We use the same section offsets as from last time.  I'm not
1859
                 sure whether that is always correct for shared libraries.  */
1860
              objfile->section_offsets = (struct section_offsets *)
1861
                obstack_alloc (&objfile->psymbol_obstack, SIZEOF_SECTION_OFFSETS);
1862
              memcpy (objfile->section_offsets, offsets, SIZEOF_SECTION_OFFSETS);
1863
              objfile->num_sections = num_offsets;
1864
 
1865
              /* What the hell is sym_new_init for, anyway?  The concept of
1866
                 distinguishing between the main file and additional files
1867
                 in this way seems rather dubious.  */
1868
              if (objfile == symfile_objfile)
1869
                {
1870
                  (*objfile->sf->sym_new_init) (objfile);
1871
#ifdef HPUXHPPA
1872
                  RESET_HP_UX_GLOBALS ();
1873
#endif
1874
                }
1875
 
1876
              (*objfile->sf->sym_init) (objfile);
1877
              clear_complaints (1, 1);
1878
              /* The "mainline" parameter is a hideous hack; I think leaving it
1879
                 zero is OK since dbxread.c also does what it needs to do if
1880
                 objfile->global_psymbols.size is 0.  */
1881
              (*objfile->sf->sym_read) (objfile, 0);
1882
              if (!have_partial_symbols () && !have_full_symbols ())
1883
                {
1884
                  wrap_here ("");
1885
                  printf_filtered ("(no debugging symbols found)\n");
1886
                  wrap_here ("");
1887
                }
1888
              objfile->flags |= OBJF_SYMS;
1889
 
1890
              /* We're done reading the symbol file; finish off complaints.  */
1891
              clear_complaints (0, 1);
1892
 
1893
              /* Getting new symbols may change our opinion about what is
1894
                 frameless.  */
1895
 
1896
              reinit_frame_cache ();
1897
 
1898
              /* Discard cleanups as symbol reading was successful.  */
1899
              discard_cleanups (old_cleanups);
1900
 
1901
              /* If the mtime has changed between the time we set new_modtime
1902
                 and now, we *want* this to be out of date, so don't call stat
1903
                 again now.  */
1904
              objfile->mtime = new_modtime;
1905
              reread_one = 1;
1906
 
1907
              /* Call this after reading in a new symbol table to give target
1908
                 dependant code a crack at the new symbols.  For instance, this
1909
                 could be used to update the values of target-specific symbols GDB
1910
                 needs to keep track of (such as _sigtramp, or whatever).  */
1911
 
1912
              TARGET_SYMFILE_POSTREAD (objfile);
1913
            }
1914
        }
1915
    }
1916
 
1917
  if (reread_one)
1918
    clear_symtab_users ();
1919
}
1920
 
1921
 
1922
 
1923
typedef struct
1924
{
1925
  char *ext;
1926
  enum language lang;
1927
}
1928
filename_language;
1929
 
1930
static filename_language *filename_language_table;
1931
static int fl_table_size, fl_table_next;
1932
 
1933
static void
1934
add_filename_language (ext, lang)
1935
     char *ext;
1936
     enum language lang;
1937
{
1938
  if (fl_table_next >= fl_table_size)
1939
    {
1940
      fl_table_size += 10;
1941
      filename_language_table = realloc (filename_language_table,
1942
                                         fl_table_size);
1943
    }
1944
 
1945
  filename_language_table[fl_table_next].ext = strsave (ext);
1946
  filename_language_table[fl_table_next].lang = lang;
1947
  fl_table_next++;
1948
}
1949
 
1950
static char *ext_args;
1951
 
1952
static void
1953
set_ext_lang_command (args, from_tty)
1954
     char *args;
1955
     int from_tty;
1956
{
1957
  int i;
1958
  char *cp = ext_args;
1959
  enum language lang;
1960
 
1961
  /* First arg is filename extension, starting with '.' */
1962
  if (*cp != '.')
1963
    error ("'%s': Filename extension must begin with '.'", ext_args);
1964
 
1965
  /* Find end of first arg.  */
1966
  while (*cp && !isspace (*cp))
1967
    cp++;
1968
 
1969
  if (*cp == '\0')
1970
    error ("'%s': two arguments required -- filename extension and language",
1971
           ext_args);
1972
 
1973
  /* Null-terminate first arg */
1974
  *cp++ = '\0';
1975
 
1976
  /* Find beginning of second arg, which should be a source language.  */
1977
  while (*cp && isspace (*cp))
1978
    cp++;
1979
 
1980
  if (*cp == '\0')
1981
    error ("'%s': two arguments required -- filename extension and language",
1982
           ext_args);
1983
 
1984
  /* Lookup the language from among those we know.  */
1985
  lang = language_enum (cp);
1986
 
1987
  /* Now lookup the filename extension: do we already know it?  */
1988
  for (i = 0; i < fl_table_next; i++)
1989
    if (0 == strcmp (ext_args, filename_language_table[i].ext))
1990
      break;
1991
 
1992
  if (i >= fl_table_next)
1993
    {
1994
      /* new file extension */
1995
      add_filename_language (ext_args, lang);
1996
    }
1997
  else
1998
    {
1999
      /* redefining a previously known filename extension */
2000
 
2001
      /* if (from_tty) */
2002
      /*   query ("Really make files of type %s '%s'?", */
2003
      /*          ext_args, language_str (lang));           */
2004
 
2005
      free (filename_language_table[i].ext);
2006
      filename_language_table[i].ext = strsave (ext_args);
2007
      filename_language_table[i].lang = lang;
2008
    }
2009
}
2010
 
2011
static void
2012
info_ext_lang_command (args, from_tty)
2013
     char *args;
2014
     int from_tty;
2015
{
2016
  int i;
2017
 
2018
  printf_filtered ("Filename extensions and the languages they represent:");
2019
  printf_filtered ("\n\n");
2020
  for (i = 0; i < fl_table_next; i++)
2021
    printf_filtered ("\t%s\t- %s\n",
2022
                     filename_language_table[i].ext,
2023
                     language_str (filename_language_table[i].lang));
2024
}
2025
 
2026
static void
2027
init_filename_language_table ()
2028
{
2029
  if (fl_table_size == 0)        /* protect against repetition */
2030
    {
2031
      fl_table_size = 20;
2032
      fl_table_next = 0;
2033
      filename_language_table =
2034
        xmalloc (fl_table_size * sizeof (*filename_language_table));
2035
      add_filename_language (".c", language_c);
2036
      add_filename_language (".C", language_cplus);
2037
      add_filename_language (".cc", language_cplus);
2038
      add_filename_language (".cp", language_cplus);
2039
      add_filename_language (".cpp", language_cplus);
2040
      add_filename_language (".cxx", language_cplus);
2041
      add_filename_language (".c++", language_cplus);
2042
      add_filename_language (".java", language_java);
2043
      add_filename_language (".class", language_java);
2044
      add_filename_language (".ch", language_chill);
2045
      add_filename_language (".c186", language_chill);
2046
      add_filename_language (".c286", language_chill);
2047
      add_filename_language (".f", language_fortran);
2048
      add_filename_language (".F", language_fortran);
2049
      add_filename_language (".s", language_asm);
2050
      add_filename_language (".S", language_asm);
2051
    }
2052
}
2053
 
2054
enum language
2055
deduce_language_from_filename (filename)
2056
     char *filename;
2057
{
2058
  int i;
2059
  char *cp;
2060
 
2061
  if (filename != NULL)
2062
    if ((cp = strrchr (filename, '.')) != NULL)
2063
      for (i = 0; i < fl_table_next; i++)
2064
        if (strcmp (cp, filename_language_table[i].ext) == 0)
2065
          return filename_language_table[i].lang;
2066
 
2067
  return language_unknown;
2068
}
2069
 
2070
/* allocate_symtab:
2071
 
2072
   Allocate and partly initialize a new symbol table.  Return a pointer
2073
   to it.  error() if no space.
2074
 
2075
   Caller must set these fields:
2076
   LINETABLE(symtab)
2077
   symtab->blockvector
2078
   symtab->dirname
2079
   symtab->free_code
2080
   symtab->free_ptr
2081
   possibly free_named_symtabs (symtab->filename);
2082
 */
2083
 
2084
struct symtab *
2085
allocate_symtab (filename, objfile)
2086
     char *filename;
2087
     struct objfile *objfile;
2088
{
2089
  register struct symtab *symtab;
2090
 
2091
  symtab = (struct symtab *)
2092
    obstack_alloc (&objfile->symbol_obstack, sizeof (struct symtab));
2093
  memset (symtab, 0, sizeof (*symtab));
2094
  symtab->filename = obsavestring (filename, strlen (filename),
2095
                                   &objfile->symbol_obstack);
2096
  symtab->fullname = NULL;
2097
  symtab->language = deduce_language_from_filename (filename);
2098
  symtab->debugformat = obsavestring ("unknown", 7,
2099
                                      &objfile->symbol_obstack);
2100
 
2101
  /* Hook it to the objfile it comes from */
2102
 
2103
  symtab->objfile = objfile;
2104
  symtab->next = objfile->symtabs;
2105
  objfile->symtabs = symtab;
2106
 
2107
  /* FIXME: This should go away.  It is only defined for the Z8000,
2108
     and the Z8000 definition of this macro doesn't have anything to
2109
     do with the now-nonexistent EXTRA_SYMTAB_INFO macro, it's just
2110
     here for convenience.  */
2111
#ifdef INIT_EXTRA_SYMTAB_INFO
2112
  INIT_EXTRA_SYMTAB_INFO (symtab);
2113
#endif
2114
 
2115
  return (symtab);
2116
}
2117
 
2118
struct partial_symtab *
2119
allocate_psymtab (filename, objfile)
2120
     char *filename;
2121
     struct objfile *objfile;
2122
{
2123
  struct partial_symtab *psymtab;
2124
 
2125
  if (objfile->free_psymtabs)
2126
    {
2127
      psymtab = objfile->free_psymtabs;
2128
      objfile->free_psymtabs = psymtab->next;
2129
    }
2130
  else
2131
    psymtab = (struct partial_symtab *)
2132
      obstack_alloc (&objfile->psymbol_obstack,
2133
                     sizeof (struct partial_symtab));
2134
 
2135
  memset (psymtab, 0, sizeof (struct partial_symtab));
2136
  psymtab->filename = obsavestring (filename, strlen (filename),
2137
                                    &objfile->psymbol_obstack);
2138
  psymtab->symtab = NULL;
2139
 
2140
  /* Prepend it to the psymtab list for the objfile it belongs to.
2141
     Psymtabs are searched in most recent inserted -> least recent
2142
     inserted order. */
2143
 
2144
  psymtab->objfile = objfile;
2145
  psymtab->next = objfile->psymtabs;
2146
  objfile->psymtabs = psymtab;
2147
#if 0
2148
  {
2149
    struct partial_symtab **prev_pst;
2150
    psymtab->objfile = objfile;
2151
    psymtab->next = NULL;
2152
    prev_pst = &(objfile->psymtabs);
2153
    while ((*prev_pst) != NULL)
2154
      prev_pst = &((*prev_pst)->next);
2155
    (*prev_pst) = psymtab;
2156
  }
2157
#endif
2158
 
2159
  return (psymtab);
2160
}
2161
 
2162
void
2163
discard_psymtab (pst)
2164
     struct partial_symtab *pst;
2165
{
2166
  struct partial_symtab **prev_pst;
2167
 
2168
  /* From dbxread.c:
2169
     Empty psymtabs happen as a result of header files which don't
2170
     have any symbols in them.  There can be a lot of them.  But this
2171
     check is wrong, in that a psymtab with N_SLINE entries but
2172
     nothing else is not empty, but we don't realize that.  Fixing
2173
     that without slowing things down might be tricky.  */
2174
 
2175
  /* First, snip it out of the psymtab chain */
2176
 
2177
  prev_pst = &(pst->objfile->psymtabs);
2178
  while ((*prev_pst) != pst)
2179
    prev_pst = &((*prev_pst)->next);
2180
  (*prev_pst) = pst->next;
2181
 
2182
  /* Next, put it on a free list for recycling */
2183
 
2184
  pst->next = pst->objfile->free_psymtabs;
2185
  pst->objfile->free_psymtabs = pst;
2186
}
2187
 
2188
 
2189
/* Reset all data structures in gdb which may contain references to symbol
2190
   table data.  */
2191
 
2192
void
2193
clear_symtab_users ()
2194
{
2195
  /* Someday, we should do better than this, by only blowing away
2196
     the things that really need to be blown.  */
2197
  clear_value_history ();
2198
  clear_displays ();
2199
  clear_internalvars ();
2200
  breakpoint_re_set ();
2201
  set_default_breakpoint (0, 0, 0, 0);
2202
  current_source_symtab = 0;
2203
  current_source_line = 0;
2204
  clear_pc_function_cache ();
2205
  if (target_new_objfile_hook)
2206
    target_new_objfile_hook (NULL);
2207
}
2208
 
2209
/* clear_symtab_users_once:
2210
 
2211
   This function is run after symbol reading, or from a cleanup.
2212
   If an old symbol table was obsoleted, the old symbol table
2213
   has been blown away, but the other GDB data structures that may
2214
   reference it have not yet been cleared or re-directed.  (The old
2215
   symtab was zapped, and the cleanup queued, in free_named_symtab()
2216
   below.)
2217
 
2218
   This function can be queued N times as a cleanup, or called
2219
   directly; it will do all the work the first time, and then will be a
2220
   no-op until the next time it is queued.  This works by bumping a
2221
   counter at queueing time.  Much later when the cleanup is run, or at
2222
   the end of symbol processing (in case the cleanup is discarded), if
2223
   the queued count is greater than the "done-count", we do the work
2224
   and set the done-count to the queued count.  If the queued count is
2225
   less than or equal to the done-count, we just ignore the call.  This
2226
   is needed because reading a single .o file will often replace many
2227
   symtabs (one per .h file, for example), and we don't want to reset
2228
   the breakpoints N times in the user's face.
2229
 
2230
   The reason we both queue a cleanup, and call it directly after symbol
2231
   reading, is because the cleanup protects us in case of errors, but is
2232
   discarded if symbol reading is successful.  */
2233
 
2234
#if 0
2235
/* FIXME:  As free_named_symtabs is currently a big noop this function
2236
   is no longer needed.  */
2237
static void
2238
clear_symtab_users_once PARAMS ((void));
2239
 
2240
static int clear_symtab_users_queued;
2241
static int clear_symtab_users_done;
2242
 
2243
static void
2244
clear_symtab_users_once ()
2245
{
2246
  /* Enforce once-per-`do_cleanups'-semantics */
2247
  if (clear_symtab_users_queued <= clear_symtab_users_done)
2248
    return;
2249
  clear_symtab_users_done = clear_symtab_users_queued;
2250
 
2251
  clear_symtab_users ();
2252
}
2253
#endif
2254
 
2255
/* Delete the specified psymtab, and any others that reference it.  */
2256
 
2257
static void
2258
cashier_psymtab (pst)
2259
     struct partial_symtab *pst;
2260
{
2261
  struct partial_symtab *ps, *pprev = NULL;
2262
  int i;
2263
 
2264
  /* Find its previous psymtab in the chain */
2265
  for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2266
    {
2267
      if (ps == pst)
2268
        break;
2269
      pprev = ps;
2270
    }
2271
 
2272
  if (ps)
2273
    {
2274
      /* Unhook it from the chain.  */
2275
      if (ps == pst->objfile->psymtabs)
2276
        pst->objfile->psymtabs = ps->next;
2277
      else
2278
        pprev->next = ps->next;
2279
 
2280
      /* FIXME, we can't conveniently deallocate the entries in the
2281
         partial_symbol lists (global_psymbols/static_psymbols) that
2282
         this psymtab points to.  These just take up space until all
2283
         the psymtabs are reclaimed.  Ditto the dependencies list and
2284
         filename, which are all in the psymbol_obstack.  */
2285
 
2286
      /* We need to cashier any psymtab that has this one as a dependency... */
2287
    again:
2288
      for (ps = pst->objfile->psymtabs; ps; ps = ps->next)
2289
        {
2290
          for (i = 0; i < ps->number_of_dependencies; i++)
2291
            {
2292
              if (ps->dependencies[i] == pst)
2293
                {
2294
                  cashier_psymtab (ps);
2295
                  goto again;   /* Must restart, chain has been munged. */
2296
                }
2297
            }
2298
        }
2299
    }
2300
}
2301
 
2302
/* If a symtab or psymtab for filename NAME is found, free it along
2303
   with any dependent breakpoints, displays, etc.
2304
   Used when loading new versions of object modules with the "add-file"
2305
   command.  This is only called on the top-level symtab or psymtab's name;
2306
   it is not called for subsidiary files such as .h files.
2307
 
2308
   Return value is 1 if we blew away the environment, 0 if not.
2309
   FIXME.  The return valu appears to never be used.
2310
 
2311
   FIXME.  I think this is not the best way to do this.  We should
2312
   work on being gentler to the environment while still cleaning up
2313
   all stray pointers into the freed symtab.  */
2314
 
2315
int
2316
free_named_symtabs (name)
2317
     char *name;
2318
{
2319
#if 0
2320
  /* FIXME:  With the new method of each objfile having it's own
2321
     psymtab list, this function needs serious rethinking.  In particular,
2322
     why was it ever necessary to toss psymtabs with specific compilation
2323
     unit filenames, as opposed to all psymtabs from a particular symbol
2324
     file?  -- fnf
2325
     Well, the answer is that some systems permit reloading of particular
2326
     compilation units.  We want to blow away any old info about these
2327
     compilation units, regardless of which objfiles they arrived in. --gnu.  */
2328
 
2329
  register struct symtab *s;
2330
  register struct symtab *prev;
2331
  register struct partial_symtab *ps;
2332
  struct blockvector *bv;
2333
  int blewit = 0;
2334
 
2335
  /* We only wack things if the symbol-reload switch is set.  */
2336
  if (!symbol_reloading)
2337
    return 0;
2338
 
2339
  /* Some symbol formats have trouble providing file names... */
2340
  if (name == 0 || *name == '\0')
2341
    return 0;
2342
 
2343
  /* Look for a psymtab with the specified name.  */
2344
 
2345
again2:
2346
  for (ps = partial_symtab_list; ps; ps = ps->next)
2347
    {
2348
      if (STREQ (name, ps->filename))
2349
        {
2350
          cashier_psymtab (ps); /* Blow it away...and its little dog, too.  */
2351
          goto again2;          /* Must restart, chain has been munged */
2352
        }
2353
    }
2354
 
2355
  /* Look for a symtab with the specified name.  */
2356
 
2357
  for (s = symtab_list; s; s = s->next)
2358
    {
2359
      if (STREQ (name, s->filename))
2360
        break;
2361
      prev = s;
2362
    }
2363
 
2364
  if (s)
2365
    {
2366
      if (s == symtab_list)
2367
        symtab_list = s->next;
2368
      else
2369
        prev->next = s->next;
2370
 
2371
      /* For now, queue a delete for all breakpoints, displays, etc., whether
2372
         or not they depend on the symtab being freed.  This should be
2373
         changed so that only those data structures affected are deleted.  */
2374
 
2375
      /* But don't delete anything if the symtab is empty.
2376
         This test is necessary due to a bug in "dbxread.c" that
2377
         causes empty symtabs to be created for N_SO symbols that
2378
         contain the pathname of the object file.  (This problem
2379
         has been fixed in GDB 3.9x).  */
2380
 
2381
      bv = BLOCKVECTOR (s);
2382
      if (BLOCKVECTOR_NBLOCKS (bv) > 2
2383
          || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
2384
          || BLOCK_NSYMS (BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)))
2385
        {
2386
          complain (&oldsyms_complaint, name);
2387
 
2388
          clear_symtab_users_queued++;
2389
          make_cleanup (clear_symtab_users_once, 0);
2390
          blewit = 1;
2391
        }
2392
      else
2393
        {
2394
          complain (&empty_symtab_complaint, name);
2395
        }
2396
 
2397
      free_symtab (s);
2398
    }
2399
  else
2400
    {
2401
      /* It is still possible that some breakpoints will be affected
2402
         even though no symtab was found, since the file might have
2403
         been compiled without debugging, and hence not be associated
2404
         with a symtab.  In order to handle this correctly, we would need
2405
         to keep a list of text address ranges for undebuggable files.
2406
         For now, we do nothing, since this is a fairly obscure case.  */
2407
      ;
2408
    }
2409
 
2410
  /* FIXME, what about the minimal symbol table? */
2411
  return blewit;
2412
#else
2413
  return (0);
2414
#endif
2415
}
2416
 
2417
/* Allocate and partially fill a partial symtab.  It will be
2418
   completely filled at the end of the symbol list.
2419
 
2420
   FILENAME is the name of the symbol-file we are reading from. */
2421
 
2422
struct partial_symtab *
2423
start_psymtab_common (objfile, section_offsets,
2424
                      filename, textlow, global_syms, static_syms)
2425
     struct objfile *objfile;
2426
     struct section_offsets *section_offsets;
2427
     char *filename;
2428
     CORE_ADDR textlow;
2429
     struct partial_symbol **global_syms;
2430
     struct partial_symbol **static_syms;
2431
{
2432
  struct partial_symtab *psymtab;
2433
 
2434
  psymtab = allocate_psymtab (filename, objfile);
2435
  psymtab->section_offsets = section_offsets;
2436
  psymtab->textlow = textlow;
2437
  psymtab->texthigh = psymtab->textlow;         /* default */
2438
  psymtab->globals_offset = global_syms - objfile->global_psymbols.list;
2439
  psymtab->statics_offset = static_syms - objfile->static_psymbols.list;
2440
  return (psymtab);
2441
}
2442
 
2443
/* Add a symbol with a long value to a psymtab.
2444
   Since one arg is a struct, we pass in a ptr and deref it (sigh).  */
2445
 
2446
void
2447
add_psymbol_to_list (name, namelength, namespace, class, list, val, coreaddr,
2448
                     language, objfile)
2449
     char *name;
2450
     int namelength;
2451
     namespace_enum namespace;
2452
     enum address_class class;
2453
     struct psymbol_allocation_list *list;
2454
     long val;                  /* Value as a long */
2455
     CORE_ADDR coreaddr;        /* Value as a CORE_ADDR */
2456
     enum language language;
2457
     struct objfile *objfile;
2458
{
2459
  register struct partial_symbol *psym;
2460
  char *buf = alloca (namelength + 1);
2461
  /* psymbol is static so that there will be no uninitialized gaps in the
2462
     structure which might contain random data, causing cache misses in
2463
     bcache. */
2464
  static struct partial_symbol psymbol;
2465
 
2466
  /* Create local copy of the partial symbol */
2467
  memcpy (buf, name, namelength);
2468
  buf[namelength] = '\0';
2469
  SYMBOL_NAME (&psymbol) = bcache (buf, namelength + 1, &objfile->psymbol_cache);
2470
  /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2471
  if (val != 0)
2472
    {
2473
      SYMBOL_VALUE (&psymbol) = val;
2474
    }
2475
  else
2476
    {
2477
      SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2478
    }
2479
  SYMBOL_SECTION (&psymbol) = 0;
2480
  SYMBOL_LANGUAGE (&psymbol) = language;
2481
  PSYMBOL_NAMESPACE (&psymbol) = namespace;
2482
  PSYMBOL_CLASS (&psymbol) = class;
2483
  SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2484
 
2485
  /* Stash the partial symbol away in the cache */
2486
  psym = bcache (&psymbol, sizeof (struct partial_symbol), &objfile->psymbol_cache);
2487
 
2488
  /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2489
  if (list->next >= list->list + list->size)
2490
    {
2491
      extend_psymbol_list (list, objfile);
2492
    }
2493
  *list->next++ = psym;
2494
  OBJSTAT (objfile, n_psyms++);
2495
}
2496
 
2497
/* Add a symbol with a long value to a psymtab. This differs from
2498
 * add_psymbol_to_list above in taking both a mangled and a demangled
2499
 * name. */
2500
 
2501
void
2502
add_psymbol_with_dem_name_to_list (name, namelength, dem_name, dem_namelength,
2503
                   namespace, class, list, val, coreaddr, language, objfile)
2504
     char *name;
2505
     int namelength;
2506
     char *dem_name;
2507
     int dem_namelength;
2508
     namespace_enum namespace;
2509
     enum address_class class;
2510
     struct psymbol_allocation_list *list;
2511
     long val;                  /* Value as a long */
2512
     CORE_ADDR coreaddr;        /* Value as a CORE_ADDR */
2513
     enum language language;
2514
     struct objfile *objfile;
2515
{
2516
  register struct partial_symbol *psym;
2517
  char *buf = alloca (namelength + 1);
2518
  /* psymbol is static so that there will be no uninitialized gaps in the
2519
     structure which might contain random data, causing cache misses in
2520
     bcache. */
2521
  static struct partial_symbol psymbol;
2522
 
2523
  /* Create local copy of the partial symbol */
2524
 
2525
  memcpy (buf, name, namelength);
2526
  buf[namelength] = '\0';
2527
  SYMBOL_NAME (&psymbol) = bcache (buf, namelength + 1, &objfile->psymbol_cache);
2528
 
2529
  buf = alloca (dem_namelength + 1);
2530
  memcpy (buf, dem_name, dem_namelength);
2531
  buf[dem_namelength] = '\0';
2532
 
2533
  switch (language)
2534
    {
2535
    case language_c:
2536
    case language_cplus:
2537
      SYMBOL_CPLUS_DEMANGLED_NAME (&psymbol) =
2538
        bcache (buf, dem_namelength + 1, &objfile->psymbol_cache);
2539
      break;
2540
    case language_chill:
2541
      SYMBOL_CHILL_DEMANGLED_NAME (&psymbol) =
2542
        bcache (buf, dem_namelength + 1, &objfile->psymbol_cache);
2543
 
2544
      /* FIXME What should be done for the default case? Ignoring for now. */
2545
    }
2546
 
2547
  /* val and coreaddr are mutually exclusive, one of them *will* be zero */
2548
  if (val != 0)
2549
    {
2550
      SYMBOL_VALUE (&psymbol) = val;
2551
    }
2552
  else
2553
    {
2554
      SYMBOL_VALUE_ADDRESS (&psymbol) = coreaddr;
2555
    }
2556
  SYMBOL_SECTION (&psymbol) = 0;
2557
  SYMBOL_LANGUAGE (&psymbol) = language;
2558
  PSYMBOL_NAMESPACE (&psymbol) = namespace;
2559
  PSYMBOL_CLASS (&psymbol) = class;
2560
  SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, language);
2561
 
2562
  /* Stash the partial symbol away in the cache */
2563
  psym = bcache (&psymbol, sizeof (struct partial_symbol), &objfile->psymbol_cache);
2564
 
2565
  /* Save pointer to partial symbol in psymtab, growing symtab if needed. */
2566
  if (list->next >= list->list + list->size)
2567
    {
2568
      extend_psymbol_list (list, objfile);
2569
    }
2570
  *list->next++ = psym;
2571
  OBJSTAT (objfile, n_psyms++);
2572
}
2573
 
2574
/* Initialize storage for partial symbols.  */
2575
 
2576
void
2577
init_psymbol_list (objfile, total_symbols)
2578
     struct objfile *objfile;
2579
     int total_symbols;
2580
{
2581
  /* Free any previously allocated psymbol lists.  */
2582
 
2583
  if (objfile->global_psymbols.list)
2584
    {
2585
      mfree (objfile->md, (PTR) objfile->global_psymbols.list);
2586
    }
2587
  if (objfile->static_psymbols.list)
2588
    {
2589
      mfree (objfile->md, (PTR) objfile->static_psymbols.list);
2590
    }
2591
 
2592
  /* Current best guess is that approximately a twentieth
2593
     of the total symbols (in a debugging file) are global or static
2594
     oriented symbols */
2595
 
2596
  objfile->global_psymbols.size = total_symbols / 10;
2597
  objfile->static_psymbols.size = total_symbols / 10;
2598
 
2599
  if (objfile->global_psymbols.size > 0)
2600
    {
2601
      objfile->global_psymbols.next =
2602
        objfile->global_psymbols.list = (struct partial_symbol **)
2603
        xmmalloc (objfile->md, (objfile->global_psymbols.size
2604
                                * sizeof (struct partial_symbol *)));
2605
    }
2606
  if (objfile->static_psymbols.size > 0)
2607
    {
2608
      objfile->static_psymbols.next =
2609
        objfile->static_psymbols.list = (struct partial_symbol **)
2610
        xmmalloc (objfile->md, (objfile->static_psymbols.size
2611
                                * sizeof (struct partial_symbol *)));
2612
    }
2613
}
2614
 
2615
/* OVERLAYS:
2616
   The following code implements an abstraction for debugging overlay sections.
2617
 
2618
   The target model is as follows:
2619
   1) The gnu linker will permit multiple sections to be mapped into the
2620
   same VMA, each with its own unique LMA (or load address).
2621
   2) It is assumed that some runtime mechanism exists for mapping the
2622
   sections, one by one, from the load address into the VMA address.
2623
   3) This code provides a mechanism for gdb to keep track of which
2624
   sections should be considered to be mapped from the VMA to the LMA.
2625
   This information is used for symbol lookup, and memory read/write.
2626
   For instance, if a section has been mapped then its contents
2627
   should be read from the VMA, otherwise from the LMA.
2628
 
2629
   Two levels of debugger support for overlays are available.  One is
2630
   "manual", in which the debugger relies on the user to tell it which
2631
   overlays are currently mapped.  This level of support is
2632
   implemented entirely in the core debugger, and the information about
2633
   whether a section is mapped is kept in the objfile->obj_section table.
2634
 
2635
   The second level of support is "automatic", and is only available if
2636
   the target-specific code provides functionality to read the target's
2637
   overlay mapping table, and translate its contents for the debugger
2638
   (by updating the mapped state information in the obj_section tables).
2639
 
2640
   The interface is as follows:
2641
   User commands:
2642
   overlay map <name>   -- tell gdb to consider this section mapped
2643
   overlay unmap <name> -- tell gdb to consider this section unmapped
2644
   overlay list         -- list the sections that GDB thinks are mapped
2645
   overlay read-target  -- get the target's state of what's mapped
2646
   overlay off/manual/auto -- set overlay debugging state
2647
   Functional interface:
2648
   find_pc_mapped_section(pc):    if the pc is in the range of a mapped
2649
   section, return that section.
2650
   find_pc_overlay(pc):       find any overlay section that contains
2651
   the pc, either in its VMA or its LMA
2652
   overlay_is_mapped(sect):       true if overlay is marked as mapped
2653
   section_is_overlay(sect):      true if section's VMA != LMA
2654
   pc_in_mapped_range(pc,sec):    true if pc belongs to section's VMA
2655
   pc_in_unmapped_range(...):     true if pc belongs to section's LMA
2656
   overlay_mapped_address(...):   map an address from section's LMA to VMA
2657
   overlay_unmapped_address(...): map an address from section's VMA to LMA
2658
   symbol_overlayed_address(...): Return a "current" address for symbol:
2659
   either in VMA or LMA depending on whether
2660
   the symbol's section is currently mapped
2661
 */
2662
 
2663
/* Overlay debugging state: */
2664
 
2665
int overlay_debugging = 0;       /* 0 == off, 1 == manual, -1 == auto */
2666
int overlay_cache_invalid = 0;   /* True if need to refresh mapped state */
2667
 
2668
/* Target vector for refreshing overlay mapped state */
2669
static void simple_overlay_update PARAMS ((struct obj_section *));
2670
void (*target_overlay_update) PARAMS ((struct obj_section *))
2671
= simple_overlay_update;
2672
 
2673
/* Function: section_is_overlay (SECTION)
2674
   Returns true if SECTION has VMA not equal to LMA, ie.
2675
   SECTION is loaded at an address different from where it will "run".  */
2676
 
2677
int
2678
section_is_overlay (section)
2679
     asection *section;
2680
{
2681
  if (overlay_debugging)
2682
    if (section && section->lma != 0 &&
2683
        section->vma != section->lma)
2684
      return 1;
2685
 
2686
  return 0;
2687
}
2688
 
2689
/* Function: overlay_invalidate_all (void)
2690
   Invalidate the mapped state of all overlay sections (mark it as stale).  */
2691
 
2692
static void
2693
overlay_invalidate_all ()
2694
{
2695
  struct objfile *objfile;
2696
  struct obj_section *sect;
2697
 
2698
  ALL_OBJSECTIONS (objfile, sect)
2699
    if (section_is_overlay (sect->the_bfd_section))
2700
    sect->ovly_mapped = -1;
2701
}
2702
 
2703
/* Function: overlay_is_mapped (SECTION)
2704
   Returns true if section is an overlay, and is currently mapped.
2705
   Private: public access is thru function section_is_mapped.
2706
 
2707
   Access to the ovly_mapped flag is restricted to this function, so
2708
   that we can do automatic update.  If the global flag
2709
   OVERLAY_CACHE_INVALID is set (by wait_for_inferior), then call
2710
   overlay_invalidate_all.  If the mapped state of the particular
2711
   section is stale, then call TARGET_OVERLAY_UPDATE to refresh it.  */
2712
 
2713
static int
2714
overlay_is_mapped (osect)
2715
     struct obj_section *osect;
2716
{
2717
  if (osect == 0 || !section_is_overlay (osect->the_bfd_section))
2718
    return 0;
2719
 
2720
  switch (overlay_debugging)
2721
    {
2722
    default:
2723
    case 0:
2724
      return 0;                  /* overlay debugging off */
2725
    case -1:                    /* overlay debugging automatic */
2726
      /* Unles there is a target_overlay_update function,
2727
         there's really nothing useful to do here (can't really go auto)  */
2728
      if (target_overlay_update)
2729
        {
2730
          if (overlay_cache_invalid)
2731
            {
2732
              overlay_invalidate_all ();
2733
              overlay_cache_invalid = 0;
2734
            }
2735
          if (osect->ovly_mapped == -1)
2736
            (*target_overlay_update) (osect);
2737
        }
2738
      /* fall thru to manual case */
2739
    case 1:                     /* overlay debugging manual */
2740
      return osect->ovly_mapped == 1;
2741
    }
2742
}
2743
 
2744
/* Function: section_is_mapped
2745
   Returns true if section is an overlay, and is currently mapped.  */
2746
 
2747
int
2748
section_is_mapped (section)
2749
     asection *section;
2750
{
2751
  struct objfile *objfile;
2752
  struct obj_section *osect;
2753
 
2754
  if (overlay_debugging)
2755
    if (section && section_is_overlay (section))
2756
      ALL_OBJSECTIONS (objfile, osect)
2757
        if (osect->the_bfd_section == section)
2758
        return overlay_is_mapped (osect);
2759
 
2760
  return 0;
2761
}
2762
 
2763
/* Function: pc_in_unmapped_range
2764
   If PC falls into the lma range of SECTION, return true, else false.  */
2765
 
2766
CORE_ADDR
2767
pc_in_unmapped_range (pc, section)
2768
     CORE_ADDR pc;
2769
     asection *section;
2770
{
2771
  int size;
2772
 
2773
  if (overlay_debugging)
2774
    if (section && section_is_overlay (section))
2775
      {
2776
        size = bfd_get_section_size_before_reloc (section);
2777
        if (section->lma <= pc && pc < section->lma + size)
2778
          return 1;
2779
      }
2780
  return 0;
2781
}
2782
 
2783
/* Function: pc_in_mapped_range
2784
   If PC falls into the vma range of SECTION, return true, else false.  */
2785
 
2786
CORE_ADDR
2787
pc_in_mapped_range (pc, section)
2788
     CORE_ADDR pc;
2789
     asection *section;
2790
{
2791
  int size;
2792
 
2793
  if (overlay_debugging)
2794
    if (section && section_is_overlay (section))
2795
      {
2796
        size = bfd_get_section_size_before_reloc (section);
2797
        if (section->vma <= pc && pc < section->vma + size)
2798
          return 1;
2799
      }
2800
  return 0;
2801
}
2802
 
2803
/* Function: overlay_unmapped_address (PC, SECTION)
2804
   Returns the address corresponding to PC in the unmapped (load) range.
2805
   May be the same as PC.  */
2806
 
2807
CORE_ADDR
2808
overlay_unmapped_address (pc, section)
2809
     CORE_ADDR pc;
2810
     asection *section;
2811
{
2812
  if (overlay_debugging)
2813
    if (section && section_is_overlay (section) &&
2814
        pc_in_mapped_range (pc, section))
2815
      return pc + section->lma - section->vma;
2816
 
2817
  return pc;
2818
}
2819
 
2820
/* Function: overlay_mapped_address (PC, SECTION)
2821
   Returns the address corresponding to PC in the mapped (runtime) range.
2822
   May be the same as PC.  */
2823
 
2824
CORE_ADDR
2825
overlay_mapped_address (pc, section)
2826
     CORE_ADDR pc;
2827
     asection *section;
2828
{
2829
  if (overlay_debugging)
2830
    if (section && section_is_overlay (section) &&
2831
        pc_in_unmapped_range (pc, section))
2832
      return pc + section->vma - section->lma;
2833
 
2834
  return pc;
2835
}
2836
 
2837
 
2838
/* Function: symbol_overlayed_address
2839
   Return one of two addresses (relative to the VMA or to the LMA),
2840
   depending on whether the section is mapped or not.  */
2841
 
2842
CORE_ADDR
2843
symbol_overlayed_address (address, section)
2844
     CORE_ADDR address;
2845
     asection *section;
2846
{
2847
  if (overlay_debugging)
2848
    {
2849
      /* If the symbol has no section, just return its regular address. */
2850
      if (section == 0)
2851
        return address;
2852
      /* If the symbol's section is not an overlay, just return its address */
2853
      if (!section_is_overlay (section))
2854
        return address;
2855
      /* If the symbol's section is mapped, just return its address */
2856
      if (section_is_mapped (section))
2857
        return address;
2858
      /*
2859
       * HOWEVER: if the symbol is in an overlay section which is NOT mapped,
2860
       * then return its LOADED address rather than its vma address!!
2861
       */
2862
      return overlay_unmapped_address (address, section);
2863
    }
2864
  return address;
2865
}
2866
 
2867
/* Function: find_pc_overlay (PC)
2868
   Return the best-match overlay section for PC:
2869
   If PC matches a mapped overlay section's VMA, return that section.
2870
   Else if PC matches an unmapped section's VMA, return that section.
2871
   Else if PC matches an unmapped section's LMA, return that section.  */
2872
 
2873
asection *
2874
find_pc_overlay (pc)
2875
     CORE_ADDR pc;
2876
{
2877
  struct objfile *objfile;
2878
  struct obj_section *osect, *best_match = NULL;
2879
 
2880
  if (overlay_debugging)
2881
    ALL_OBJSECTIONS (objfile, osect)
2882
      if (section_is_overlay (osect->the_bfd_section))
2883
      {
2884
        if (pc_in_mapped_range (pc, osect->the_bfd_section))
2885
          {
2886
            if (overlay_is_mapped (osect))
2887
              return osect->the_bfd_section;
2888
            else
2889
              best_match = osect;
2890
          }
2891
        else if (pc_in_unmapped_range (pc, osect->the_bfd_section))
2892
          best_match = osect;
2893
      }
2894
  return best_match ? best_match->the_bfd_section : NULL;
2895
}
2896
 
2897
/* Function: find_pc_mapped_section (PC)
2898
   If PC falls into the VMA address range of an overlay section that is
2899
   currently marked as MAPPED, return that section.  Else return NULL.  */
2900
 
2901
asection *
2902
find_pc_mapped_section (pc)
2903
     CORE_ADDR pc;
2904
{
2905
  struct objfile *objfile;
2906
  struct obj_section *osect;
2907
 
2908
  if (overlay_debugging)
2909
    ALL_OBJSECTIONS (objfile, osect)
2910
      if (pc_in_mapped_range (pc, osect->the_bfd_section) &&
2911
          overlay_is_mapped (osect))
2912
      return osect->the_bfd_section;
2913
 
2914
  return NULL;
2915
}
2916
 
2917
/* Function: list_overlays_command
2918
   Print a list of mapped sections and their PC ranges */
2919
 
2920
void
2921
list_overlays_command (args, from_tty)
2922
     char *args;
2923
     int from_tty;
2924
{
2925
  int nmapped = 0;
2926
  struct objfile *objfile;
2927
  struct obj_section *osect;
2928
 
2929
  if (overlay_debugging)
2930
    ALL_OBJSECTIONS (objfile, osect)
2931
      if (overlay_is_mapped (osect))
2932
      {
2933
        const char *name;
2934
        bfd_vma lma, vma;
2935
        int size;
2936
 
2937
        vma = bfd_section_vma (objfile->obfd, osect->the_bfd_section);
2938
        lma = bfd_section_lma (objfile->obfd, osect->the_bfd_section);
2939
        size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
2940
        name = bfd_section_name (objfile->obfd, osect->the_bfd_section);
2941
 
2942
        printf_filtered ("Section %s, loaded at ", name);
2943
        print_address_numeric (lma, 1, gdb_stdout);
2944
        puts_filtered (" - ");
2945
        print_address_numeric (lma + size, 1, gdb_stdout);
2946
        printf_filtered (", mapped at ");
2947
        print_address_numeric (vma, 1, gdb_stdout);
2948
        puts_filtered (" - ");
2949
        print_address_numeric (vma + size, 1, gdb_stdout);
2950
        puts_filtered ("\n");
2951
 
2952
        nmapped++;
2953
      }
2954
  if (nmapped == 0)
2955
    printf_filtered ("No sections are mapped.\n");
2956
}
2957
 
2958
/* Function: map_overlay_command
2959
   Mark the named section as mapped (ie. residing at its VMA address).  */
2960
 
2961
void
2962
map_overlay_command (args, from_tty)
2963
     char *args;
2964
     int from_tty;
2965
{
2966
  struct objfile *objfile, *objfile2;
2967
  struct obj_section *sec, *sec2;
2968
  asection *bfdsec;
2969
 
2970
  if (!overlay_debugging)
2971
    error ("\
2972
Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
2973
the 'overlay manual' command.");
2974
 
2975
  if (args == 0 || *args == 0)
2976
    error ("Argument required: name of an overlay section");
2977
 
2978
  /* First, find a section matching the user supplied argument */
2979
  ALL_OBJSECTIONS (objfile, sec)
2980
    if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
2981
    {
2982
      /* Now, check to see if the section is an overlay. */
2983
      bfdsec = sec->the_bfd_section;
2984
      if (!section_is_overlay (bfdsec))
2985
        continue;               /* not an overlay section */
2986
 
2987
      /* Mark the overlay as "mapped" */
2988
      sec->ovly_mapped = 1;
2989
 
2990
      /* Next, make a pass and unmap any sections that are
2991
         overlapped by this new section: */
2992
      ALL_OBJSECTIONS (objfile2, sec2)
2993
        if (sec2->ovly_mapped &&
2994
            sec != sec2 &&
2995
            sec->the_bfd_section != sec2->the_bfd_section &&
2996
            (pc_in_mapped_range (sec2->addr, sec->the_bfd_section) ||
2997
             pc_in_mapped_range (sec2->endaddr, sec->the_bfd_section)))
2998
        {
2999
          if (info_verbose)
3000
            printf_filtered ("Note: section %s unmapped by overlap\n",
3001
                             bfd_section_name (objfile->obfd,
3002
                                               sec2->the_bfd_section));
3003
          sec2->ovly_mapped = 0; /* sec2 overlaps sec: unmap sec2 */
3004
        }
3005
      return;
3006
    }
3007
  error ("No overlay section called %s", args);
3008
}
3009
 
3010
/* Function: unmap_overlay_command
3011
   Mark the overlay section as unmapped
3012
   (ie. resident in its LMA address range, rather than the VMA range).  */
3013
 
3014
void
3015
unmap_overlay_command (args, from_tty)
3016
     char *args;
3017
     int from_tty;
3018
{
3019
  struct objfile *objfile;
3020
  struct obj_section *sec;
3021
 
3022
  if (!overlay_debugging)
3023
    error ("\
3024
Overlay debugging not enabled.  Use either the 'overlay auto' or\n\
3025
the 'overlay manual' command.");
3026
 
3027
  if (args == 0 || *args == 0)
3028
    error ("Argument required: name of an overlay section");
3029
 
3030
  /* First, find a section matching the user supplied argument */
3031
  ALL_OBJSECTIONS (objfile, sec)
3032
    if (!strcmp (bfd_section_name (objfile->obfd, sec->the_bfd_section), args))
3033
    {
3034
      if (!sec->ovly_mapped)
3035
        error ("Section %s is not mapped", args);
3036
      sec->ovly_mapped = 0;
3037
      return;
3038
    }
3039
  error ("No overlay section called %s", args);
3040
}
3041
 
3042
/* Function: overlay_auto_command
3043
   A utility command to turn on overlay debugging.
3044
   Possibly this should be done via a set/show command. */
3045
 
3046
static void
3047
overlay_auto_command (args, from_tty)
3048
     char *args;
3049
     int from_tty;
3050
{
3051
  overlay_debugging = -1;
3052
  if (info_verbose)
3053
    printf_filtered ("Automatic overlay debugging enabled.");
3054
}
3055
 
3056
/* Function: overlay_manual_command
3057
   A utility command to turn on overlay debugging.
3058
   Possibly this should be done via a set/show command. */
3059
 
3060
static void
3061
overlay_manual_command (args, from_tty)
3062
     char *args;
3063
     int from_tty;
3064
{
3065
  overlay_debugging = 1;
3066
  if (info_verbose)
3067
    printf_filtered ("Overlay debugging enabled.");
3068
}
3069
 
3070
/* Function: overlay_off_command
3071
   A utility command to turn on overlay debugging.
3072
   Possibly this should be done via a set/show command. */
3073
 
3074
static void
3075
overlay_off_command (args, from_tty)
3076
     char *args;
3077
     int from_tty;
3078
{
3079
  overlay_debugging = 0;
3080
  if (info_verbose)
3081
    printf_filtered ("Overlay debugging disabled.");
3082
}
3083
 
3084
static void
3085
overlay_load_command (args, from_tty)
3086
     char *args;
3087
     int from_tty;
3088
{
3089
  if (target_overlay_update)
3090
    (*target_overlay_update) (NULL);
3091
  else
3092
    error ("This target does not know how to read its overlay state.");
3093
}
3094
 
3095
/* Function: overlay_command
3096
   A place-holder for a mis-typed command */
3097
 
3098
/* Command list chain containing all defined "overlay" subcommands. */
3099
struct cmd_list_element *overlaylist;
3100
 
3101
static void
3102
overlay_command (args, from_tty)
3103
     char *args;
3104
     int from_tty;
3105
{
3106
  printf_unfiltered
3107
    ("\"overlay\" must be followed by the name of an overlay command.\n");
3108
  help_list (overlaylist, "overlay ", -1, gdb_stdout);
3109
}
3110
 
3111
 
3112
/* Target Overlays for the "Simplest" overlay manager:
3113
 
3114
   This is GDB's default target overlay layer.  It works with the
3115
   minimal overlay manager supplied as an example by Cygnus.  The
3116
   entry point is via a function pointer "target_overlay_update",
3117
   so targets that use a different runtime overlay manager can
3118
   substitute their own overlay_update function and take over the
3119
   function pointer.
3120
 
3121
   The overlay_update function pokes around in the target's data structures
3122
   to see what overlays are mapped, and updates GDB's overlay mapping with
3123
   this information.
3124
 
3125
   In this simple implementation, the target data structures are as follows:
3126
   unsigned _novlys;            /# number of overlay sections #/
3127
   unsigned _ovly_table[_novlys][4] = {
3128
   {VMA, SIZE, LMA, MAPPED},    /# one entry per overlay section #/
3129
   {..., ...,  ..., ...},
3130
   }
3131
   unsigned _novly_regions;     /# number of overlay regions #/
3132
   unsigned _ovly_region_table[_novly_regions][3] = {
3133
   {VMA, SIZE, MAPPED_TO_LMA},  /# one entry per overlay region #/
3134
   {..., ...,  ...},
3135
   }
3136
   These functions will attempt to update GDB's mappedness state in the
3137
   symbol section table, based on the target's mappedness state.
3138
 
3139
   To do this, we keep a cached copy of the target's _ovly_table, and
3140
   attempt to detect when the cached copy is invalidated.  The main
3141
   entry point is "simple_overlay_update(SECT), which looks up SECT in
3142
   the cached table and re-reads only the entry for that section from
3143
   the target (whenever possible).
3144
 */
3145
 
3146
/* Cached, dynamically allocated copies of the target data structures: */
3147
static unsigned (*cache_ovly_table)[4] = 0;
3148
#if 0
3149
static unsigned (*cache_ovly_region_table)[3] = 0;
3150
#endif
3151
static unsigned cache_novlys = 0;
3152
#if 0
3153
static unsigned cache_novly_regions = 0;
3154
#endif
3155
static CORE_ADDR cache_ovly_table_base = 0;
3156
#if 0
3157
static CORE_ADDR cache_ovly_region_table_base = 0;
3158
#endif
3159
enum ovly_index
3160
  {
3161
    VMA, SIZE, LMA, MAPPED
3162
  };
3163
#define TARGET_LONG_BYTES (TARGET_LONG_BIT / TARGET_CHAR_BIT)
3164
 
3165
/* Throw away the cached copy of _ovly_table */
3166
static void
3167
simple_free_overlay_table ()
3168
{
3169
  if (cache_ovly_table)
3170
    free (cache_ovly_table);
3171
  cache_novlys = 0;
3172
  cache_ovly_table = NULL;
3173
  cache_ovly_table_base = 0;
3174
}
3175
 
3176
#if 0
3177
/* Throw away the cached copy of _ovly_region_table */
3178
static void
3179
simple_free_overlay_region_table ()
3180
{
3181
  if (cache_ovly_region_table)
3182
    free (cache_ovly_region_table);
3183
  cache_novly_regions = 0;
3184
  cache_ovly_region_table = NULL;
3185
  cache_ovly_region_table_base = 0;
3186
}
3187
#endif
3188
 
3189
/* Read an array of ints from the target into a local buffer.
3190
   Convert to host order.  int LEN is number of ints  */
3191
static void
3192
read_target_long_array (memaddr, myaddr, len)
3193
     CORE_ADDR memaddr;
3194
     unsigned int *myaddr;
3195
     int len;
3196
{
3197
  char *buf = alloca (len * TARGET_LONG_BYTES);
3198
  int i;
3199
 
3200
  read_memory (memaddr, buf, len * TARGET_LONG_BYTES);
3201
  for (i = 0; i < len; i++)
3202
    myaddr[i] = extract_unsigned_integer (TARGET_LONG_BYTES * i + buf,
3203
                                          TARGET_LONG_BYTES);
3204
}
3205
 
3206
/* Find and grab a copy of the target _ovly_table
3207
   (and _novlys, which is needed for the table's size) */
3208
static int
3209
simple_read_overlay_table ()
3210
{
3211
  struct minimal_symbol *msym;
3212
 
3213
  simple_free_overlay_table ();
3214
  msym = lookup_minimal_symbol ("_novlys", 0, 0);
3215
  if (msym != NULL)
3216
    cache_novlys = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3217
  else
3218
    return 0;                    /* failure */
3219
  cache_ovly_table = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
3220
  if (cache_ovly_table != NULL)
3221
    {
3222
      msym = lookup_minimal_symbol ("_ovly_table", 0, 0);
3223
      if (msym != NULL)
3224
        {
3225
          cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (msym);
3226
          read_target_long_array (cache_ovly_table_base,
3227
                                  (int *) cache_ovly_table,
3228
                                  cache_novlys * 4);
3229
        }
3230
      else
3231
        return 0;                /* failure */
3232
    }
3233
  else
3234
    return 0;                    /* failure */
3235
  return 1;                     /* SUCCESS */
3236
}
3237
 
3238
#if 0
3239
/* Find and grab a copy of the target _ovly_region_table
3240
   (and _novly_regions, which is needed for the table's size) */
3241
static int
3242
simple_read_overlay_region_table ()
3243
{
3244
  struct minimal_symbol *msym;
3245
 
3246
  simple_free_overlay_region_table ();
3247
  msym = lookup_minimal_symbol ("_novly_regions", 0, 0);
3248
  if (msym != NULL)
3249
    cache_novly_regions = read_memory_integer (SYMBOL_VALUE_ADDRESS (msym), 4);
3250
  else
3251
    return 0;                    /* failure */
3252
  cache_ovly_region_table = (void *) xmalloc (cache_novly_regions * 12);
3253
  if (cache_ovly_region_table != NULL)
3254
    {
3255
      msym = lookup_minimal_symbol ("_ovly_region_table", 0, 0);
3256
      if (msym != NULL)
3257
        {
3258
          cache_ovly_region_table_base = SYMBOL_VALUE_ADDRESS (msym);
3259
          read_target_long_array (cache_ovly_region_table_base,
3260
                                  (int *) cache_ovly_region_table,
3261
                                  cache_novly_regions * 3);
3262
        }
3263
      else
3264
        return 0;                /* failure */
3265
    }
3266
  else
3267
    return 0;                    /* failure */
3268
  return 1;                     /* SUCCESS */
3269
}
3270
#endif
3271
 
3272
/* Function: simple_overlay_update_1
3273
   A helper function for simple_overlay_update.  Assuming a cached copy
3274
   of _ovly_table exists, look through it to find an entry whose vma,
3275
   lma and size match those of OSECT.  Re-read the entry and make sure
3276
   it still matches OSECT (else the table may no longer be valid).
3277
   Set OSECT's mapped state to match the entry.  Return: 1 for
3278
   success, 0 for failure.  */
3279
 
3280
static int
3281
simple_overlay_update_1 (osect)
3282
     struct obj_section *osect;
3283
{
3284
  int i, size;
3285
 
3286
  size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3287
  for (i = 0; i < cache_novlys; i++)
3288
    if (cache_ovly_table[i][VMA] == osect->the_bfd_section->vma &&
3289
        cache_ovly_table[i][LMA] == osect->the_bfd_section->lma         /* &&
3290
                                                                           cache_ovly_table[i][SIZE] == size */ )
3291
      {
3292
        read_target_long_array (cache_ovly_table_base + i * TARGET_LONG_BYTES,
3293
                                (int *) cache_ovly_table[i], 4);
3294
        if (cache_ovly_table[i][VMA] == osect->the_bfd_section->vma &&
3295
            cache_ovly_table[i][LMA] == osect->the_bfd_section->lma     /* &&
3296
                                                                           cache_ovly_table[i][SIZE] == size */ )
3297
          {
3298
            osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3299
            return 1;
3300
          }
3301
        else                    /* Warning!  Warning!  Target's ovly table has changed! */
3302
          return 0;
3303
      }
3304
  return 0;
3305
}
3306
 
3307
/* Function: simple_overlay_update
3308
   If OSECT is NULL, then update all sections' mapped state
3309
   (after re-reading the entire target _ovly_table).
3310
   If OSECT is non-NULL, then try to find a matching entry in the
3311
   cached ovly_table and update only OSECT's mapped state.
3312
   If a cached entry can't be found or the cache isn't valid, then
3313
   re-read the entire cache, and go ahead and update all sections.  */
3314
 
3315
static void
3316
simple_overlay_update (osect)
3317
     struct obj_section *osect;
3318
{
3319
  struct objfile *objfile;
3320
 
3321
  /* Were we given an osect to look up?  NULL means do all of them. */
3322
  if (osect)
3323
    /* Have we got a cached copy of the target's overlay table? */
3324
    if (cache_ovly_table != NULL)
3325
      /* Does its cached location match what's currently in the symtab? */
3326
      if (cache_ovly_table_base ==
3327
          SYMBOL_VALUE_ADDRESS (lookup_minimal_symbol ("_ovly_table", 0, 0)))
3328
        /* Then go ahead and try to look up this single section in the cache */
3329
        if (simple_overlay_update_1 (osect))
3330
          /* Found it!  We're done. */
3331
          return;
3332
 
3333
  /* Cached table no good: need to read the entire table anew.
3334
     Or else we want all the sections, in which case it's actually
3335
     more efficient to read the whole table in one block anyway.  */
3336
 
3337
  if (simple_read_overlay_table () == 0) /* read failed?  No table? */
3338
    {
3339
      warning ("Failed to read the target overlay mapping table.");
3340
      return;
3341
    }
3342
  /* Now may as well update all sections, even if only one was requested. */
3343
  ALL_OBJSECTIONS (objfile, osect)
3344
    if (section_is_overlay (osect->the_bfd_section))
3345
    {
3346
      int i, size;
3347
 
3348
      size = bfd_get_section_size_before_reloc (osect->the_bfd_section);
3349
      for (i = 0; i < cache_novlys; i++)
3350
        if (cache_ovly_table[i][VMA] == osect->the_bfd_section->vma &&
3351
            cache_ovly_table[i][LMA] == osect->the_bfd_section->lma     /* &&
3352
                                                                           cache_ovly_table[i][SIZE] == size */ )
3353
          {                     /* obj_section matches i'th entry in ovly_table */
3354
            osect->ovly_mapped = cache_ovly_table[i][MAPPED];
3355
            break;              /* finished with inner for loop: break out */
3356
          }
3357
    }
3358
}
3359
 
3360
 
3361
void
3362
_initialize_symfile ()
3363
{
3364
  struct cmd_list_element *c;
3365
 
3366
  c = add_cmd ("symbol-file", class_files, symbol_file_command,
3367
               "Load symbol table from executable file FILE.\n\
3368
The `file' command can also load symbol tables, as well as setting the file\n\
3369
to execute.", &cmdlist);
3370
  c->completer = filename_completer;
3371
 
3372
  c = add_cmd ("add-symbol-file", class_files, add_symbol_file_command,
3373
               "Usage: add-symbol-file FILE ADDR [DATA_ADDR [BSS_ADDR]]\n\
3374
or:    add-symbol-file FILE -T<SECT> <SECT_ADDR> -T<SECT> <SECT_ADDR> ...\n\
3375
Load the symbols from FILE, assuming FILE has been dynamically loaded.\n\
3376
ADDR is the starting address of the file's text.\n\
3377
The optional arguments, DATA_ADDR and BSS_ADDR, should be specified\n\
3378
if the data and bss segments are not contiguous with the text.\n\
3379
For complicated cases, SECT is a section name to be loaded at SECT_ADDR.",
3380
               &cmdlist);
3381
  c->completer = filename_completer;
3382
 
3383
  c = add_cmd ("add-shared-symbol-files", class_files,
3384
               add_shared_symbol_files_command,
3385
   "Load the symbols from shared objects in the dynamic linker's link map.",
3386
               &cmdlist);
3387
  c = add_alias_cmd ("assf", "add-shared-symbol-files", class_files, 1,
3388
                     &cmdlist);
3389
 
3390
  c = add_cmd ("load", class_files, load_command,
3391
               "Dynamically load FILE into the running program, and record its symbols\n\
3392
for access from GDB.", &cmdlist);
3393
  c->completer = filename_completer;
3394
 
3395
  add_show_from_set
3396
    (add_set_cmd ("symbol-reloading", class_support, var_boolean,
3397
                  (char *) &symbol_reloading,
3398
            "Set dynamic symbol table reloading multiple times in one run.",
3399
                  &setlist),
3400
     &showlist);
3401
 
3402
  add_prefix_cmd ("overlay", class_support, overlay_command,
3403
                  "Commands for debugging overlays.", &overlaylist,
3404
                  "overlay ", 0, &cmdlist);
3405
 
3406
  add_com_alias ("ovly", "overlay", class_alias, 1);
3407
  add_com_alias ("ov", "overlay", class_alias, 1);
3408
 
3409
  add_cmd ("map-overlay", class_support, map_overlay_command,
3410
           "Assert that an overlay section is mapped.", &overlaylist);
3411
 
3412
  add_cmd ("unmap-overlay", class_support, unmap_overlay_command,
3413
           "Assert that an overlay section is unmapped.", &overlaylist);
3414
 
3415
  add_cmd ("list-overlays", class_support, list_overlays_command,
3416
           "List mappings of overlay sections.", &overlaylist);
3417
 
3418
  add_cmd ("manual", class_support, overlay_manual_command,
3419
           "Enable overlay debugging.", &overlaylist);
3420
  add_cmd ("off", class_support, overlay_off_command,
3421
           "Disable overlay debugging.", &overlaylist);
3422
  add_cmd ("auto", class_support, overlay_auto_command,
3423
           "Enable automatic overlay debugging.", &overlaylist);
3424
  add_cmd ("load-target", class_support, overlay_load_command,
3425
           "Read the overlay mapping state from the target.", &overlaylist);
3426
 
3427
  /* Filename extension to source language lookup table: */
3428
  init_filename_language_table ();
3429
  c = add_set_cmd ("extension-language", class_files, var_string_noescape,
3430
                   (char *) &ext_args,
3431
                   "Set mapping between filename extension and source language.\n\
3432
Usage: set extension-language .foo bar",
3433
                   &setlist);
3434
  c->function.cfunc = set_ext_lang_command;
3435
 
3436
  add_info ("extensions", info_ext_lang_command,
3437
            "All filename extensions associated with a source language.");
3438
 
3439
  add_show_from_set
3440
    (add_set_cmd ("download-write-size", class_obscure,
3441
                  var_integer, (char *) &download_write_size,
3442
                  "Set the write size used when downloading a program.\n"
3443
                  "Only used when downloading a program onto a remote\n"
3444
                  "target. Specify zero, or a negative value, to disable\n"
3445
                  "blocked writes. The actual size of each transfer is also\n"
3446
                  "limited by the size of the target packet and the memory\n"
3447
                  "cache.\n",
3448
                  &setlist),
3449
     &showlist);
3450
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.