diff --git a/ChangeLog b/ChangeLog index 61d686e07..e9081361d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-06-26 Vladimir Serbinenko + + Apple fixes. + + * grub-core/lib/i386/relocator16.S: Use correct __APPLE__ and not + __APPLE_ + * grub-core/lib/i386/relocator_common.S [__APPLE__]: Fix gdtdesc + definition. + * grub-core/lib/i386/relocator64.S [__APPLE__]: Assemble jmp manually. + 2012-06-26 Vladimir Serbinenko Handle slash in HFS label. diff --git a/grub-core/lib/i386/relocator16.S b/grub-core/lib/i386/relocator16.S index 0e2b341a7..e79d87551 100644 --- a/grub-core/lib/i386/relocator16.S +++ b/grub-core/lib/i386/relocator16.S @@ -84,7 +84,7 @@ VARIABLE(grub_relocator16_start) movl %esi, %eax shrl $4, %eax -#ifdef __APPLE_ +#ifdef __APPLE__ LOCAL(segment_offset) = LOCAL (segment) - LOCAL (base) LOCAL(idt_offset) = LOCAL(relocator16_idt) - LOCAL (base) LOCAL(cont2_offset) = LOCAL (cont2) - LOCAL(base) diff --git a/grub-core/lib/i386/relocator64.S b/grub-core/lib/i386/relocator64.S index bb086418c..e4648d818 100644 --- a/grub-core/lib/i386/relocator64.S +++ b/grub-core/lib/i386/relocator64.S @@ -109,7 +109,12 @@ VARIABLE(grub_relocator64_rdx) payload and makes this implementation easier. */ cld +#ifdef __APPLE__ + .byte 0xff, 0x25 + .quad 0 +#else jmp *LOCAL(jump_addr) (%rip) +#endif LOCAL(jump_addr): VARIABLE(grub_relocator64_rip) diff --git a/grub-core/lib/i386/relocator_common.S b/grub-core/lib/i386/relocator_common.S index 8fa95044f..b9d99e10e 100644 --- a/grub-core/lib/i386/relocator_common.S +++ b/grub-core/lib/i386/relocator_common.S @@ -58,7 +58,7 @@ LOCAL(cont0): LOCAL(jump_vector_offset) = LOCAL(jump_vector) - LOCAL(base) LOCAL(gdt_offset) = LOCAL(gdt) - LOCAL(base) LOCAL(gdt_addr_offset) = LOCAL(gdt_addr) - LOCAL(base) - LOCAL(gdtdesc_offset) = LOCAL(gdt_addr) - LOCAL(base) + LOCAL(gdtdesc_offset) = LOCAL(gdtdesc) - LOCAL(base) lea LOCAL(cont1_offset) (RSI, 1), RAX movl %eax, LOCAL(jump_vector_offset) (RSI, 1)