elf_symtab: Allow passing the name of the symtab to be parsed
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
33cec4c457
commit
ba47890b18
19
elf_symtab.c
19
elf_symtab.c
|
@ -17,10 +17,13 @@
|
|||
#define HASHSYMS__BITS 8
|
||||
#define HASHSYMS__SIZE (1UL << HASHSYMS__BITS)
|
||||
|
||||
struct elf_symtab *elf_symtab__new(Elf *elf, GElf_Ehdr *ehdr)
|
||||
struct elf_symtab *elf_symtab__new(const char *name, Elf *elf, GElf_Ehdr *ehdr)
|
||||
{
|
||||
if (name == NULL)
|
||||
name = ".symtab";
|
||||
|
||||
GElf_Shdr shdr;
|
||||
Elf_Scn *sec = elf_section_by_name(elf, ehdr, &shdr, ".symtab");
|
||||
Elf_Scn *sec = elf_section_by_name(elf, ehdr, &shdr, name);
|
||||
|
||||
if (sec == NULL)
|
||||
return NULL;
|
||||
|
@ -32,21 +35,27 @@ struct elf_symtab *elf_symtab__new(Elf *elf, GElf_Ehdr *ehdr)
|
|||
if (self == NULL)
|
||||
return NULL;
|
||||
|
||||
self->name = strdup(name);
|
||||
if (self->name == NULL)
|
||||
goto out_delete;
|
||||
|
||||
self->syms = elf_getdata(sec, NULL);
|
||||
if (self->syms == NULL)
|
||||
goto out_delete;
|
||||
goto out_free_name;
|
||||
|
||||
sec = elf_getscn(elf, shdr.sh_link);
|
||||
if (sec == NULL)
|
||||
goto out_delete;
|
||||
goto out_free_name;
|
||||
|
||||
self->symstrs = elf_getdata(sec, NULL);
|
||||
if (self->symstrs == NULL)
|
||||
goto out_delete;
|
||||
goto out_free_name;
|
||||
|
||||
self->nr_syms = shdr.sh_size / shdr.sh_entsize;
|
||||
|
||||
return self;
|
||||
out_free_name:
|
||||
free(self->name);
|
||||
out_delete:
|
||||
free(self);
|
||||
return NULL;
|
||||
|
|
|
@ -18,9 +18,10 @@ struct elf_symtab {
|
|||
uint32_t nr_syms;
|
||||
Elf_Data *syms;
|
||||
Elf_Data *symstrs;
|
||||
char *name;
|
||||
};
|
||||
|
||||
struct elf_symtab *elf_symtab__new(Elf *elf, GElf_Ehdr *ehdr);
|
||||
struct elf_symtab *elf_symtab__new(const char *name, Elf *elf, GElf_Ehdr *ehdr);
|
||||
void elf_symtab__delete(struct elf_symtab *self);
|
||||
|
||||
static inline uint32_t elf_symtab__nr_symbols(const struct elf_symtab *self)
|
||||
|
|
Loading…
Reference in New Issue