perf jit: Include program header in ELF files
[ Upstream commitbabd04386b
] The missing header makes it hard for programs like elfutils to open these files. Fixes:2d86612aac
("perf symbol: Correct address for bss symbols") Reviewed-by: Leo Yan <leo.yan@linaro.org> Signed-off-by: Lieven Hey <lieven.hey@kdab.com> Tested-by: Leo Yan <leo.yan@linaro.org> Cc: Leo Yan <leo.yan@linaro.org> Link: https://lore.kernel.org/r/20220915092910.711036-1-lieven.hey@kdab.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
39dc6ccdd5
Коммит
a3b923f449
|
@ -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
|
||||
*/
|
||||
|
|
|
@ -50,8 +50,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)
|
||||
|
@ -59,8 +61,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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче