Commit b5748c6a authored by cwang's avatar cwang
Browse files

Use r11 instead of r15 for linkage entry because r11 is a temporary register

parent bfdaafe0
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
/* x86-arch.c -*- Mode: C; comment-column: 40 -*-
 *
 * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/amd64-arch.c,v 1.2 2004/06/15 23:40:58 cwang Exp $ 
 * $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/amd64-arch.c,v 1.3 2004/06/22 22:38:27 cwang Exp $ 
 *
 */

@@ -375,15 +375,16 @@ void arch_make_linkage_entry(long linkage_entry, void *target_addr, long type)
	long offset = (char *)target_addr;
	int i;
	
	/* %r11 is a temp register */
	*reloc_addr++ = 0x49;		/* opcode for MOV */
	*reloc_addr++ = 0xbf; /* %r15 */
	*reloc_addr++ = 0xbb; /* %r11 */
	for (i = 0; i < 8; i++) {
	    *reloc_addr++ = offset & 0xff;
	    offset >>= 8;
	}
	*reloc_addr++ = 0x41; /* jmpq */
	*reloc_addr++ = 0xff;
	*reloc_addr++ = 0xe7; /* %r15 */
	*reloc_addr++ = 0xe3; /* %r11 */
	/* write a nop for good measure. */
	*reloc_addr = 0x90;
    } else if (type == 2) {