Browse Source

redis: Fix build on 32bit targets and clang

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Khem Raj 3 years ago
parent
commit
bc83d3f088

+ 29 - 0
meta-oe/recipes-extended/redis/redis/ilp32.patch

@@ -0,0 +1,29 @@
+__ILP32__ is defined for all 32bit architectures with clang e.g.
+which is right but it is causing issues on non-x86 architectures
+where this condition becomes true and wrongly starts using this
+code, this issue is hidden with gcc becuase gcc does not define
+__ILP32__ for all 32bit architectures but for selected 64bit arches
+who choose to use 32bit ABI e.g. x32
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/src/debug.c
++++ b/src/debug.c
+@@ -944,7 +944,7 @@ static void *getMcontextEip(ucontext_t *
+     /* Linux */
+     #if defined(__riscv) && __riscv_xlen == 32
+     return (void*) uc->uc_mcontext.__gregs[REG_PC];
+-    #elif defined(__i386__) || defined(__ILP32__)
++    #elif defined(__i386__) || (defined(__X86_64__) && defined(__ILP32__))
+     return (void*) uc->uc_mcontext.gregs[14]; /* Linux 32 */
+     #elif defined(__X86_64__) || defined(__x86_64__)
+     return (void*) uc->uc_mcontext.gregs[16]; /* Linux 64 */
+@@ -1125,7 +1125,7 @@ void logRegisters(ucontext_t *uc) {
+     );
+     logStackContent((void**)uc->uc_mcontext.__gregs[REG_SP]);
+     /* Linux x86 */
+-    #elif defined(__i386__) || defined(__ILP32__)
++    #elif defined(__i386__) || ( defined(__X86_64__) && defined(__ILP32__))
+     serverLog(LL_WARNING,
+     "\n"
+     "EAX:%08lx EBX:%08lx ECX:%08lx EDX:%08lx\n"

+ 1 - 0
meta-oe/recipes-extended/redis/redis_6.0.8.bb

@@ -16,6 +16,7 @@ SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
            file://0001-src-Do-not-reset-FINAL_LIBS.patch \
            file://GNU_SOURCE.patch \
            file://riscv32.patch \
+           file://ilp32.patch \
            "
 
 SRC_URI[md5sum] = "70113b4b8ea7ee4c7e148be62b5d1e0b"