Add a comment for the ARM_F{0..7}_REGNUM registers
[binutils-gdb.git] / gdb / machoread.c
blob9881298021dfe53d23ce6b3cfbf4f89e7798a58a
1 /* Darwin support for GDB, the GNU debugger.
2 Copyright (C) 2008-2020 Free Software Foundation, Inc.
4 Contributed by AdaCore.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
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.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 #include "defs.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "bfd.h"
25 #include "symfile.h"
26 #include "objfiles.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "mach-o.h"
30 #include "aout/stab_gnu.h"
31 #include "complaints.h"
32 #include "gdb_bfd.h"
33 #include <string>
34 #include <algorithm>
36 /* If non-zero displays debugging message. */
37 static unsigned int mach_o_debug_level = 0;
39 /* Dwarf debugging information are never in the final executable. They stay
40 in object files and the executable contains the list of object files read
41 during the link.
42 Each time an oso (other source) is found in the executable, the reader
43 creates such a structure. They are read after the processing of the
44 executable. */
46 struct oso_el
48 oso_el (asymbol **oso_sym_, asymbol **end_sym_, unsigned int nbr_syms_)
49 : name((*oso_sym_)->name),
50 mtime((*oso_sym_)->value),
51 oso_sym(oso_sym_),
52 end_sym(end_sym_),
53 nbr_syms(nbr_syms_)
57 /* Object file name. Can also be a member name. */
58 const char *name;
60 /* Associated time stamp. */
61 unsigned long mtime;
63 /* Stab symbols range for this OSO. */
64 asymbol **oso_sym;
65 asymbol **end_sym;
67 /* Number of interesting stabs in the range. */
68 unsigned int nbr_syms;
71 static void
72 macho_new_init (struct objfile *objfile)
76 static void
77 macho_symfile_init (struct objfile *objfile)
79 objfile->flags |= OBJF_REORDERED;
82 /* Add symbol SYM to the minimal symbol table of OBJFILE. */
84 static void
85 macho_symtab_add_minsym (minimal_symbol_reader &reader,
86 struct objfile *objfile, const asymbol *sym)
88 if (sym->name == NULL || *sym->name == '\0')
90 /* Skip names that don't exist (shouldn't happen), or names
91 that are null strings (may happen). */
92 return;
95 if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK))
97 CORE_ADDR symaddr;
98 enum minimal_symbol_type ms_type;
100 /* Bfd symbols are section relative. */
101 symaddr = sym->value + sym->section->vma;
103 if (sym->section == bfd_abs_section_ptr)
104 ms_type = mst_abs;
105 else if (sym->section->flags & SEC_CODE)
107 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
108 ms_type = mst_text;
109 else
110 ms_type = mst_file_text;
112 else if (sym->section->flags & SEC_ALLOC)
114 if (sym->flags & (BSF_GLOBAL | BSF_WEAK))
116 if (sym->section->flags & SEC_LOAD)
117 ms_type = mst_data;
118 else
119 ms_type = mst_bss;
121 else if (sym->flags & BSF_LOCAL)
123 /* Not a special stabs-in-elf symbol, do regular
124 symbol processing. */
125 if (sym->section->flags & SEC_LOAD)
126 ms_type = mst_file_data;
127 else
128 ms_type = mst_file_bss;
130 else
131 ms_type = mst_unknown;
133 else
134 return; /* Skip this symbol. */
136 reader.record_with_info (sym->name, symaddr, ms_type,
137 gdb_bfd_section_index (objfile->obfd,
138 sym->section));
142 /* Build the minimal symbol table from SYMBOL_TABLE of length
143 NUMBER_OF_SYMBOLS for OBJFILE. Registers OSO filenames found. */
145 static void
146 macho_symtab_read (minimal_symbol_reader &reader,
147 struct objfile *objfile,
148 long number_of_symbols, asymbol **symbol_table,
149 std::vector<oso_el> *oso_vector_ptr)
151 long i;
152 const asymbol *file_so = NULL;
153 asymbol **oso_file = NULL;
154 unsigned int nbr_syms = 0;
156 /* Current state while reading stabs. */
157 enum
159 /* Not within an SO part. Only non-debugging symbols should be present,
160 and will be added to the minimal symbols table. */
161 S_NO_SO,
163 /* First SO read. Introduce an SO section, and may be followed by a second
164 SO. The SO section should contain onl debugging symbols. */
165 S_FIRST_SO,
167 /* Second non-null SO found, just after the first one. Means that the first
168 is in fact a directory name. */
169 S_SECOND_SO,
171 /* Non-null OSO found. Debugging info are DWARF in this OSO file. */
172 S_DWARF_FILE,
174 S_STAB_FILE
175 } state = S_NO_SO;
177 for (i = 0; i < number_of_symbols; i++)
179 const asymbol *sym = symbol_table[i];
180 bfd_mach_o_asymbol *mach_o_sym = (bfd_mach_o_asymbol *)sym;
182 switch (state)
184 case S_NO_SO:
185 if (mach_o_sym->n_type == N_SO)
187 /* Start of object stab. */
188 if (sym->name == NULL || sym->name[0] == 0)
190 /* Unexpected empty N_SO. */
191 complaint (_("Unexpected empty N_SO stab"));
193 else
195 file_so = sym;
196 state = S_FIRST_SO;
199 else if (sym->flags & BSF_DEBUGGING)
201 if (mach_o_sym->n_type == N_OPT)
203 /* No complaint for OPT. */
204 break;
207 /* Debugging symbols are not expected here. */
208 complaint (_("%s: Unexpected debug stab outside SO markers"),
209 objfile_name (objfile));
211 else
213 /* Non-debugging symbols go to the minimal symbol table. */
214 macho_symtab_add_minsym (reader, objfile, sym);
216 break;
218 case S_FIRST_SO:
219 case S_SECOND_SO:
220 if (mach_o_sym->n_type == N_SO)
222 if (sym->name == NULL || sym->name[0] == 0)
224 /* Unexpected empty N_SO. */
225 complaint (_("Empty SO section"));
226 state = S_NO_SO;
228 else if (state == S_FIRST_SO)
230 /* Second SO stab for the file name. */
231 file_so = sym;
232 state = S_SECOND_SO;
234 else
235 complaint (_("Three SO in a raw"));
237 else if (mach_o_sym->n_type == N_OSO)
239 if (sym->name == NULL || sym->name[0] == 0)
241 /* Empty OSO. Means that this file was compiled with
242 stabs. */
243 state = S_STAB_FILE;
244 warning (_("stabs debugging not supported for %s"),
245 file_so->name);
247 else
249 /* Non-empty OSO for a Dwarf file. */
250 oso_file = symbol_table + i;
251 nbr_syms = 0;
252 state = S_DWARF_FILE;
255 else
256 complaint (_("Unexpected stab after SO"));
257 break;
259 case S_STAB_FILE:
260 case S_DWARF_FILE:
261 if (mach_o_sym->n_type == N_SO)
263 if (sym->name == NULL || sym->name[0] == 0)
265 /* End of file. */
266 if (state == S_DWARF_FILE)
267 oso_vector_ptr->emplace_back (oso_file, symbol_table + i,
268 nbr_syms);
269 state = S_NO_SO;
271 else
273 complaint (_("Missing nul SO"));
274 file_so = sym;
275 state = S_FIRST_SO;
278 else if (sym->flags & BSF_DEBUGGING)
280 if (state == S_STAB_FILE)
282 /* FIXME: to be implemented. */
284 else
286 switch (mach_o_sym->n_type)
288 case N_FUN:
289 if (sym->name == NULL || sym->name[0] == 0)
290 break;
291 /* Fall through. */
292 case N_STSYM:
293 /* Interesting symbol. */
294 nbr_syms++;
295 break;
296 case N_ENSYM:
297 case N_BNSYM:
298 case N_GSYM:
299 break;
300 default:
301 complaint (_("unhandled stab for dwarf OSO file"));
302 break;
306 else
307 complaint (_("non-debugging symbol within SO"));
308 break;
312 if (state != S_NO_SO)
313 complaint (_("missing nul SO"));
316 /* If NAME describes an archive member (ie: ARCHIVE '(' MEMBER ')'),
317 returns the length of the archive name.
318 Returns -1 otherwise. */
320 static int
321 get_archive_prefix_len (const char *name)
323 const char *lparen;
324 int name_len = strlen (name);
326 if (name_len == 0 || name[name_len - 1] != ')')
327 return -1;
329 lparen = strrchr (name, '(');
330 if (lparen == NULL || lparen == name)
331 return -1;
332 return lparen - name;
335 /* Compare function to std::sort OSOs, so that members of a library
336 are gathered. */
338 static bool
339 oso_el_compare_name (const oso_el &l, const oso_el &r)
341 return strcmp (l.name, r.name) < 0;
344 /* Hash table entry structure for the stabs symbols in the main object file.
345 This is used to speed up lookup for symbols in the OSO. */
347 struct macho_sym_hash_entry
349 struct bfd_hash_entry base;
350 const asymbol *sym;
353 /* Routine to create an entry in the hash table. */
355 static struct bfd_hash_entry *
356 macho_sym_hash_newfunc (struct bfd_hash_entry *entry,
357 struct bfd_hash_table *table,
358 const char *string)
360 struct macho_sym_hash_entry *ret = (struct macho_sym_hash_entry *) entry;
362 /* Allocate the structure if it has not already been allocated by a
363 subclass. */
364 if (ret == NULL)
365 ret = (struct macho_sym_hash_entry *) bfd_hash_allocate (table,
366 sizeof (* ret));
367 if (ret == NULL)
368 return NULL;
370 /* Call the allocation method of the superclass. */
371 ret = (struct macho_sym_hash_entry *)
372 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string);
374 if (ret)
376 /* Initialize the local fields. */
377 ret->sym = NULL;
380 return (struct bfd_hash_entry *) ret;
383 /* Get the value of SYM from the minimal symtab of MAIN_OBJFILE. This is used
384 to get the value of global and common symbols. */
386 static CORE_ADDR
387 macho_resolve_oso_sym_with_minsym (struct objfile *main_objfile, asymbol *sym)
389 /* For common symbol and global symbols, use the min symtab. */
390 struct bound_minimal_symbol msym;
391 const char *name = sym->name;
393 if (name[0] == bfd_get_symbol_leading_char (main_objfile->obfd))
394 ++name;
395 msym = lookup_minimal_symbol (name, NULL, main_objfile);
396 if (msym.minsym == NULL)
398 warning (_("can't find symbol '%s' in minsymtab"), name);
399 return 0;
401 else
402 return BMSYMBOL_VALUE_ADDRESS (msym);
405 /* Add oso file OSO/ABFD as a symbol file. */
407 static void
408 macho_add_oso_symfile (oso_el *oso, const gdb_bfd_ref_ptr &abfd,
409 const char *name,
410 struct objfile *main_objfile,
411 symfile_add_flags symfile_flags)
413 int storage;
414 int i;
415 asymbol **symbol_table;
416 asymbol **symp;
417 struct bfd_hash_table table;
418 int nbr_sections;
420 /* Per section flag to mark which section have been rebased. */
421 unsigned char *sections_rebased;
423 if (mach_o_debug_level > 0)
424 printf_unfiltered
425 (_("Loading debugging symbols from oso: %s\n"), oso->name);
427 if (!bfd_check_format (abfd.get (), bfd_object))
429 warning (_("`%s': can't read symbols: %s."), oso->name,
430 bfd_errmsg (bfd_get_error ()));
431 return;
434 if (abfd->my_archive == NULL && oso->mtime != bfd_get_mtime (abfd.get ()))
436 warning (_("`%s': file time stamp mismatch."), oso->name);
437 return;
440 if (!bfd_hash_table_init_n (&table, macho_sym_hash_newfunc,
441 sizeof (struct macho_sym_hash_entry),
442 oso->nbr_syms))
444 warning (_("`%s': can't create hash table"), oso->name);
445 return;
448 bfd_set_cacheable (abfd.get (), 1);
450 /* Read symbols table. */
451 storage = bfd_get_symtab_upper_bound (abfd.get ());
452 symbol_table = (asymbol **) xmalloc (storage);
453 bfd_canonicalize_symtab (abfd.get (), symbol_table);
455 /* Init section flags. */
456 nbr_sections = bfd_count_sections (abfd.get ());
457 sections_rebased = (unsigned char *) alloca (nbr_sections);
458 for (i = 0; i < nbr_sections; i++)
459 sections_rebased[i] = 0;
461 /* Put symbols for the OSO file in the hash table. */
462 for (symp = oso->oso_sym; symp != oso->end_sym; symp++)
464 const asymbol *sym = *symp;
465 bfd_mach_o_asymbol *mach_o_sym = (bfd_mach_o_asymbol *)sym;
467 switch (mach_o_sym->n_type)
469 case N_ENSYM:
470 case N_BNSYM:
471 case N_GSYM:
472 sym = NULL;
473 break;
474 case N_FUN:
475 if (sym->name == NULL || sym->name[0] == 0)
476 sym = NULL;
477 break;
478 case N_STSYM:
479 break;
480 default:
481 sym = NULL;
482 break;
484 if (sym != NULL)
486 struct macho_sym_hash_entry *ent;
488 ent = (struct macho_sym_hash_entry *)
489 bfd_hash_lookup (&table, sym->name, TRUE, FALSE);
490 if (ent->sym != NULL)
491 complaint (_("Duplicated symbol %s in symbol table"), sym->name);
492 else
494 if (mach_o_debug_level > 4)
496 struct gdbarch *arch = get_objfile_arch (main_objfile);
497 printf_unfiltered
498 (_("Adding symbol %s (addr: %s)\n"),
499 sym->name, paddress (arch, sym->value));
501 ent->sym = sym;
506 /* Relocate symbols of the OSO. */
507 for (i = 0; symbol_table[i]; i++)
509 asymbol *sym = symbol_table[i];
510 bfd_mach_o_asymbol *mach_o_sym = (bfd_mach_o_asymbol *)sym;
512 if (mach_o_sym->n_type & BFD_MACH_O_N_STAB)
513 continue;
514 if ((mach_o_sym->n_type & BFD_MACH_O_N_TYPE) == BFD_MACH_O_N_UNDF
515 && sym->value != 0)
517 /* For common symbol use the min symtab and modify the OSO
518 symbol table. */
519 CORE_ADDR res;
521 res = macho_resolve_oso_sym_with_minsym (main_objfile, sym);
522 if (res != 0)
524 sym->section = bfd_com_section_ptr;
525 sym->value = res;
528 else if ((mach_o_sym->n_type & BFD_MACH_O_N_TYPE) == BFD_MACH_O_N_SECT)
530 /* Normal symbol. */
531 asection *sec = sym->section;
532 bfd_mach_o_section *msec;
533 unsigned int sec_type;
535 /* Skip buggy ones. */
536 if (sec == NULL || sections_rebased[sec->index] != 0)
537 continue;
539 /* Only consider regular, non-debugging sections. */
540 msec = bfd_mach_o_get_mach_o_section (sec);
541 sec_type = msec->flags & BFD_MACH_O_SECTION_TYPE_MASK;
542 if ((sec_type == BFD_MACH_O_S_REGULAR
543 || sec_type == BFD_MACH_O_S_ZEROFILL)
544 && (msec->flags & BFD_MACH_O_S_ATTR_DEBUG) == 0)
546 CORE_ADDR addr = 0;
548 if ((mach_o_sym->n_type & BFD_MACH_O_N_EXT) != 0)
550 /* Use the min symtab for global symbols. */
551 addr = macho_resolve_oso_sym_with_minsym (main_objfile, sym);
553 else
555 struct macho_sym_hash_entry *ent;
557 ent = (struct macho_sym_hash_entry *)
558 bfd_hash_lookup (&table, sym->name, FALSE, FALSE);
559 if (ent != NULL)
560 addr = bfd_asymbol_value (ent->sym);
563 /* Adjust the section. */
564 if (addr != 0)
566 CORE_ADDR res = addr - sym->value;
568 if (mach_o_debug_level > 3)
570 struct gdbarch *arch = get_objfile_arch (main_objfile);
571 printf_unfiltered
572 (_("resolve sect %s with %s (set to %s)\n"),
573 sec->name, sym->name,
574 paddress (arch, res));
576 bfd_set_section_vma (sec, res);
577 sections_rebased[sec->index] = 1;
580 else
582 /* Mark the section as never rebased. */
583 sections_rebased[sec->index] = 2;
588 bfd_hash_table_free (&table);
590 /* We need to clear SYMFILE_MAINLINE to avoid interactive question
591 from symfile.c:symbol_file_add_with_addrs_or_offsets. */
592 symbol_file_add_from_bfd
593 (abfd.get (), name, symfile_flags & ~(SYMFILE_MAINLINE | SYMFILE_VERBOSE),
594 NULL,
595 main_objfile->flags & (OBJF_REORDERED | OBJF_SHARED
596 | OBJF_READNOW | OBJF_USERLOADED),
597 main_objfile);
600 /* Read symbols from the vector of oso files.
602 Note that this function sorts OSO_VECTOR_PTR. */
604 static void
605 macho_symfile_read_all_oso (std::vector<oso_el> *oso_vector_ptr,
606 struct objfile *main_objfile,
607 symfile_add_flags symfile_flags)
609 int ix;
610 oso_el *oso;
612 /* Sort oso by name so that files from libraries are gathered. */
613 std::sort (oso_vector_ptr->begin (), oso_vector_ptr->end (),
614 oso_el_compare_name);
616 for (ix = 0; ix < oso_vector_ptr->size ();)
618 int pfx_len;
620 oso = &(*oso_vector_ptr)[ix];
622 /* Check if this is a library name. */
623 pfx_len = get_archive_prefix_len (oso->name);
624 if (pfx_len > 0)
626 int last_ix;
627 oso_el *oso2;
628 int ix2;
630 std::string archive_name (oso->name, pfx_len);
632 /* Compute number of oso for this archive. */
633 for (last_ix = ix; last_ix < oso_vector_ptr->size (); last_ix++)
635 oso2 = &(*oso_vector_ptr)[last_ix];
636 if (strncmp (oso2->name, archive_name.c_str (), pfx_len) != 0)
637 break;
640 /* Open the archive and check the format. */
641 gdb_bfd_ref_ptr archive_bfd (gdb_bfd_open (archive_name.c_str (),
642 gnutarget, -1));
643 if (archive_bfd == NULL)
645 warning (_("Could not open OSO archive file \"%s\""),
646 archive_name.c_str ());
647 ix = last_ix;
648 continue;
650 if (!bfd_check_format (archive_bfd.get (), bfd_archive))
652 warning (_("OSO archive file \"%s\" not an archive."),
653 archive_name.c_str ());
654 ix = last_ix;
655 continue;
658 gdb_bfd_ref_ptr member_bfd
659 (gdb_bfd_openr_next_archived_file (archive_bfd.get (), NULL));
661 if (member_bfd == NULL)
663 warning (_("Could not read archive members out of "
664 "OSO archive \"%s\""), archive_name.c_str ());
665 ix = last_ix;
666 continue;
669 /* Load all oso in this library. */
670 while (member_bfd != NULL)
672 const char *member_name = bfd_get_filename (member_bfd.get ());
673 int member_len = strlen (member_name);
675 /* If this member is referenced, add it as a symfile. */
676 for (ix2 = ix; ix2 < last_ix; ix2++)
678 oso2 = &(*oso_vector_ptr)[ix2];
680 if (oso2->name
681 && strlen (oso2->name) == pfx_len + member_len + 2
682 && !memcmp (member_name, oso2->name + pfx_len + 1,
683 member_len))
685 macho_add_oso_symfile (oso2, member_bfd,
686 bfd_get_filename (member_bfd.get ()),
687 main_objfile, symfile_flags);
688 oso2->name = NULL;
689 break;
693 member_bfd = gdb_bfd_openr_next_archived_file (archive_bfd.get (),
694 member_bfd.get ());
696 for (ix2 = ix; ix2 < last_ix; ix2++)
698 oso2 = &(*oso_vector_ptr)[ix2];
700 if (oso2->name != NULL)
701 warning (_("Could not find specified archive member "
702 "for OSO name \"%s\""), oso->name);
704 ix = last_ix;
706 else
708 gdb_bfd_ref_ptr abfd (gdb_bfd_open (oso->name, gnutarget, -1));
709 if (abfd == NULL)
710 warning (_("`%s': can't open to read symbols: %s."), oso->name,
711 bfd_errmsg (bfd_get_error ()));
712 else
713 macho_add_oso_symfile (oso, abfd, oso->name, main_objfile,
714 symfile_flags);
716 ix++;
721 /* DSYM (debug symbols) files contain the debug info of an executable.
722 This is a separate file created by dsymutil(1) and is similar to debug
723 link feature on ELF.
724 DSYM files are located in a subdirectory. Append DSYM_SUFFIX to the
725 executable name and the executable base name to get the DSYM file name. */
726 #define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/"
728 /* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it
729 and return *FILENAMEP with its original filename.
730 Return NULL if no valid dsym file is found (FILENAMEP is not used in
731 such case). */
733 static gdb_bfd_ref_ptr
734 macho_check_dsym (struct objfile *objfile, std::string *filenamep)
736 size_t name_len = strlen (objfile_name (objfile));
737 size_t dsym_len = strlen (DSYM_SUFFIX);
738 const char *base_name = lbasename (objfile_name (objfile));
739 size_t base_len = strlen (base_name);
740 char *dsym_filename = (char *) alloca (name_len + dsym_len + base_len + 1);
741 bfd_mach_o_load_command *main_uuid;
742 bfd_mach_o_load_command *dsym_uuid;
744 strcpy (dsym_filename, objfile_name (objfile));
745 strcpy (dsym_filename + name_len, DSYM_SUFFIX);
746 strcpy (dsym_filename + name_len + dsym_len, base_name);
748 if (access (dsym_filename, R_OK) != 0)
749 return NULL;
751 if (bfd_mach_o_lookup_command (objfile->obfd,
752 BFD_MACH_O_LC_UUID, &main_uuid) == 0)
754 warning (_("can't find UUID in %s"), objfile_name (objfile));
755 return NULL;
757 gdb_bfd_ref_ptr dsym_bfd (gdb_bfd_openr (dsym_filename, gnutarget));
758 if (dsym_bfd == NULL)
760 warning (_("can't open dsym file %s"), dsym_filename);
761 return NULL;
764 if (!bfd_check_format (dsym_bfd.get (), bfd_object))
766 warning (_("bad dsym file format: %s"), bfd_errmsg (bfd_get_error ()));
767 return NULL;
770 if (bfd_mach_o_lookup_command (dsym_bfd.get (),
771 BFD_MACH_O_LC_UUID, &dsym_uuid) == 0)
773 warning (_("can't find UUID in %s"), dsym_filename);
774 return NULL;
776 if (memcmp (dsym_uuid->command.uuid.uuid, main_uuid->command.uuid.uuid,
777 sizeof (main_uuid->command.uuid.uuid)))
779 warning (_("dsym file UUID doesn't match the one in %s"),
780 objfile_name (objfile));
781 return NULL;
783 *filenamep = std::string (dsym_filename);
784 return dsym_bfd;
787 static void
788 macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
790 bfd *abfd = objfile->obfd;
791 long storage_needed;
792 std::vector<oso_el> oso_vector;
793 /* We have to hold on to the symbol table until the call to
794 macho_symfile_read_all_oso at the end of this function. */
795 gdb::def_vector<asymbol *> symbol_table;
797 /* Get symbols from the symbol table only if the file is an executable.
798 The symbol table of object files is not relocated and is expected to
799 be in the executable. */
800 if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC))
802 std::string dsym_filename;
804 /* Process the normal symbol table first. */
805 storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
806 if (storage_needed < 0)
807 error (_("Can't read symbols from %s: %s"),
808 bfd_get_filename (objfile->obfd),
809 bfd_errmsg (bfd_get_error ()));
811 if (storage_needed > 0)
813 long symcount;
815 symbol_table.resize (storage_needed / sizeof (asymbol *));
817 minimal_symbol_reader reader (objfile);
819 symcount = bfd_canonicalize_symtab (objfile->obfd,
820 symbol_table.data ());
822 if (symcount < 0)
823 error (_("Can't read symbols from %s: %s"),
824 bfd_get_filename (objfile->obfd),
825 bfd_errmsg (bfd_get_error ()));
827 macho_symtab_read (reader, objfile, symcount, symbol_table.data (),
828 &oso_vector);
830 reader.install ();
833 /* Try to read .eh_frame / .debug_frame. */
834 /* First, locate these sections. We ignore the result status
835 as it only checks for debug info. */
836 dwarf2_has_info (objfile, NULL);
837 dwarf2_build_frame_info (objfile);
839 /* Check for DSYM file. */
840 gdb_bfd_ref_ptr dsym_bfd (macho_check_dsym (objfile, &dsym_filename));
841 if (dsym_bfd != NULL)
843 struct bfd_section *asect, *dsect;
845 if (mach_o_debug_level > 0)
846 printf_unfiltered (_("dsym file found\n"));
848 /* Set dsym section size. */
849 for (asect = objfile->obfd->sections, dsect = dsym_bfd->sections;
850 asect && dsect;
851 asect = asect->next, dsect = dsect->next)
853 if (strcmp (asect->name, dsect->name) != 0)
854 break;
855 bfd_set_section_size (dsect, bfd_section_size (asect));
858 /* Add the dsym file as a separate file. */
859 symbol_file_add_separate (dsym_bfd.get (), dsym_filename.c_str (),
860 symfile_flags, objfile);
862 /* Don't try to read dwarf2 from main file or shared libraries. */
863 return;
867 if (dwarf2_has_info (objfile, NULL))
869 /* DWARF 2 sections */
870 dwarf2_build_psymtabs (objfile);
873 /* Then the oso. */
874 if (!oso_vector.empty ())
875 macho_symfile_read_all_oso (&oso_vector, objfile, symfile_flags);
878 static bfd_byte *
879 macho_symfile_relocate (struct objfile *objfile, asection *sectp,
880 bfd_byte *buf)
882 bfd *abfd = objfile->obfd;
884 /* We're only interested in sections with relocation
885 information. */
886 if ((sectp->flags & SEC_RELOC) == 0)
887 return NULL;
889 if (mach_o_debug_level > 0)
890 printf_unfiltered (_("Relocate section '%s' of %s\n"),
891 sectp->name, objfile_name (objfile));
893 return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
896 static void
897 macho_symfile_finish (struct objfile *objfile)
901 static void
902 macho_symfile_offsets (struct objfile *objfile,
903 const section_addr_info &addrs)
905 unsigned int i;
906 struct obj_section *osect;
908 /* Allocate section_offsets. */
909 objfile->section_offsets.assign (bfd_count_sections (objfile->obfd), 0);
911 /* This code is run when we first add the objfile with
912 symfile_add_with_addrs_or_offsets, when "addrs" not "offsets" are
913 passed in. The place in symfile.c where the addrs are applied
914 depends on the addrs having section names. But in the dyld code
915 we build an anonymous array of addrs, so that code is a no-op.
916 Because of that, we have to apply the addrs to the sections here.
917 N.B. if an objfile slides after we've already created it, then it
918 goes through objfile_relocate. */
920 for (i = 0; i < addrs.size (); i++)
922 ALL_OBJFILE_OSECTIONS (objfile, osect)
924 const char *bfd_sect_name = osect->the_bfd_section->name;
926 if (bfd_sect_name == addrs[i].name)
928 obj_section_offset (osect) = addrs[i].addr;
929 break;
934 objfile->sect_index_text = 0;
936 ALL_OBJFILE_OSECTIONS (objfile, osect)
938 const char *bfd_sect_name = osect->the_bfd_section->name;
939 int sect_index = osect - objfile->sections;;
941 if (startswith (bfd_sect_name, "LC_SEGMENT."))
942 bfd_sect_name += 11;
943 if (strcmp (bfd_sect_name, "__TEXT") == 0
944 || strcmp (bfd_sect_name, "__TEXT.__text") == 0)
945 objfile->sect_index_text = sect_index;
949 static const struct sym_fns macho_sym_fns = {
950 macho_new_init, /* init anything gbl to entire symtab */
951 macho_symfile_init, /* read initial info, setup for sym_read() */
952 macho_symfile_read, /* read a symbol file into symtab */
953 NULL, /* sym_read_psymbols */
954 macho_symfile_finish, /* finished with file, cleanup */
955 macho_symfile_offsets, /* xlate external to internal form */
956 default_symfile_segments, /* Get segment information from a file. */
957 NULL,
958 macho_symfile_relocate, /* Relocate a debug section. */
959 NULL, /* sym_get_probes */
960 &psym_functions
963 void _initialize_machoread ();
964 void
965 _initialize_machoread ()
967 add_symtab_fns (bfd_target_mach_o_flavour, &macho_sym_fns);
969 add_setshow_zuinteger_cmd ("mach-o", class_obscure,
970 &mach_o_debug_level,
971 _("Set if printing Mach-O symbols processing."),
972 _("Show if printing Mach-O symbols processing."),
973 NULL, NULL, NULL,
974 &setdebuglist, &showdebuglist);