This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 7829d5af7f18d81344a6673c25f725dd116ba75a
Author: yezhonghui <[email protected]>
AuthorDate: Thu Jan 29 14:19:59 2026 +0800

    elf: include both elf32.h and elf64.h in elf.h
    
    Modify elf.h to include both elf32.h and elf64.h simultaneously,
    allowing code to use both 32-bit and 64-bit ELF structures.
    
    Changes:
    - elf.h: Include both elf32.h and elf64.h, define generic Elf_*
      type aliases and ELF_* macros based on CONFIG_ARCH_64BIT
    - elf32.h: Remove generic aliases and circular include of elf.h
    - elf64.h: Remove generic aliases and circular include of elf.h
    
    This enables parsing ELF files of different architectures on any
    platform.
    
    Signed-off-by: yezhonghui <[email protected]>
    Signed-off-by: Marco Casaroli <[email protected]>
---
 include/elf.h   | 49 ++++++++++++++++++++++++++++++++++++++++++++-----
 include/elf32.h | 26 +++-----------------------
 include/elf64.h | 26 +++-----------------------
 3 files changed, 50 insertions(+), 51 deletions(-)

diff --git a/include/elf.h b/include/elf.h
index 75475d4aa54..ec702dca4a5 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -35,11 +35,8 @@
 
 /* NOTE: elf64.h and elf32.h refer EI_NIDENT defined above */
 
-#ifdef CONFIG_ARCH_64BIT
-#  include <elf64.h>
-#else
-#  include <elf32.h>
-#endif
+#include <elf32.h>
+#include <elf64.h>
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -396,4 +393,46 @@
 #  define ELF_DATA         ELFDATA2LSB
 #endif
 
+/* Generic ELF type aliases based on architecture */
+
+#ifdef CONFIG_ARCH_64BIT
+#  define ELF_CLASS            ELFCLASS64
+#  define ELF_ST_TYPE(a)       ELF64_ST_TYPE(a)
+#  define ELF_ST_BIND(a)       ELF64_ST_BIND(a)
+#  define ELF_ST_VISIBILITY(o) ELF64_ST_VISIBILITY(o)
+#  define ELF_R_SYM(i)         ELF64_R_SYM(i)
+#  define ELF_R_TYPE(i)        ELF64_R_TYPE(i)
+
+typedef Elf64_Addr  Elf_Addr;
+typedef Elf64_Ehdr  Elf_Ehdr;
+typedef Elf64_Rel   Elf_Rel;
+typedef Elf64_Rela  Elf_Rela;
+typedef Elf64_Nhdr  Elf_Nhdr;
+typedef Elf64_Phdr  Elf_Phdr;
+typedef Elf64_Sym   Elf_Sym;
+typedef Elf64_Shdr  Elf_Shdr;
+typedef Elf64_Off   Elf_Off;
+typedef Elf64_Word  Elf_Word;
+typedef Elf64_Dyn   Elf_Dyn;
+#else
+#  define ELF_CLASS            ELFCLASS32
+#  define ELF_ST_TYPE(a)       ELF32_ST_TYPE(a)
+#  define ELF_ST_BIND(a)       ELF32_ST_BIND(a)
+#  define ELF_ST_VISIBILITY(o) ELF32_ST_VISIBILITY(o)
+#  define ELF_R_SYM(i)         ELF32_R_SYM(i)
+#  define ELF_R_TYPE(i)        ELF32_R_TYPE(i)
+
+typedef Elf32_Addr  Elf_Addr;
+typedef Elf32_Ehdr  Elf_Ehdr;
+typedef Elf32_Rel   Elf_Rel;
+typedef Elf32_Rela  Elf_Rela;
+typedef Elf32_Nhdr  Elf_Nhdr;
+typedef Elf32_Phdr  Elf_Phdr;
+typedef Elf32_Sym   Elf_Sym;
+typedef Elf32_Shdr  Elf_Shdr;
+typedef Elf32_Off   Elf_Off;
+typedef Elf32_Word  Elf_Word;
+typedef Elf32_Dyn   Elf_Dyn;
+#endif
+
 #endif /* __INCLUDE_ELF_H */
diff --git a/include/elf32.h b/include/elf32.h
index 1e62a7cf913..2dd6a6974ba 100644
--- a/include/elf32.h
+++ b/include/elf32.h
@@ -30,34 +30,26 @@
 #include <nuttx/config.h>
 
 #include <stdint.h>
-#include <elf.h>
 
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
 
