Lines Matching refs:kci
1429 static struct phdr_data *kcore_copy_info__addnew(struct kcore_copy_info *kci, in kcore_copy_info__addnew() argument
1436 list_add_tail(&p->node, &kci->phdrs); in kcore_copy_info__addnew()
1441 static void kcore_copy__free_phdrs(struct kcore_copy_info *kci) in kcore_copy__free_phdrs() argument
1445 list_for_each_entry_safe(p, tmp, &kci->phdrs, node) { in kcore_copy__free_phdrs()
1451 static struct sym_data *kcore_copy__new_sym(struct kcore_copy_info *kci, in kcore_copy__new_sym() argument
1458 list_add_tail(&s->node, &kci->syms); in kcore_copy__new_sym()
1464 static void kcore_copy__free_syms(struct kcore_copy_info *kci) in kcore_copy__free_syms() argument
1468 list_for_each_entry_safe(s, tmp, &kci->syms, node) { in kcore_copy__free_syms()
1477 struct kcore_copy_info *kci = arg; in kcore_copy__process_kallsyms() local
1483 if (start > kci->last_module_symbol) in kcore_copy__process_kallsyms()
1484 kci->last_module_symbol = start; in kcore_copy__process_kallsyms()
1488 if (!kci->first_symbol || start < kci->first_symbol) in kcore_copy__process_kallsyms()
1489 kci->first_symbol = start; in kcore_copy__process_kallsyms()
1491 if (!kci->last_symbol || start > kci->last_symbol) in kcore_copy__process_kallsyms()
1492 kci->last_symbol = start; in kcore_copy__process_kallsyms()
1495 kci->stext = start; in kcore_copy__process_kallsyms()
1500 kci->etext = start; in kcore_copy__process_kallsyms()
1504 if (is_entry_trampoline(name) && !kcore_copy__new_sym(kci, start)) in kcore_copy__process_kallsyms()
1510 static int kcore_copy__parse_kallsyms(struct kcore_copy_info *kci, in kcore_copy__parse_kallsyms() argument
1520 if (kallsyms__parse(kallsyms_filename, kci, in kcore_copy__parse_kallsyms()
1531 struct kcore_copy_info *kci = arg; in kcore_copy__process_modules() local
1533 if (!kci->first_module || start < kci->first_module) in kcore_copy__process_modules()
1534 kci->first_module = start; in kcore_copy__process_modules()
1539 static int kcore_copy__parse_modules(struct kcore_copy_info *kci, in kcore_copy__parse_modules() argument
1549 if (modules__parse(modules_filename, kci, in kcore_copy__parse_modules()
1556 static int kcore_copy__map(struct kcore_copy_info *kci, u64 start, u64 end, in kcore_copy__map() argument
1567 return kcore_copy_info__addnew(kci, s, len, offset) ? 0 : -1; in kcore_copy__map()
1572 struct kcore_copy_info *kci = data; in kcore_copy__read_map() local
1576 if (kcore_copy__map(kci, start, end, pgoff, kci->stext, kci->etext)) in kcore_copy__read_map()
1579 if (kcore_copy__map(kci, start, end, pgoff, kci->first_module, in kcore_copy__read_map()
1580 kci->last_module_symbol)) in kcore_copy__read_map()
1583 list_for_each_entry(sdat, &kci->syms, node) { in kcore_copy__read_map()
1586 if (kcore_copy__map(kci, start, end, pgoff, s, s + len)) in kcore_copy__read_map()
1593 static int kcore_copy__read_maps(struct kcore_copy_info *kci, Elf *elf) in kcore_copy__read_maps() argument
1595 if (elf_read_maps(elf, true, kcore_copy__read_map, kci) < 0) in kcore_copy__read_maps()
1601 static void kcore_copy__find_remaps(struct kcore_copy_info *kci) in kcore_copy__find_remaps() argument
1606 if (!kci->stext) in kcore_copy__find_remaps()
1610 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__find_remaps()
1613 if (p->addr <= kci->stext && pend >= kci->stext) { in kcore_copy__find_remaps()
1625 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__find_remaps()
1636 static void kcore_copy__layout(struct kcore_copy_info *kci) in kcore_copy__layout() argument
1641 kcore_copy__find_remaps(kci); in kcore_copy__layout()
1643 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__layout()
1648 kci->phnum += 1; in kcore_copy__layout()
1651 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__layout()
1659 static int kcore_copy__calc_maps(struct kcore_copy_info *kci, const char *dir, in kcore_copy__calc_maps() argument
1662 if (kcore_copy__parse_kallsyms(kci, dir)) in kcore_copy__calc_maps()
1665 if (kcore_copy__parse_modules(kci, dir)) in kcore_copy__calc_maps()
1668 if (kci->stext) in kcore_copy__calc_maps()
1669 kci->stext = round_down(kci->stext, page_size); in kcore_copy__calc_maps()
1671 kci->stext = round_down(kci->first_symbol, page_size); in kcore_copy__calc_maps()
1673 if (kci->etext) { in kcore_copy__calc_maps()
1674 kci->etext = round_up(kci->etext, page_size); in kcore_copy__calc_maps()
1675 } else if (kci->last_symbol) { in kcore_copy__calc_maps()
1676 kci->etext = round_up(kci->last_symbol, page_size); in kcore_copy__calc_maps()
1677 kci->etext += page_size; in kcore_copy__calc_maps()
1680 kci->first_module = round_down(kci->first_module, page_size); in kcore_copy__calc_maps()
1682 if (kci->last_module_symbol) { in kcore_copy__calc_maps()
1683 kci->last_module_symbol = round_up(kci->last_module_symbol, in kcore_copy__calc_maps()
1685 kci->last_module_symbol += page_size; in kcore_copy__calc_maps()
1688 if (!kci->stext || !kci->etext) in kcore_copy__calc_maps()
1691 if (kci->first_module && !kci->last_module_symbol) in kcore_copy__calc_maps()
1694 if (kcore_copy__read_maps(kci, elf)) in kcore_copy__calc_maps()
1697 kcore_copy__layout(kci); in kcore_copy__calc_maps()
1824 struct kcore_copy_info kci = { .stext = 0, }; in kcore_copy() local
1829 INIT_LIST_HEAD(&kci.phdrs); in kcore_copy()
1830 INIT_LIST_HEAD(&kci.syms); in kcore_copy()
1844 if (kcore_copy__calc_maps(&kci, from_dir, kcore.elf)) in kcore_copy()
1850 if (kcore__copy_hdr(&kcore, &extract, kci.phnum)) in kcore_copy()
1854 gelf_fsize(extract.elf, ELF_T_PHDR, kci.phnum, EV_CURRENT); in kcore_copy()
1857 kcore_copy__for_each_phdr(&kci, p) { in kcore_copy()
1868 kcore_copy__for_each_phdr(&kci, p) { in kcore_copy()
1898 kcore_copy__free_phdrs(&kci); in kcore_copy()
1899 kcore_copy__free_syms(&kci); in kcore_copy()