From: Rich Felker Date: Mon, 20 Apr 2015 22:17:48 +0000 (-0400) Subject: fix breakage in x32 dynamic linker due to mismatching register size X-Git-Tag: v1.1.9~42 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4bf10ebf66e0c675c549032fc72915beb92d1312;p=oweals%2Fmusl.git 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. --- 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" )