[PATCH 065/112] common: add PE/COFF loader
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Mar 4 09:09:59 PST 2024
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 at pengutronix.de>
>> ---
>> 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 |
More information about the barebox
mailing list