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