perf tools: Fix copying of /proc/kcore]
Subsystems (2)
Arnaldo Carvalho de Melo
maintainerPATCH 3/3 perf tools: Fix copying of /proc/kcore]
Sorry, forgot the "vger.", but I guess it would be nice to have a forwarder from [email protected] to [email protected] :-)
- Arnaldo
----- Forwarded message from Arnaldo Carvalho de Melo <[email protected]> -----
Date: Fri, 25 Sep 2015 12:28:38 -0300
From: Arnaldo Carvalho de Melo <[email protected]>
Subject: [PATCH 3/3] perf tools: Fix copying of /proc/kcore
To: Ingo Molnar <[email protected]>
Cc: [email protected], Adrian Hunter <[email protected]>, Jiri Olsa <[email protected]>, [email protected], Arnaldo Carvalho de Melo
<[email protected]>
From: Adrian Hunter <[email protected]>
A copy of /proc/kcore containing the kernel text can be made to the buildid cache. e.g.
perf buildid-cache -v -k /proc/kcore
To workaround objdump limitations, a copy is also made when annotating against /proc/kcore.
The copying process stops working from libelf about v1.62 onwards (the problem was found with v1.63).
The cause is that a call to gelf_getphdr() in kcore__add_phdr() fails because additional validation has been added to gelf_getphdr().
The use of gelf_getphdr() is a misguided attempt to get default initialization of the Gelf_Phdr structure. That should not be necessary because every member of the Gelf_Phdr structure is subsequently assigned. So just remove the call to gelf_getphdr().
Similarly, a call to gelf_getehdr() in gelf_kcore__init() can be removed also.
Committer notes:
Note to [email protected], from Adrian in the cover letter for this patchkit:
The "Fix copying of /proc/kcore" problem goes back to v3.13 if you think it is important enough for stable.
--- tools/perf/util/symbol-elf.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-)
tools/perf/util/symbol-elf.c +13 -22
@@ -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 ;
Signature · 3 lines
2.1.0 ----- End forwarded message -----
Quoted 2 lines · Arnaldo Carvalho de Melo
Sorry, forgot the "vger.", but I guess it would be nice to have a forwarder from [email protected] to [email protected] :-)
My scripts know to pick up both of these, thanks, I got it now.
greg k-h
Arnaldo Carvalho de Melo
maintainerEm Tue, Oct 13, 2015 at 01:13:21PM -0700, Greg KH escreveu:
Quoted 5 lines · Arnaldo Carvalho de Melo
Quoted 2 lines
Sorry, forgot the "vger.", but I guess it would be nice to have a forwarder from [email protected] to [email protected] :-)
My scripts know to pick up both of these, thanks, I got it now.
Great,
- Arnaldo