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