diff options
author | Tristan Gingold <gingold@adacore.com> | 2012-01-04 10:14:25 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2012-01-04 10:14:25 +0000 |
commit | aeefa1c9a50aac0036d605517255ef6d111d56f8 (patch) | |
tree | 59b54a6c5a639fd4d26ca5a5fd1de5c496096bed /bfd/mach-o.c | |
parent | fc55a902573b7f73d8f138b843f31f5adbe7331e (diff) | |
download | gdb-aeefa1c9a50aac0036d605517255ef6d111d56f8.zip gdb-aeefa1c9a50aac0036d605517255ef6d111d56f8.tar.gz gdb-aeefa1c9a50aac0036d605517255ef6d111d56f8.tar.bz2 |
bfd/
2012-01-04 Tristan Gingold <gingold@adacore.com>
* mach-o.c (bfd_mach_o_get_synthetic_symtab): Add comments.
Diffstat (limited to 'bfd/mach-o.c')
-rw-r--r-- | bfd/mach-o.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/bfd/mach-o.c b/bfd/mach-o.c index 57c37d8..ddc8944 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -651,6 +651,8 @@ bfd_mach_o_canonicalize_symtab (bfd *abfd, asymbol **alocation) return nsyms; } +/* Create synthetic symbols for indirect symbols. */ + long bfd_mach_o_get_synthetic_symtab (bfd *abfd, long symcount ATTRIBUTE_UNUSED, @@ -670,19 +672,23 @@ bfd_mach_o_get_synthetic_symtab (bfd *abfd, *ret = NULL; + /* Stop now if no symbols or no indirect symbols. */ if (dysymtab == NULL || symtab == NULL || symtab->symbols == NULL) return 0; if (dysymtab->nindirectsyms == 0) return 0; + /* We need to allocate a bfd symbol for every indirect symbol and to + allocate the memory for its name. */ count = dysymtab->nindirectsyms; size = count * sizeof (asymbol) + 1; for (j = 0; j < count; j++) { unsigned int isym = dysymtab->indirect_syms[j]; - + + /* Some indirect symbols are anonymous. */ if (isym < symtab->nsyms && symtab->symbols[isym].symbol.name) size += strlen (symtab->symbols[isym].symbol.name) + sizeof ("$stub"); } @@ -707,6 +713,7 @@ bfd_mach_o_get_synthetic_symtab (bfd *abfd, case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS: case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS: case BFD_MACH_O_S_SYMBOL_STUBS: + /* Only these sections have indirect symbols. */ first = sec->reserved1; last = first + bfd_mach_o_section_get_nbr_indirect (abfd, sec); addr = sec->addr; |