2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>

Address in trampolines based on 32-bit registers when compiled
	with Apple's CC

	* loader/i386/xnu_helper.S [APPLE_CC]: use 32-bit registers 
	for addresses
	* loader/i386/linux_trampoline.S [APPLE_CC]: likewise
This commit is contained in:
phcoder 2009-06-04 21:21:31 +00:00
parent 6c68847712
commit e93cdc3db1
3 changed files with 45 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>
Address in trampolines based on 32-bit registers when compiled
with Apple's CC
* loader/i386/xnu_helper.S [APPLE_CC]: use 32-bit registers
for addresses
* loader/i386/linux_trampoline.S [APPLE_CC]: likewise
2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>
Avoid aliases when compiling with Apple's CC for PCBIOS machine

View File

@ -30,7 +30,22 @@ VARIABLE(grub_linux_trampoline_start)
call base
base:
pop %rsi
#ifdef APPLE_CC
lea (cont1 - base) (%esi, 1), %rax
mov %eax, (jump_vector - base) (%esi, 1)
lea (gdt - base) (%esi, 1), %rax
mov %rax, (gdtaddr - base) (%esi, 1)
/* Switch to compatibility mode. */
lidt (idtdesc - base) (%esi, 1)
lgdt (gdtdesc - base) (%esi, 1)
/* Update %cs. Thanks to David Miller for pointing this mistake out. */
ljmp *(jump_vector - base) (%esi, 1)
#else
lea (cont1 - base) (%rsi, 1), %rax
mov %eax, (jump_vector - base) (%rsi, 1)
@ -44,6 +59,8 @@ base:
/* Update %cs. Thanks to David Miller for pointing this mistake out. */
ljmp *(jump_vector - base) (%rsi, 1)
#endif
cont1:
.code32

View File

@ -94,11 +94,28 @@ VARIABLE(grub_xnu_heap_size)
movsl
mov %rax, %rsi
#ifdef APPLE_CC
add $(cont0-base), %eax
#else
add $(cont0-base), %rax
#endif
jmp *%rax
cont0:
#ifdef APPLE_CC
lea (cont1 - base) (%esi, 1), %eax
mov %eax, (jump_vector - base) (%esi, 1)
lea (gdt - base) (%esi, 1), %eax
mov %eax, (gdt_addr - base) (%esi, 1)
/* Switch to compatibility mode. */
lgdt (gdtdesc - base) (%esi, 1)
/* Update %cs. Thanks to David Miller for pointing this mistake out. */
ljmp *(jump_vector - base) (%esi,1)
#else
lea (cont1 - base) (%rsi, 1), %rax
mov %eax, (jump_vector - base) (%rsi, 1)
@ -111,6 +128,8 @@ cont0:
/* Update %cs. Thanks to David Miller for pointing this mistake out. */
ljmp *(jump_vector - base) (%rsi, 1)
#endif
cont1:
.code32