elf->name, symndx);
return -EINVAL;
}
+ else if ( elf->sym[symndx].ignored )
+ {
+ printk(XENLOG_ERR LIVEPATCH
+ "%s: Relocation against ignored symbol %s cannot be resolved\n",
+ elf->name, elf->sym[symndx].name);
+ return -EINVAL;
+ }
val = elf->sym[symndx].sym->st_value; /* S */
elf->name, symndx);
return -EINVAL;
}
+ else if ( elf->sym[symndx].ignored )
+ {
+ printk(XENLOG_ERR LIVEPATCH
+ "%s: Relocation against ignored symbol %s cannot be resolved\n",
+ elf->name, elf->sym[symndx].name);
+ return -EINVAL;
+ }
val = elf->sym[symndx].sym->st_value + r->r_addend; /* S+A */
elf->name, symndx);
return -EINVAL;
}
+ else if ( elf->sym[symndx].ignored )
+ {
+ printk(XENLOG_ERR LIVEPATCH
+ "%s: Relocation against ignored symbol %s cannot be resolved\n",
+ elf->name, elf->sym[symndx].name);
+ return -EINVAL;
+ }
val = r->r_addend + elf->sym[symndx].sym->st_value;
}
if ( livepatch_elf_ignore_section(elf->sec[idx].sec) )
+ {
+ dprintk(XENLOG_DEBUG, LIVEPATCH
+ "%s: Symbol %s from section %s ignored\n",
+ elf->name, elf->sym[i].name, elf->sec[idx].name);
+ elf->sym[i].ignored = true;
break;
+ }
st_value += (unsigned long)elf->sec[idx].load_addr;
if ( elf->sym[i].name )
struct livepatch_elf_sym {
const Elf_Sym *sym;
const char *name;
+ bool ignored;
};
struct livepatch_elf {