51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
#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*/
|