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