+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
# -*- 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
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
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])
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
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
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
#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
#include <grub/kernel.h>
#include <grub/misc.h>
#include <grub/emu/misc.h>
+#include <grub/disk.h>
void
grub_register_exported_symbols (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 ();
+}
{
return;
}
+
+void
+grub_emu_post_init (void)
+{
+}
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)
#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)),
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 */
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);
+#ifdef GRUB_MACHINE_EMU
+static inline void
+grub_cpu_idle(void)
+{
+}
+#endif