All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] perf jit: Include program header in elf files
@ 2022-09-15  9:29 Lieven Hey
  2022-09-20 20:10 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 2+ messages in thread
From: Lieven Hey @ 2022-09-15  9:29 UTC (permalink / raw)
  To: acme, linux-perf-users; +Cc: Lieven Hey, Leo Yan

The missing header makes it hard for programs like elfutils to open
these files.

Fixes: 2d86612aacb7805f ("perf symbol: Correct address for bss symbols")
Signed-off-by: Lieven Hey <lieven.hey@kdab.com>
Reviewed-by: Leo Yan <leo.yan@linaro.org>
Tested-by: Leo Yan <leo.yan@linaro.org>
---
 tools/perf/util/genelf.c | 14 ++++++++++++++
 tools/perf/util/genelf.h |  4 ++++
 2 files changed, 18 insertions(+)

diff --git a/tools/perf/util/genelf.c b/tools/perf/util/genelf.c
index 953338b9e887..02cd9f75e3d2 100644
--- a/tools/perf/util/genelf.c
+++ b/tools/perf/util/genelf.c
@@ -251,6 +251,7 @@ jit_write_elf(int fd, uint64_t load_addr, const char *sym,
 	Elf_Data *d;
 	Elf_Scn *scn;
 	Elf_Ehdr *ehdr;
+	Elf_Phdr *phdr;
 	Elf_Shdr *shdr;
 	uint64_t eh_frame_base_offset;
 	char *strsym = NULL;
@@ -285,6 +286,19 @@ jit_write_elf(int fd, uint64_t load_addr, const char *sym,
 	ehdr->e_version = EV_CURRENT;
 	ehdr->e_shstrndx= unwinding ? 4 : 2; /* shdr index for section name */
 
+	/*
+	 * setup program header
+	 */
+	phdr = elf_newphdr(e, 1);
+	phdr[0].p_type = PT_LOAD;
+	phdr[0].p_offset = 0;
+	phdr[0].p_vaddr = 0;
+	phdr[0].p_paddr = 0;
+	phdr[0].p_filesz = csize;
+	phdr[0].p_memsz = csize;
+	phdr[0].p_flags = PF_X | PF_R;
+	phdr[0].p_align = 8;
+
 	/*
 	 * setup text section
 	 */
diff --git a/tools/perf/util/genelf.h b/tools/perf/util/genelf.h
index ae138afe6c56..b5c909546e3f 100644
--- a/tools/perf/util/genelf.h
+++ b/tools/perf/util/genelf.h
@@ -53,8 +53,10 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent
 
 #if GEN_ELF_CLASS == ELFCLASS64
 #define elf_newehdr	elf64_newehdr
+#define elf_newphdr	elf64_newphdr
 #define elf_getshdr	elf64_getshdr
 #define Elf_Ehdr	Elf64_Ehdr
+#define Elf_Phdr	Elf64_Phdr
 #define Elf_Shdr	Elf64_Shdr
 #define Elf_Sym		Elf64_Sym
 #define ELF_ST_TYPE(a)	ELF64_ST_TYPE(a)
@@ -62,8 +64,10 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent
 #define ELF_ST_VIS(a)	ELF64_ST_VISIBILITY(a)
 #else
 #define elf_newehdr	elf32_newehdr
+#define elf_newphdr	elf32_newphdr
 #define elf_getshdr	elf32_getshdr
 #define Elf_Ehdr	Elf32_Ehdr
+#define Elf_Phdr	Elf32_Phdr
 #define Elf_Shdr	Elf32_Shdr
 #define Elf_Sym		Elf32_Sym
 #define ELF_ST_TYPE(a)	ELF32_ST_TYPE(a)
-- 
2.37.3

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] perf jit: Include program header in elf files
  2022-09-15  9:29 [PATCH v2] perf jit: Include program header in elf files Lieven Hey
@ 2022-09-20 20:10 ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 2+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-09-20 20:10 UTC (permalink / raw)
  To: Lieven Hey; +Cc: linux-perf-users, Leo Yan

Em Thu, Sep 15, 2022 at 11:29:10AM +0200, Lieven Hey escreveu:
> The missing header makes it hard for programs like elfutils to open
> these files.
> 
> Fixes: 2d86612aacb7805f ("perf symbol: Correct address for bss symbols")
> Signed-off-by: Lieven Hey <lieven.hey@kdab.com>
> Reviewed-by: Leo Yan <leo.yan@linaro.org>
> Tested-by: Leo Yan <leo.yan@linaro.org>

Thanks, applied.

- Arnaldo

> ---
>  tools/perf/util/genelf.c | 14 ++++++++++++++
>  tools/perf/util/genelf.h |  4 ++++
>  2 files changed, 18 insertions(+)
> 
> diff --git a/tools/perf/util/genelf.c b/tools/perf/util/genelf.c
> index 953338b9e887..02cd9f75e3d2 100644
> --- a/tools/perf/util/genelf.c
> +++ b/tools/perf/util/genelf.c
> @@ -251,6 +251,7 @@ jit_write_elf(int fd, uint64_t load_addr, const char *sym,
>  	Elf_Data *d;
>  	Elf_Scn *scn;
>  	Elf_Ehdr *ehdr;
> +	Elf_Phdr *phdr;
>  	Elf_Shdr *shdr;
>  	uint64_t eh_frame_base_offset;
>  	char *strsym = NULL;
> @@ -285,6 +286,19 @@ jit_write_elf(int fd, uint64_t load_addr, const char *sym,
>  	ehdr->e_version = EV_CURRENT;
>  	ehdr->e_shstrndx= unwinding ? 4 : 2; /* shdr index for section name */
>  
> +	/*
> +	 * setup program header
> +	 */
> +	phdr = elf_newphdr(e, 1);
> +	phdr[0].p_type = PT_LOAD;
> +	phdr[0].p_offset = 0;
> +	phdr[0].p_vaddr = 0;
> +	phdr[0].p_paddr = 0;
> +	phdr[0].p_filesz = csize;
> +	phdr[0].p_memsz = csize;
> +	phdr[0].p_flags = PF_X | PF_R;
> +	phdr[0].p_align = 8;
> +
>  	/*
>  	 * setup text section
>  	 */
> diff --git a/tools/perf/util/genelf.h b/tools/perf/util/genelf.h
> index ae138afe6c56..b5c909546e3f 100644
> --- a/tools/perf/util/genelf.h
> +++ b/tools/perf/util/genelf.h
> @@ -53,8 +53,10 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent
>  
>  #if GEN_ELF_CLASS == ELFCLASS64
>  #define elf_newehdr	elf64_newehdr
> +#define elf_newphdr	elf64_newphdr
>  #define elf_getshdr	elf64_getshdr
>  #define Elf_Ehdr	Elf64_Ehdr
> +#define Elf_Phdr	Elf64_Phdr
>  #define Elf_Shdr	Elf64_Shdr
>  #define Elf_Sym		Elf64_Sym
>  #define ELF_ST_TYPE(a)	ELF64_ST_TYPE(a)
> @@ -62,8 +64,10 @@ int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_ent
>  #define ELF_ST_VIS(a)	ELF64_ST_VISIBILITY(a)
>  #else
>  #define elf_newehdr	elf32_newehdr
> +#define elf_newphdr	elf32_newphdr
>  #define elf_getshdr	elf32_getshdr
>  #define Elf_Ehdr	Elf32_Ehdr
> +#define Elf_Phdr	Elf32_Phdr
>  #define Elf_Shdr	Elf32_Shdr
>  #define Elf_Sym		Elf32_Sym
>  #define ELF_ST_TYPE(a)	ELF32_ST_TYPE(a)
> -- 
> 2.37.3

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-09-20 20:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-15  9:29 [PATCH v2] perf jit: Include program header in elf files Lieven Hey
2022-09-20 20:10 ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.