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