Lines Matching defs:patched_sym
915 static int clone_sym_relocs(struct elfs *e, struct symbol *patched_sym);
917 static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym,
924 if (data_too && !is_undef_sym(patched_sym)) {
925 struct section *patched_sec = patched_sym->sec;
938 if (is_string_sec(patched_sym->sec)) {
946 if (!is_sec_sym(patched_sym))
949 if (patched_sym->len || is_sec_sym(patched_sym)) {
954 if (patched_sym->sec->data && patched_sym->sec->data->d_buf)
955 data = patched_sym->sec->data->d_buf + patched_sym->offset;
957 if (is_sec_sym(patched_sym))
958 size = sec_size(patched_sym->sec);
960 size = patched_sym->len;
967 out_sym = elf_create_symbol(elf, patched_sym->name, out_sec,
968 patched_sym->bind, patched_sym->type,
969 offset, patched_sym->len);
974 patched_sym->clone = out_sym;
975 out_sym->clone = patched_sym;
1006 static struct symbol *clone_symbol(struct elfs *e, struct symbol *patched_sym,
1011 if (patched_sym->clone)
1012 return patched_sym->clone;
1014 dbg_clone("%s%s", patched_sym->name, data_too ? " [+DATA]" : "");
1017 if (is_func_sym(patched_sym) && data_too) {
1018 pfx = get_func_prefix(patched_sym);
1023 if (!__clone_symbol(e->out, patched_sym, data_too))
1026 if (data_too && clone_sym_relocs(e, patched_sym))
1029 return patched_sym->clone;
1056 struct symbol *orig_sym, *patched_sym;
1064 patched_sym = orig_sym->twin;
1065 if (!patched_sym)
1068 if (orig_sym->csum.checksum != patched_sym->csum.checksum) {
1074 patched_sym->changed = 1;
1075 mark_included_function(patched_sym);
1081 for_each_sym(e->patched, patched_sym) {
1082 if (!is_func_sym(patched_sym) || patched_sym->dont_correlate)
1085 if (!patched_sym->twin) {
1086 printf("%s: new function: %s\n", objname, patched_sym->name);
1087 mark_included_function(patched_sym);
1093 for_each_sym(e->patched, patched_sym) {
1094 if (patched_sym->changed)
1095 printf("%s: changed function: %s\n", objname, patched_sym->name);
1103 struct symbol *patched_sym;
1105 for_each_sym(e->patched, patched_sym) {
1106 if (patched_sym->included) {
1107 if (!clone_symbol(e, patched_sym, true))
1176 struct symbol *patched_sym = patched_reloc->sym;
1180 if (patched_sym->dont_correlate)
1184 if (patched_sym->included)
1194 export = find_export(patched_sym);
1203 if (!patched_sym->twin) {
1347 struct symbol *patched_sym = patched_reloc->sym;
1358 if (!patched_sym->twin) {
1360 ERROR("unexpected klp reloc for new symbol %s", patched_sym->name);
1367 patched_sym->name, export->sym, export->mod);
1384 sym = patched_sym->clone;
1387 KLP_TOMBSTONE_PREFIX "%s", patched_sym->name))
1391 STB_WEAK, patched_sym->type, 0, 0);
1395 patched_sym->clone = sym;
1396 sym->clone = patched_sym;
1415 sym_orig_name = patched_sym->twin->name;
1416 sympos = klp_find_sympos(e->orig, patched_sym->twin);
1432 STB_WEAK, patched_sym->type, 0, 0);
1497 #define dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp) \
1499 sec->name, offset, patched_sym->name, \
1501 sym_type(patched_sym), \
1502 is_sec_sym(patched_sym) ? "" : " ", \
1503 is_sec_sym(patched_sym) ? "" : sym_bind(patched_sym), \
1504 is_undef_sym(patched_sym) ? " UNDEF" : "", \
1512 struct symbol *patched_sym = patched_reloc->sym;
1513 struct export *export = find_export(patched_sym);
1520 dbg_clone_reloc(sec, offset, patched_sym, addend, export, klp);
1541 out_sym = clone_symbol(e, patched_sym, patched_sym->included || !export);
1550 if (is_string_sec(patched_sym->sec)) {
1551 const char *str = patched_sym->sec->data->d_buf + addend;
1568 static int clone_sym_relocs(struct elfs *e, struct symbol *patched_sym)
1570 struct section *patched_rsec = patched_sym->sec->rsec;
1575 out_sym = patched_sym->clone;
1577 ERROR("no clone for %s", patched_sym->name);
1584 if (!is_sec_sym(patched_sym) && !patched_sym->len)
1587 if (is_string_sec(patched_sym->sec))
1590 if (is_sec_sym(patched_sym)) {
1592 end = sec_size(patched_sym->sec);
1594 start = patched_sym->offset;
1595 end = start + patched_sym->len;
1614 if (arch_alt_ignore_new_reloc(patched_sym->sec,
1628 offset = out_sym->offset + (reloc_offset(patched_reloc) - patched_sym->offset);
1932 struct symbol *patched_sym;
1938 sec_for_each_sym(patched_sec, patched_sym) {
1941 if (!is_object_sym(patched_sym))
1944 if (!should_keep_special_sym(e->patched, patched_sym))
1947 ret = validate_special_section_klp_reloc(e, patched_sym);
1953 if (!clone_symbol(e, patched_sym, true))