diff --git a/ChangeLog b/ChangeLog index b94054a5a..6e2ceeb3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-11-22 Vladimir Serbinenko + + Remove -march=mips3 from TARGET_CCASFLAGS as it creates linking problem + when rest of GRUB is compiled for hisher stepping. Instead use + .set mips3/.set mips1 around cache and sync opcodes. + 2013-11-21 Vladimir Serbinenko Unify GOT/trampoline handling between PPC, MIPS and IA64 as they diff --git a/conf/Makefile.common b/conf/Makefile.common index 39d2f4d60..835aeeac5 100644 --- a/conf/Makefile.common +++ b/conf/Makefile.common @@ -12,7 +12,6 @@ if COND_mips_loongson endif if COND_mips CFLAGS_PLATFORM += -mflush-func=grub_red_herring - CCASFLAGS_PLATFORM = -march=mips3 endif if COND_sparc64_ieee1275 CFLAGS_PLATFORM += -mno-app-regs diff --git a/grub-core/kern/mips/cache.S b/grub-core/kern/mips/cache.S index 141c030e9..cca4b30fe 100644 --- a/grub-core/kern/mips/cache.S +++ b/grub-core/kern/mips/cache.S @@ -20,11 +20,11 @@ FUNCTION (grub_arch_sync_dma_caches) move $t0, $t2 subu $t1, $t3, $t2 1: - cache 1, 0($t0) + cache_op 1, 0($t0) #ifdef GRUB_MACHINE_MIPS_LOONGSON - cache 1, 1($t0) - cache 1, 2($t0) - cache 1, 3($t0) + cache_op 1, 1($t0) + cache_op 1, 2($t0) + cache_op 1, 3($t0) addiu $t1, $t1, -0x20 bne $t1, $zero, 1b @@ -34,36 +34,36 @@ FUNCTION (grub_arch_sync_dma_caches) bne $t1, $zero, 1b addiu $t0, $t0, 0x4 #endif - sync + sync_op move $t0, $t2 subu $t1, $t3, $t2 2: #ifdef GRUB_MACHINE_MIPS_LOONGSON - cache 0, 0($t0) + cache_op 0, 0($t0) addiu $t1, $t1, -0x20 bne $t1, $zero, 2b addiu $t0, $t0, 0x20 #else - cache 0, 0($t0) + cache_op 0, 0($t0) addiu $t1, $t1, -4 bne $t1, $zero, 2b addiu $t0, $t0, 0x4 #endif - sync + sync_op move $t0, $t2 subu $t1, $t3, $t2 2: #ifdef GRUB_MACHINE_MIPS_LOONGSON - cache 23, 0($t0) + cache_op 23, 0($t0) addiu $t1, $t1, -0x20 bne $t1, $zero, 2b addiu $t0, $t0, 0x20 #else - cache 23, 0($t0) + cache_op 23, 0($t0) addiu $t1, $t1, -0x4 bne $t1, $zero, 2b addiu $t0, $t0, 0x4 #endif - sync + sync_op jr $ra \ No newline at end of file diff --git a/grub-core/kern/mips/cache_flush.S b/grub-core/kern/mips/cache_flush.S index a5435cf51..89961a0f7 100644 --- a/grub-core/kern/mips/cache_flush.S +++ b/grub-core/kern/mips/cache_flush.S @@ -1,3 +1,17 @@ +#ifndef CACHE_OP_DEFINED +#define CACHE_OP_DEFINED 1 + .macro cache_op op addr + .set mips3 + cache \op, \addr + .set mips1 + .endm + .macro sync_op + .set mips3 + sync + .set mips1 + .endm +#endif + move $t2, $a0 addu $t3, $a0, $a1 srl $t2, $t2, 5 @@ -8,12 +22,12 @@ move $t0, $t2 subu $t1, $t3, $t2 1: - cache 1, 0($t0) + cache_op 1, 0($t0) /* All four ways. */ #ifdef GRUB_MACHINE_MIPS_LOONGSON - cache 1, 1($t0) - cache 1, 2($t0) - cache 1, 3($t0) + cache_op 1, 1($t0) + cache_op 1, 2($t0) + cache_op 1, 3($t0) addiu $t1, $t1, -0x20 bne $t1, $zero, 1b addiu $t0, $t0, 0x20 @@ -23,11 +37,11 @@ bne $t1, $zero, 1b addiu $t0, $t0, 0x4 #endif - sync + sync_op move $t0, $t2 subu $t1, $t3, $t2 2: - cache 0, 0($t0) + cache_op 0, 0($t0) #ifdef GRUB_MACHINE_MIPS_LOONGSON addiu $t1, $t1, -0x20 bne $t1, $zero, 2b @@ -37,4 +51,4 @@ bne $t1, $zero, 2b addiu $t0, $t0, 0x4 #endif - sync + sync_op