]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Fix emu on mipsel.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 11 Sep 2010 14:58:06 +0000 (16:58 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sat, 11 Sep 2010 14:58:06 +0000 (16:58 +0200)
* conf/Makefile.common (CFLAGS_PLATFORM): Add -mflush-func
=grub_cpu_flush_cache on all mips and not only yeeloong.
* configure.ac (COND_mips): New conditional.
* grub-core/Makefile.am (KERNEL_HEADER_FILES): Add libgcc on all
platforms.
* grub-core/kern/emu/cache.S (__mips__): Use _flush_cache.
* grub-core/kern/emu/full.c (grub_arch_dl_init_linker)
[GRUB_LINKER_HAVE_INIT]: New function.
(grub_emu_post_init): Likewise.
* grub-core/kern/emu/lite.c (grub_emu_post_init): Likewise.
* grub-core/kern/emu/main.c: Use grub_emu_post_init.
* include/grub/cache.h (_mips): Include mips/cache.h.
* include/grub/disk.h [GRUB_UTIL || GRUB_MACHINE_EMU]: Add missing
LVM and RAID prototypes.
* include/grub/emu/misc.h (grub_emu_post_init): New proto.
* include/grub/mips/time.h (grub_cpu_idle) [GRUB_MACHINE_EMU]: New
function.

12 files changed:
ChangeLog
conf/Makefile.common
configure.ac
grub-core/Makefile.am
grub-core/kern/emu/cache.S
grub-core/kern/emu/full.c
grub-core/kern/emu/lite.c
grub-core/kern/emu/main.c
include/grub/cache.h
include/grub/disk.h
include/grub/emu/misc.h
include/grub/mips/time.h

index 8b5a2b99cd94bfd2939eaf4df7b9a36537e985a0..e80ccad9ef9e4a12b2b50a5ff1912da2283da931 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2010-09-11  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Fix emu on mipsel.
+
+       * conf/Makefile.common (CFLAGS_PLATFORM): Add -mflush-func
+       =grub_cpu_flush_cache on all mips and not only yeeloong.
+       * configure.ac (COND_mips): New conditional.
+       * grub-core/Makefile.am (KERNEL_HEADER_FILES): Add libgcc on all
+       platforms.
+       * grub-core/kern/emu/cache.S (__mips__): Use _flush_cache.
+       * grub-core/kern/emu/full.c (grub_arch_dl_init_linker)
+       [GRUB_LINKER_HAVE_INIT]: New function.
+       (grub_emu_post_init): Likewise.
+       * grub-core/kern/emu/lite.c (grub_emu_post_init): Likewise.
+       * grub-core/kern/emu/main.c: Use grub_emu_post_init.
+       * include/grub/cache.h (_mips): Include mips/cache.h.
+       * include/grub/disk.h [GRUB_UTIL || GRUB_MACHINE_EMU]: Add missing
+       LVM and RAID prototypes.
+       * include/grub/emu/misc.h (grub_emu_post_init): New proto.
+       * include/grub/mips/time.h (grub_cpu_idle) [GRUB_MACHINE_EMU]: New
+       function.
+
 2010-09-10  Colin Watson  <cjwatson@ubuntu.com>
 
        * util/grub-install.in: Don't try to verify core.img until after
index fca0f67ae7af6fe288a055c491e38e266e623767..afa57b9864c40c072a074e8c91a798ee428cadb7 100644 (file)
@@ -1,8 +1,10 @@
 # -*- makefile -*-
 
+CFLAGS_PLATFORM=
+
 # Platform specific options
 if COND_i386_pc
-  CFLAGS_PLATFORM = -mrtd -mregparm=3
+  CFLAGS_PLATFORM += -mrtd -mregparm=3
 endif
 if COND_i386_efi
   LDFLAGS_PLATFORM = -melf_i386
@@ -11,21 +13,24 @@ if COND_x86_64_efi
   LDFLAGS_PLATFORM = -melf_x86_64
 endif
 if COND_i386_qemu
-  CFLAGS_PLATFORM = -mrtd -mregparm=3
+  CFLAGS_PLATFORM += -mrtd -mregparm=3
 endif
 if COND_i386_coreboot
-  CFLAGS_PLATFORM = -mrtd -mregparm=3
+  CFLAGS_PLATFORM += -mrtd -mregparm=3
 endif
 if COND_i386_ieee1275
-  CFLAGS_PLATFORM = -mrtd -mregparm=3
+  CFLAGS_PLATFORM += -mrtd -mregparm=3
 endif
 if COND_mips_yeeloong
-  CFLAGS_PLATFORM = -march=mips3 -mexplicit-relocs -mflush-func=grub_cpu_flush_cache
+  CFLAGS_PLATFORM += -march=mips3 -mexplicit-relocs
   CPPFLAGS_PLATFORM = -DUSE_ASCII_FAILBACK
   CCASFLAGS_PLATFORM = -march=mips3
 endif
+if COND_mips
+  CFLAGS_PLATFORM += -mflush-func=grub_cpu_flush_cache
+endif
 if COND_sparc64_ieee1275
-  CFLAGS_PLATFORM = -mno-app-regs
+  CFLAGS_PLATFORM += -mno-app-regs
   LDFLAGS_PLATFORM = -melf64_sparc -mno-relax
 endif
 
index d50dfe6dd71c8f2ac9132c8e9a5c1a564fa0d33c..9578f65188ce993d96565aabf664dccf31bef5e4 100644 (file)
@@ -900,6 +900,7 @@ AM_CONDITIONAL([COND_mips_yeeloong], [test x$target_cpu = xmips -a x$platform =
 AM_CONDITIONAL([COND_mips_qemu_mips], [test x$target_cpu = xmips -a x$platform = xqemu_mips])
 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
+AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips])
 
 AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
 AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
index 5d13d031329a015f2f0fe085a607992670fe389e..7fa00b744de0df54da9683f32815d262737b4fe3 100644 (file)
@@ -74,6 +74,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/boot.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
 
 if COND_i386_pc
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/memory.h
@@ -132,7 +133,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bitmap_scale.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
-KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/cs5536.h
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/pci.h
 KERNEL_HEADER_FILES += $(top_builddir)/include/grub/serial.h
@@ -140,11 +140,9 @@ endif
 
 if COND_powerpc_ieee1275
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
-KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
 endif
 
 if COND_sparc64_ieee1275
-KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sparc64/ieee1275/ieee1275.h
 endif
index 90a5b5396e51cbe32531c88d857e921f75828279..abd81c910f41551d05154d7dfb44019b27c82953 100644 (file)
@@ -7,7 +7,20 @@
 #elif defined(__sparc__)
 #include "../sparc64/cache.S"
 #elif defined(__mips__)
-#include "../mips/cache.S"
+/* On MIPS we must go through standard functions.  */
+#include <grub/symbol.h>
+
+FUNCTION (grub_cpu_flush_cache)
+FUNCTION (grub_arch_sync_caches)
+       .set nomacro
+       .set noreorder
+       lui $t0, %hi(_flush_cache)
+       addui $t0, $t0, %lo(_flush_cache)
+       move $a3, $zero
+       jr $t0
+        nop
+       .set reorder
+       .set macro
 #elif defined(__powerpc__)
 #include "../powerpc/cache.S"
 #else
index 0bd33337f7136c28bfc028197d22ae6a52505e5b..a5801db2f4bd7e8ab2dfea60f0872ad120d90bcb 100644 (file)
@@ -22,6 +22,7 @@
 #include <grub/kernel.h>
 #include <grub/misc.h>
 #include <grub/emu/misc.h>
+#include <grub/disk.h>
 
 void
 grub_register_exported_symbols (void)
@@ -48,3 +49,21 @@ grub_emu_init (void)
 {
   grub_no_autoload = 1;
 }
+
+#ifdef GRUB_LINKER_HAVE_INIT
+void
+grub_arch_dl_init_linker (void)
+{
+}
+#endif
+
+void
+grub_emu_post_init (void)
+{
+  grub_lvm_fini ();
+  grub_mdraid_fini ();
+  grub_raid_fini ();
+  grub_raid_init ();
+  grub_mdraid_init ();
+  grub_lvm_init ();
+}
index 9b3728717f8d748a37d4d695ba3a8c0ed1483c31..32e12a079eb4a79736bf6069053b8c6647950bd5 100644 (file)
@@ -38,3 +38,8 @@ grub_emu_init (void)
 {
   return;
 }
+
+void
+grub_emu_post_init (void)
+{
+}
index 8867f6101ddf6ce23b9269e5fa16667b5635ff9c..23b8516f1aa39ee837893688d10769f6f3386495 100644 (file)
@@ -197,12 +197,7 @@ main (int argc, char *argv[])
 
   grub_init_all ();
 
-  grub_lvm_fini ();
-  grub_mdraid_fini ();
-  grub_raid_fini ();
-  grub_raid_init ();
-  grub_mdraid_init ();
-  grub_lvm_init ();
+  grub_emu_post_init ();
 
   /* Make sure that there is a root device.  */
   if (! root_dev)
index 27e44f0a2d7b1fb6f4c66b4ecbac294d3be5843d..4f913f5c85c3e74cd9de31342010cea3eab3be39 100644 (file)
 #include <grub/symbol.h>
 #include <grub/types.h>
 
+#ifdef _mips
+#include <grub/mips/cache.h>
+#endif
+
 #if defined (__i386__) || defined (__x86_64__)
 static inline void
 grub_arch_sync_caches (void *address __attribute__ ((unused)),
index e7f807e0efbe0c10c2ef48cc140d6ad77238a24f..b41f89b38737a4451ed83e14732864f6b94083cf 100644 (file)
@@ -177,4 +177,13 @@ struct grub_disk_ata_pass_through_parms
 extern grub_err_t (* EXPORT_VAR(grub_disk_ata_pass_through)) (grub_disk_t,
                   struct grub_disk_ata_pass_through_parms *);
 
+#if defined (GRUB_UTIL) || defined (GRUB_MACHINE_EMU)
+void grub_lvm_init (void);
+void grub_mdraid_init (void);
+void grub_raid_init (void);
+void grub_lvm_fini (void);
+void grub_mdraid_fini (void);
+void grub_raid_fini (void);
+#endif
+
 #endif /* ! GRUB_DISK_HEADER */
index e9038c9160575897116137ef20bf1dd21bfc8046..972bc4efcd477fce3ded3e5948937037fa3311a4 100644 (file)
@@ -45,6 +45,7 @@ extern const char *program_name;
 void grub_emu_init (void);
 void grub_init_all (void);
 void grub_fini_all (void);
+void grub_emu_post_init (void);
 
 void grub_find_zpool_from_dir (const char *dir,
                               char **poolname, char **poolfs);
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b143a48e0a7db56498fe1a6064fb8c98f11b8c51 100644 (file)
@@ -0,0 +1,6 @@
+#ifdef GRUB_MACHINE_EMU
+static inline void
+grub_cpu_idle(void)
+{
+}
+#endif