remove dead code

refactoring.  A couple of comment touchups too.

Signed-off-by: Seth Jennings <sjenning@redhat.com>
This commit is contained in:
Seth Jennings 2014-03-05 11:19:13 -06:00
parent 16fb78696c
commit e33695be27
1 changed files with 3 additions and 170 deletions

View File

@ -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));