From 4bf10ebf66e0c675c549032fc72915beb92d1312 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 20 Apr 2015 18:17:48 -0400 Subject: [PATCH] fix breakage in x32 dynamic linker due to mismatching register size the jmp instruction requires a 64-bit register, so cast the desired PC address up to uint64_t, going through uintptr_t to ensure that it's zero-extended rather than possibly sign-extended. --- arch/x32/reloc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x32/reloc.h b/arch/x32/reloc.h index 7c72d266..574f44a7 100644 --- a/arch/x32/reloc.h +++ b/arch/x32/reloc.h @@ -23,4 +23,4 @@ #define REL_TPOFF R_X86_64_TPOFF64 #define CRTJMP(pc,sp) __asm__ __volatile__( \ - "mov %1,%%esp ; jmp *%0" : : "r"(pc), "r"(sp) : "memory" ) + "mov %1,%%esp ; jmp *%0" : : "r"((uint64_t)(uintptr_t)pc), "r"(sp) : "memory" ) -- 2.25.1