|
@@ -1271,8 +1271,6 @@ out_close:
|
|
|
static int kcore__init(struct kcore *kcore, char *filename, int elfclass,
|
|
|
bool temp)
|
|
|
{
|
|
|
- GElf_Ehdr *ehdr;
|
|
|
-
|
|
|
kcore->elfclass = elfclass;
|
|
|
|
|
|
if (temp)
|
|
@@ -1289,9 +1287,7 @@ static int kcore__init(struct kcore *kcore, char *filename, int elfclass,
|
|
|
if (!gelf_newehdr(kcore->elf, elfclass))
|
|
|
goto out_end;
|
|
|
|
|
|
- ehdr = gelf_getehdr(kcore->elf, &kcore->ehdr);
|
|
|
- if (!ehdr)
|
|
|
- goto out_end;
|
|
|
+ memset(&kcore->ehdr, 0, sizeof(GElf_Ehdr));
|
|
|
|
|
|
return 0;
|
|
|
|
|
@@ -1348,23 +1344,18 @@ static int kcore__copy_hdr(struct kcore *from, struct kcore *to, size_t count)
|
|
|
static int kcore__add_phdr(struct kcore *kcore, int idx, off_t offset,
|
|
|
u64 addr, u64 len)
|
|
|
{
|
|
|
- GElf_Phdr gphdr;
|
|
|
- GElf_Phdr *phdr;
|
|
|
-
|
|
|
- phdr = gelf_getphdr(kcore->elf, idx, &gphdr);
|
|
|
- if (!phdr)
|
|
|
- return -1;
|
|
|
-
|
|
|
- phdr->p_type = PT_LOAD;
|
|
|
- phdr->p_flags = PF_R | PF_W | PF_X;
|
|
|
- phdr->p_offset = offset;
|
|
|
- phdr->p_vaddr = addr;
|
|
|
- phdr->p_paddr = 0;
|
|
|
- phdr->p_filesz = len;
|
|
|
- phdr->p_memsz = len;
|
|
|
- phdr->p_align = page_size;
|
|
|
-
|
|
|
- if (!gelf_update_phdr(kcore->elf, idx, phdr))
|
|
|
+ GElf_Phdr phdr = {
|
|
|
+ .p_type = PT_LOAD,
|
|
|
+ .p_flags = PF_R | PF_W | PF_X,
|
|
|
+ .p_offset = offset,
|
|
|
+ .p_vaddr = addr,
|
|
|
+ .p_paddr = 0,
|
|
|
+ .p_filesz = len,
|
|
|
+ .p_memsz = len,
|
|
|
+ .p_align = page_size,
|
|
|
+ };
|
|
|
+
|
|
|
+ if (!gelf_update_phdr(kcore->elf, idx, &phdr))
|
|
|
return -1;
|
|
|
|
|
|
return 0;
|