Lines Matching refs:entry

70   MapEntry* entry = new MapEntry(start, end, offset, name, name_len, flags);  in parse_line()  local
73 entry->load_bias = 0; in parse_line()
74 entry->init = true; in parse_line()
75 entry->valid = false; in parse_line()
77 return entry; in parse_line()
81 static inline bool get_val(MapEntry* entry, uintptr_t addr, T* store) { in get_val() argument
82 if (!(entry->flags & PROT_READ) || addr < entry->start || addr + sizeof(T) > entry->end) { in get_val()
93 static bool valid_elf(MapEntry* entry) { in valid_elf() argument
94 uintptr_t addr = entry->start; in valid_elf()
96 if (__builtin_add_overflow(addr, SELFMAG, &end) || end >= entry->end) { in valid_elf()
103 static void read_loadbias(MapEntry* entry) { in read_loadbias() argument
104 entry->load_bias = 0; in read_loadbias()
105 uintptr_t addr = entry->start; in read_loadbias()
107 if (!get_val<ElfW(Half)>(entry, addr + offsetof(ElfW(Ehdr), e_phnum), &ehdr.e_phnum)) { in read_loadbias()
110 if (!get_val<ElfW(Off)>(entry, addr + offsetof(ElfW(Ehdr), e_phoff), &ehdr.e_phoff)) { in read_loadbias()
116 if (!get_val<ElfW(Word)>(entry, addr + offsetof(ElfW(Phdr), p_type), &phdr.p_type)) { in read_loadbias()
119 if (!get_val<ElfW(Word)>(entry, addr + offsetof(ElfW(Phdr), p_flags), &phdr.p_flags)) { in read_loadbias()
122 if (!get_val<ElfW(Off)>(entry, addr + offsetof(ElfW(Phdr), p_offset), &phdr.p_offset)) { in read_loadbias()
126 if (!get_val<ElfW(Addr)>(entry, addr + offsetof(ElfW(Phdr), p_vaddr), &phdr.p_vaddr)) { in read_loadbias()
129 entry->load_bias = phdr.p_vaddr - phdr.p_offset; in read_loadbias()
136 static void inline init(MapEntry* entry) { in init() argument
137 if (entry->init) { in init()
140 entry->init = true; in init()
141 if (valid_elf(entry)) { in init()
142 entry->valid = true; in init()
143 read_loadbias(entry); in init()
155 MapEntry* entry = parse_line(buffer.data()); in ReadMaps() local
156 if (entry == nullptr) { in ReadMaps()
161 auto it = entries_.find(entry); in ReadMaps()
163 entries_.insert(entry); in ReadMaps()
165 delete entry; in ReadMaps()
173 for (auto* entry : entries_) { in ~MapData() local
174 delete entry; in ~MapData()
194 MapEntry* entry = *it; in find() local
195 init(entry); in find()
200 if (!entry->valid && it != entries_.begin()) { in find()
202 if (prev_entry->flags == PROT_READ && prev_entry->offset < entry->offset && in find()
203 prev_entry->name == entry->name) { in find()
207 entry->elf_start_offset = prev_entry->offset; in find()
208 *rel_pc = pc - entry->start + entry->offset + prev_entry->load_bias; in find()
209 return entry; in find()
213 *rel_pc = pc - entry->start + entry->load_bias; in find()
215 return entry; in find()