mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
zdump: dfi_elf: factor out some ELF functionalities
This makes them reuseable and testable. Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com> Reviewed-by: Steffen Eiden <seiden@linux.ibm.com> Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
8d7e8a87b5
commit
776e5d41d7
@@ -34,6 +34,22 @@ void *ehdr_init(Elf64_Ehdr *ehdr, Elf64_Half phnum)
|
||||
return ehdr + 1;
|
||||
}
|
||||
|
||||
bool ehdr_is_elf_object(const Elf64_Ehdr *ehdr)
|
||||
{
|
||||
return (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) == 0);
|
||||
}
|
||||
|
||||
bool ehdr_is_vmcore(const Elf64_Ehdr *ehdr)
|
||||
{
|
||||
return ehdr->e_type == ET_CORE;
|
||||
}
|
||||
|
||||
bool ehdr_is_s390x(const Elf64_Ehdr *ehdr)
|
||||
{
|
||||
return ehdr->e_machine == EM_S390 &&
|
||||
ehdr->e_ident[EI_CLASS] == ELFCLASS64;
|
||||
}
|
||||
|
||||
void *nt_init(void *buf, Elf64_Word type, const void *desc, int d_len,
|
||||
const char *name)
|
||||
{
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include <elf.h>
|
||||
#include <linux/types.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "lib/zt_common.h"
|
||||
|
||||
@@ -127,6 +128,21 @@ static inline void df_elf_ensure_s390x(void)
|
||||
*/
|
||||
void *ehdr_init(Elf64_Ehdr *ehdr, Elf64_Half phnum);
|
||||
|
||||
/*
|
||||
* Checks whether @ehdr is a ELF object
|
||||
*/
|
||||
bool ehdr_is_elf_object(const Elf64_Ehdr *ehdr);
|
||||
|
||||
/*
|
||||
* Checks whether @ehdr is a vmcore
|
||||
*/
|
||||
bool ehdr_is_vmcore(const Elf64_Ehdr *ehdr);
|
||||
|
||||
/*
|
||||
* Checks whether @ehdr is a s390x header
|
||||
*/
|
||||
bool ehdr_is_s390x(const Elf64_Ehdr *ehdr);
|
||||
|
||||
/*
|
||||
* Initialize ELF note
|
||||
*/
|
||||
|
||||
@@ -289,11 +289,10 @@ static int read_elf_hdr(Elf64_Ehdr *ehdr)
|
||||
if (zg_size(g.fh) < sizeof(*ehdr))
|
||||
return -ENODEV;
|
||||
zg_read(g.fh, ehdr, sizeof(*ehdr), ZG_CHECK);
|
||||
if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0)
|
||||
|
||||
if (!ehdr_is_elf_object(ehdr) || !ehdr_is_vmcore(ehdr))
|
||||
return -ENODEV;
|
||||
if (ehdr->e_type != ET_CORE)
|
||||
return -ENODEV;
|
||||
if (ehdr->e_machine != EM_S390 || ehdr->e_ident[EI_CLASS] != ELFCLASS64)
|
||||
if (!ehdr_is_s390x(ehdr))
|
||||
ERR_EXIT("Only s390x (64 bit) core dump files are supported");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user