Lines Matching refs:kci
2091 static struct phdr_data *kcore_copy_info__addnew(struct kcore_copy_info *kci,
2098 list_add_tail(&p->node, &kci->phdrs);
2103 static void kcore_copy__free_phdrs(struct kcore_copy_info *kci)
2107 list_for_each_entry_safe(p, tmp, &kci->phdrs, node) {
2113 static struct sym_data *kcore_copy__new_sym(struct kcore_copy_info *kci,
2120 list_add_tail(&s->node, &kci->syms);
2126 static void kcore_copy__free_syms(struct kcore_copy_info *kci)
2130 list_for_each_entry_safe(s, tmp, &kci->syms, node) {
2139 struct kcore_copy_info *kci = arg;
2145 if (!kci->first_module_symbol || start < kci->first_module_symbol)
2146 kci->first_module_symbol = start;
2147 if (start > kci->last_module_symbol)
2148 kci->last_module_symbol = start;
2152 if (!kci->first_symbol || start < kci->first_symbol)
2153 kci->first_symbol = start;
2155 if (!kci->last_symbol || start > kci->last_symbol)
2156 kci->last_symbol = start;
2159 kci->stext = start;
2164 kci->etext = start;
2168 if (is_entry_trampoline(name) && !kcore_copy__new_sym(kci, start))
2174 static int kcore_copy__parse_kallsyms(struct kcore_copy_info *kci,
2184 if (kallsyms__parse(kallsyms_filename, kci,
2195 struct kcore_copy_info *kci = arg;
2197 if (!kci->first_module || start < kci->first_module)
2198 kci->first_module = start;
2203 static int kcore_copy__parse_modules(struct kcore_copy_info *kci,
2213 if (modules__parse(modules_filename, kci,
2220 static int kcore_copy__map(struct kcore_copy_info *kci, u64 start, u64 end,
2231 return kcore_copy_info__addnew(kci, s, len, offset) ? 0 : -1;
2236 struct kcore_copy_info *kci = data;
2240 if (kcore_copy__map(kci, start, end, pgoff, kci->stext, kci->etext))
2243 if (kcore_copy__map(kci, start, end, pgoff, kci->first_module,
2244 kci->last_module_symbol))
2247 list_for_each_entry(sdat, &kci->syms, node) {
2250 if (kcore_copy__map(kci, start, end, pgoff, s, s + len))
2257 static int kcore_copy__read_maps(struct kcore_copy_info *kci, Elf *elf)
2259 if (elf_read_maps(elf, true, kcore_copy__read_map, kci) < 0)
2265 static void kcore_copy__find_remaps(struct kcore_copy_info *kci)
2270 if (!kci->stext)
2274 kcore_copy__for_each_phdr(kci, p) {
2277 if (p->addr <= kci->stext && pend >= kci->stext) {
2289 kcore_copy__for_each_phdr(kci, p) {
2300 static void kcore_copy__layout(struct kcore_copy_info *kci)
2305 kcore_copy__find_remaps(kci);
2307 kcore_copy__for_each_phdr(kci, p) {
2312 kci->phnum += 1;
2315 kcore_copy__for_each_phdr(kci, p) {
2323 static int kcore_copy__calc_maps(struct kcore_copy_info *kci, const char *dir,
2326 if (kcore_copy__parse_kallsyms(kci, dir))
2329 if (kcore_copy__parse_modules(kci, dir))
2332 if (kci->stext)
2333 kci->stext = round_down(kci->stext, page_size);
2335 kci->stext = round_down(kci->first_symbol, page_size);
2337 if (kci->etext) {
2338 kci->etext = round_up(kci->etext, page_size);
2339 } else if (kci->last_symbol) {
2340 kci->etext = round_up(kci->last_symbol, page_size);
2341 kci->etext += page_size;
2344 if (kci->first_module_symbol &&
2345 (!kci->first_module || kci->first_module_symbol < kci->first_module))
2346 kci->first_module = kci->first_module_symbol;
2348 kci->first_module = round_down(kci->first_module, page_size);
2350 if (kci->last_module_symbol) {
2351 kci->last_module_symbol = round_up(kci->last_module_symbol,
2353 kci->last_module_symbol += page_size;
2356 if (!kci->stext || !kci->etext)
2359 if (kci->first_module && !kci->last_module_symbol)
2362 if (kcore_copy__read_maps(kci, elf))
2365 kcore_copy__layout(kci);
2492 struct kcore_copy_info kci = { .stext = 0, };
2497 INIT_LIST_HEAD(&kci.phdrs);
2498 INIT_LIST_HEAD(&kci.syms);
2512 if (kcore_copy__calc_maps(&kci, from_dir, kcore.elf))
2518 if (kcore__copy_hdr(&kcore, &extract, kci.phnum))
2522 gelf_fsize(extract.elf, ELF_T_PHDR, kci.phnum, EV_CURRENT);
2525 kcore_copy__for_each_phdr(&kci, p) {
2536 kcore_copy__for_each_phdr(&kci, p) {
2563 kcore_copy__free_phdrs(&kci);
2564 kcore_copy__free_syms(&kci);