From e33695be2755c5a92f6a6a6804535eb07c162129 Mon Sep 17 00:00:00 2001 From: Seth Jennings Date: Wed, 5 Mar 2014 11:19:13 -0600 Subject: [PATCH] remove dead code refactoring. A couple of comment touchups too. Signed-off-by: Seth Jennings --- kpatch-build/link-vmlinux-syms.c | 173 +------------------------------ 1 file changed, 3 insertions(+), 170 deletions(-) diff --git a/kpatch-build/link-vmlinux-syms.c b/kpatch-build/link-vmlinux-syms.c index 81716d8..1586acd 100644 --- a/kpatch-build/link-vmlinux-syms.c +++ b/kpatch-build/link-vmlinux-syms.c @@ -171,7 +171,8 @@ static void create_symlist(struct elf *elf, struct symlist *symlist) if (!data) ERROR("elf_getdata"); - /* find (local) function symbols + /* + * find (local) function symbols * NOTE: If the function symbol is in the kpatch-gen file, it needs * to be patched. If the function didn't need to be patched, * it wouldn't have been incldued in the kpatch-gen file. @@ -228,26 +229,6 @@ int main(int argc, char **argv) create_symlist(&elf, &symlist); create_symlist(&elfv, &symlistv); -#if 0 - /* lookup patched functions in vmlinux */ - for_each_sym(&symlist, cur) { - if (GELF_ST_TYPE(cur->sym.st_info) != STT_FUNC) - continue; - - printf("found patched function %s\n", cur->name); - - vsym = find_symbol_by_name(&symlistv, cur->name); - if (!vsym) - ERROR("couldn't find patched function in vmlinux"); - cur->vm_addr = vsym->sym.st_value; - cur->vm_len = vsym->sym.st_size; - cur->action = PATCH; - printf("original function at address %016lx (length %d)\n", - cur->vm_addr, cur->vm_len); - patches_nr++; - } -#endif - /* lookup non-exported globals and insert vmlinux address */ for_each_sym(&symlist, cur) { if (GELF_ST_TYPE(cur->sym.st_info) != STT_NOTYPE || @@ -279,83 +260,13 @@ int main(int argc, char **argv) elf_end(elfv.elf); close(elfv.fd); -#if 0 - printf("patches_nr = %d\n", patches_nr); - - /* allocate new section data buffers */ - patches_size = sizeof(*patches_data) * patches_nr; - patches_data = malloc(patches_size); - if (!patches_data) - ERROR("malloc"); - memset(patches_data, 0, patches_size); - - relas_size = sizeof(*relas_data) * patches_nr; - relas_data = malloc(relas_size); - if (!relas_data) - ERROR("malloc"); - memset(relas_data, 0, relas_size); - - printf("patches_size = %d\n",patches_size); - printf("relas_size = %d\n",relas_size); - - /* populate new section data buffers */ - i = 0; - for_each_sym(&symlist, cur) { - if (cur->action != PATCH) - continue; - patches_data[i].orig = cur->vm_addr; - patches_data[i].orig_end = cur->vm_addr + cur->vm_len; - relas_data[i].r_offset = i * sizeof(struct kpatch_patch); - relas_data[i].r_info = GELF_R_INFO(cur->index, R_X86_64_64); - } - - /* get next section index from elf header */ - if (!gelf_getehdr(elf.elf, &eh)) - ERROR("gelf_getehdr"); - patches_index = eh.e_shnum; - relas_index = patches_index + 1; - - /* add new section names to shstrtab */ - scn = elf.shstrtab.scn; - shp = &elf.shstrtab.sh; - - data = elf_getdata(scn, NULL); - if (!data) - ERROR("elf_getdata"); - - len = strlen(".patches") + strlen(".rela.patches") + 2; - buf = malloc(data->d_size + len); - memcpy(buf, data->d_buf, data->d_size); - - data->d_buf = buf; - buf = data->d_buf + data->d_size; - - len = strlen(".patches") + 1; - memcpy(buf, ".patches", len); - patches_offset = buf - data->d_buf; - printf("patches_offset = %d\n", patches_offset); - buf += len; - len = strlen(".rela.patches") + 1; - memcpy(buf, ".rela.patches", len); - relas_offset = buf - data->d_buf; - printf("relas_offset = %d\n", relas_offset); - buf += len; - data->d_size = buf - data->d_buf; - - if (!elf_flagdata(data, ELF_C_SET, ELF_F_DIRTY)) - ERROR("elf_flagdata"); - - if (!gelf_update_shdr(scn, shp)) - ERROR("gelf_update_shdr"); - - /* get symtab vars */ -#endif find_section_by_name(&elf, ".symtab", &symtab); scn = symtab.scn; data = elf_getdata(scn, NULL); if (!data) ERROR("elf_getdata"); + /* update LINK symbols */ for_each_sym(&symlist, cur) { if (cur->action != LINK) @@ -366,84 +277,6 @@ int main(int argc, char **argv) gelf_update_sym(data, cur->index, &cur->sym); } -#if 0 - /* add new section symbols to symtab */ - len = sizeof(GElf_Sym) * 2; - buf = malloc(data->d_size + len); - memcpy(buf, data->d_buf, data->d_size); - - data->d_buf = buf; - buf = data->d_buf + data->d_size; - - memset(&sym, 0, sizeof(GElf_Sym)); - sym.st_info = GELF_ST_INFO(STB_LOCAL, STT_SECTION); - - len = sizeof(GElf_Sym); - sym.st_shndx = patches_index; - memcpy(buf, &sym, len); - buf += len; - sym.st_shndx = relas_index; - memcpy(buf, &sym, len); - buf += len; - data->d_size = buf - data->d_buf; - - if (!elf_flagdata(data, ELF_C_SET, ELF_F_DIRTY)) - ERROR("elf_flagdata"); - - if (!gelf_update_shdr(scn, shp)) - ERROR("gelf_update_shdr"); - - /* create .patches section */ - scn = elf_newscn(elf.elf); - if (!scn) - ERROR("elf_newscn"); - - data = elf_newdata(scn); - if (!data) - ERROR("elf_newdata"); - - data->d_size = patches_size; - data->d_buf = patches_data; - data->d_type = ELF_T_BYTE; - - memset(&sh, 0, sizeof(sh)); - sh.sh_type = SHT_PROGBITS; - sh.sh_name = patches_offset; - sh.sh_entsize = sizeof(struct kpatch_patch); - sh.sh_addralign = 8; - sh.sh_flags = SHF_ALLOC; - sh.sh_size = data->d_size; - - if (!gelf_update_shdr(scn, &sh)) - ERROR("gelf_update_shdr"); - - /* create .rela.patches section */ - scn = elf_newscn(elf.elf); - if (!scn) - ERROR("elf_newscn"); - - data = elf_newdata(scn); - if (!data) - ERROR("elf_newdata"); - - data->d_size = relas_size; - data->d_buf = relas_data; - data->d_type = ELF_T_RELA; - - memset(&sh, 0, sizeof(sh)); - sh.sh_type = SHT_RELA; - sh.sh_name = relas_offset; - sh.sh_entsize = sizeof(GElf_Rela); - sh.sh_addralign = 8; - sh.sh_flags = SHF_ALLOC; - sh.sh_link = elf_ndxscn(elf.symtab.scn); - sh.sh_info = patches_index; - sh.sh_size = data->d_size; - - if (!gelf_update_shdr(scn, &sh)) - ERROR("gelf_update_shdr"); - -#endif if (elf_update(elf.elf, ELF_C_WRITE) < 0) ERROR("elf_update %s", elf_errmsg(-1));