diff --git a/ChangeLog b/ChangeLog index c0d1572a9..32d7f0958 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-11-24 Vladimir Serbinenko + + With Apple assembly in .macro environvemnt you have to use $$ instead + of $. So introduce new preprocessor macro MACRO_DOLLAR(x) which expands + to $$x on Apple and to $x on everything else. + 2013-11-24 Vladimir Serbinenko * grub-core/Makefile.am: Use correct TARGET_OBJCONV rather than diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S index 5b959b627..ee0b9d621 100644 --- a/grub-core/boot/i386/pc/boot.S +++ b/grub-core/boot/i386/pc/boot.S @@ -40,12 +40,12 @@ LOCAL(floppy_probe): * Perform floppy probe. */ - movw $probe_values - 1, %si + movw MACRO_DOLLAR(probe_values) - 1, %si LOCAL(probe_loop): /* reset floppy controller INT 13h AH=0 */ xorw %ax, %ax - int $0x13 + int MACRO_DOLLAR(0x13) incw %si movb (%si), %cl @@ -65,20 +65,20 @@ fd_probe_error_string: .asciz "Floppy" 1: /* perform read */ - movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx + movw MACRO_DOLLAR(GRUB_BOOT_MACHINE_BUFFER_SEG), %bx movw %bx, %es xorw %bx, %bx - movw $0x201, %ax - movb $0, %ch - movb $0, %dh - int $0x13 + movw MACRO_DOLLAR(0x201), %ax + movb MACRO_DOLLAR(0), %ch + movb MACRO_DOLLAR(0), %dh + int MACRO_DOLLAR(0x13) /* if error, jump to "LOCAL(probe_loop)" */ jc LOCAL(probe_loop) /* %cl is already the correct value! */ - movb $1, %dh - movb $79, %ch + movb MACRO_DOLLAR(1), %dh + movb MACRO_DOLLAR(79), %ch jmp LOCAL(final_init) .endm diff --git a/grub-core/gdb/i386/machdep.S b/grub-core/gdb/i386/machdep.S index 5825fe8ca..f96d2b9c4 100644 --- a/grub-core/gdb/i386/machdep.S +++ b/grub-core/gdb/i386/machdep.S @@ -186,11 +186,7 @@ VARIABLE(grub_gdb_stack) .text 1: .if EC -#ifdef __APPLE__ - add $$4, %esp -#else - add $4, %esp -#endif + add MACRO_DOLLAR(4), %esp .endif save_context diff --git a/include/grub/symbol.h b/include/grub/symbol.h index 89883a362..ed19f70db 100644 --- a/include/grub/symbol.h +++ b/include/grub/symbol.h @@ -27,6 +27,12 @@ /* Add an underscore to a C symbol in assembler code if needed. */ #ifndef GRUB_UTIL +#ifdef __APPLE__ +#define MACRO_DOLLAR(x) $$ ## x +#else +#define MACRO_DOLLAR(x) $ ## x +#endif + #if HAVE_ASM_USCORE #ifdef ASM_FILE # define EXT_C(sym) _ ## sym