Lines Matching defs:ei

47 #define GET_FIELD(ei, offset, struct_name, elf_struct, field, check_cached) \
51 ei, ei->u.memory.start + offset + offsetof(struct_name, field), \
58 #define GET_EHDR_FIELD(ei, ehdr, field, check_cached) \
59 GET_FIELD(ei, 0, Elf_W(Ehdr), ehdr, field, check_cached)
61 #define GET_PHDR_FIELD(ei, offset, phdr, field) \
62 GET_FIELD(ei, offset, Elf_W(Phdr), phdr, field, false)
64 #define GET_SHDR_FIELD(ei, offset, shdr, field) \
65 GET_FIELD(ei, offset, Elf_W(Shdr), shdr, field, false)
67 #define GET_SYM_FIELD(ei, offset, sym, field) \
68 GET_FIELD(ei, offset, Elf_W(Sym), sym, field, false)
70 #define GET_DYN_FIELD(ei, offset, dyn, field) \
71 GET_FIELD(ei, offset, Elf_W(Dyn), dyn, field, false)
78 unw_addr_space_t as, struct elf_image* ei, unsigned long segbase,
81 extern bool elf_w (get_load_base) (struct elf_image* ei, unw_word_t mapoff, unw_word_t* load_base);
84 struct elf_image* ei, unw_word_t addr, uint8_t* buffer, size_t bytes, bool string_read);
89 extern bool elf_w (find_section_mapped) (struct elf_image *ei, const char* name,
92 static inline bool elf_w (valid_object_mapped) (struct elf_image* ei) {
93 if (ei->u.mapped.size <= EI_VERSION) {
97 uint8_t* e_ident = (uint8_t*) ei->u.mapped.image;
98 return (memcmp (ei->u.mapped.image, ELFMAG, SELFMAG) == 0
103 static inline bool elf_w (valid_object_memory) (struct elf_image* ei) {
105 uintptr_t start = ei->u.memory.start;
106 if (SELFMAG != elf_w (memory_read) (ei, start, e_ident, SELFMAG, false)) {
114 ei, start + SELFMAG, e_ident + SELFMAG, EI_NIDENT - SELFMAG, false)) {
121 static inline bool elf_map_image (struct elf_image* ei, const char* path) {
135 ei->u.mapped.size = stat.st_size;
136 ei->u.mapped.image = mmap (NULL, ei->u.mapped.size, PROT_READ, MAP_PRIVATE, fd, 0);
138 if (ei->u.mapped.image == MAP_FAILED) {
142 ei->valid = elf_w (valid_object_mapped) (ei);
143 if (!ei->valid) {
144 munmap (ei->u.mapped.image, ei->u.mapped.size);
148 ei->mapped = true;
150 ei->load_attempted = true;
174 if (!map->ei.load_attempted) {
175 map->ei.load_attempted = true;
177 if (!elf_map_image (&map->ei, map->path)) {
181 map->ei.u.memory.start = map->start;
182 map->ei.u.memory.end = map->end;
183 map->ei.u.memory.as = as;
184 map->ei.u.memory.as_arg = as_arg;
185 map->ei.valid = elf_w (valid_object_memory) (&map->ei);
199 if (elf_w (find_section_mapped) (&map->ei, ".gnu_debugdata", &compressed,
202 (uint8_t**) &map->ei.mini_debug_info_data, &map->ei.mini_debug_info_size)) {
205 map->ei.mini_debug_info_data = NULL;
206 map->ei.mini_debug_info_size = 0;
211 if (map->ei.valid && elf_w (get_load_base) (&map->ei, map->offset, &load_base)) {
214 } else if (map->ei.valid && !map->ei.mapped && map->ei.u.memory.as != as) {
218 map->ei.u.memory.as = as;
221 return map->ei.valid;