Lines Matching refs:kci
1615 static struct phdr_data *kcore_copy_info__addnew(struct kcore_copy_info *kci,
1622 list_add_tail(&p->node, &kci->phdrs);
1627 static void kcore_copy__free_phdrs(struct kcore_copy_info *kci)
1631 list_for_each_entry_safe(p, tmp, &kci->phdrs, node) {
1637 static struct sym_data *kcore_copy__new_sym(struct kcore_copy_info *kci,
1644 list_add_tail(&s->node, &kci->syms);
1650 static void kcore_copy__free_syms(struct kcore_copy_info *kci)
1654 list_for_each_entry_safe(s, tmp, &kci->syms, node) {
1663 struct kcore_copy_info *kci = arg;
1669 if (!kci->first_module_symbol || start < kci->first_module_symbol)
1670 kci->first_module_symbol = start;
1671 if (start > kci->last_module_symbol)
1672 kci->last_module_symbol = start;
1676 if (!kci->first_symbol || start < kci->first_symbol)
1677 kci->first_symbol = start;
1679 if (!kci->last_symbol || start > kci->last_symbol)
1680 kci->last_symbol = start;
1683 kci->stext = start;
1688 kci->etext = start;
1692 if (is_entry_trampoline(name) && !kcore_copy__new_sym(kci, start))
1698 static int kcore_copy__parse_kallsyms(struct kcore_copy_info *kci,
1708 if (kallsyms__parse(kallsyms_filename, kci,
1719 struct kcore_copy_info *kci = arg;
1721 if (!kci->first_module || start < kci->first_module)
1722 kci->first_module = start;
1727 static int kcore_copy__parse_modules(struct kcore_copy_info *kci,
1737 if (modules__parse(modules_filename, kci,
1744 static int kcore_copy__map(struct kcore_copy_info *kci, u64 start, u64 end,
1755 return kcore_copy_info__addnew(kci, s, len, offset) ? 0 : -1;
1760 struct kcore_copy_info *kci = data;
1764 if (kcore_copy__map(kci, start, end, pgoff, kci->stext, kci->etext))
1767 if (kcore_copy__map(kci, start, end, pgoff, kci->first_module,
1768 kci->last_module_symbol))
1771 list_for_each_entry(sdat, &kci->syms, node) {
1774 if (kcore_copy__map(kci, start, end, pgoff, s, s + len))
1781 static int kcore_copy__read_maps(struct kcore_copy_info *kci, Elf *elf)
1783 if (elf_read_maps(elf, true, kcore_copy__read_map, kci) < 0)
1789 static void kcore_copy__find_remaps(struct kcore_copy_info *kci)
1794 if (!kci->stext)
1798 kcore_copy__for_each_phdr(kci, p) {
1801 if (p->addr <= kci->stext && pend >= kci->stext) {
1813 kcore_copy__for_each_phdr(kci, p) {
1824 static void kcore_copy__layout(struct kcore_copy_info *kci)
1829 kcore_copy__find_remaps(kci);
1831 kcore_copy__for_each_phdr(kci, p) {
1836 kci->phnum += 1;
1839 kcore_copy__for_each_phdr(kci, p) {
1847 static int kcore_copy__calc_maps(struct kcore_copy_info *kci, const char *dir,
1850 if (kcore_copy__parse_kallsyms(kci, dir))
1853 if (kcore_copy__parse_modules(kci, dir))
1856 if (kci->stext)
1857 kci->stext = round_down(kci->stext, page_size);
1859 kci->stext = round_down(kci->first_symbol, page_size);
1861 if (kci->etext) {
1862 kci->etext = round_up(kci->etext, page_size);
1863 } else if (kci->last_symbol) {
1864 kci->etext = round_up(kci->last_symbol, page_size);
1865 kci->etext += page_size;
1868 if (kci->first_module_symbol &&
1869 (!kci->first_module || kci->first_module_symbol < kci->first_module))
1870 kci->first_module = kci->first_module_symbol;
1872 kci->first_module = round_down(kci->first_module, page_size);
1874 if (kci->last_module_symbol) {
1875 kci->last_module_symbol = round_up(kci->last_module_symbol,
1877 kci->last_module_symbol += page_size;
1880 if (!kci->stext || !kci->etext)
1883 if (kci->first_module && !kci->last_module_symbol)
1886 if (kcore_copy__read_maps(kci, elf))
1889 kcore_copy__layout(kci);
2016 struct kcore_copy_info kci = { .stext = 0, };
2021 INIT_LIST_HEAD(&kci.phdrs);
2022 INIT_LIST_HEAD(&kci.syms);
2036 if (kcore_copy__calc_maps(&kci, from_dir, kcore.elf))
2042 if (kcore__copy_hdr(&kcore, &extract, kci.phnum))
2046 gelf_fsize(extract.elf, ELF_T_PHDR, kci.phnum, EV_CURRENT);
2049 kcore_copy__for_each_phdr(&kci, p) {
2060 kcore_copy__for_each_phdr(&kci, p) {
2087 kcore_copy__free_phdrs(&kci);
2088 kcore_copy__free_syms(&kci);