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