/* * Copyright (C) 2015 Josh Poimboeuf <jpoimboe@redhat.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ #ifndef _OBJTOOL_ELF_H #define _OBJTOOL_ELF_H #include <stdio.h> #include <gelf.h> #include <linux/list.h> #include <linux/hashtable.h> #ifdef LIBELF_USE_DEPRECATED # define elf_getshdrnum elf_getshnum # define elf_getshdrstrndx elf_getshstrndx #endif struct section { struct list_head list; GElf_Shdr sh; struct list_head symbol_list; DECLARE_HASHTABLE(symbol_hash, 8); struct list_head rela_list; DECLARE_HASHTABLE(rela_hash, 16); struct section *base, *rela; struct symbol *sym; Elf_Data *elf_data; char *name; int idx; unsigned long data; unsigned int len; }; struct symbol { struct list_head list; struct hlist_node hash; GElf_Sym sym; struct section *sec; char *name; unsigned int idx; unsigned char bind, type; unsigned long offset; unsigned int len; }; struct rela { struct list_head list; struct hlist_node hash; GElf_Rela rela; struct symbol *sym; unsigned int type; unsigned long offset; int addend; }; struct elf { Elf *elf; GElf_Ehdr ehdr; int fd; char *name; struct list_head sections; DECLARE_HASHTABLE(rela_hash, 16); }; struct elf *elf_open(const char *name); struct section *find_section_by_name(struct elf *elf, const char *name); struct symbol *find_symbol_by_offset(struct section *sec, unsigned long offset); struct rela *find_rela_by_dest(struct section *sec, unsigned long offset); struct rela *find_rela_by_dest_range(struct section *sec, unsigned long offset, unsigned int len); struct symbol *find_containing_func(struct section *sec, unsigned long offset); void elf_close(struct elf *elf); #endif /* _OBJTOOL_ELF_H */ perf/Documentation/perf-buildid-list.txt'> <input type='hidden' name='id' value='9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'>tools</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'>perf</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/Documentation?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'>Documentation</a>/<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/Documentation/perf-buildid-list.txt?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4'>perf-buildid-list.txt</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/tools/perf/Documentation/perf-buildid-list.txt?id=9303ab2b3402b60f6c39abfdbfa4ce00fce8bee4&showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>