-#define ELF_CLASS              ELFCLASS32
+#ifndef EI_NIDENT
+#  define EI_NIDENT            16     /* Size of e_ident[] */
+#endif
 
 #define ELF32_ST_BIND(i)       ((i) >> 4)
 #define ELF32_ST_TYPE(i)       ((i) & 0xf)
 #define ELF32_ST_INFO(b,t)     (((b) << 4) | ((t) & 0xf))
 #define ELF32_ST_VISIBILITY(o) ((o) & 0x3)
 
-/* Generic macro to abstract ELF32/ELF64 type/bind */
-
-#define ELF_ST_TYPE(a)         ELF32_ST_TYPE(a)
-#define ELF_ST_BIND(a)         ELF32_ST_BIND(a)
-#define ELF_ST_VISIBILITY(o)   ELF32_ST_VISIBILITY(o)
-
 /* Definitions for Elf32_Rel*::r_info */
 
 #define ELF32_R_SYM(i)         ((i) >> 8)
 #define ELF32_R_TYPE(i)        ((i) & 0xff)
 #define ELF32_R_INFO(s,t)      (((s)<< 8) | ((t) & 0xff))
 
-#define ELF_R_SYM(i)           ELF32_R_SYM(i)
-#define ELF_R_TYPE(i)          ELF32_R_TYPE(i)
-
 /****************************************************************************
  * Public Type Definitions
  ****************************************************************************/
@@ -168,16 +160,4 @@ typedef struct
   } d_un;
 } Elf32_Dyn;
 
-typedef Elf32_Addr Elf_Addr;
-typedef Elf32_Ehdr Elf_Ehdr;
-typedef Elf32_Rel  Elf_Rel;
-typedef Elf32_Rela Elf_Rela;
-typedef Elf32_Nhdr Elf_Nhdr;
-typedef Elf32_Phdr Elf_Phdr;
-typedef Elf32_Sym  Elf_Sym;
-typedef Elf32_Shdr Elf_Shdr;
-typedef Elf32_Off  Elf_Off;
-typedef Elf32_Word Elf_Word;
-typedef Elf32_Dyn  Elf_Dyn;
-
 #endif /* __INCLUDE_ELF32_H */
diff --git a/include/elf64.h b/include/elf64.h
index 27ac06246db..6747d593a95 100644
--- a/include/elf64.h
+++ b/include/elf64.h
@@ -30,13 +30,14 @@
 #include <nuttx/config.h>
 
 #include <stdint.h>
-#include <elf.h>
 
 /****************************************************************************
  * Pre-processor Definitions
  ****************************************************************************/
 
-#define ELF_CLASS              ELFCLASS64
+#ifndef EI_NIDENT
+#  define EI_NIDENT            16     /* Size of e_ident[] */
+#endif
 
 /* See ELF-64 Object File Format: Version 1.5 Draft 2 */
 
@@ -45,21 +46,12 @@
 #define ELF64_ST_INFO(b,t)     (((b) << 4) | ((t) & 0xf))
 #define ELF64_ST_VISIBILITY(o) ((o) & 0x3)
 
-/* Generic macro to abstract ELF32/ELF64 type/bind */
-
-#define ELF_ST_TYPE(a)         ELF64_ST_TYPE(a)
-#define ELF_ST_BIND(a)         ELF64_ST_BIND(a)
-#define ELF_ST_VISIBILITY(o)   ELF64_ST_VISIBILITY(o)
-
 /* Definitions for Elf64_Rel*::r_info */
 
 #define ELF64_R_SYM(i)         ((i) >> 32)
 #define ELF64_R_TYPE(i)        ((i) & 0xffffffffL)
 #define ELF64_R_INFO(s,t)      (((s)<< 32) + ((t) & 0xffffffffL))
 
-#define ELF_R_SYM(i)           ELF64_R_SYM(i)
-#define ELF_R_TYPE(i)          ELF64_R_TYPE(i)
-
 /****************************************************************************
  * Public Type Definitions
  ****************************************************************************/
@@ -172,16 +164,4 @@ typedef struct
   } d_un;
 } Elf64_Dyn;
 
-typedef Elf64_Addr Elf_Addr;
-typedef Elf64_Ehdr Elf_Ehdr;
-typedef Elf64_Rel  Elf_Rel;
-typedef Elf64_Rela Elf_Rela;
-typedef Elf64_Nhdr Elf_Nhdr;
-typedef Elf64_Phdr Elf_Phdr;
-typedef Elf64_Sym  Elf_Sym;
-typedef Elf64_Shdr Elf_Shdr;
-typedef Elf64_Off  Elf_Off;
-typedef Elf64_Word Elf_Word;
-typedef Elf64_Dyn  Elf_Dyn;
-
 #endif /* __INCLUDE_ELF64_H */

Reply via email to