Lines Matching refs:patched_sym
502 static int clone_sym_relocs(struct elfs *e, struct symbol *patched_sym);
504 static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym, in __clone_symbol() argument
511 if (data_too && !is_undef_sym(patched_sym)) { in __clone_symbol()
512 struct section *patched_sec = patched_sym->sec; in __clone_symbol()
525 if (is_string_sec(patched_sym->sec)) { in __clone_symbol()
533 if (!is_sec_sym(patched_sym)) in __clone_symbol()
536 if (patched_sym->len || is_sec_sym(patched_sym)) { in __clone_symbol()
541 if (patched_sym->sec->data->d_buf) in __clone_symbol()
542 data = patched_sym->sec->data->d_buf + patched_sym->offset; in __clone_symbol()
544 if (is_sec_sym(patched_sym)) in __clone_symbol()
545 size = sec_size(patched_sym->sec); in __clone_symbol()
547 size = patched_sym->len; in __clone_symbol()
554 out_sym = elf_create_symbol(elf, patched_sym->name, out_sec, in __clone_symbol()
555 patched_sym->bind, patched_sym->type, in __clone_symbol()
556 offset, patched_sym->len); in __clone_symbol()
561 patched_sym->clone = out_sym; in __clone_symbol()
562 out_sym->clone = patched_sym; in __clone_symbol()
593 static struct symbol *clone_symbol(struct elfs *e, struct symbol *patched_sym, in clone_symbol() argument
598 if (patched_sym->clone) in clone_symbol()
599 return patched_sym->clone; in clone_symbol()
601 dbg_indent("%s%s", patched_sym->name, data_too ? " [+DATA]" : ""); in clone_symbol()
604 if (is_func_sym(patched_sym) && data_too) { in clone_symbol()
605 pfx = get_func_prefix(patched_sym); in clone_symbol()
610 if (!__clone_symbol(e->out, patched_sym, data_too)) in clone_symbol()
613 if (data_too && clone_sym_relocs(e, patched_sym)) in clone_symbol()
616 return patched_sym->clone; in clone_symbol()
643 struct symbol *sym_orig, *patched_sym; in mark_changed_functions() local
651 patched_sym = sym_orig->twin; in mark_changed_functions()
652 if (!patched_sym) in mark_changed_functions()
655 if (sym_orig->csum.checksum != patched_sym->csum.checksum) { in mark_changed_functions()
656 patched_sym->changed = 1; in mark_changed_functions()
657 mark_included_function(patched_sym); in mark_changed_functions()
663 for_each_sym(e->patched, patched_sym) { in mark_changed_functions()
664 if (!is_func_sym(patched_sym) || is_prefix_func(patched_sym)) in mark_changed_functions()
667 if (!patched_sym->twin) { in mark_changed_functions()
668 printf("%s: new function: %s\n", objname, patched_sym->name); in mark_changed_functions()
669 mark_included_function(patched_sym); in mark_changed_functions()
675 for_each_sym(e->patched, patched_sym) { in mark_changed_functions()
676 if (patched_sym->changed) in mark_changed_functions()
677 printf("%s: changed function: %s\n", objname, patched_sym->name); in mark_changed_functions()
685 struct symbol *patched_sym; in clone_included_functions() local
687 for_each_sym(e->patched, patched_sym) { in clone_included_functions()
688 if (patched_sym->included) { in clone_included_functions()
689 if (!clone_symbol(e, patched_sym, true)) in clone_included_functions()
799 struct symbol *patched_sym = patched_reloc->sym; in klp_reloc_needed() local
803 if (dont_correlate(patched_sym)) in klp_reloc_needed()
807 if (patched_sym->included) in klp_reloc_needed()
817 export = find_export(patched_sym); in klp_reloc_needed()
821 if (!patched_sym->twin) { in klp_reloc_needed()
901 struct symbol *patched_sym = patched_reloc->sym; in clone_reloc_klp() local
911 if (!patched_sym->twin) { in clone_reloc_klp()
912 ERROR("unexpected klp reloc for new symbol %s", patched_sym->name); in clone_reloc_klp()
924 sym = patched_sym->clone; in clone_reloc_klp()
927 sym = elf_create_symbol(e->out, patched_sym->name, NULL, in clone_reloc_klp()
928 STB_WEAK, patched_sym->type, 0, 0); in clone_reloc_klp()
932 patched_sym->clone = sym; in clone_reloc_klp()
933 sym->clone = patched_sym; in clone_reloc_klp()
952 sym_orig_name = patched_sym->twin->name; in clone_reloc_klp()
953 sympos = find_sympos(e->orig, patched_sym->twin); in clone_reloc_klp()
969 STB_WEAK, patched_sym->type, 0, 0); in clone_reloc_klp()
1015 #define dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp) \ argument
1017 sec->name, offset, patched_sym->name, \
1019 sym_type(patched_sym), \
1020 patched_sym->type == STT_SECTION ? "" : " ", \
1021 patched_sym->type == STT_SECTION ? "" : sym_bind(patched_sym), \
1022 is_undef_sym(patched_sym) ? " UNDEF" : "", \
1030 struct symbol *patched_sym = patched_reloc->sym; in clone_reloc() local
1031 struct export *export = find_export(patched_sym); in clone_reloc()
1039 patched_sym->name, addend); in clone_reloc()
1045 dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp); in clone_reloc()
1066 out_sym = clone_symbol(e, patched_sym, patched_sym->included || !export); in clone_reloc()
1075 if (is_string_sec(patched_sym->sec)) { in clone_reloc()
1076 const char *str = patched_sym->sec->data->d_buf + addend; in clone_reloc()
1093 static int clone_sym_relocs(struct elfs *e, struct symbol *patched_sym) in clone_sym_relocs() argument
1095 struct section *patched_rsec = patched_sym->sec->rsec; in clone_sym_relocs()
1100 out_sym = patched_sym->clone; in clone_sym_relocs()
1102 ERROR("no clone for %s", patched_sym->name); in clone_sym_relocs()
1109 if (!is_sec_sym(patched_sym) && !patched_sym->len) in clone_sym_relocs()
1112 if (is_string_sec(patched_sym->sec)) in clone_sym_relocs()
1115 if (is_sec_sym(patched_sym)) { in clone_sym_relocs()
1117 end = sec_size(patched_sym->sec); in clone_sym_relocs()
1119 start = patched_sym->offset; in clone_sym_relocs()
1120 end = start + patched_sym->len; in clone_sym_relocs()
1145 offset = out_sym->offset + (reloc_offset(patched_reloc) - patched_sym->offset); in clone_sym_relocs()
1395 struct symbol *patched_sym; in clone_special_section() local
1401 sec_for_each_sym(patched_sec, patched_sym) { in clone_special_section()
1404 if (!is_object_sym(patched_sym)) in clone_special_section()
1407 if (!should_keep_special_sym(e->patched, patched_sym)) in clone_special_section()
1410 ret = validate_special_section_klp_reloc(e, patched_sym); in clone_special_section()
1416 if (!clone_symbol(e, patched_sym, true)) in clone_special_section()