summaryrefslogtreecommitdiffstats
path: root/tools/apriori/source.c
blob: 69c57c774654b3eeb25456e69c573c62366d97c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <source.h>

void find_section(source_t *source, Elf64_Addr address,
                  Elf_Scn **scn, 
                  GElf_Shdr *shdr, 
                  Elf_Data **data)
{
    range_t *range = find_range(source->sorted_sections, address);
    FAILIF(NULL == range, 
           "Cannot match address %lld to any range in [%s]!\n",
           address,
           source->name);
    *scn = (Elf_Scn *)range->user;
    ASSERT(*scn);
    FAILIF_LIBELF(NULL == gelf_getshdr(*scn, shdr), gelf_getshdr);
    *data = elf_getdata(*scn, NULL);
    FAILIF_LIBELF(NULL == *data, elf_getdata);
}