* gdbtypes.c (check_typedef): Document that this function can
[platform/upstream/binutils.git] / gdb / xcoffread.c
1 /* Read AIX xcoff symbol tables and convert to internal format, for GDB.
2    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009,
4    2010, 2011 Free Software Foundation, Inc.
5    Derived from coffread.c, dbxread.c, and a lot of hacking.
6    Contributed by IBM Corporation.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "bfd.h"
25
26 #include <sys/types.h>
27 #include <fcntl.h>
28 #include <ctype.h>
29 #include "gdb_string.h"
30
31 #include <sys/param.h>
32 #ifdef HAVE_SYS_FILE_H
33 #include <sys/file.h>
34 #endif
35 #include "gdb_stat.h"
36
37 #include "coff/internal.h"
38 #include "libcoff.h"            /* FIXME, internal data from BFD */
39 #include "coff/xcoff.h"
40 #include "libxcoff.h"
41 #include "coff/rs6000.h"
42 #include "xcoffread.h"
43
44 #include "symtab.h"
45 #include "gdbtypes.h"
46 /* FIXME: ezannoni/2004-02-13 Verify if the include below is really needed.  */
47 #include "symfile.h"
48 #include "objfiles.h"
49 #include "buildsym.h"
50 #include "stabsread.h"
51 #include "expression.h"
52 #include "complaints.h"
53 #include "psympriv.h"
54
55 #include "gdb-stabs.h"
56
57 /* For interface with stabsread.c.  */
58 #include "aout/stab_gnu.h"
59
60 \f
61 /* We put a pointer to this structure in the read_symtab_private field
62    of the psymtab.  */
63
64 struct symloc
65   {
66
67     /* First symbol number for this file.  */
68
69     int first_symnum;
70
71     /* Number of symbols in the section of the symbol table devoted to
72        this file's symbols (actually, the section bracketed may contain
73        more than just this file's symbols).  If numsyms is 0, the only
74        reason for this thing's existence is the dependency list.  Nothing
75        else will happen when it is read in.  */
76
77     int numsyms;
78
79     /* Position of the start of the line number information for this
80        psymtab.  */
81     unsigned int lineno_off;
82   };
83
84 /* Remember what we deduced to be the source language of this psymtab.  */
85
86 static enum language psymtab_language = language_unknown;
87 \f
88
89 /* Simplified internal version of coff symbol table information.  */
90
91 struct coff_symbol
92   {
93     char *c_name;
94     int c_symnum;               /* Symbol number of this entry.  */
95     int c_naux;                 /* 0 if syment only, 1 if syment + auxent.  */
96     long c_value;
97     unsigned char c_sclass;
98     int c_secnum;
99     unsigned int c_type;
100   };
101
102 /* Last function's saved coff symbol `cs'.  */
103
104 static struct coff_symbol fcn_cs_saved;
105
106 static bfd *symfile_bfd;
107
108 /* Core address of start and end of text of current source file.
109    This is calculated from the first function seen after a C_FILE
110    symbol.  */
111
112
113 static CORE_ADDR cur_src_end_addr;
114
115 /* Core address of the end of the first object file.  */
116
117 static CORE_ADDR first_object_file_end;
118
119 /* Initial symbol-table-debug-string vector length.  */
120
121 #define INITIAL_STABVECTOR_LENGTH       40
122
123 /* Nonzero if within a function (so symbols should be local,
124    if nothing says specifically).  */
125
126 int within_function;
127
128 /* Size of a COFF symbol.  I think it is always 18, so I'm not sure
129    there is any reason not to just use a #define, but might as well
130    ask BFD for the size and store it here, I guess.  */
131
132 static unsigned local_symesz;
133
134 struct coff_symfile_info
135   {
136     file_ptr min_lineno_offset; /* Where in file lowest line#s are.  */
137     file_ptr max_lineno_offset; /* 1+last byte of line#s in file.  */
138
139     /* Pointer to the string table.  */
140     char *strtbl;
141
142     /* Pointer to debug section.  */
143     char *debugsec;
144
145     /* Pointer to the a.out symbol table.  */
146     char *symtbl;
147
148     /* Number of symbols in symtbl.  */
149     int symtbl_num_syms;
150
151     /* Offset in data section to TOC anchor.  */
152     CORE_ADDR toc_offset;
153   };
154
155 /* XCOFF names for dwarf sections.  There is no compressed sections.  */
156
157 static const struct dwarf2_debug_sections dwarf2_xcoff_names = {
158   { ".dwinfo", NULL },
159   { ".dwabrev", NULL },
160   { ".dwline", NULL },
161   { ".dwloc", NULL },
162   { NULL, NULL }, /* debug_macinfo */
163   { NULL, NULL }, /* debug_macro */
164   { ".dwstr", NULL },
165   { ".dwrnges", NULL },
166   { NULL, NULL }, /* debug_types */
167   { ".dwframe", NULL },
168   { NULL, NULL }, /* eh_frame */
169   { NULL, NULL }, /* gdb_index */
170   23
171 };
172
173 static void
174 bf_notfound_complaint (void)
175 {
176   complaint (&symfile_complaints,
177              _("line numbers off, `.bf' symbol not found"));
178 }
179
180 static void
181 ef_complaint (int arg1)
182 {
183   complaint (&symfile_complaints,
184              _("Mismatched .ef symbol ignored starting at symnum %d"), arg1);
185 }
186
187 static void
188 eb_complaint (int arg1)
189 {
190   complaint (&symfile_complaints,
191              _("Mismatched .eb symbol ignored starting at symnum %d"), arg1);
192 }
193
194 static void xcoff_initial_scan (struct objfile *, int);
195
196 static void scan_xcoff_symtab (struct objfile *);
197
198 static char *xcoff_next_symbol_text (struct objfile *);
199
200 static void record_include_begin (struct coff_symbol *);
201
202 static void
203 enter_line_range (struct subfile *, unsigned, unsigned,
204                   CORE_ADDR, CORE_ADDR, unsigned *);
205
206 static void init_stringtab (bfd *, file_ptr, struct objfile *);
207
208 static void xcoff_symfile_init (struct objfile *);
209
210 static void xcoff_new_init (struct objfile *);
211
212 static void xcoff_symfile_finish (struct objfile *);
213
214 static void xcoff_symfile_offsets (struct objfile *,
215                                    struct section_addr_info *addrs);
216
217 static char *coff_getfilename (union internal_auxent *, struct objfile *);
218
219 static void read_symbol (struct internal_syment *, int);
220
221 static int read_symbol_lineno (int);
222
223 static CORE_ADDR read_symbol_nvalue (int);
224
225 static struct symbol *process_xcoff_symbol (struct coff_symbol *,
226                                             struct objfile *);
227
228 static void read_xcoff_symtab (struct partial_symtab *);
229
230 #if 0
231 static void add_stab_to_list (char *, struct pending_stabs **);
232 #endif
233
234 static int compare_lte (const void *, const void *);
235
236 static struct linetable *arrange_linetable (struct linetable *);
237
238 static void record_include_end (struct coff_symbol *);
239
240 static void process_linenos (CORE_ADDR, CORE_ADDR);
241 \f
242
243 /* Translate from a COFF section number (target_index) to a SECT_OFF_*
244    code.  */
245 static int secnum_to_section (int, struct objfile *);
246 static asection *secnum_to_bfd_section (int, struct objfile *);
247
248 struct find_targ_sec_arg
249   {
250     int targ_index;
251     int *resultp;
252     asection **bfd_sect;
253     struct objfile *objfile;
254   };
255
256 static void find_targ_sec (bfd *, asection *, void *);
257
258 static void
259 find_targ_sec (bfd *abfd, asection *sect, void *obj)
260 {
261   struct find_targ_sec_arg *args = (struct find_targ_sec_arg *) obj;
262   struct objfile *objfile = args->objfile;
263
264   if (sect->target_index == args->targ_index)
265     {
266       /* This is the section.  Figure out what SECT_OFF_* code it is.  */
267       if (bfd_get_section_flags (abfd, sect) & SEC_CODE)
268         *args->resultp = SECT_OFF_TEXT (objfile);
269       else if (bfd_get_section_flags (abfd, sect) & SEC_LOAD)
270         *args->resultp = SECT_OFF_DATA (objfile);
271       else
272         *args->resultp = sect->index;
273       *args->bfd_sect = sect;
274     }
275 }
276
277 /* Return the section number (SECT_OFF_*) that CS points to.  */
278 static int
279 secnum_to_section (int secnum, struct objfile *objfile)
280 {
281   int off = SECT_OFF_TEXT (objfile);
282
283   asection *sect = NULL;
284   struct find_targ_sec_arg args;
285   args.targ_index = secnum;
286   args.resultp = &off;
287   args.bfd_sect = &sect;
288   args.objfile = objfile;
289   bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
290   return off;
291 }
292
293 /* Return the BFD section that CS points to.  */
294 static asection *
295 secnum_to_bfd_section (int secnum, struct objfile *objfile)
296 {
297   int off = SECT_OFF_TEXT (objfile);
298
299   asection *sect = NULL;
300   struct find_targ_sec_arg args;
301   args.targ_index = secnum;
302   args.resultp = &off;
303   args.bfd_sect = &sect;
304   args.objfile = objfile;
305   bfd_map_over_sections (objfile->obfd, find_targ_sec, &args);
306   return sect;
307 }
308 \f
309 /* add a given stab string into given stab vector.  */
310
311 #if 0
312
313 static void
314 add_stab_to_list (char *stabname, struct pending_stabs **stabvector)
315 {
316   if (*stabvector == NULL)
317     {
318       *stabvector = (struct pending_stabs *)
319         xmalloc (sizeof (struct pending_stabs) +
320                  INITIAL_STABVECTOR_LENGTH * sizeof (char *));
321       (*stabvector)->count = 0;
322       (*stabvector)->length = INITIAL_STABVECTOR_LENGTH;
323     }
324   else if ((*stabvector)->count >= (*stabvector)->length)
325     {
326       (*stabvector)->length += INITIAL_STABVECTOR_LENGTH;
327       *stabvector = (struct pending_stabs *)
328         xrealloc ((char *) *stabvector, sizeof (struct pending_stabs) +
329                   (*stabvector)->length * sizeof (char *));
330     }
331   (*stabvector)->stab[(*stabvector)->count++] = stabname;
332 }
333
334 #endif
335 \f/* *INDENT-OFF* */
336 /* Linenos are processed on a file-by-file basis.
337
338    Two reasons:
339
340    1) xlc (IBM's native c compiler) postpones static function code
341    emission to the end of a compilation unit.  This way it can
342    determine if those functions (statics) are needed or not, and
343    can do some garbage collection (I think).  This makes line
344    numbers and corresponding addresses unordered, and we end up
345    with a line table like:
346
347
348    lineno       addr
349    foo()          10    0x100
350    20   0x200
351    30   0x300
352
353    foo3()         70    0x400
354    80   0x500
355    90   0x600
356
357    static foo2()
358    40   0x700
359    50   0x800
360    60   0x900           
361
362    and that breaks gdb's binary search on line numbers, if the
363    above table is not sorted on line numbers.  And that sort
364    should be on function based, since gcc can emit line numbers
365    like:
366
367    10   0x100   - for the init/test part of a for stmt.
368    20   0x200
369    30   0x300
370    10   0x400   - for the increment part of a for stmt.
371
372    arrange_linetable() will do this sorting.
373
374    2)   aix symbol table might look like:
375
376    c_file               // beginning of a new file
377    .bi          // beginning of include file
378    .ei          // end of include file
379    .bi
380    .ei
381
382    basically, .bi/.ei pairs do not necessarily encapsulate
383    their scope.  They need to be recorded, and processed later
384    on when we come the end of the compilation unit.
385    Include table (inclTable) and process_linenos() handle
386    that.  */
387 /* *INDENT-ON* */
388
389
390
391 /* compare line table entry addresses.  */
392
393 static int
394 compare_lte (const void *lte1p, const void *lte2p)
395 {
396   struct linetable_entry *lte1 = (struct linetable_entry *) lte1p;
397   struct linetable_entry *lte2 = (struct linetable_entry *) lte2p;
398
399   return lte1->pc - lte2->pc;
400 }
401
402 /* Given a line table with function entries are marked, arrange its
403    functions in ascending order and strip off function entry markers
404    and return it in a newly created table.  If the old one is good
405    enough, return the old one.  */
406 /* FIXME: I think all this stuff can be replaced by just passing
407    sort_linevec = 1 to end_symtab.  */
408
409 static struct linetable *
410 arrange_linetable (struct linetable *oldLineTb)
411 {
412   int ii, jj, newline,          /* new line count */
413     function_count;             /* # of functions */
414
415   struct linetable_entry *fentry;       /* function entry vector */
416   int fentry_size;              /* # of function entries */
417   struct linetable *newLineTb;  /* new line table */
418
419 #define NUM_OF_FUNCTIONS 20
420
421   fentry_size = NUM_OF_FUNCTIONS;
422   fentry = (struct linetable_entry *)
423     xmalloc (fentry_size * sizeof (struct linetable_entry));
424
425   for (function_count = 0, ii = 0; ii < oldLineTb->nitems; ++ii)
426     {
427       if (oldLineTb->item[ii].line == 0)
428         {                       /* Function entry found.  */
429           if (function_count >= fentry_size)
430             {                   /* Make sure you have room.  */
431               fentry_size *= 2;
432               fentry = (struct linetable_entry *)
433                 xrealloc (fentry,
434                           fentry_size * sizeof (struct linetable_entry));
435             }
436           fentry[function_count].line = ii;
437           fentry[function_count].pc = oldLineTb->item[ii].pc;
438           ++function_count;
439         }
440     }
441
442   if (function_count == 0)
443     {
444       xfree (fentry);
445       return oldLineTb;
446     }
447   else if (function_count > 1)
448     qsort (fentry, function_count,
449            sizeof (struct linetable_entry), compare_lte);
450
451   /* Allocate a new line table.  */
452   newLineTb = (struct linetable *)
453     xmalloc
454     (sizeof (struct linetable) +
455     (oldLineTb->nitems - function_count) * sizeof (struct linetable_entry));
456
457   /* If line table does not start with a function beginning, copy up until
458      a function begin.  */
459
460   newline = 0;
461   if (oldLineTb->item[0].line != 0)
462     for (newline = 0;
463     newline < oldLineTb->nitems && oldLineTb->item[newline].line; ++newline)
464       newLineTb->item[newline] = oldLineTb->item[newline];
465
466   /* Now copy function lines one by one.  */
467
468   for (ii = 0; ii < function_count; ++ii)
469     {
470       for (jj = fentry[ii].line + 1;
471            jj < oldLineTb->nitems && oldLineTb->item[jj].line != 0;
472            ++jj, ++newline)
473         newLineTb->item[newline] = oldLineTb->item[jj];
474     }
475   xfree (fentry);
476   newLineTb->nitems = oldLineTb->nitems - function_count;
477   return newLineTb;
478 }
479
480 /* include file support: C_BINCL/C_EINCL pairs will be kept in the 
481    following `IncludeChain'.  At the end of each symtab (end_symtab),
482    we will determine if we should create additional symtab's to
483    represent if (the include files.  */
484
485
486 typedef struct _inclTable
487 {
488   char *name;                   /* include filename */
489
490   /* Offsets to the line table.  end points to the last entry which is
491      part of this include file.  */
492   int begin, end;
493
494   struct subfile *subfile;
495   unsigned funStartLine;        /* Start line # of its function.  */
496 }
497 InclTable;
498
499 #define INITIAL_INCLUDE_TABLE_LENGTH    20
500 static InclTable *inclTable;    /* global include table */
501 static int inclIndx;            /* last entry to table */
502 static int inclLength;          /* table length */
503 static int inclDepth;           /* nested include depth */
504
505 static void allocate_include_entry (void);
506
507 static void
508 record_include_begin (struct coff_symbol *cs)
509 {
510   if (inclDepth)
511     {
512       /* In xcoff, we assume include files cannot be nested (not in .c files
513          of course, but in corresponding .s files.).  */
514
515       /* This can happen with old versions of GCC.
516          GCC 2.3.3-930426 does not exhibit this on a test case which
517          a user said produced the message for him.  */
518       complaint (&symfile_complaints, _("Nested C_BINCL symbols"));
519     }
520   ++inclDepth;
521
522   allocate_include_entry ();
523
524   inclTable[inclIndx].name = cs->c_name;
525   inclTable[inclIndx].begin = cs->c_value;
526 }
527
528 static void
529 record_include_end (struct coff_symbol *cs)
530 {
531   InclTable *pTbl;
532
533   if (inclDepth == 0)
534     {
535       complaint (&symfile_complaints, _("Mismatched C_BINCL/C_EINCL pair"));
536     }
537
538   allocate_include_entry ();
539
540   pTbl = &inclTable[inclIndx];
541   pTbl->end = cs->c_value;
542
543   --inclDepth;
544   ++inclIndx;
545 }
546
547 static void
548 allocate_include_entry (void)
549 {
550   if (inclTable == NULL)
551     {
552       inclTable = (InclTable *)
553         xmalloc (sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
554       memset (inclTable,
555               '\0', sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
556       inclLength = INITIAL_INCLUDE_TABLE_LENGTH;
557       inclIndx = 0;
558     }
559   else if (inclIndx >= inclLength)
560     {
561       inclLength += INITIAL_INCLUDE_TABLE_LENGTH;
562       inclTable = (InclTable *)
563         xrealloc (inclTable, sizeof (InclTable) * inclLength);
564       memset (inclTable + inclLength - INITIAL_INCLUDE_TABLE_LENGTH,
565               '\0', sizeof (InclTable) * INITIAL_INCLUDE_TABLE_LENGTH);
566     }
567 }
568
569 /* Global variable to pass the psymtab down to all the routines involved
570    in psymtab to symtab processing.  */
571 static struct partial_symtab *this_symtab_psymtab;
572
573 /* given the start and end addresses of a compilation unit (or a csect,
574    at times) process its lines and create appropriate line vectors.  */
575
576 static void
577 process_linenos (CORE_ADDR start, CORE_ADDR end)
578 {
579   int offset, ii;
580   file_ptr max_offset =
581     ((struct coff_symfile_info *) this_symtab_psymtab->objfile
582      ->deprecated_sym_private)->max_lineno_offset;
583
584   /* subfile structure for the main compilation unit.  */
585   struct subfile main_subfile;
586
587   /* In the main source file, any time we see a function entry, we
588      reset this variable to function's absolute starting line number.
589      All the following line numbers in the function are relative to
590      this, and we record absolute line numbers in record_line().  */
591
592   unsigned int main_source_baseline = 0;
593
594   unsigned *firstLine;
595
596   offset =
597     ((struct symloc *) this_symtab_psymtab->read_symtab_private)->lineno_off;
598   if (offset == 0)
599     goto return_after_cleanup;
600
601   memset (&main_subfile, '\0', sizeof (main_subfile));
602
603   if (inclIndx == 0)
604     /* All source lines were in the main source file.  None in include
605        files.  */
606
607     enter_line_range (&main_subfile, offset, 0, start, end,
608                       &main_source_baseline);
609
610   else
611     {
612       /* There was source with line numbers in include files.  */
613
614       int linesz =
615         coff_data (this_symtab_psymtab->objfile->obfd)->local_linesz;
616       main_source_baseline = 0;
617
618       for (ii = 0; ii < inclIndx; ++ii)
619         {
620           struct subfile *tmpSubfile;
621
622           /* If there is main file source before include file, enter it.  */
623           if (offset < inclTable[ii].begin)
624             {
625               enter_line_range
626                 (&main_subfile, offset, inclTable[ii].begin - linesz,
627                  start, 0, &main_source_baseline);
628             }
629
630           if (strcmp (inclTable[ii].name, last_source_file) == 0)
631             {
632               /* The entry in the include table refers to the main source
633                  file.  Add the lines to the main subfile.  */
634
635               main_source_baseline = inclTable[ii].funStartLine;
636               enter_line_range
637                 (&main_subfile, inclTable[ii].begin, inclTable[ii].end,
638                  start, 0, &main_source_baseline);
639               inclTable[ii].subfile = &main_subfile;
640             }
641           else
642             {
643               /* Have a new subfile for the include file.  */
644
645               tmpSubfile = inclTable[ii].subfile =
646                 (struct subfile *) xmalloc (sizeof (struct subfile));
647
648               memset (tmpSubfile, '\0', sizeof (struct subfile));
649               firstLine = &(inclTable[ii].funStartLine);
650
651               /* Enter include file's lines now.  */
652               enter_line_range (tmpSubfile, inclTable[ii].begin,
653                                 inclTable[ii].end, start, 0, firstLine);
654             }
655
656           if (offset <= inclTable[ii].end)
657             offset = inclTable[ii].end + linesz;
658         }
659
660       /* All the include files' line have been processed at this point.  Now,
661          enter remaining lines of the main file, if any left.  */
662       if (offset < max_offset + 1 - linesz)
663         {
664           enter_line_range (&main_subfile, offset, 0, start, end,
665                             &main_source_baseline);
666         }
667     }
668
669   /* Process main file's line numbers.  */
670   if (main_subfile.line_vector)
671     {
672       struct linetable *lineTb, *lv;
673
674       lv = main_subfile.line_vector;
675
676       /* Line numbers are not necessarily ordered.  xlc compilation will
677          put static function to the end.  */
678
679       lineTb = arrange_linetable (lv);
680       if (lv == lineTb)
681         {
682           current_subfile->line_vector = (struct linetable *)
683             xrealloc (lv, (sizeof (struct linetable)
684                            + lv->nitems * sizeof (struct linetable_entry)));
685         }
686       else
687         {
688           xfree (lv);
689           current_subfile->line_vector = lineTb;
690         }
691
692       current_subfile->line_vector_length =
693         current_subfile->line_vector->nitems;
694     }
695
696   /* Now, process included files' line numbers.  */
697
698   for (ii = 0; ii < inclIndx; ++ii)
699     {
700       if (inclTable[ii].subfile != ((struct subfile *) &main_subfile)
701           && (inclTable[ii].subfile)->line_vector)      /* Useless if!!!
702                                                            FIXMEmgo */
703         {
704           struct linetable *lineTb, *lv;
705
706           lv = (inclTable[ii].subfile)->line_vector;
707
708           /* Line numbers are not necessarily ordered.  xlc compilation will
709              put static function to the end.  */
710
711           lineTb = arrange_linetable (lv);
712
713           push_subfile ();
714
715           /* For the same include file, we might want to have more than one
716              subfile.  This happens if we have something like:
717
718              ......
719              #include "foo.h"
720              ......
721              #include "foo.h"
722              ......
723
724              while foo.h including code in it.  (stupid but possible)
725              Since start_subfile() looks at the name and uses an
726              existing one if finds, we need to provide a fake name and
727              fool it.  */
728
729 #if 0
730           start_subfile (inclTable[ii].name, (char *) 0);
731 #else
732           {
733             /* Pick a fake name that will produce the same results as this
734                one when passed to deduce_language_from_filename.  Kludge on
735                top of kludge.  */
736             char *fakename = strrchr (inclTable[ii].name, '.');
737
738             if (fakename == NULL)
739               fakename = " ?";
740             start_subfile (fakename, (char *) 0);
741             xfree (current_subfile->name);
742           }
743           current_subfile->name = xstrdup (inclTable[ii].name);
744 #endif
745
746           if (lv == lineTb)
747             {
748               current_subfile->line_vector =
749                 (struct linetable *) xrealloc
750                 (lv, (sizeof (struct linetable)
751                       + lv->nitems * sizeof (struct linetable_entry)));
752
753             }
754           else
755             {
756               xfree (lv);
757               current_subfile->line_vector = lineTb;
758             }
759
760           current_subfile->line_vector_length =
761             current_subfile->line_vector->nitems;
762           start_subfile (pop_subfile (), (char *) 0);
763         }
764     }
765
766 return_after_cleanup:
767
768   /* We don't want to keep alloc/free'ing the global include file table.  */
769   inclIndx = 0;
770
771   /* Start with a fresh subfile structure for the next file.  */
772   memset (&main_subfile, '\0', sizeof (struct subfile));
773 }
774
775 static void
776 aix_process_linenos (void)
777 {
778   /* There is no linenos to read if there are only dwarf info.  */
779   if (this_symtab_psymtab == NULL)
780     return;
781
782   /* Process line numbers and enter them into line vector.  */
783   process_linenos (last_source_start_addr, cur_src_end_addr);
784 }
785
786
787 /* Enter a given range of lines into the line vector.
788    can be called in the following two ways:
789    enter_line_range (subfile, beginoffset, endoffset,
790                      startaddr, 0, firstLine)  or
791    enter_line_range (subfile, beginoffset, 0, 
792                      startaddr, endaddr, firstLine)
793
794    endoffset points to the last line table entry that we should pay
795    attention to.  */
796
797 static void
798 enter_line_range (struct subfile *subfile, unsigned beginoffset,
799                   unsigned endoffset,   /* offsets to line table */
800                   CORE_ADDR startaddr,  /* offsets to line table */
801                   CORE_ADDR endaddr, unsigned *firstLine)
802 {
803   struct objfile *objfile = this_symtab_psymtab->objfile;
804   struct gdbarch *gdbarch = get_objfile_arch (objfile);
805   unsigned int curoffset;
806   CORE_ADDR addr;
807   void *ext_lnno;
808   struct internal_lineno int_lnno;
809   unsigned int limit_offset;
810   bfd *abfd;
811   int linesz;
812
813   if (endoffset == 0 && startaddr == 0 && endaddr == 0)
814     return;
815   curoffset = beginoffset;
816   limit_offset =
817     ((struct coff_symfile_info *) objfile->deprecated_sym_private)
818     ->max_lineno_offset;
819
820   if (endoffset != 0)
821     {
822       if (endoffset >= limit_offset)
823         {
824           complaint (&symfile_complaints,
825                      _("Bad line table offset in C_EINCL directive"));
826           return;
827         }
828       limit_offset = endoffset;
829     }
830   else
831     limit_offset -= 1;
832
833   abfd = objfile->obfd;
834   linesz = coff_data (abfd)->local_linesz;
835   ext_lnno = alloca (linesz);
836
837   while (curoffset <= limit_offset)
838     {
839       bfd_seek (abfd, curoffset, SEEK_SET);
840       bfd_bread (ext_lnno, linesz, abfd);
841       bfd_coff_swap_lineno_in (abfd, ext_lnno, &int_lnno);
842
843       /* Find the address this line represents.  */
844       addr = (int_lnno.l_lnno
845               ? int_lnno.l_addr.l_paddr
846               : read_symbol_nvalue (int_lnno.l_addr.l_symndx));
847       addr += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
848
849       if (addr < startaddr || (endaddr && addr >= endaddr))
850         return;
851
852       if (int_lnno.l_lnno == 0)
853         {
854           *firstLine = read_symbol_lineno (int_lnno.l_addr.l_symndx);
855           record_line (subfile, 0, gdbarch_addr_bits_remove (gdbarch, addr));
856           --(*firstLine);
857         }
858       else
859         record_line (subfile, *firstLine + int_lnno.l_lnno,
860                      gdbarch_addr_bits_remove (gdbarch, addr));
861       curoffset += linesz;
862     }
863 }
864
865
866 /* Save the vital information for use when closing off the current file.
867    NAME is the file name the symbols came from, START_ADDR is the first
868    text address for the file, and SIZE is the number of bytes of text.  */
869
870 #define complete_symtab(name, start_addr) {     \
871   last_source_file = xstrdup (name);            \
872   last_source_start_addr = start_addr;          \
873 }
874
875
876 /* Refill the symbol table input buffer
877    and set the variables that control fetching entries from it.
878    Reports an error if no data available.
879    This function can read past the end of the symbol table
880    (into the string table) but this does no harm.  */
881
882 /* Reading symbol table has to be fast! Keep the followings as macros, rather
883    than functions.  */
884
885 #define RECORD_MINIMAL_SYMBOL(NAME, ADDR, TYPE, SECTION, OBJFILE) \
886 {                                               \
887   char *namestr;                                \
888                                                 \
889   namestr = (NAME);                             \
890   if (namestr[0] == '.') ++namestr;             \
891   prim_record_minimal_symbol_and_info (namestr, (ADDR), (TYPE),     \
892                                        (SECTION), (asection *)NULL, \
893                                        (OBJFILE));                  \
894   misc_func_recorded = 1;                       \
895 }
896
897
898 /* xcoff has static blocks marked in `.bs', `.es' pairs.  They cannot be
899    nested.  At any given time, a symbol can only be in one static block.
900    This is the base address of current static block, zero if non exists.  */
901
902 static int static_block_base = 0;
903
904 /* Section number for the current static block.  */
905
906 static int static_block_section = -1;
907
908 /* true if space for symbol name has been allocated.  */
909
910 static int symname_alloced = 0;
911
912 /* Next symbol to read.  Pointer into raw seething symbol table.  */
913
914 static char *raw_symbol;
915
916 /* This is the function which stabsread.c calls to get symbol
917    continuations.  */
918
919 static char *
920 xcoff_next_symbol_text (struct objfile *objfile)
921 {
922   struct internal_syment symbol;
923   char *retval;
924
925   /* FIXME: is this the same as the passed arg?  */
926   if (this_symtab_psymtab)
927     objfile = this_symtab_psymtab->objfile;
928
929   bfd_coff_swap_sym_in (objfile->obfd, raw_symbol, &symbol);
930   if (symbol.n_zeroes)
931     {
932       complaint (&symfile_complaints, _("Unexpected symbol continuation"));
933
934       /* Return something which points to '\0' and hope the symbol reading
935          code does something reasonable.  */
936       retval = "";
937     }
938   else if (symbol.n_sclass & 0x80)
939     {
940       retval = ((struct coff_symfile_info *)
941                 objfile->deprecated_sym_private)->debugsec
942         + symbol.n_offset;
943       raw_symbol += coff_data (objfile->obfd)->local_symesz;
944       ++symnum;
945     }
946   else
947     {
948       complaint (&symfile_complaints, _("Unexpected symbol continuation"));
949
950       /* Return something which points to '\0' and hope the symbol reading
951          code does something reasonable.  */
952       retval = "";
953     }
954   return retval;
955 }
956
957 /* Read symbols for a given partial symbol table.  */
958
959 static void
960 read_xcoff_symtab (struct partial_symtab *pst)
961 {
962   struct objfile *objfile = pst->objfile;
963   bfd *abfd = objfile->obfd;
964   char *raw_auxptr;             /* Pointer to first raw aux entry for sym.  */
965   char *strtbl = 
966     ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl;
967   char *debugsec =
968     ((struct coff_symfile_info *) objfile->deprecated_sym_private)->debugsec;
969   const char *debugfmt = bfd_xcoff_is_xcoff64 (abfd) ? "XCOFF64" : "XCOFF";
970
971   struct internal_syment symbol[1];
972   union internal_auxent main_aux;
973   struct coff_symbol cs[1];
974   CORE_ADDR file_start_addr = 0;
975   CORE_ADDR file_end_addr = 0;
976
977   int next_file_symnum = -1;
978   unsigned int max_symnum;
979   int just_started = 1;
980   int depth = 0;
981   int fcn_start_addr = 0;
982
983   struct coff_symbol fcn_stab_saved = { 0 };
984
985   /* fcn_cs_saved is global because process_xcoff_symbol needs it.  */
986   union internal_auxent fcn_aux_saved = main_aux;
987   struct context_stack *new;
988
989   char *filestring = " _start_ ";       /* Name of the current file.  */
990
991   char *last_csect_name;        /* Last seen csect's name and value.  */
992   CORE_ADDR last_csect_val;
993   int last_csect_sec;
994
995   this_symtab_psymtab = pst;
996
997   /* Get the appropriate COFF "constants" related to the file we're
998      handling.  */
999   local_symesz = coff_data (abfd)->local_symesz;
1000
1001   last_source_file = NULL;
1002   last_csect_name = 0;
1003   last_csect_val = 0;
1004
1005   start_stabs ();
1006   start_symtab (filestring, (char *) NULL, file_start_addr);
1007   record_debugformat (debugfmt);
1008   symnum = ((struct symloc *) pst->read_symtab_private)->first_symnum;
1009   max_symnum =
1010     symnum + ((struct symloc *) pst->read_symtab_private)->numsyms;
1011   first_object_file_end = 0;
1012
1013   raw_symbol =
1014     ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl
1015     + symnum * local_symesz;
1016
1017   while (symnum < max_symnum)
1018     {
1019       QUIT;                     /* make this command interruptable.  */
1020
1021       /* READ_ONE_SYMBOL (symbol, cs, symname_alloced); */
1022       /* read one symbol into `cs' structure.  After processing the
1023          whole symbol table, only string table will be kept in memory,
1024          symbol table and debug section of xcoff will be freed.  Thus
1025          we can mark symbols with names in string table as
1026          `alloced'.  */
1027       {
1028         int ii;
1029
1030         /* Swap and align the symbol into a reasonable C structure.  */
1031         bfd_coff_swap_sym_in (abfd, raw_symbol, symbol);
1032
1033         cs->c_symnum = symnum;
1034         cs->c_naux = symbol->n_numaux;
1035         if (symbol->n_zeroes)
1036           {
1037             symname_alloced = 0;
1038             /* We must use the original, unswapped, name here so the name field
1039                pointed to by cs->c_name will persist throughout xcoffread.  If
1040                we use the new field, it gets overwritten for each symbol.  */
1041             cs->c_name = ((struct external_syment *) raw_symbol)->e.e_name;
1042             /* If it's exactly E_SYMNMLEN characters long it isn't
1043                '\0'-terminated.  */
1044             if (cs->c_name[E_SYMNMLEN - 1] != '\0')
1045               {
1046                 char *p;
1047
1048                 p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
1049                 strncpy (p, cs->c_name, E_SYMNMLEN);
1050                 p[E_SYMNMLEN] = '\0';
1051                 cs->c_name = p;
1052                 symname_alloced = 1;
1053               }
1054           }
1055         else if (symbol->n_sclass & 0x80)
1056           {
1057             cs->c_name = debugsec + symbol->n_offset;
1058             symname_alloced = 0;
1059           }
1060         else
1061           {
1062             /* in string table */
1063             cs->c_name = strtbl + (int) symbol->n_offset;
1064             symname_alloced = 1;
1065           }
1066         cs->c_value = symbol->n_value;
1067         cs->c_sclass = symbol->n_sclass;
1068         cs->c_secnum = symbol->n_scnum;
1069         cs->c_type = (unsigned) symbol->n_type;
1070
1071         raw_symbol += local_symesz;
1072         ++symnum;
1073
1074         /* Save addr of first aux entry.  */
1075         raw_auxptr = raw_symbol;
1076
1077         /* Skip all the auxents associated with this symbol.  */
1078         for (ii = symbol->n_numaux; ii; --ii)
1079           {
1080             raw_symbol += coff_data (abfd)->local_auxesz;
1081             ++symnum;
1082           }
1083       }
1084
1085       /* if symbol name starts with ".$" or "$", ignore it.  */
1086       if (cs->c_name[0] == '$'
1087           || (cs->c_name[1] == '$' && cs->c_name[0] == '.'))
1088         continue;
1089
1090       if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
1091         {
1092           if (last_source_file)
1093             {
1094               pst->symtab = end_symtab (cur_src_end_addr, objfile,
1095                                         SECT_OFF_TEXT (objfile));
1096               end_stabs ();
1097             }
1098
1099           start_stabs ();
1100           start_symtab ("_globals_", (char *) NULL, (CORE_ADDR) 0);
1101           record_debugformat (debugfmt);
1102           cur_src_end_addr = first_object_file_end;
1103           /* Done with all files, everything from here on is globals.  */
1104         }
1105
1106       if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT)
1107           && cs->c_naux == 1)
1108         {
1109           /* Dealing with a symbol with a csect entry.  */
1110
1111 #define CSECT(PP) ((PP)->x_csect)
1112 #define CSECT_LEN(PP) (CSECT(PP).x_scnlen.l)
1113 #define CSECT_ALIGN(PP) (SMTYP_ALIGN(CSECT(PP).x_smtyp))
1114 #define CSECT_SMTYP(PP) (SMTYP_SMTYP(CSECT(PP).x_smtyp))
1115 #define CSECT_SCLAS(PP) (CSECT(PP).x_smclas)
1116
1117           /* Convert the auxent to something we can access.  */
1118           bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
1119                                 0, cs->c_naux, &main_aux);
1120
1121           switch (CSECT_SMTYP (&main_aux))
1122             {
1123
1124             case XTY_ER:
1125               /* Ignore all external references.  */
1126               continue;
1127
1128             case XTY_SD:
1129               /* A section description.  */
1130               {
1131                 switch (CSECT_SCLAS (&main_aux))
1132                   {
1133
1134                   case XMC_PR:
1135                     {
1136
1137                       /* A program csect is seen.  We have to allocate one
1138                          symbol table for each program csect.  Normally gdb
1139                          prefers one symtab for each source file.  In case
1140                          of AIX, one source file might include more than one
1141                          [PR] csect, and they don't have to be adjacent in
1142                          terms of the space they occupy in memory.  Thus, one
1143                          single source file might get fragmented in the
1144                          memory and gdb's file start and end address
1145                          approach does not work!  GCC (and I think xlc) seem
1146                          to put all the code in the unnamed program csect.  */
1147
1148                       if (last_csect_name)
1149                         {
1150                           complete_symtab (filestring, file_start_addr);
1151                           cur_src_end_addr = file_end_addr;
1152                           end_symtab (file_end_addr, objfile,
1153                                       SECT_OFF_TEXT (objfile));
1154                           end_stabs ();
1155                           start_stabs ();
1156                           /* Give all csects for this source file the same
1157                              name.  */
1158                           start_symtab (filestring, NULL, (CORE_ADDR) 0);
1159                           record_debugformat (debugfmt);
1160                         }
1161
1162                       /* If this is the very first csect seen,
1163                          basically `__start'.  */
1164                       if (just_started)
1165                         {
1166                           first_object_file_end
1167                             = cs->c_value + CSECT_LEN (&main_aux);
1168                           just_started = 0;
1169                         }
1170
1171                       file_start_addr =
1172                         cs->c_value + ANOFFSET (objfile->section_offsets,
1173                                                 SECT_OFF_TEXT (objfile));
1174                       file_end_addr = file_start_addr + CSECT_LEN (&main_aux);
1175
1176                       if (cs->c_name && (cs->c_name[0] == '.'
1177                                          || cs->c_name[0] == '@'))
1178                         {
1179                           last_csect_name = cs->c_name;
1180                           last_csect_val = cs->c_value;
1181                           last_csect_sec = secnum_to_section (cs->c_secnum,
1182                                                               objfile);
1183                         }
1184                     }
1185                     continue;
1186
1187                     /* All other symbols are put into the minimal symbol
1188                        table only.  */
1189
1190                   case XMC_RW:
1191                     continue;
1192
1193                   case XMC_TC0:
1194                     continue;
1195
1196                   case XMC_TC:
1197                     continue;
1198
1199                   default:
1200                     /* Ignore the symbol.  */
1201                     continue;
1202                   }
1203               }
1204               break;
1205
1206             case XTY_LD:
1207
1208               switch (CSECT_SCLAS (&main_aux))
1209                 {
1210                 case XMC_PR:
1211                   /* a function entry point.  */
1212                 function_entry_point:
1213
1214                   fcn_start_addr = cs->c_value;
1215
1216                   /* save the function header info, which will be used
1217                      when `.bf' is seen.  */
1218                   fcn_cs_saved = *cs;
1219                   fcn_aux_saved = main_aux;
1220                   continue;
1221
1222                 case XMC_GL:
1223                   /* shared library function trampoline code entry point.  */
1224                   continue;
1225
1226                 case XMC_DS:
1227                   /* The symbols often have the same names as debug symbols for
1228                      functions, and confuse lookup_symbol.  */
1229                   continue;
1230
1231                 default:
1232                   /* xlc puts each variable in a separate csect, so we get
1233                      an XTY_SD for each variable.  But gcc puts several
1234                      variables in a csect, so that each variable only gets
1235                      an XTY_LD.  This will typically be XMC_RW; I suspect
1236                      XMC_RO and XMC_BS might be possible too.
1237                      These variables are put in the minimal symbol table
1238                      only.  */
1239                   continue;
1240                 }
1241               break;
1242
1243             case XTY_CM:
1244               /* Common symbols are put into the minimal symbol table only.  */
1245               continue;
1246
1247             default:
1248               break;
1249             }
1250         }
1251
1252       /* If explicitly specified as a function, treat is as one.  This check
1253          evaluates to true for @FIX* bigtoc CSECT symbols, so it must occur
1254          after the above CSECT check.  */
1255       if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
1256         {
1257           bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
1258                                 0, cs->c_naux, &main_aux);
1259           goto function_entry_point;
1260         }
1261
1262       switch (cs->c_sclass)
1263         {
1264         case C_FILE:
1265
1266           /* c_value field contains symnum of next .file entry in table
1267              or symnum of first global after last .file.  */
1268
1269           next_file_symnum = cs->c_value;
1270
1271           /* Complete symbol table for last object file containing
1272              debugging information.  */
1273
1274           /* Whether or not there was a csect in the previous file, we
1275              have to call `end_stabs' and `start_stabs' to reset
1276              type_vector, line_vector, etc. structures.  */
1277
1278           complete_symtab (filestring, file_start_addr);
1279           cur_src_end_addr = file_end_addr;
1280           end_symtab (file_end_addr, objfile, SECT_OFF_TEXT (objfile));
1281           end_stabs ();
1282
1283           /* XCOFF, according to the AIX 3.2 documentation, puts the
1284              filename in cs->c_name.  But xlc 1.3.0.2 has decided to
1285              do things the standard COFF way and put it in the auxent.
1286              We use the auxent if the symbol is ".file" and an auxent
1287              exists, otherwise use the symbol itself.  Simple
1288              enough.  */
1289           if (!strcmp (cs->c_name, ".file") && cs->c_naux > 0)
1290             {
1291               bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
1292                                     0, cs->c_naux, &main_aux);
1293               filestring = coff_getfilename (&main_aux, objfile);
1294             }
1295           else
1296             filestring = cs->c_name;
1297
1298           start_stabs ();
1299           start_symtab (filestring, (char *) NULL, (CORE_ADDR) 0);
1300           record_debugformat (debugfmt);
1301           last_csect_name = 0;
1302
1303           /* reset file start and end addresses.  A compilation unit
1304              with no text (only data) should have zero file
1305              boundaries.  */
1306           file_start_addr = file_end_addr = 0;
1307           break;
1308
1309         case C_FUN:
1310           fcn_stab_saved = *cs;
1311           break;
1312
1313         case C_FCN:
1314           if (strcmp (cs->c_name, ".bf") == 0)
1315             {
1316               CORE_ADDR off = ANOFFSET (objfile->section_offsets,
1317                                         SECT_OFF_TEXT (objfile));
1318
1319               bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
1320                                     0, cs->c_naux, &main_aux);
1321
1322               within_function = 1;
1323
1324               new = push_context (0, fcn_start_addr + off);
1325
1326               new->name = define_symbol
1327                 (fcn_cs_saved.c_value + off,
1328                  fcn_stab_saved.c_name, 0, 0, objfile);
1329               if (new->name != NULL)
1330                 SYMBOL_SECTION (new->name) = SECT_OFF_TEXT (objfile);
1331             }
1332           else if (strcmp (cs->c_name, ".ef") == 0)
1333             {
1334               bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass,
1335                                     0, cs->c_naux, &main_aux);
1336
1337               /* The value of .ef is the address of epilogue code;
1338                  not useful for gdb.  */
1339               /* { main_aux.x_sym.x_misc.x_lnsz.x_lnno
1340                  contains number of lines to '}' */
1341
1342               if (context_stack_depth <= 0)
1343                 {       /* We attempted to pop an empty context stack.  */
1344                   ef_complaint (cs->c_symnum);
1345                   within_function = 0;
1346                   break;
1347                 }
1348               new = pop_context ();
1349               /* Stack must be empty now.  */
1350               if (context_stack_depth > 0 || new == NULL)
1351                 {
1352                   ef_complaint (cs->c_symnum);
1353                   within_function = 0;
1354                   break;
1355                 }
1356
1357               finish_block (new->name, &local_symbols, new->old_blocks,
1358                             new->start_addr,
1359                             (fcn_cs_saved.c_value
1360                              + fcn_aux_saved.x_sym.x_misc.x_fsize
1361                              + ANOFFSET (objfile->section_offsets,
1362                                          SECT_OFF_TEXT (objfile))),
1363                             objfile);
1364               within_function = 0;
1365             }
1366           break;
1367
1368         case C_BSTAT:
1369           /* Begin static block.  */
1370           {
1371             struct internal_syment symbol;
1372
1373             read_symbol (&symbol, cs->c_value);
1374             static_block_base = symbol.n_value;
1375             static_block_section =
1376               secnum_to_section (symbol.n_scnum, objfile);
1377           }
1378           break;
1379
1380         case C_ESTAT:
1381           /* End of static block.  */
1382           static_block_base = 0;
1383           static_block_section = -1;
1384           break;
1385
1386         case C_ARG:
1387         case C_REGPARM:
1388         case C_REG:
1389         case C_TPDEF:
1390         case C_STRTAG:
1391         case C_UNTAG:
1392         case C_ENTAG:
1393           {
1394             complaint (&symfile_complaints,
1395                        _("Unrecognized storage class %d."),
1396                        cs->c_sclass);
1397           }
1398           break;
1399
1400         case C_LABEL:
1401         case C_NULL:
1402           /* Ignore these.  */
1403           break;
1404
1405         case C_HIDEXT:
1406         case C_STAT:
1407           break;
1408
1409         case C_BINCL:
1410           /* beginning of include file */
1411           /* In xlc output, C_BINCL/C_EINCL pair doesn't show up in sorted
1412              order.  Thus, when wee see them, we might not know enough info
1413              to process them.  Thus, we'll be saving them into a table 
1414              (inclTable) and postpone their processing.  */
1415
1416           record_include_begin (cs);
1417           break;
1418
1419         case C_EINCL:
1420           /* End of include file.  */
1421           /* See the comment after case C_BINCL.  */
1422           record_include_end (cs);
1423           break;
1424
1425         case C_BLOCK:
1426           if (strcmp (cs->c_name, ".bb") == 0)
1427             {
1428               depth++;
1429               new = push_context (depth,
1430                                   (cs->c_value
1431                                    + ANOFFSET (objfile->section_offsets,
1432                                                SECT_OFF_TEXT (objfile))));
1433             }
1434           else if (strcmp (cs->c_name, ".eb") == 0)
1435             {
1436               if (context_stack_depth <= 0)
1437                 {       /* We attempted to pop an empty context stack.  */
1438                   eb_complaint (cs->c_symnum);
1439                   break;
1440                 }
1441               new = pop_context ();
1442               if (depth-- != new->depth)
1443                 {
1444                   eb_complaint (cs->c_symnum);
1445                   break;
1446                 }
1447               if (local_symbols && context_stack_depth > 0)
1448                 {
1449                   /* Make a block for the local symbols within.  */
1450                   finish_block (new->name, &local_symbols, new->old_blocks,
1451                                 new->start_addr,
1452                                 (cs->c_value
1453                                  + ANOFFSET (objfile->section_offsets,
1454                                              SECT_OFF_TEXT (objfile))),
1455                                 objfile);
1456                 }
1457               local_symbols = new->locals;
1458             }
1459           break;
1460
1461         default:
1462           process_xcoff_symbol (cs, objfile);
1463           break;
1464         }
1465     }
1466
1467   if (last_source_file)
1468     {
1469       struct symtab *s;
1470
1471       complete_symtab (filestring, file_start_addr);
1472       cur_src_end_addr = file_end_addr;
1473       s = end_symtab (file_end_addr, objfile, SECT_OFF_TEXT (objfile));
1474       /* When reading symbols for the last C_FILE of the objfile, try
1475          to make sure that we set pst->symtab to the symtab for the
1476          file, not to the _globals_ symtab.  I'm not sure whether this
1477          actually works right or when/if it comes up.  */
1478       if (pst->symtab == NULL)
1479         pst->symtab = s;
1480       end_stabs ();
1481     }
1482 }
1483
1484 #define SYMBOL_DUP(SYMBOL1, SYMBOL2)    \
1485   (SYMBOL2) = (struct symbol *)         \
1486         obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol)); \
1487   *(SYMBOL2) = *(SYMBOL1);
1488
1489
1490 #define SYMNAME_ALLOC(NAME, ALLOCED)    \
1491   ((ALLOCED) ? (NAME) : obsavestring ((NAME), strlen (NAME), \
1492                                       &objfile->objfile_obstack))
1493
1494
1495 /* process one xcoff symbol.  */
1496
1497 static struct symbol *
1498 process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile)
1499 {
1500   struct symbol onesymbol;
1501   struct symbol *sym = &onesymbol;
1502   struct symbol *sym2 = NULL;
1503   char *name, *pp;
1504
1505   int sec;
1506   CORE_ADDR off;
1507
1508   if (cs->c_secnum < 0)
1509     {
1510       /* The value is a register number, offset within a frame, etc.,
1511          and does not get relocated.  */
1512       off = 0;
1513       sec = -1;
1514     }
1515   else
1516     {
1517       sec = secnum_to_section (cs->c_secnum, objfile);
1518       off = ANOFFSET (objfile->section_offsets, sec);
1519     }
1520
1521   name = cs->c_name;
1522   if (name[0] == '.')
1523     ++name;
1524
1525   memset (sym, '\0', sizeof (struct symbol));
1526
1527   /* default assumptions */
1528   SYMBOL_VALUE_ADDRESS (sym) = cs->c_value + off;
1529   SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
1530   SYMBOL_SECTION (sym) = secnum_to_section (cs->c_secnum, objfile);
1531
1532   if (ISFCN (cs->c_type))
1533     {
1534       /* At this point, we don't know the type of the function.  This
1535          will be patched with the type from its stab entry later on in
1536          patch_block_stabs (), unless the file was compiled without -g.  */
1537
1538       SYMBOL_SET_LINKAGE_NAME (sym, SYMNAME_ALLOC (name, symname_alloced));
1539       SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_text_symbol;
1540
1541       SYMBOL_CLASS (sym) = LOC_BLOCK;
1542       SYMBOL_DUP (sym, sym2);
1543
1544       if (cs->c_sclass == C_EXT)
1545         add_symbol_to_list (sym2, &global_symbols);
1546       else if (cs->c_sclass == C_HIDEXT || cs->c_sclass == C_STAT)
1547         add_symbol_to_list (sym2, &file_symbols);
1548     }
1549   else
1550     {
1551       /* In case we can't figure out the type, provide default.  */
1552       SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_data_symbol;
1553
1554       switch (cs->c_sclass)
1555         {
1556 #if 0
1557           /* The values of functions and global symbols are now resolved
1558              via the global_sym_chain in stabsread.c.  */
1559         case C_FUN:
1560           if (fcn_cs_saved.c_sclass == C_EXT)
1561             add_stab_to_list (name, &global_stabs);
1562           else
1563             add_stab_to_list (name, &file_stabs);
1564           break;
1565
1566         case C_GSYM:
1567           add_stab_to_list (name, &global_stabs);
1568           break;
1569 #endif
1570
1571         case C_BCOMM:
1572           common_block_start (cs->c_name, objfile);
1573           break;
1574
1575         case C_ECOMM:
1576           common_block_end (objfile);
1577           break;
1578
1579         default:
1580           complaint (&symfile_complaints, _("Unexpected storage class: %d"),
1581                      cs->c_sclass);
1582           /* FALLTHROUGH */
1583
1584         case C_DECL:
1585         case C_PSYM:
1586         case C_RPSYM:
1587         case C_ECOML:
1588         case C_LSYM:
1589         case C_RSYM:
1590         case C_GSYM:
1591
1592           {
1593             sym = define_symbol (cs->c_value + off, cs->c_name, 0, 0, objfile);
1594             if (sym != NULL)
1595               {
1596                 SYMBOL_SECTION (sym) = sec;
1597               }
1598             return sym;
1599           }
1600
1601         case C_STSYM:
1602
1603           /* For xlc (not GCC), the 'V' symbol descriptor is used for
1604              all statics and we need to distinguish file-scope versus
1605              function-scope using within_function.  We do this by
1606              changing the string we pass to define_symbol to use 'S'
1607              where we need to, which is not necessarily super-clean,
1608              but seems workable enough.  */
1609
1610           if (*name == ':')
1611             return NULL;
1612
1613           pp = strchr (name, ':');
1614           if (pp == NULL)
1615             return NULL;
1616
1617           ++pp;
1618           if (*pp == 'V' && !within_function)
1619             *pp = 'S';
1620           sym = define_symbol ((cs->c_value
1621                                 + ANOFFSET (objfile->section_offsets,
1622                                             static_block_section)),
1623                                cs->c_name, 0, 0, objfile);
1624           if (sym != NULL)
1625             {
1626               SYMBOL_VALUE_ADDRESS (sym) += static_block_base;
1627               SYMBOL_SECTION (sym) = static_block_section;
1628             }
1629           return sym;
1630
1631         }
1632     }
1633   return sym2;
1634 }
1635
1636 /* Extract the file name from the aux entry of a C_FILE symbol.
1637    Result is in static storage and is only good for temporary use.  */
1638
1639 static char *
1640 coff_getfilename (union internal_auxent *aux_entry, struct objfile *objfile)
1641 {
1642   static char buffer[BUFSIZ];
1643
1644   if (aux_entry->x_file.x_n.x_zeroes == 0)
1645     strcpy (buffer, ((struct coff_symfile_info *)
1646                      objfile->deprecated_sym_private)->strtbl
1647             + aux_entry->x_file.x_n.x_offset);
1648   else
1649     {
1650       strncpy (buffer, aux_entry->x_file.x_fname, FILNMLEN);
1651       buffer[FILNMLEN] = '\0';
1652     }
1653   return (buffer);
1654 }
1655
1656 /* Set *SYMBOL to symbol number symno in symtbl.  */
1657 static void
1658 read_symbol (struct internal_syment *symbol, int symno)
1659 {
1660   int nsyms
1661     = ((struct coff_symfile_info *)
1662        this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl_num_syms;
1663   char *stbl = ((struct coff_symfile_info *)
1664                 this_symtab_psymtab->objfile->deprecated_sym_private)->symtbl;
1665
1666   if (symno < 0 || symno >= nsyms)
1667     {
1668       complaint (&symfile_complaints, _("Invalid symbol offset"));
1669       symbol->n_value = 0;
1670       symbol->n_scnum = -1;
1671       return;
1672     }
1673   bfd_coff_swap_sym_in (this_symtab_psymtab->objfile->obfd,
1674                         stbl + (symno * local_symesz),
1675                         symbol);
1676 }
1677
1678 /* Get value corresponding to symbol number symno in symtbl.  */
1679
1680 static CORE_ADDR
1681 read_symbol_nvalue (int symno)
1682 {
1683   struct internal_syment symbol[1];
1684
1685   read_symbol (symbol, symno);
1686   return symbol->n_value;
1687 }
1688
1689
1690 /* Find the address of the function corresponding to symno, where
1691    symno is the symbol pointed to by the linetable.  */
1692
1693 static int
1694 read_symbol_lineno (int symno)
1695 {
1696   struct objfile *objfile = this_symtab_psymtab->objfile;
1697   int xcoff64 = bfd_xcoff_is_xcoff64 (objfile->obfd);
1698
1699   struct coff_symfile_info *info =
1700     (struct coff_symfile_info *)objfile->deprecated_sym_private;
1701   int nsyms = info->symtbl_num_syms;
1702   char *stbl = info->symtbl;
1703   char *strtbl = info->strtbl;
1704
1705   struct internal_syment symbol[1];
1706   union internal_auxent main_aux[1];
1707
1708   if (symno < 0)
1709     {
1710       bf_notfound_complaint ();
1711       return 0;
1712     }
1713
1714   /* Note that just searching for a short distance (e.g. 50 symbols)
1715      is not enough, at least in the following case.
1716
1717      .extern foo
1718      [many .stabx entries]
1719      [a few functions, referring to foo]
1720      .globl foo
1721      .bf
1722
1723      What happens here is that the assembler moves the .stabx entries
1724      to right before the ".bf" for foo, but the symbol for "foo" is before
1725      all the stabx entries.  See PR gdb/2222.  */
1726
1727   /* Maintaining a table of .bf entries might be preferable to this search.
1728      If I understand things correctly it would need to be done only for
1729      the duration of a single psymtab to symtab conversion.  */
1730   while (symno < nsyms)
1731     {
1732       bfd_coff_swap_sym_in (symfile_bfd,
1733                             stbl + (symno * local_symesz), symbol);
1734       if (symbol->n_sclass == C_FCN)
1735         {
1736           char *name = xcoff64 ? strtbl + symbol->n_offset : symbol->n_name;
1737
1738           if (strcmp (name, ".bf") == 0)
1739             goto gotit;
1740         }
1741       symno += symbol->n_numaux + 1;
1742     }
1743
1744   bf_notfound_complaint ();
1745   return 0;
1746
1747 gotit:
1748   /* Take aux entry and return its lineno.  */
1749   symno++;
1750   bfd_coff_swap_aux_in (objfile->obfd, stbl + symno * local_symesz,
1751                         symbol->n_type, symbol->n_sclass,
1752                         0, symbol->n_numaux, main_aux);
1753
1754   return main_aux->x_sym.x_misc.x_lnsz.x_lnno;
1755 }
1756
1757 /* Support for line number handling.  */
1758
1759 /* This function is called for every section; it finds the outer limits
1760  * of the line table (minimum and maximum file offset) so that the
1761  * mainline code can read the whole thing for efficiency.
1762  */
1763 static void
1764 find_linenos (struct bfd *abfd, struct bfd_section *asect, void *vpinfo)
1765 {
1766   struct coff_symfile_info *info;
1767   int size, count;
1768   file_ptr offset, maxoff;
1769
1770   count = asect->lineno_count;
1771
1772   if (strcmp (asect->name, ".text") != 0 || count == 0)
1773     return;
1774
1775   size = count * coff_data (abfd)->local_linesz;
1776   info = (struct coff_symfile_info *) vpinfo;
1777   offset = asect->line_filepos;
1778   maxoff = offset + size;
1779
1780   if (offset < info->min_lineno_offset || info->min_lineno_offset == 0)
1781     info->min_lineno_offset = offset;
1782
1783   if (maxoff > info->max_lineno_offset)
1784     info->max_lineno_offset = maxoff;
1785 }
1786 \f
1787 static void xcoff_psymtab_to_symtab_1 (struct partial_symtab *);
1788
1789 static void
1790 xcoff_psymtab_to_symtab_1 (struct partial_symtab *pst)
1791 {
1792   struct cleanup *old_chain;
1793   int i;
1794
1795   if (!pst)
1796     return;
1797
1798   if (pst->readin)
1799     {
1800       fprintf_unfiltered
1801         (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1802          pst->filename);
1803       return;
1804     }
1805
1806   /* Read in all partial symtabs on which this one is dependent.  */
1807   for (i = 0; i < pst->number_of_dependencies; i++)
1808     if (!pst->dependencies[i]->readin)
1809       {
1810         /* Inform about additional files that need to be read in.  */
1811         if (info_verbose)
1812           {
1813             fputs_filtered (" ", gdb_stdout);
1814             wrap_here ("");
1815             fputs_filtered ("and ", gdb_stdout);
1816             wrap_here ("");
1817             printf_filtered ("%s...", pst->dependencies[i]->filename);
1818             wrap_here ("");     /* Flush output */
1819             gdb_flush (gdb_stdout);
1820           }
1821         xcoff_psymtab_to_symtab_1 (pst->dependencies[i]);
1822       }
1823
1824   if (((struct symloc *) pst->read_symtab_private)->numsyms != 0)
1825     {
1826       /* Init stuff necessary for reading in symbols.  */
1827       stabsread_init ();
1828       buildsym_init ();
1829       old_chain = make_cleanup (really_free_pendings, 0);
1830
1831       read_xcoff_symtab (pst);
1832
1833       do_cleanups (old_chain);
1834     }
1835
1836   pst->readin = 1;
1837 }
1838
1839 static void xcoff_psymtab_to_symtab (struct partial_symtab *);
1840
1841 /* Read in all of the symbols for a given psymtab for real.
1842    Be verbose about it if the user wants that.  */
1843
1844 static void
1845 xcoff_psymtab_to_symtab (struct partial_symtab *pst)
1846 {
1847   bfd *sym_bfd;
1848
1849   if (!pst)
1850     return;
1851
1852   if (pst->readin)
1853     {
1854       fprintf_unfiltered
1855         (gdb_stderr, "Psymtab for %s already read in.  Shouldn't happen.\n",
1856          pst->filename);
1857       return;
1858     }
1859
1860   if (((struct symloc *) pst->read_symtab_private)->numsyms != 0
1861       || pst->number_of_dependencies)
1862     {
1863       /* Print the message now, before reading the string table,
1864          to avoid disconcerting pauses.  */
1865       if (info_verbose)
1866         {
1867           printf_filtered ("Reading in symbols for %s...", pst->filename);
1868           gdb_flush (gdb_stdout);
1869         }
1870
1871       sym_bfd = pst->objfile->obfd;
1872
1873       next_symbol_text_func = xcoff_next_symbol_text;
1874
1875       xcoff_psymtab_to_symtab_1 (pst);
1876
1877       /* Match with global symbols.  This only needs to be done once,
1878          after all of the symtabs and dependencies have been read in.   */
1879       scan_file_globals (pst->objfile);
1880
1881       /* Finish up the debug error message.  */
1882       if (info_verbose)
1883         printf_filtered ("done.\n");
1884     }
1885 }
1886 \f
1887 static void
1888 xcoff_new_init (struct objfile *objfile)
1889 {
1890   stabsread_new_init ();
1891   buildsym_new_init ();
1892 }
1893
1894 /* Do initialization in preparation for reading symbols from OBJFILE.
1895
1896    We will only be called if this is an XCOFF or XCOFF-like file.
1897    BFD handles figuring out the format of the file, and code in symfile.c
1898    uses BFD's determination to vector to us.  */
1899
1900 static void
1901 xcoff_symfile_init (struct objfile *objfile)
1902 {
1903   /* Allocate struct to keep track of the symfile.  */
1904   objfile->deprecated_sym_private
1905     = xmalloc (sizeof (struct coff_symfile_info));
1906
1907   /* XCOFF objects may be reordered, so set OBJF_REORDERED.  If we
1908      find this causes a significant slowdown in gdb then we could
1909      set it in the debug symbol readers only when necessary.  */
1910   objfile->flags |= OBJF_REORDERED;
1911
1912   init_entry_point_info (objfile);
1913 }
1914
1915 /* Perform any local cleanups required when we are done with a particular
1916    objfile.  I.E, we are in the process of discarding all symbol information
1917    for an objfile, freeing up all memory held for it, and unlinking the
1918    objfile struct from the global list of known objfiles.  */
1919
1920 static void
1921 xcoff_symfile_finish (struct objfile *objfile)
1922 {
1923   if (objfile->deprecated_sym_private != NULL)
1924     {
1925       xfree (objfile->deprecated_sym_private);
1926     }
1927
1928   /* Start with a fresh include table for the next objfile.  */
1929   if (inclTable)
1930     {
1931       xfree (inclTable);
1932       inclTable = NULL;
1933     }
1934   inclIndx = inclLength = inclDepth = 0;
1935
1936   dwarf2_free_objfile (objfile);
1937 }
1938
1939
1940 static void
1941 init_stringtab (bfd *abfd, file_ptr offset, struct objfile *objfile)
1942 {
1943   long length;
1944   int val;
1945   unsigned char lengthbuf[4];
1946   char *strtbl;
1947
1948   ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl
1949     = NULL;
1950
1951   if (bfd_seek (abfd, offset, SEEK_SET) < 0)
1952     error (_("cannot seek to string table in %s: %s"),
1953            bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
1954
1955   val = bfd_bread ((char *) lengthbuf, sizeof lengthbuf, abfd);
1956   length = bfd_h_get_32 (abfd, lengthbuf);
1957
1958   /* If no string table is needed, then the file may end immediately
1959      after the symbols.  Just return with `strtbl' set to NULL.  */
1960
1961   if (val != sizeof lengthbuf || length < sizeof lengthbuf)
1962     return;
1963
1964   /* Allocate string table from objfile_obstack.  We will need this table
1965      as long as we have its symbol table around.  */
1966
1967   strtbl = (char *) obstack_alloc (&objfile->objfile_obstack, length);
1968   ((struct coff_symfile_info *) objfile->deprecated_sym_private)->strtbl
1969     = strtbl;
1970
1971   /* Copy length buffer, the first byte is usually zero and is
1972      used for stabs with a name length of zero.  */
1973   memcpy (strtbl, lengthbuf, sizeof lengthbuf);
1974   if (length == sizeof lengthbuf)
1975     return;
1976
1977   val = bfd_bread (strtbl + sizeof lengthbuf, length - sizeof lengthbuf, abfd);
1978
1979   if (val != length - sizeof lengthbuf)
1980     error (_("cannot read string table from %s: %s"),
1981            bfd_get_filename (abfd), bfd_errmsg (bfd_get_error ()));
1982   if (strtbl[length - 1] != '\0')
1983     error (_("bad symbol file: string table "
1984              "does not end with null character"));
1985
1986   return;
1987 }
1988 \f
1989 /* If we have not yet seen a function for this psymtab, this is 0.  If we
1990    have seen one, it is the offset in the line numbers of the line numbers
1991    for the psymtab.  */
1992 static unsigned int first_fun_line_offset;
1993
1994 static struct partial_symtab *xcoff_start_psymtab
1995   (struct objfile *, char *, int,
1996    struct partial_symbol **, struct partial_symbol **);
1997
1998 /* Allocate and partially fill a partial symtab.  It will be
1999    completely filled at the end of the symbol list.
2000
2001    SYMFILE_NAME is the name of the symbol-file we are reading from, and ADDR
2002    is the address relative to which its symbols are (incremental) or 0
2003    (normal).  */
2004
2005 static struct partial_symtab *
2006 xcoff_start_psymtab (struct objfile *objfile, char *filename, int first_symnum,
2007                      struct partial_symbol **global_syms,
2008                      struct partial_symbol **static_syms)
2009 {
2010   struct partial_symtab *result =
2011     start_psymtab_common (objfile, objfile->section_offsets,
2012                           filename,
2013                           /* We fill in textlow later.  */
2014                           0,
2015                           global_syms, static_syms);
2016
2017   result->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
2018                                                sizeof (struct symloc));
2019   ((struct symloc *) result->read_symtab_private)->first_symnum = first_symnum;
2020   result->read_symtab = xcoff_psymtab_to_symtab;
2021
2022   /* Deduce the source language from the filename for this psymtab.  */
2023   psymtab_language = deduce_language_from_filename (filename);
2024
2025   return result;
2026 }
2027
2028 static struct partial_symtab *xcoff_end_psymtab
2029   (struct partial_symtab *, char **, int, int,
2030    struct partial_symtab **, int, int);
2031
2032 /* Close off the current usage of PST.
2033    Returns PST, or NULL if the partial symtab was empty and thrown away.
2034
2035    CAPPING_SYMBOL_NUMBER is the end of pst (exclusive).
2036
2037    INCLUDE_LIST, NUM_INCLUDES, DEPENDENCY_LIST, and NUMBER_DEPENDENCIES
2038    are the information for includes and dependencies.  */
2039
2040 static struct partial_symtab *
2041 xcoff_end_psymtab (struct partial_symtab *pst, char **include_list,
2042                    int num_includes, int capping_symbol_number,
2043                    struct partial_symtab **dependency_list,
2044                    int number_dependencies, int textlow_not_set)
2045 {
2046   int i;
2047   struct objfile *objfile = pst->objfile;
2048
2049   if (capping_symbol_number != -1)
2050     ((struct symloc *) pst->read_symtab_private)->numsyms =
2051       capping_symbol_number
2052       - ((struct symloc *) pst->read_symtab_private)->first_symnum;
2053   ((struct symloc *) pst->read_symtab_private)->lineno_off =
2054     first_fun_line_offset;
2055   first_fun_line_offset = 0;
2056   pst->n_global_syms = objfile->global_psymbols.next
2057     - (objfile->global_psymbols.list + pst->globals_offset);
2058   pst->n_static_syms = objfile->static_psymbols.next
2059     - (objfile->static_psymbols.list + pst->statics_offset);
2060
2061   pst->number_of_dependencies = number_dependencies;
2062   if (number_dependencies)
2063     {
2064       pst->dependencies = (struct partial_symtab **)
2065         obstack_alloc (&objfile->objfile_obstack,
2066                     number_dependencies * sizeof (struct partial_symtab *));
2067       memcpy (pst->dependencies, dependency_list,
2068               number_dependencies * sizeof (struct partial_symtab *));
2069     }
2070   else
2071     pst->dependencies = 0;
2072
2073   for (i = 0; i < num_includes; i++)
2074     {
2075       struct partial_symtab *subpst =
2076         allocate_psymtab (include_list[i], objfile);
2077
2078       subpst->section_offsets = pst->section_offsets;
2079       subpst->read_symtab_private = obstack_alloc (&objfile->objfile_obstack,
2080                                                    sizeof (struct symloc));
2081       ((struct symloc *) subpst->read_symtab_private)->first_symnum = 0;
2082       ((struct symloc *) subpst->read_symtab_private)->numsyms = 0;
2083       subpst->textlow = 0;
2084       subpst->texthigh = 0;
2085
2086       /* We could save slight bits of space by only making one of these,
2087          shared by the entire set of include files.  FIXME-someday.  */
2088       subpst->dependencies = (struct partial_symtab **)
2089         obstack_alloc (&objfile->objfile_obstack,
2090                        sizeof (struct partial_symtab *));
2091       subpst->dependencies[0] = pst;
2092       subpst->number_of_dependencies = 1;
2093
2094       subpst->globals_offset =
2095         subpst->n_global_syms =
2096         subpst->statics_offset =
2097         subpst->n_static_syms = 0;
2098
2099       subpst->readin = 0;
2100       subpst->symtab = 0;
2101       subpst->read_symtab = pst->read_symtab;
2102     }
2103
2104   sort_pst_symbols (pst);
2105
2106   if (num_includes == 0
2107       && number_dependencies == 0
2108       && pst->n_global_syms == 0
2109       && pst->n_static_syms == 0)
2110     {
2111       /* Throw away this psymtab, it's empty.  We can't deallocate it, since
2112          it is on the obstack, but we can forget to chain it on the list.  */
2113       /* Empty psymtabs happen as a result of header files which don't have
2114          any symbols in them.  There can be a lot of them.  */
2115
2116       discard_psymtab (pst);
2117
2118       /* Indicate that psymtab was thrown away.  */
2119       pst = (struct partial_symtab *) NULL;
2120     }
2121   return pst;
2122 }
2123
2124 static void swap_sym (struct internal_syment *,
2125                       union internal_auxent *, char **, char **,
2126                       unsigned int *, struct objfile *);
2127
2128 /* Swap raw symbol at *RAW and put the name in *NAME, the symbol in
2129    *SYMBOL, the first auxent in *AUX.  Advance *RAW and *SYMNUMP over
2130    the symbol and its auxents.  */
2131
2132 static void
2133 swap_sym (struct internal_syment *symbol, union internal_auxent *aux,
2134           char **name, char **raw, unsigned int *symnump,
2135           struct objfile *objfile)
2136 {
2137   bfd_coff_swap_sym_in (objfile->obfd, *raw, symbol);
2138   if (symbol->n_zeroes)
2139     {
2140       /* If it's exactly E_SYMNMLEN characters long it isn't
2141          '\0'-terminated.  */
2142       if (symbol->n_name[E_SYMNMLEN - 1] != '\0')
2143         {
2144           /* FIXME: wastes memory for symbols which we don't end up putting
2145              into the minimal symbols.  */
2146           char *p;
2147
2148           p = obstack_alloc (&objfile->objfile_obstack, E_SYMNMLEN + 1);
2149           strncpy (p, symbol->n_name, E_SYMNMLEN);
2150           p[E_SYMNMLEN] = '\0';
2151           *name = p;
2152         }
2153       else
2154         /* Point to the unswapped name as that persists as long as the
2155            objfile does.  */
2156         *name = ((struct external_syment *) *raw)->e.e_name;
2157     }
2158   else if (symbol->n_sclass & 0x80)
2159     {
2160       *name = ((struct coff_symfile_info *)
2161                objfile->deprecated_sym_private)->debugsec + symbol->n_offset;
2162     }
2163   else
2164     {
2165       *name = ((struct coff_symfile_info *)
2166                objfile->deprecated_sym_private)->strtbl + symbol->n_offset;
2167     }
2168   ++*symnump;
2169   *raw += coff_data (objfile->obfd)->local_symesz;
2170   if (symbol->n_numaux > 0)
2171     {
2172       bfd_coff_swap_aux_in (objfile->obfd, *raw, symbol->n_type,
2173                             symbol->n_sclass, 0, symbol->n_numaux, aux);
2174
2175       *symnump += symbol->n_numaux;
2176       *raw += coff_data (objfile->obfd)->local_symesz * symbol->n_numaux;
2177     }
2178 }
2179
2180 static void
2181 function_outside_compilation_unit_complaint (const char *arg1)
2182 {
2183   complaint (&symfile_complaints,
2184              _("function `%s' appears to be defined "
2185                "outside of all compilation units"),
2186              arg1);
2187 }
2188
2189 static void
2190 scan_xcoff_symtab (struct objfile *objfile)
2191 {
2192   struct gdbarch *gdbarch = get_objfile_arch (objfile);
2193   CORE_ADDR toc_offset = 0;     /* toc offset value in data section.  */
2194   char *filestring = NULL;
2195
2196   char *namestring;
2197   int past_first_source_file = 0;
2198   bfd *abfd;
2199   asection *bfd_sect;
2200   unsigned int nsyms;
2201
2202   /* Current partial symtab */
2203   struct partial_symtab *pst;
2204
2205   /* List of current psymtab's include files.  */
2206   char **psymtab_include_list;
2207   int includes_allocated;
2208   int includes_used;
2209
2210   /* Index within current psymtab dependency list.  */
2211   struct partial_symtab **dependency_list;
2212   int dependencies_used, dependencies_allocated;
2213
2214   char *sraw_symbol;
2215   struct internal_syment symbol;
2216   union internal_auxent main_aux[5];
2217   unsigned int ssymnum;
2218
2219   char *last_csect_name = NULL; /* Last seen csect's name and value.  */
2220   CORE_ADDR last_csect_val = 0;
2221   int last_csect_sec = 0;
2222   int misc_func_recorded = 0;   /* true if any misc. function.  */
2223   int textlow_not_set = 1;
2224
2225   pst = (struct partial_symtab *) 0;
2226
2227   includes_allocated = 30;
2228   includes_used = 0;
2229   psymtab_include_list = (char **) alloca (includes_allocated *
2230                                            sizeof (char *));
2231
2232   dependencies_allocated = 30;
2233   dependencies_used = 0;
2234   dependency_list =
2235     (struct partial_symtab **) alloca (dependencies_allocated *
2236                                        sizeof (struct partial_symtab *));
2237
2238   last_source_file = NULL;
2239
2240   abfd = objfile->obfd;
2241   next_symbol_text_func = xcoff_next_symbol_text;
2242
2243   sraw_symbol = ((struct coff_symfile_info *)
2244                  objfile->deprecated_sym_private)->symtbl;
2245   nsyms = ((struct coff_symfile_info *)
2246            objfile->deprecated_sym_private)->symtbl_num_syms;
2247   ssymnum = 0;
2248   while (ssymnum < nsyms)
2249     {
2250       int sclass;
2251
2252       QUIT;
2253
2254       bfd_coff_swap_sym_in (abfd, sraw_symbol, &symbol);
2255       sclass = symbol.n_sclass;
2256
2257       switch (sclass)
2258         {
2259         case C_EXT:
2260         case C_HIDEXT:
2261           {
2262             /* The CSECT auxent--always the last auxent.  */
2263             union internal_auxent csect_aux;
2264             unsigned int symnum_before = ssymnum;
2265
2266             swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
2267                       &ssymnum, objfile);
2268             if (symbol.n_numaux > 1)
2269               {
2270                 bfd_coff_swap_aux_in
2271                   (objfile->obfd,
2272                    sraw_symbol - coff_data (abfd)->local_symesz,
2273                    symbol.n_type,
2274                    symbol.n_sclass,
2275                    symbol.n_numaux - 1,
2276                    symbol.n_numaux,
2277                    &csect_aux);
2278               }
2279             else
2280               csect_aux = main_aux[0];
2281
2282             /* If symbol name starts with ".$" or "$", ignore it.  */
2283             if (namestring[0] == '$'
2284                 || (namestring[0] == '.' && namestring[1] == '$'))
2285               break;
2286
2287             switch (csect_aux.x_csect.x_smtyp & 0x7)
2288               {
2289               case XTY_SD:
2290                 switch (csect_aux.x_csect.x_smclas)
2291                   {
2292                   case XMC_PR:
2293                     if (last_csect_name)
2294                       {
2295                         /* If no misc. function recorded in the last
2296                            seen csect, enter it as a function.  This
2297                            will take care of functions like strcmp()
2298                            compiled by xlc.  */
2299
2300                         if (!misc_func_recorded)
2301                           {
2302                             RECORD_MINIMAL_SYMBOL
2303                               (last_csect_name, last_csect_val,
2304                                mst_text, last_csect_sec,
2305                                objfile);
2306                           }
2307
2308                         if (pst != NULL)
2309                           {
2310                             /* We have to allocate one psymtab for
2311                                each program csect, because their text
2312                                sections need not be adjacent.  */
2313                             xcoff_end_psymtab
2314                               (pst, psymtab_include_list, includes_used,
2315                                symnum_before, dependency_list,
2316                                dependencies_used, textlow_not_set);
2317                             includes_used = 0;
2318                             dependencies_used = 0;
2319                             /* Give all psymtabs for this source file the same
2320                                name.  */
2321                             pst = xcoff_start_psymtab
2322                               (objfile,
2323                                filestring,
2324                                symnum_before,
2325                                objfile->global_psymbols.next,
2326                                objfile->static_psymbols.next);
2327                           }
2328                       }
2329                     /* Activate the misc_func_recorded mechanism for
2330                        compiler- and linker-generated CSECTs like ".strcmp"
2331                        and "@FIX1".  */ 
2332                     if (namestring && (namestring[0] == '.'
2333                                        || namestring[0] == '@'))
2334                       {
2335                         last_csect_name = namestring;
2336                         last_csect_val = symbol.n_value;
2337                         last_csect_sec =
2338                           secnum_to_section (symbol.n_scnum, objfile);
2339                       }
2340                     if (pst != NULL)
2341                       {
2342                         CORE_ADDR highval =
2343                           symbol.n_value + csect_aux.x_csect.x_scnlen.l;
2344
2345                         if (highval > pst->texthigh)
2346                           pst->texthigh = highval;
2347                         if (pst->textlow == 0 || symbol.n_value < pst->textlow)
2348                           pst->textlow = symbol.n_value;
2349                       }
2350                     misc_func_recorded = 0;
2351                     break;
2352
2353                   case XMC_RW:
2354                   case XMC_TD:
2355                     /* Data variables are recorded in the minimal symbol
2356                        table, except for section symbols.  */
2357                     if (*namestring != '.')
2358                       prim_record_minimal_symbol_and_info
2359                         (namestring, symbol.n_value,
2360                          sclass == C_HIDEXT ? mst_file_data : mst_data,
2361                          secnum_to_section (symbol.n_scnum, objfile),
2362                          NULL, objfile);
2363                     break;
2364
2365                   case XMC_TC0:
2366                     if (toc_offset)
2367                       warning (_("More than one XMC_TC0 symbol found."));
2368                     toc_offset = symbol.n_value;
2369
2370                     /* Make TOC offset relative to start address of
2371                        section.  */
2372                     bfd_sect = secnum_to_bfd_section (symbol.n_scnum, objfile);
2373                     if (bfd_sect)
2374                       toc_offset -= bfd_section_vma (objfile->obfd, bfd_sect);
2375                     break;
2376
2377                   case XMC_TC:
2378                     /* These symbols tell us where the TOC entry for a
2379                        variable is, not the variable itself.  */
2380                     break;
2381
2382                   default:
2383                     break;
2384                   }
2385                 break;
2386
2387               case XTY_LD:
2388                 switch (csect_aux.x_csect.x_smclas)
2389                   {
2390                   case XMC_PR:
2391                     /* A function entry point.  */
2392
2393                     if (first_fun_line_offset == 0 && symbol.n_numaux > 1)
2394                       first_fun_line_offset =
2395                         main_aux[0].x_sym.x_fcnary.x_fcn.x_lnnoptr;
2396                     RECORD_MINIMAL_SYMBOL
2397                       (namestring, symbol.n_value,
2398                        sclass == C_HIDEXT ? mst_file_text : mst_text,
2399                        secnum_to_section (symbol.n_scnum, objfile),
2400                        objfile);
2401                     break;
2402
2403                   case XMC_GL:
2404                     /* shared library function trampoline code entry
2405                        point.  */
2406
2407                     /* record trampoline code entries as
2408                        mst_solib_trampoline symbol.  When we lookup mst
2409                        symbols, we will choose mst_text over
2410                        mst_solib_trampoline.  */
2411                     RECORD_MINIMAL_SYMBOL
2412                       (namestring, symbol.n_value,
2413                        mst_solib_trampoline,
2414                        secnum_to_section (symbol.n_scnum, objfile),
2415                        objfile);
2416                     break;
2417
2418                   case XMC_DS:
2419                     /* The symbols often have the same names as
2420                        debug symbols for functions, and confuse
2421                        lookup_symbol.  */
2422                     break;
2423
2424                   default:
2425
2426                     /* xlc puts each variable in a separate csect,
2427                        so we get an XTY_SD for each variable.  But
2428                        gcc puts several variables in a csect, so
2429                        that each variable only gets an XTY_LD.  We
2430                        still need to record them.  This will
2431                        typically be XMC_RW; I suspect XMC_RO and
2432                        XMC_BS might be possible too.  */
2433                     if (*namestring != '.')
2434                       prim_record_minimal_symbol_and_info
2435                         (namestring, symbol.n_value,
2436                          sclass == C_HIDEXT ? mst_file_data : mst_data,
2437                          secnum_to_section (symbol.n_scnum, objfile),
2438                          NULL, objfile);
2439                     break;
2440                   }
2441                 break;
2442
2443               case XTY_CM:
2444                 switch (csect_aux.x_csect.x_smclas)
2445                   {
2446                   case XMC_RW:
2447                   case XMC_BS:
2448                     /* Common variables are recorded in the minimal symbol
2449                        table, except for section symbols.  */
2450                     if (*namestring != '.')
2451                       prim_record_minimal_symbol_and_info
2452                         (namestring, symbol.n_value,
2453                          sclass == C_HIDEXT ? mst_file_bss : mst_bss,
2454                          secnum_to_section (symbol.n_scnum, objfile),
2455                          NULL, objfile);
2456                     break;
2457                   }
2458                 break;
2459
2460               default:
2461                 break;
2462               }
2463           }
2464           break;
2465         case C_FILE:
2466           {
2467             unsigned int symnum_before;
2468
2469             symnum_before = ssymnum;
2470             swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
2471                       &ssymnum, objfile);
2472
2473             /* See if the last csect needs to be recorded.  */
2474
2475             if (last_csect_name && !misc_func_recorded)
2476               {
2477                 /* If no misc. function recorded in the last seen csect, enter
2478                    it as a function.  This will take care of functions like
2479                    strcmp() compiled by xlc.  */
2480
2481                 RECORD_MINIMAL_SYMBOL
2482                   (last_csect_name, last_csect_val,
2483                    mst_text, last_csect_sec, objfile);
2484               }
2485
2486             if (pst)
2487               {
2488                 xcoff_end_psymtab (pst, psymtab_include_list, includes_used,
2489                                    symnum_before, dependency_list,
2490                                    dependencies_used, textlow_not_set);
2491                 includes_used = 0;
2492                 dependencies_used = 0;
2493               }
2494             first_fun_line_offset = 0;
2495
2496             /* XCOFF, according to the AIX 3.2 documentation, puts the
2497                filename in cs->c_name.  But xlc 1.3.0.2 has decided to
2498                do things the standard COFF way and put it in the auxent.
2499                We use the auxent if the symbol is ".file" and an auxent
2500                exists, otherwise use the symbol itself.  */
2501             if (!strcmp (namestring, ".file") && symbol.n_numaux > 0)
2502               {
2503                 filestring = coff_getfilename (&main_aux[0], objfile);
2504               }
2505             else
2506               filestring = namestring;
2507
2508             pst = xcoff_start_psymtab (objfile,
2509                                        filestring,
2510                                        symnum_before,
2511                                        objfile->global_psymbols.next,
2512                                        objfile->static_psymbols.next);
2513             last_csect_name = NULL;
2514           }
2515           break;
2516
2517         default:
2518           {
2519             complaint (&symfile_complaints,
2520                        _("Storage class %d not recognized during scan"),
2521                        sclass);
2522           }
2523           /* FALLTHROUGH */
2524
2525           /* C_FCN is .bf and .ef symbols.  I think it is sufficient
2526              to handle only the C_FUN and C_EXT.  */
2527         case C_FCN:
2528
2529         case C_BSTAT:
2530         case C_ESTAT:
2531         case C_ARG:
2532         case C_REGPARM:
2533         case C_REG:
2534         case C_TPDEF:
2535         case C_STRTAG:
2536         case C_UNTAG:
2537         case C_ENTAG:
2538         case C_LABEL:
2539         case C_NULL:
2540
2541           /* C_EINCL means we are switching back to the main file.  But there
2542              is no reason to care; the only thing we want to know about
2543              includes is the names of all the included (.h) files.  */
2544         case C_EINCL:
2545
2546         case C_BLOCK:
2547
2548           /* I don't think C_STAT is used in xcoff; C_HIDEXT appears to be
2549              used instead.  */
2550         case C_STAT:
2551
2552           /* I don't think the name of the common block (as opposed to the
2553              variables within it) is something which is user visible
2554              currently.  */
2555         case C_BCOMM:
2556         case C_ECOMM:
2557
2558         case C_PSYM:
2559         case C_RPSYM:
2560
2561           /* I think we can ignore C_LSYM; types on xcoff seem to use C_DECL
2562              so C_LSYM would appear to be only for locals.  */
2563         case C_LSYM:
2564
2565         case C_AUTO:
2566         case C_RSYM:
2567           {
2568             /* We probably could save a few instructions by assuming that
2569                C_LSYM, C_PSYM, etc., never have auxents.  */
2570             int naux1 = symbol.n_numaux + 1;
2571
2572             ssymnum += naux1;
2573             sraw_symbol += bfd_coff_symesz (abfd) * naux1;
2574           }
2575           break;
2576
2577         case C_BINCL:
2578           {
2579             /* Mark down an include file in the current psymtab.  */
2580             enum language tmp_language;
2581
2582             swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
2583                       &ssymnum, objfile);
2584
2585             tmp_language = deduce_language_from_filename (namestring);
2586
2587             /* Only change the psymtab's language if we've learned
2588                something useful (eg. tmp_language is not language_unknown).
2589                In addition, to match what start_subfile does, never change
2590                from C++ to C.  */
2591             if (tmp_language != language_unknown
2592                 && (tmp_language != language_c
2593                     || psymtab_language != language_cplus))
2594               psymtab_language = tmp_language;
2595
2596             /* In C++, one may expect the same filename to come round many
2597                times, when code is coming alternately from the main file
2598                and from inline functions in other files.  So I check to see
2599                if this is a file we've seen before -- either the main
2600                source file, or a previously included file.
2601
2602                This seems to be a lot of time to be spending on N_SOL, but
2603                things like "break c-exp.y:435" need to work (I
2604                suppose the psymtab_include_list could be hashed or put
2605                in a binary tree, if profiling shows this is a major hog).  */
2606             if (pst && strcmp (namestring, pst->filename) == 0)
2607               continue;
2608
2609             {
2610               int i;
2611
2612               for (i = 0; i < includes_used; i++)
2613                 if (strcmp (namestring, psymtab_include_list[i]) == 0)
2614                   {
2615                     i = -1;
2616                     break;
2617                   }
2618               if (i == -1)
2619                 continue;
2620             }
2621             psymtab_include_list[includes_used++] = namestring;
2622             if (includes_used >= includes_allocated)
2623               {
2624                 char **orig = psymtab_include_list;
2625
2626                 psymtab_include_list = (char **)
2627                   alloca ((includes_allocated *= 2) *
2628                           sizeof (char *));
2629                 memcpy (psymtab_include_list, orig,
2630                         includes_used * sizeof (char *));
2631               }
2632             continue;
2633           }
2634         case C_FUN:
2635           /* The value of the C_FUN is not the address of the function (it
2636              appears to be the address before linking), but as long as it
2637              is smaller than the actual address, then find_pc_partial_function
2638              will use the minimal symbols instead.  I hope.  */
2639
2640         case C_GSYM:
2641         case C_ECOML:
2642         case C_DECL:
2643         case C_STSYM:
2644           {
2645             char *p;
2646
2647             swap_sym (&symbol, &main_aux[0], &namestring, &sraw_symbol,
2648                       &ssymnum, objfile);
2649
2650             p = strchr (namestring, ':');
2651             if (!p)
2652               continue;                 /* Not a debugging symbol.   */
2653
2654             /* Main processing section for debugging symbols which
2655                the initial read through the symbol tables needs to worry
2656                about.  If we reach this point, the symbol which we are
2657                considering is definitely one we are interested in.
2658                p must also contain the (valid) index into the namestring
2659                which indicates the debugging type symbol.  */
2660
2661             switch (p[1])
2662               {
2663               case 'S':
2664                 symbol.n_value += ANOFFSET (objfile->section_offsets,
2665                                             SECT_OFF_DATA (objfile));
2666
2667                 if (gdbarch_static_transform_name_p (gdbarch))
2668                   namestring = gdbarch_static_transform_name
2669                                  (gdbarch, namestring);
2670
2671                 add_psymbol_to_list (namestring, p - namestring, 1,
2672                                      VAR_DOMAIN, LOC_STATIC,
2673                                      &objfile->static_psymbols,
2674                                      0, symbol.n_value,
2675                                      psymtab_language, objfile);
2676                 continue;
2677
2678               case 'G':
2679                 symbol.n_value += ANOFFSET (objfile->section_offsets,
2680                                             SECT_OFF_DATA (objfile));
2681                 /* The addresses in these entries are reported to be
2682                    wrong.  See the code that reads 'G's for symtabs.  */
2683                 add_psymbol_to_list (namestring, p - namestring, 1,
2684                                      VAR_DOMAIN, LOC_STATIC,
2685                                      &objfile->global_psymbols,
2686                                      0, symbol.n_value,
2687                                      psymtab_language, objfile);
2688                 continue;
2689
2690               case 'T':
2691                 /* When a 'T' entry is defining an anonymous enum, it
2692                    may have a name which is the empty string, or a
2693                    single space.  Since they're not really defining a
2694                    symbol, those shouldn't go in the partial symbol
2695                    table.  We do pick up the elements of such enums at
2696                    'check_enum:', below.  */
2697                 if (p >= namestring + 2
2698                     || (p == namestring + 1
2699                         && namestring[0] != ' '))
2700                   {
2701                     add_psymbol_to_list (namestring, p - namestring, 1,
2702                                          STRUCT_DOMAIN, LOC_TYPEDEF,
2703                                          &objfile->static_psymbols,
2704                                          symbol.n_value, 0,
2705                                          psymtab_language, objfile);
2706                     if (p[2] == 't')
2707                       {
2708                         /* Also a typedef with the same name.  */
2709                         add_psymbol_to_list (namestring, p - namestring, 1,
2710                                              VAR_DOMAIN, LOC_TYPEDEF,
2711                                              &objfile->static_psymbols,
2712                                              symbol.n_value, 0,
2713                                              psymtab_language, objfile);
2714                         p += 1;
2715                       }
2716                   }
2717                 goto check_enum;
2718
2719               case 't':
2720                 if (p != namestring)    /* a name is there, not just :T...  */
2721                   {
2722                     add_psymbol_to_list (namestring, p - namestring, 1,
2723                                          VAR_DOMAIN, LOC_TYPEDEF,
2724                                          &objfile->static_psymbols,
2725                                          symbol.n_value, 0,
2726                                          psymtab_language, objfile);
2727                   }
2728               check_enum:
2729                 /* If this is an enumerated type, we need to
2730                    add all the enum constants to the partial symbol
2731                    table.  This does not cover enums without names, e.g.
2732                    "enum {a, b} c;" in C, but fortunately those are
2733                    rare.  There is no way for GDB to find those from the
2734                    enum type without spending too much time on it.  Thus
2735                    to solve this problem, the compiler needs to put out the
2736                    enum in a nameless type.  GCC2 does this.  */
2737
2738                 /* We are looking for something of the form
2739                    <name> ":" ("t" | "T") [<number> "="] "e"
2740                    {<constant> ":" <value> ","} ";".  */
2741
2742                 /* Skip over the colon and the 't' or 'T'.  */
2743                 p += 2;
2744                 /* This type may be given a number.  Also, numbers can come
2745                    in pairs like (0,26).  Skip over it.  */
2746                 while ((*p >= '0' && *p <= '9')
2747                        || *p == '(' || *p == ',' || *p == ')'
2748                        || *p == '=')
2749                   p++;
2750
2751                 if (*p++ == 'e')
2752                   {
2753                     /* The aix4 compiler emits extra crud before the
2754                        members.  */
2755                     if (*p == '-')
2756                       {
2757                         /* Skip over the type (?).  */
2758                         while (*p != ':')
2759                           p++;
2760
2761                         /* Skip over the colon.  */
2762                         p++;
2763                       }
2764
2765                     /* We have found an enumerated type.  */
2766                     /* According to comments in read_enum_type
2767                        a comma could end it instead of a semicolon.
2768                        I don't know where that happens.
2769                        Accept either.  */
2770                     while (*p && *p != ';' && *p != ',')
2771                       {
2772                         char *q;
2773
2774                         /* Check for and handle cretinous dbx symbol name
2775                            continuation!  */
2776                         if (*p == '\\' || (*p == '?' && p[1] == '\0'))
2777                           p = next_symbol_text (objfile);
2778
2779                         /* Point to the character after the name
2780                            of the enum constant.  */
2781                         for (q = p; *q && *q != ':'; q++)
2782                           ;
2783                         /* Note that the value doesn't matter for
2784                            enum constants in psymtabs, just in symtabs.  */
2785                         add_psymbol_to_list (p, q - p, 1,
2786                                              VAR_DOMAIN, LOC_CONST,
2787                                              &objfile->static_psymbols, 0,
2788                                              0, psymtab_language, objfile);
2789                         /* Point past the name.  */
2790                         p = q;
2791                         /* Skip over the value.  */
2792                         while (*p && *p != ',')
2793                           p++;
2794                         /* Advance past the comma.  */
2795                         if (*p)
2796                           p++;
2797                       }
2798                   }
2799                 continue;
2800
2801               case 'c':
2802                 /* Constant, e.g. from "const" in Pascal.  */
2803                 add_psymbol_to_list (namestring, p - namestring, 1,
2804                                      VAR_DOMAIN, LOC_CONST,
2805                                      &objfile->static_psymbols, symbol.n_value,
2806                                      0, psymtab_language, objfile);
2807                 continue;
2808
2809               case 'f':
2810                 if (! pst)
2811                   {
2812                     int name_len = p - namestring;
2813                     char *name = xmalloc (name_len + 1);
2814
2815                     memcpy (name, namestring, name_len);
2816                     name[name_len] = '\0';
2817                     function_outside_compilation_unit_complaint (name);
2818                     xfree (name);
2819                   }
2820                 symbol.n_value += ANOFFSET (objfile->section_offsets,
2821                                             SECT_OFF_TEXT (objfile));
2822                 add_psymbol_to_list (namestring, p - namestring, 1,
2823                                      VAR_DOMAIN, LOC_BLOCK,
2824                                      &objfile->static_psymbols,
2825                                      0, symbol.n_value,
2826                                      psymtab_language, objfile);
2827                 continue;
2828
2829                 /* Global functions were ignored here, but now they
2830                    are put into the global psymtab like one would expect.
2831                    They're also in the minimal symbol table.  */
2832               case 'F':
2833                 if (! pst)
2834                   {
2835                     int name_len = p - namestring;
2836                     char *name = xmalloc (name_len + 1);
2837
2838                     memcpy (name, namestring, name_len);
2839                     name[name_len] = '\0';
2840                     function_outside_compilation_unit_complaint (name);
2841                     xfree (name);
2842                   }
2843
2844                 /* We need only the minimal symbols for these
2845                    loader-generated definitions.  Keeping the global
2846                    symbols leads to "in psymbols but not in symbols"
2847                    errors.  */
2848                 if (strncmp (namestring, "@FIX", 4) == 0)
2849                   continue;
2850
2851                 symbol.n_value += ANOFFSET (objfile->section_offsets,
2852                                             SECT_OFF_TEXT (objfile));
2853                 add_psymbol_to_list (namestring, p - namestring, 1,
2854                                      VAR_DOMAIN, LOC_BLOCK,
2855                                      &objfile->global_psymbols,
2856                                      0, symbol.n_value,
2857                                      psymtab_language, objfile);
2858                 continue;
2859
2860                 /* Two things show up here (hopefully); static symbols of
2861                    local scope (static used inside braces) or extensions
2862                    of structure symbols.  We can ignore both.  */
2863               case 'V':
2864               case '(':
2865               case '0':
2866               case '1':
2867               case '2':
2868               case '3':
2869               case '4':
2870               case '5':
2871               case '6':
2872               case '7':
2873               case '8':
2874               case '9':
2875               case '-':
2876               case '#':         /* For symbol identification (used in
2877                                    live ranges).  */
2878                 continue;
2879
2880               case ':':
2881                 /* It is a C++ nested symbol.  We don't need to record it
2882                    (I don't think); if we try to look up foo::bar::baz,
2883                    then symbols for the symtab containing foo should get
2884                    read in, I think.  */
2885                 /* Someone says sun cc puts out symbols like
2886                    /foo/baz/maclib::/usr/local/bin/maclib,
2887                    which would get here with a symbol type of ':'.  */
2888                 continue;
2889
2890               default:
2891                 /* Unexpected symbol descriptor.  The second and
2892                    subsequent stabs of a continued stab can show up
2893                    here.  The question is whether they ever can mimic
2894                    a normal stab--it would be nice if not, since we
2895                    certainly don't want to spend the time searching to
2896                    the end of every string looking for a
2897                    backslash.  */
2898
2899                 complaint (&symfile_complaints,
2900                            _("unknown symbol descriptor `%c'"), p[1]);
2901
2902                 /* Ignore it; perhaps it is an extension that we don't
2903                    know about.  */
2904                 continue;
2905               }
2906           }
2907         }
2908     }
2909
2910   if (pst)
2911     {
2912       xcoff_end_psymtab (pst, psymtab_include_list, includes_used,
2913                          ssymnum, dependency_list,
2914                          dependencies_used, textlow_not_set);
2915     }
2916
2917   /* Record the toc offset value of this symbol table into objfile
2918      structure.  If no XMC_TC0 is found, toc_offset should be zero.
2919      Another place to obtain this information would be file auxiliary
2920      header.  */
2921
2922   ((struct coff_symfile_info *) objfile->deprecated_sym_private)->toc_offset
2923     = toc_offset;
2924 }
2925
2926 /* Return the toc offset value for a given objfile.  */
2927
2928 CORE_ADDR
2929 xcoff_get_toc_offset (struct objfile *objfile)
2930 {
2931   if (objfile)
2932     return ((struct coff_symfile_info *)
2933             objfile->deprecated_sym_private)->toc_offset;
2934   return 0;
2935 }
2936
2937 /* Scan and build partial symbols for a symbol file.
2938    We have been initialized by a call to dbx_symfile_init, which 
2939    put all the relevant info into a "struct dbx_symfile_info",
2940    hung off the objfile structure.
2941
2942    SECTION_OFFSETS contains offsets relative to which the symbols in the
2943    various sections are (depending where the sections were actually
2944    loaded).  */
2945
2946 static void
2947 xcoff_initial_scan (struct objfile *objfile, int symfile_flags)
2948 {
2949   bfd *abfd;
2950   int val;
2951   struct cleanup *back_to;
2952   int num_symbols;              /* # of symbols */
2953   file_ptr symtab_offset;       /* symbol table and */
2954   file_ptr stringtab_offset;    /* string table file offsets */
2955   struct coff_symfile_info *info;
2956   char *name;
2957   unsigned int size;
2958
2959   info = (struct coff_symfile_info *) objfile->deprecated_sym_private;
2960   symfile_bfd = abfd = objfile->obfd;
2961   name = objfile->name;
2962
2963   num_symbols = bfd_get_symcount (abfd);        /* # of symbols */
2964   symtab_offset = obj_sym_filepos (abfd);       /* symbol table file offset */
2965   stringtab_offset = symtab_offset +
2966     num_symbols * coff_data (abfd)->local_symesz;
2967
2968   info->min_lineno_offset = 0;
2969   info->max_lineno_offset = 0;
2970   bfd_map_over_sections (abfd, find_linenos, info);
2971
2972   if (num_symbols > 0)
2973     {
2974       /* Read the string table.  */
2975       init_stringtab (abfd, stringtab_offset, objfile);
2976
2977       /* Read the .debug section, if present.  */
2978       {
2979         struct bfd_section *secp;
2980         bfd_size_type length;
2981         char *debugsec = NULL;
2982
2983         secp = bfd_get_section_by_name (abfd, ".debug");
2984         if (secp)
2985           {
2986             length = bfd_section_size (abfd, secp);
2987             if (length)
2988               {
2989                 debugsec =
2990                   (char *) obstack_alloc (&objfile->objfile_obstack, length);
2991
2992                 if (!bfd_get_section_contents (abfd, secp, debugsec,
2993                                                (file_ptr) 0, length))
2994                   {
2995                     error (_("Error reading .debug section of `%s': %s"),
2996                            name, bfd_errmsg (bfd_get_error ()));
2997                   }
2998               }
2999           }
3000         ((struct coff_symfile_info *)
3001          objfile->deprecated_sym_private)->debugsec
3002           = debugsec;
3003       }
3004     }
3005
3006   /* Read the symbols.  We keep them in core because we will want to
3007      access them randomly in read_symbol*.  */
3008   val = bfd_seek (abfd, symtab_offset, SEEK_SET);
3009   if (val < 0)
3010     error (_("Error reading symbols from %s: %s"),
3011            name, bfd_errmsg (bfd_get_error ()));
3012   size = coff_data (abfd)->local_symesz * num_symbols;
3013   ((struct coff_symfile_info *) objfile->deprecated_sym_private)->symtbl =
3014     obstack_alloc (&objfile->objfile_obstack, size);
3015   ((struct coff_symfile_info *)
3016    objfile->deprecated_sym_private)->symtbl_num_syms
3017     = num_symbols;
3018
3019   val = bfd_bread (((struct coff_symfile_info *)
3020                     objfile->deprecated_sym_private)->symtbl,
3021                    size, abfd);
3022   if (val != size)
3023     perror_with_name (_("reading symbol table"));
3024
3025   /* If we are reinitializing, or if we have never loaded syms yet, init.  */
3026   if (objfile->global_psymbols.size == 0 && objfile->static_psymbols.size == 0)
3027     /* I'm not sure how how good num_symbols is; the rule of thumb in
3028        init_psymbol_list was developed for a.out.  On the one hand,
3029        num_symbols includes auxents.  On the other hand, it doesn't
3030        include N_SLINE.  */
3031     init_psymbol_list (objfile, num_symbols);
3032
3033   free_pending_blocks ();
3034   back_to = make_cleanup (really_free_pendings, 0);
3035
3036   init_minimal_symbol_collection ();
3037   make_cleanup_discard_minimal_symbols ();
3038
3039   /* Now that the symbol table data of the executable file are all in core,
3040      process them and define symbols accordingly.  */
3041
3042   scan_xcoff_symtab (objfile);
3043
3044   /* Install any minimal symbols that have been collected as the current
3045      minimal symbols for this objfile.  */
3046
3047   install_minimal_symbols (objfile);
3048
3049   /* DWARF2 sections.  */
3050
3051   if (dwarf2_has_info (objfile, &dwarf2_xcoff_names))
3052     dwarf2_build_psymtabs (objfile);
3053
3054   dwarf2_build_frame_info (objfile);
3055
3056   do_cleanups (back_to);
3057 }
3058 \f
3059 static void
3060 xcoff_symfile_offsets (struct objfile *objfile,
3061                        struct section_addr_info *addrs)
3062 {
3063   asection *sect = NULL;
3064   int i;
3065
3066   objfile->num_sections = bfd_count_sections (objfile->obfd);
3067   objfile->section_offsets = (struct section_offsets *)
3068     obstack_alloc (&objfile->objfile_obstack, 
3069                    SIZEOF_N_SECTION_OFFSETS (objfile->num_sections));
3070
3071   /* Initialize the section indexes for future use.  */
3072   sect = bfd_get_section_by_name (objfile->obfd, ".text");
3073   if (sect) 
3074     objfile->sect_index_text = sect->index;
3075
3076   sect = bfd_get_section_by_name (objfile->obfd, ".data");
3077   if (sect) 
3078     objfile->sect_index_data = sect->index;
3079
3080   sect = bfd_get_section_by_name (objfile->obfd, ".bss");
3081   if (sect) 
3082     objfile->sect_index_bss = sect->index;
3083
3084   sect = bfd_get_section_by_name (objfile->obfd, ".rodata");
3085   if (sect) 
3086     objfile->sect_index_rodata = sect->index;
3087
3088   for (i = 0; i < objfile->num_sections; ++i)
3089     {
3090       /* syms_from_objfile kindly subtracts from addr the
3091          bfd_section_vma of the .text section.  This strikes me as
3092          wrong--whether the offset to be applied to symbol reading is
3093          relative to the start address of the section depends on the
3094          symbol format.  In any event, this whole "addr" concept is
3095          pretty broken (it doesn't handle any section but .text
3096          sensibly), so just ignore the addr parameter and use 0.
3097          rs6000-nat.c will set the correct section offsets via
3098          objfile_relocate.  */
3099         (objfile->section_offsets)->offsets[i] = 0;
3100     }
3101 }
3102
3103 /* Register our ability to parse symbols for xcoff BFD files.  */
3104
3105 static const struct sym_fns xcoff_sym_fns =
3106 {
3107
3108   /* It is possible that coff and xcoff should be merged as
3109      they do have fundamental similarities (for example, the extra storage
3110      classes used for stabs could presumably be recognized in any COFF file).
3111      However, in addition to obvious things like all the csect hair, there are
3112      some subtler differences between xcoffread.c and coffread.c, notably
3113      the fact that coffread.c has no need to read in all the symbols, but
3114      xcoffread.c reads all the symbols and does in fact randomly access them
3115      (in C_BSTAT and line number processing).  */
3116
3117   bfd_target_xcoff_flavour,
3118
3119   xcoff_new_init,               /* init anything gbl to entire symtab */
3120   xcoff_symfile_init,           /* read initial info, setup for sym_read() */
3121   xcoff_initial_scan,           /* read a symbol file into symtab */
3122   NULL,                         /* sym_read_psymbols */
3123   xcoff_symfile_finish,         /* finished with file, cleanup */
3124   xcoff_symfile_offsets,        /* xlate offsets ext->int form */
3125   default_symfile_segments,     /* Get segment information from a file.  */
3126   aix_process_linenos,
3127   default_symfile_relocate,     /* Relocate a debug section.  */
3128   &psym_functions
3129 };
3130
3131 /* Provide a prototype to silence -Wmissing-prototypes.  */
3132 extern initialize_file_ftype _initialize_xcoffread;
3133
3134 void
3135 _initialize_xcoffread (void)
3136 {
3137   add_symtab_fns (&xcoff_sym_fns);
3138 }