#ifndef SYMFILTER_H #define SYMFILTER_H /* This file describes the interface for parsing the list of symbols. Currently, this is just a text file with each symbol on a separate line. We build an in-memory linked list of symbols out of this image. */ #include <stdio.h> #include <libelf.h> #include <gelf.h> #include <sys/types.h> #include <sys/stat.h> #include <libebl.h> /* defines bool */ typedef struct symfilter_list_t symfilter_list_t; struct symfilter_list_t { symfilter_list_t *next; const char *name; unsigned int len; /* strlen(name) */ Elf32_Word index; GElf_Sym symbol; }; typedef struct symfilter_t { int fd; /* symbol-filter-file descriptor */ off_t fsize; /* size of file */ void *mmap; /* symbol-fiter-file memory mapping */ section_info_t symtab; section_info_t hash; symfilter_list_t *symbols; /* The total number of symbols in the symfilter. */ unsigned int num_symbols; /* The total number of bytes occupied by the names of the symbols, including the terminating null characters. */ unsigned int total_name_length; bool *symbols_to_keep; /* must be the same as the number of symbols in the dynamic table! */ int num_symbols_to_keep; } symfilter_t; void build_symfilter(const char *name, Elf *elf, symfilter_t *filter, off_t); void destroy_symfilter(symfilter_t *); #endif/*SYMFILTER_H*/