* [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.