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