When compiling with an ancient compiler (gcc-4.8.5-36.el7_6.2.aarch64) the build fails with lib/libcflat.a(alloc.o): In function `mult_overflow': /home/drjones/kvm-unit-tests/lib/alloc.c:19: undefined reference to `__multi3' According to kernel commit fb8722735f50 ("arm64: support __int128 on gcc 5+") GCC5+ will not emit __multi3 for __int128 multiplication, so let's just fallback to the non-__int128 overflow check when we use gcc versions older than 5. Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> --- lib/alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/alloc.c b/lib/alloc.c index f4266f5d064e..70228aa32c6c 100644 --- a/lib/alloc.c +++ b/lib/alloc.c @@ -1,6 +1,7 @@ #include "alloc.h" #include "asm/page.h" #include "bitops.h" +#include <linux/compiler.h> void *malloc(size_t size) { @@ -13,7 +14,7 @@ static bool mult_overflow(size_t a, size_t b) /* 32 bit system, easy case: just use u64 */ return (u64)a * (u64)b >= (1ULL << 32); #else -#ifdef __SIZEOF_INT128__ +#if defined(__SIZEOF_INT128__) && (!defined(__aarch64__) || GCC_VERSION >= 50000) /* if __int128 is available use it (like the u64 case above) */ unsigned __int128 res = a; res *= b; -- 2.34.1