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