[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-devel
Subject: [PATCH 05/13] dbghelp: Use local elf_header declaration.
From: Jacek Caban <jacek () codeweavers ! com>
Date: 2020-03-31 16:21:37
Message-ID: 03ee629a-9f98-426c-d141-3cb1f9f0fa49 () codeweavers ! com
[Download RAW message or body]
Based on glibc.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
---
dlls/dbghelp/elf_module.c | 22 +++++++++++++++++++---
dlls/dbghelp/image_private.h | 20 +++++++++++++++++++-
2 files changed, 38 insertions(+), 4 deletions(-)
["0005-dbghelp-Use-local-elf_header-declaration.txt" (text/x-patch)]
diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index cca07ead31..cb30eb23d4 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -359,7 +359,7 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map*
unsigned int i;
size_t tmp, page_mask = sysinfo.dwPageSize - 1;
WCHAR *dos_path;
- unsigned char e_ident[EI_NIDENT];
+ unsigned char e_ident[ARRAY_SIZE(fmap->u.elf.elfhdr.e_ident)];
elf_reset_file_map(fmap);
@@ -394,12 +394,28 @@ static BOOL elf_map_file(struct elf_map_file_data* emfd, struct image_file_map*
if (fmap->addr_size == 32)
{
- Elf32_Ehdr elfhdr32;
+ struct
+ {
+ UINT8 e_ident[16]; /* Magic number and other info */
+ UINT16 e_type; /* Object file type */
+ UINT16 e_machine; /* Architecture */
+ UINT32 e_version; /* Object file version */
+ UINT32 e_entry; /* Entry point virtual address */
+ UINT32 e_phoff; /* Program header table file offset */
+ UINT32 e_shoff; /* Section header table file offset */
+ UINT32 e_flags; /* Processor-specific flags */
+ UINT16 e_ehsize; /* ELF header size in bytes */
+ UINT16 e_phentsize; /* Program header table entry size */
+ UINT16 e_phnum; /* Program header table entry count */
+ UINT16 e_shentsize; /* Section header table entry size */
+ UINT16 e_shnum; /* Section header table entry count */
+ UINT16 e_shstrndx; /* Section header string table index */
+ } elfhdr32;
if (!elf_map_file_read(fmap, emfd, &elfhdr32, sizeof(elfhdr32), 0))
return FALSE;
- memcpy(fmap->u.elf.elfhdr.e_ident, elfhdr32.e_ident, EI_NIDENT);
+ memcpy(fmap->u.elf.elfhdr.e_ident, elfhdr32.e_ident, sizeof(e_ident));
fmap->u.elf.elfhdr.e_type = elfhdr32.e_type;
fmap->u.elf.elfhdr.e_machine = elfhdr32.e_machine;
fmap->u.elf.elfhdr.e_version = elfhdr32.e_version;
diff --git a/dlls/dbghelp/image_private.h b/dlls/dbghelp/image_private.h
index d2a89bd7c5..600cf72159 100644
--- a/dlls/dbghelp/image_private.h
+++ b/dlls/dbghelp/image_private.h
@@ -48,6 +48,24 @@
#define IMAGE_NO_MAP ((void*)-1)
+struct elf_header
+{
+ UINT8 e_ident[16]; /* Magic number and other info */
+ UINT16 e_type; /* Object file type */
+ UINT16 e_machine; /* Architecture */
+ UINT32 e_version; /* Object file version */
+ UINT64 e_entry; /* Entry point virtual address */
+ UINT64 e_phoff; /* Program header table file offset */
+ UINT64 e_shoff; /* Section header table file offset */
+ UINT32 e_flags; /* Processor-specific flags */
+ UINT16 e_ehsize; /* ELF header size in bytes */
+ UINT16 e_phentsize; /* Program header table entry size */
+ UINT16 e_phnum; /* Program header table entry count */
+ UINT16 e_shentsize; /* Section header table entry size */
+ UINT16 e_shnum; /* Section header table entry count */
+ UINT16 e_shstrndx; /* Section header string table index */
+};
+
/* structure holding information while handling an ELF image
* allows one by one section mapping for memory savings
*/
@@ -66,8 +84,8 @@ struct image_file_map
HANDLE handle;
const char* shstrtab;
char* target_copy;
+ struct elf_header elfhdr;
#ifdef __ELF__
- Elf64_Ehdr elfhdr;
struct
{
Elf64_Shdr shdr;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic