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