This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFA: Skip ARM ELF Mapping symbols when showing disassembly



It's at this point, things get weird.

BFD hands GDB a raw symbol table (ignoring coff m'kay) and then GDB implements the search algorithm. To implement a addr->attrib method, BFD's going to need a mechanism for searching GDB's symbol table and/or get at the underlying bfd symbol table.



But it still gets the symbol table via a bfd method, most likely bfd_slurp_symbol_table. On normal elf32 systems this is elf_slurp_symbol_table, but it doesn't have to be. The comment in that file reads:

  /* Read each raw ELF symbol, converting from external ELF form to
     internal ELF form, and then using the information to create a
     canonical bfd symbol table entry.

     Note that we allocate the initial bfd canonical symbol buffer
     based on a one-to-one mapping of the ELF symbols to canonical
     symbols.  We actually use all the ELF symbols, so there will be no
     space left over at the end.  When we have all the symbols, we
     build the caller's pointer vector.  */


Note that the caller ends up using the pointer vector to iterate over the symbols. What I'm suggesting is that on ARM, we replace elf_slurp_symbol_table with armelf_slurp_symbol_table, which does the same thing, but leaves the mapping symbols out of the caller's pointer vector. Any function using that routine will now see only real symbols; the mapping symbols have vanished entirely.

GDB still needs to hang onto the entire underling table so that the addr->type method has access to the information that it needs. Stripping that stuff out of the "pointer vector" would force GDB to slurp the table twice. (BFD doesn't keep an internal pointer to this table around).


Yep, that's another option. GDB seems to be doing far too much mid-level symbol manipulation at present, which certainly suggests that the abstraction is wrong somewhere.

Andrew




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]