1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright (C) 2015 Josh Poimboeuf <jpoimboe@redhat.com>
11 #include <linux/list.h>
12 #include <linux/hashtable.h>
14 #ifdef LIBELF_USE_DEPRECATED
15 # define elf_getshdrnum elf_getshnum
16 # define elf_getshdrstrndx elf_getshstrndx
20 * Fallback for systems without this "read, mmaping if possible" cmd.
22 #ifndef ELF_C_READ_MMAP
23 #define ELF_C_READ_MMAP ELF_C_READ
27 struct list_head list
;
29 struct list_head symbol_list
;
30 DECLARE_HASHTABLE(symbol_hash
, 8);
31 struct list_head rela_list
;
32 DECLARE_HASHTABLE(rela_hash
, 16);
33 struct section
*base
, *rela
;
39 bool changed
, text
, rodata
;
43 struct list_head list
;
44 struct hlist_node hash
;
49 unsigned char bind
, type
;
52 struct symbol
*pfunc
, *cfunc
, *alias
;
57 struct list_head list
;
58 struct hlist_node hash
;
65 bool jump_table_start
;
73 struct list_head sections
;
74 DECLARE_HASHTABLE(rela_hash
, 16);
78 struct elf
*elf_read(const char *name
, int flags
);
79 struct section
*find_section_by_name(struct elf
*elf
, const char *name
);
80 struct symbol
*find_symbol_by_offset(struct section
*sec
, unsigned long offset
);
81 struct symbol
*find_symbol_by_name(struct elf
*elf
, const char *name
);
82 struct symbol
*find_symbol_containing(struct section
*sec
, unsigned long offset
);
83 struct rela
*find_rela_by_dest(struct section
*sec
, unsigned long offset
);
84 struct rela
*find_rela_by_dest_range(struct section
*sec
, unsigned long offset
,
86 struct symbol
*find_containing_func(struct section
*sec
, unsigned long offset
);
87 struct section
*elf_create_section(struct elf
*elf
, const char *name
, size_t
89 struct section
*elf_create_rela_section(struct elf
*elf
, struct section
*base
);
90 int elf_rebuild_rela_section(struct section
*sec
);
91 int elf_write(struct elf
*elf
);
92 void elf_close(struct elf
*elf
);
94 #define for_each_sec(file, sec) \
95 list_for_each_entry(sec, &file->elf->sections, list)
97 #endif /* _OBJTOOL_ELF_H */