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