On Wed, 16 Jan 2013 15:54:13 +0100, Mark Wielaard wrote:
> + /* All local symbols should come before all global symbols. If we
> + have an auxiliary table make sure all the main locals come first
> + and all main globals come last. And skip the auxiliary table
> + zero undefined entry. */
> GElf_Word shndx;
> - sym = gelf_getsymshndx (mod->symdata, mod->symxndxdata, ndx, sym, &shndx);
> + int tndx = ndx;
> + struct dwfl_file *file;
> + Elf_Data *symdata;
> + Elf_Data *symxndxdata;
> + Elf_Data *symstrdata;
> + if (mod->aux_symdata == NULL
> + || ndx < mod->first_global)
> + {
> + /* main symbol table (locals). */
> + tndx = ndx;
> + file = mod->symfile;
> + symdata = mod->symdata;
> + symxndxdata = mod->symxndxdata;
> + symstrdata = mod->symstrdata;
> + }
> + else if ((size_t) ndx < mod->first_global + mod->aux_syments)
> + {
> + /* aux symbol table. */
> + tndx = ndx - mod->first_global + 1;
> + file = &mod->aux_sym;
> + symdata = mod->aux_symdata;
> + symxndxdata = mod->aux_symxndxdata;
> + symstrdata = mod->aux_symstrdata;
> + }
> + else
> + {
> + /* main symbol table (globals). */
> + tndx = ndx - mod->aux_syments;
> + file = mod->symfile;
> + symdata = mod->symdata;
> + symxndxdata = mod->symxndxdata;
> + symstrdata = mod->symstrdata;
> + }
As elfutils is already careful with choosing symbols order in
dwfl_module_addrsym.c couldn't the aux-symtab local symbols have the same
preference to the main local symbols like the global symbols have?
I do not find breaking the symbols order is worth the small simplification of
the code.
Thanks,
Jan
_______________________________________________
elfutils-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/elfutils-devel