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

Subversion Repositories or1k

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

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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