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