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