Lines Matching refs:kci
1474 static struct phdr_data *kcore_copy_info__addnew(struct kcore_copy_info *kci, in kcore_copy_info__addnew() argument
1481 list_add_tail(&p->node, &kci->phdrs); in kcore_copy_info__addnew()
1486 static void kcore_copy__free_phdrs(struct kcore_copy_info *kci) in kcore_copy__free_phdrs() argument
1490 list_for_each_entry_safe(p, tmp, &kci->phdrs, node) { in kcore_copy__free_phdrs()
1496 static struct sym_data *kcore_copy__new_sym(struct kcore_copy_info *kci, in kcore_copy__new_sym() argument
1503 list_add_tail(&s->node, &kci->syms); in kcore_copy__new_sym()
1509 static void kcore_copy__free_syms(struct kcore_copy_info *kci) in kcore_copy__free_syms() argument
1513 list_for_each_entry_safe(s, tmp, &kci->syms, node) { in kcore_copy__free_syms()
1522 struct kcore_copy_info *kci = arg; in kcore_copy__process_kallsyms() local
1528 if (start > kci->last_module_symbol) in kcore_copy__process_kallsyms()
1529 kci->last_module_symbol = start; in kcore_copy__process_kallsyms()
1533 if (!kci->first_symbol || start < kci->first_symbol) in kcore_copy__process_kallsyms()
1534 kci->first_symbol = start; in kcore_copy__process_kallsyms()
1536 if (!kci->last_symbol || start > kci->last_symbol) in kcore_copy__process_kallsyms()
1537 kci->last_symbol = start; in kcore_copy__process_kallsyms()
1540 kci->stext = start; in kcore_copy__process_kallsyms()
1545 kci->etext = start; in kcore_copy__process_kallsyms()
1549 if (is_entry_trampoline(name) && !kcore_copy__new_sym(kci, start)) in kcore_copy__process_kallsyms()
1555 static int kcore_copy__parse_kallsyms(struct kcore_copy_info *kci, in kcore_copy__parse_kallsyms() argument
1565 if (kallsyms__parse(kallsyms_filename, kci, in kcore_copy__parse_kallsyms()
1576 struct kcore_copy_info *kci = arg; in kcore_copy__process_modules() local
1578 if (!kci->first_module || start < kci->first_module) in kcore_copy__process_modules()
1579 kci->first_module = start; in kcore_copy__process_modules()
1584 static int kcore_copy__parse_modules(struct kcore_copy_info *kci, in kcore_copy__parse_modules() argument
1594 if (modules__parse(modules_filename, kci, in kcore_copy__parse_modules()
1601 static int kcore_copy__map(struct kcore_copy_info *kci, u64 start, u64 end, in kcore_copy__map() argument
1612 return kcore_copy_info__addnew(kci, s, len, offset) ? 0 : -1; in kcore_copy__map()
1617 struct kcore_copy_info *kci = data; in kcore_copy__read_map() local
1621 if (kcore_copy__map(kci, start, end, pgoff, kci->stext, kci->etext)) in kcore_copy__read_map()
1624 if (kcore_copy__map(kci, start, end, pgoff, kci->first_module, in kcore_copy__read_map()
1625 kci->last_module_symbol)) in kcore_copy__read_map()
1628 list_for_each_entry(sdat, &kci->syms, node) { in kcore_copy__read_map()
1631 if (kcore_copy__map(kci, start, end, pgoff, s, s + len)) in kcore_copy__read_map()
1638 static int kcore_copy__read_maps(struct kcore_copy_info *kci, Elf *elf) in kcore_copy__read_maps() argument
1640 if (elf_read_maps(elf, true, kcore_copy__read_map, kci) < 0) in kcore_copy__read_maps()
1646 static void kcore_copy__find_remaps(struct kcore_copy_info *kci) in kcore_copy__find_remaps() argument
1651 if (!kci->stext) in kcore_copy__find_remaps()
1655 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__find_remaps()
1658 if (p->addr <= kci->stext && pend >= kci->stext) { in kcore_copy__find_remaps()
1670 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__find_remaps()
1681 static void kcore_copy__layout(struct kcore_copy_info *kci) in kcore_copy__layout() argument
1686 kcore_copy__find_remaps(kci); in kcore_copy__layout()
1688 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__layout()
1693 kci->phnum += 1; in kcore_copy__layout()
1696 kcore_copy__for_each_phdr(kci, p) { in kcore_copy__layout()
1704 static int kcore_copy__calc_maps(struct kcore_copy_info *kci, const char *dir, in kcore_copy__calc_maps() argument
1707 if (kcore_copy__parse_kallsyms(kci, dir)) in kcore_copy__calc_maps()
1710 if (kcore_copy__parse_modules(kci, dir)) in kcore_copy__calc_maps()
1713 if (kci->stext) in kcore_copy__calc_maps()
1714 kci->stext = round_down(kci->stext, page_size); in kcore_copy__calc_maps()
1716 kci->stext = round_down(kci->first_symbol, page_size); in kcore_copy__calc_maps()
1718 if (kci->etext) { in kcore_copy__calc_maps()
1719 kci->etext = round_up(kci->etext, page_size); in kcore_copy__calc_maps()
1720 } else if (kci->last_symbol) { in kcore_copy__calc_maps()
1721 kci->etext = round_up(kci->last_symbol, page_size); in kcore_copy__calc_maps()
1722 kci->etext += page_size; in kcore_copy__calc_maps()
1725 kci->first_module = round_down(kci->first_module, page_size); in kcore_copy__calc_maps()
1727 if (kci->last_module_symbol) { in kcore_copy__calc_maps()
1728 kci->last_module_symbol = round_up(kci->last_module_symbol, in kcore_copy__calc_maps()
1730 kci->last_module_symbol += page_size; in kcore_copy__calc_maps()
1733 if (!kci->stext || !kci->etext) in kcore_copy__calc_maps()
1736 if (kci->first_module && !kci->last_module_symbol) in kcore_copy__calc_maps()
1739 if (kcore_copy__read_maps(kci, elf)) in kcore_copy__calc_maps()
1742 kcore_copy__layout(kci); in kcore_copy__calc_maps()
1869 struct kcore_copy_info kci = { .stext = 0, }; in kcore_copy() local
1874 INIT_LIST_HEAD(&kci.phdrs); in kcore_copy()
1875 INIT_LIST_HEAD(&kci.syms); in kcore_copy()
1889 if (kcore_copy__calc_maps(&kci, from_dir, kcore.elf)) in kcore_copy()
1895 if (kcore__copy_hdr(&kcore, &extract, kci.phnum)) in kcore_copy()
1899 gelf_fsize(extract.elf, ELF_T_PHDR, kci.phnum, EV_CURRENT); in kcore_copy()
1902 kcore_copy__for_each_phdr(&kci, p) { in kcore_copy()
1913 kcore_copy__for_each_phdr(&kci, p) { in kcore_copy()
1943 kcore_copy__free_phdrs(&kci); in kcore_copy()
1944 kcore_copy__free_syms(&kci); in kcore_copy()