tools: libelf: fix headers to trigger -Wundef warnings
authorJo-Philipp Wich <jo@mein.io>
Fri, 30 Aug 2019 13:22:01 +0000 (15:22 +0200)
committerJo-Philipp Wich <jo@mein.io>
Tue, 3 Sep 2019 08:44:21 +0000 (10:44 +0200)
When libelf from tools/ is used for building the kernel, compilation
aborts due to access to undefined defines since Kbuild adds -Wundef
to the compiler flags.

Patch the header files to use `#if defined(...)` instead of `#if ...`
to prevent such issues.

Ref: https://github.com/NixOS/nixpkgs/issues/59929
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
tools/libelf/patches/900-fix-undefined-macro-access.patch [new file with mode: 0644]

diff --git a/tools/libelf/patches/900-fix-undefined-macro-access.patch b/tools/libelf/patches/900-fix-undefined-macro-access.patch
new file mode 100644 (file)
index 0000000..21e7d1b
--- /dev/null
@@ -0,0 +1,198 @@
+--- a/lib/elf_repl.h
++++ b/lib/elf_repl.h
+@@ -45,7 +45,7 @@ typedef __libelf_u32_t               Elf32_Word;
+ #define ELF32_FSZ_SWORD               4
+ #define ELF32_FSZ_WORD                4
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef __libelf_u64_t                Elf64_Addr;
+ typedef __libelf_u16_t                Elf64_Half;
+@@ -93,7 +93,7 @@ typedef struct {
+     Elf32_Half                e_shstrndx;
+ } Elf32_Ehdr;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     unsigned char     e_ident[EI_NIDENT];
+     Elf64_Half                e_type;
+@@ -307,7 +307,7 @@ typedef struct {
+     Elf32_Word                sh_entsize;
+ } Elf32_Shdr;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word                sh_name;
+     Elf64_Word                sh_type;
+@@ -434,7 +434,7 @@ typedef struct {
+     Elf32_Half                st_shndx;
+ } Elf32_Sym;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word                st_name;
+     unsigned char     st_info;
+@@ -457,7 +457,7 @@ typedef struct {
+ #define ELF32_ST_TYPE(i)      ((i)&0xf)
+ #define ELF32_ST_INFO(b,t)    (((b)<<4)+((t)&0xf))
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_ST_BIND(i)      ((i)>>4)
+ #define ELF64_ST_TYPE(i)      ((i)&0xf)
+ #define ELF64_ST_INFO(b,t)    (((b)<<4)+((t)&0xf))
+@@ -495,7 +495,7 @@ typedef struct {
+  * Macros for manipulating st_other
+  */
+ #define ELF32_ST_VISIBILITY(o)        ((o)&0x3)
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_ST_VISIBILITY(o)        ((o)&0x3)
+ #endif /* __LIBELF64 */
+@@ -521,7 +521,7 @@ typedef struct {
+     Elf32_Sword               r_addend;
+ } Elf32_Rela;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Addr                r_offset;
+     Elf64_Xword               r_info;
+@@ -541,7 +541,7 @@ typedef struct {
+ #define ELF32_R_TYPE(i)               ((unsigned char)(i))
+ #define ELF32_R_INFO(s,t)     (((s)<<8)+(unsigned char)(t))
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ #define ELF64_R_SYM(i)                ((Elf64_Xword)(i)>>32)
+ #define ELF64_R_TYPE(i)               ((i)&0xffffffffL)
+ #define ELF64_R_INFO(s,t)     (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+@@ -556,7 +556,7 @@ typedef struct {
+     Elf32_Word                n_type;         /* descriptor type */
+ } Elf32_Nhdr;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ /* Solaris and GNU use this layout.  Be compatible. */
+ /* XXX: Latest ELF specs say it's 64-bit!!! */
+ typedef struct {
+@@ -587,7 +587,7 @@ typedef struct {
+     Elf32_Word                p_align;
+ } Elf32_Phdr;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Word                p_type;
+     Elf64_Word                p_flags;
+@@ -654,7 +654,7 @@ typedef struct {
+     } d_un;
+ } Elf32_Dyn;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Sxword      d_tag;
+     union {
+@@ -798,7 +798,7 @@ typedef struct {
+     Elf32_Half                si_flags;
+ } Elf32_Syminfo;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Half                si_boundto;
+     Elf64_Half                si_flags;
+@@ -863,7 +863,7 @@ typedef struct {
+ typedef Elf32_Half    Elf32_Versym;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Half                vd_version;
+@@ -933,7 +933,7 @@ typedef Elf64_Half Elf64_Versym;
+ /*
+  * Move section
+  */
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf32_Lword               m_value;
+@@ -973,7 +973,7 @@ typedef struct {
+     } c_un;
+ } Elf32_Cap;
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ typedef struct {
+     Elf64_Xword       c_tag;
+--- a/lib/gelf.h
++++ b/lib/gelf.h
+@@ -22,15 +22,15 @@
+ #ifndef _GELF_H
+ #define _GELF_H
+-#if __LIBELF_INTERNAL__
++#if defined(__LIBELF_INTERNAL__)
+ #include <libelf.h>
+ #else /* __LIBELF_INTERNAL__ */
+ #include <libelf/libelf.h>
+ #endif /* __LIBELF_INTERNAL__ */
+-#if __LIBELF_NEED_LINK_H
++#if defined(__LIBELF_NEED_LINK_H)
+ #include <link.h>
+-#elif __LIBELF_NEED_SYS_LINK_H
++#elif defined(__LIBELF_NEED_SYS_LINK_H)
+ #include <sys/link.h>
+ #endif /* __LIBELF_NEED_LINK_H */
+@@ -71,7 +71,7 @@ typedef Elf64_Sym    GElf_Sym;
+ /*
+  * Symbol versioning
+  */
+-#if __LIBELF_SYMBOL_VERSIONS
++#if defined(__LIBELF_SYMBOL_VERSIONS)
+ typedef Elf64_Verdef  GElf_Verdef;
+ typedef Elf64_Verneed GElf_Verneed;
+ typedef Elf64_Verdaux GElf_Verdaux;
+--- a/lib/libelf.h
++++ b/lib/libelf.h
+@@ -25,7 +25,7 @@
+ #include <stddef.h>   /* for size_t */
+ #include <sys/types.h>
+-#if __LIBELF_INTERNAL__
++#if defined(__LIBELF_INTERNAL__)
+ #include <sys_elf.h>
+ #else /* __LIBELF_INTERNAL__ */
+ #include <libelf/sys_elf.h>
+@@ -224,7 +224,7 @@ extern Elf_Data *elf32_xlatetom __P((Elf
+  */
+ extern long elf32_checksum __P((Elf *__elf));
+-#if __LIBELF64
++#if defined(__LIBELF64)
+ /*
+  * 64-bit ELF functions
+  * Not available on all platforms
+--- a/lib/sys_elf.h.in
++++ b/lib/sys_elf.h.in
+@@ -116,7 +116,7 @@ Foundation, Inc., 51 Franklin Street, Fi
+ #   define ELF64_R_INFO(s,t)  (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+ #  endif /* ELF64_R_SYM */
+-#  if __LIBELF64_LINUX
++#  if defined(__LIBELF64_LINUX)
+ typedef __libelf_u64_t        Elf64_Addr;
+ typedef __libelf_u16_t        Elf64_Half;
+ typedef __libelf_u64_t        Elf64_Off;