On 08.01.24 09:37, Sascha Hauer wrote: > On Wed, Jan 03, 2024 at 07:12:25PM +0100, Ahmad Fatoum wrote: >> EFI loader will need to parse and load PE executables. Add functions to >> facilitate that. The API is inspired by the already existing ELF API. >> >> Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >> --- >> common/Kconfig | 3 + >> common/Makefile | 1 + >> common/pe.c | 377 +++++++++++++++++++++++++++++++ >> include/asm-generic/pe.h | 56 +++++ >> include/linux/pagemap.h | 1 + >> include/linux/pe.h | 468 +++++++++++++++++++++++++++++++++++++++ >> include/pe.h | 316 ++++++++++++++++++++++++++ >> 7 files changed, 1222 insertions(+) >> create mode 100644 common/pe.c >> create mode 100644 include/asm-generic/pe.h >> create mode 100644 include/linux/pe.h >> create mode 100644 include/pe.h >> >> +struct pe_image *pe_open(const char *filename) >> +{ >> + struct pe_image *pe; >> + size_t size; >> + void *bin; >> + >> + bin = read_file(filename, &size); >> + if (!bin) >> + return NULL; > > The static inline wrapper of this function indicates you should return > an error pointer here. > >> + >> + pe = pe_open_buf(bin, size); >> + >> + //free(bin); // FIXME > > Isn't this only a matter of adding free(pe->bin) to pe_close() and > freeing it here in case pe_open_buf() fails? > > >> diff --git a/include/asm-generic/pe.h b/include/asm-generic/pe.h >> new file mode 100644 >> index 000000000000..a1df7471348e >> --- /dev/null >> +++ b/include/asm-generic/pe.h >> @@ -0,0 +1,56 @@ >> +/* SPDX-License-Identifier: GPL-2.0+ */ >> +/* >> + * Portable Executable and Common Object Constants >> + * >> + * Copyright (c) 2018 Heinrich Schuchardt >> + * >> + * based on the "Microsoft Portable Executable and Common Object File Format >> + * Specification", revision 11, 2017-01-23 >> + */ >> + >> +#ifndef _ASM_PE_H >> +#define _ASM_PE_H >> + >> +/* Characteristics */ >> +#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 >> +#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 >> +#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 >> +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 >> +#define IMAGE_FILE_AGGRESSIVE_WS_TRIM 0x0010 >> +#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 >> +/* Reserved 0x0040 */ >> +#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 >> +#define IMAGE_FILE_32BIT_MACHINE 0x0100 >> +#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 >> +#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 >> +#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 >> +#define IMAGE_FILE_SYSTEM 0x1000 >> +#define IMAGE_FILE_DLL 0x2000 >> +#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 >> +#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 > > These defines are duplicated in include/linux/pe.h Indeed. Some struct definitions are also duplicated between the U-Boot header originating from Wine and <linux/pe.h>. I have removed the duplication for v3. Thanks, Ahmad > > Sascha > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |