瀏覽代碼

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.
Rich Felker 10 年之前
父節點
當前提交
4bf10ebf66
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      arch/x32/reloc.h

+ 1 - 1
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" )