* RISC OS/ARM port
@ 2004-05-22 15:21 Timothy Baldwin
2004-05-23 17:03 ` Yoshinori K. Okuji
0 siblings, 1 reply; 9+ messages in thread
From: Timothy Baldwin @ 2004-05-22 15:21 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1.1: Type: text/plain, Size: 1615 bytes --]
I am working on a port to (ex-Acorn) RISC OS, which currently gets as far as
rescue mode.
RISC OS is supplied in ROM or flash with many systems, including desktop
systems made by Acorn and it's sucessors, various set-top boxes, and the Bush
Internet TV. I have used upper case thoughout for RISC OS as riscos is a
different operating system.
Things to do:
Discs and partitions.
RISC OS native filesystem access.
Network support (using BSD sockets).
Colour and graphic console support.
An interface for writing to files.
A file copy command, to use when upgrading grub.
Serial port support.
Security (disabling keyboard drivers during boot)
Access to RISC OS commands.
A memory defragmenter.
And some OS loaders of course.
How should console errors be handled? Currently they are fatal, and won't
happen unless the console is redirected (assuming USB drivers don't
complain).
Currently in the design of GRUB 2 there is an incorrect asumption that filing
systems are either based on disks or networks. I propose to rectify this
whilst keeping code size down by:
Creating a struct grub_fs_device_driver, which contains a pointer to either
struct grub_disk_dev or struct grub_net_dev, and maintain a single linked
list of disk drivers, net drivers, and standalone filing systems.
Convert struct grub_device from pointers to a unoin to simplify the code by
removing memory allocations.
--
Member AFFS, WYLUG, SWP (UK), ANL, RESPECT, Leeds SA, Leeds Anti-war coalition
No to software patents! No to DRM/EUCD - hands off our computers!
[-- Attachment #1.2: patch1.diff --]
[-- Type: text/x-diff, Size: 66327 bytes --]
--- grub2.orig/configure.ac 2004-05-21 12:14:37.000000000 +0100
+++ grub2.patch1/configure.ac 2004-05-19 00:26:16.000000000 +0100
@@ -23,12 +23,14 @@
case "$host_cpu" in
i[[3456]]86) host_cpu=i386 ;;
powerpc) ;;
+ arm) ;;
*) AC_MSG_ERROR([unsupported CPU type]) ;;
esac
case "$host_cpu"-"$host_vendor" in
i386-*) host_vendor=pc ;;
powerpc-*) host_vendor=ieee1275 ;;
+ arm-*) host_vendor=RISC_OS ;;
*) AC_MSG_ERROR([unsupported machine type]) ;;
esac
diff -urN grub2.orig/conf/arm-RISC_OS.mk grub2.patch1/conf/arm-RISC_OS.mk
--- grub2.orig/conf/arm-RISC_OS.mk 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/conf/arm-RISC_OS.mk 2004-05-21 12:00:01.000000000 +0100
@@ -0,0 +1,696 @@
+# -*- makefile -*-
+
+COMMON_ASFLAGS = -nostdinc -fno-builtin
+COMMON_CFLAGS = -fno-builtin
+
+# Images.
+pkgdata_IMAGES = grub_RISC_OS.img
+
+
+# For grub_RISC_OS.img.
+grub_RISC_OS_img_SOURCES = kern/arm/aif_header.S kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/i386/dl.c kern/arm/RISC_OS/startup.S kern/arm/setjmp.S\
+ kern/env.c kern/arm/RISC_OS/init.c disk/i386/pc/partition.c\
+ term/arm/RISC_OS/console.c term/arm/RISC_OS/console-asm.S\
+ symlist.c
+CLEANFILES += grub_RISC_OS.img grub_RISC_OS.exec grub_RISC_OS_img-kern_arm_aif_header.o grub_RISC_OS_img-kern_main.o grub_RISC_OS_img-kern_device.o grub_RISC_OS_img-kern_disk.o grub_RISC_OS_img-kern_dl.o grub_RISC_OS_img-kern_file.o grub_RISC_OS_img-kern_fs.o grub_RISC_OS_img-kern_err.o grub_RISC_OS_img-kern_misc.o grub_RISC_OS_img-kern_mm.o grub_RISC_OS_img-kern_loader.o grub_RISC_OS_img-kern_rescue.o grub_RISC_OS_img-kern_term.o grub_RISC_OS_img-kern_i386_dl.o grub_RISC_OS_img-kern_arm_RISC_OS_startup.o grub_RISC_OS_img-kern_arm_setjmp.o grub_RISC_OS_img-kern_env.o grub_RISC_OS_img-kern_arm_RISC_OS_init.o grub_RISC_OS_img-disk_i386_pc_partition.o grub_RISC_OS_img-term_arm_RISC_OS_console.o grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o grub_RISC_OS_img-symlist.o
+MOSTLYCLEANFILES += grub_RISC_OS_img-kern_arm_aif_header.d grub_RISC_OS_img-kern_main.d grub_RISC_OS_img-kern_device.d grub_RISC_OS_img-kern_disk.d grub_RISC_OS_img-kern_dl.d grub_RISC_OS_img-kern_file.d grub_RISC_OS_img-kern_fs.d grub_RISC_OS_img-kern_err.d grub_RISC_OS_img-kern_misc.d grub_RISC_OS_img-kern_mm.d grub_RISC_OS_img-kern_loader.d grub_RISC_OS_img-kern_rescue.d grub_RISC_OS_img-kern_term.d grub_RISC_OS_img-kern_i386_dl.d grub_RISC_OS_img-kern_arm_RISC_OS_startup.d grub_RISC_OS_img-kern_arm_setjmp.d grub_RISC_OS_img-kern_env.d grub_RISC_OS_img-kern_arm_RISC_OS_init.d grub_RISC_OS_img-disk_i386_pc_partition.d grub_RISC_OS_img-term_arm_RISC_OS_console.d grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d grub_RISC_OS_img-symlist.d
+
+grub_RISC_OS.img: grub_RISC_OS.exec
+ $(OBJCOPY) -O binary -R .note -R .comment $< $@
+
+grub_RISC_OS.exec: grub_RISC_OS_img-kern_arm_aif_header.o grub_RISC_OS_img-kern_main.o grub_RISC_OS_img-kern_device.o grub_RISC_OS_img-kern_disk.o grub_RISC_OS_img-kern_dl.o grub_RISC_OS_img-kern_file.o grub_RISC_OS_img-kern_fs.o grub_RISC_OS_img-kern_err.o grub_RISC_OS_img-kern_misc.o grub_RISC_OS_img-kern_mm.o grub_RISC_OS_img-kern_loader.o grub_RISC_OS_img-kern_rescue.o grub_RISC_OS_img-kern_term.o grub_RISC_OS_img-kern_i386_dl.o grub_RISC_OS_img-kern_arm_RISC_OS_startup.o grub_RISC_OS_img-kern_arm_setjmp.o grub_RISC_OS_img-kern_env.o grub_RISC_OS_img-kern_arm_RISC_OS_init.o grub_RISC_OS_img-disk_i386_pc_partition.o grub_RISC_OS_img-term_arm_RISC_OS_console.o grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o grub_RISC_OS_img-symlist.o
+ $(CC) -o $@ $^ $(LDFLAGS) $(grub_RISC_OS_img_LDFLAGS)
+
+grub_RISC_OS_img-kern_arm_aif_header.o: kern/arm/aif_header.S
+ $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_aif_header.d: kern/arm/aif_header.S
+ set -e; $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,aif_header\.o[ :]*,grub_RISC_OS_img-kern_arm_aif_header.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_aif_header.d
+
+grub_RISC_OS_img-kern_main.o: kern/main.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_main.d: kern/main.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,main\.o[ :]*,grub_RISC_OS_img-kern_main.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_main.d
+
+grub_RISC_OS_img-kern_device.o: kern/device.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_device.d: kern/device.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,device\.o[ :]*,grub_RISC_OS_img-kern_device.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_device.d
+
+grub_RISC_OS_img-kern_disk.o: kern/disk.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_disk.d: kern/disk.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,disk\.o[ :]*,grub_RISC_OS_img-kern_disk.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_disk.d
+
+grub_RISC_OS_img-kern_dl.o: kern/dl.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_dl.d: kern/dl.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,dl\.o[ :]*,grub_RISC_OS_img-kern_dl.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_dl.d
+
+grub_RISC_OS_img-kern_file.o: kern/file.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_file.d: kern/file.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,file\.o[ :]*,grub_RISC_OS_img-kern_file.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_file.d
+
+grub_RISC_OS_img-kern_fs.o: kern/fs.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_fs.d: kern/fs.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,fs\.o[ :]*,grub_RISC_OS_img-kern_fs.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_fs.d
+
+grub_RISC_OS_img-kern_err.o: kern/err.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_err.d: kern/err.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,err\.o[ :]*,grub_RISC_OS_img-kern_err.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_err.d
+
+grub_RISC_OS_img-kern_misc.o: kern/misc.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_misc.d: kern/misc.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,misc\.o[ :]*,grub_RISC_OS_img-kern_misc.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_misc.d
+
+grub_RISC_OS_img-kern_mm.o: kern/mm.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_mm.d: kern/mm.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,mm\.o[ :]*,grub_RISC_OS_img-kern_mm.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_mm.d
+
+grub_RISC_OS_img-kern_loader.o: kern/loader.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_loader.d: kern/loader.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,loader\.o[ :]*,grub_RISC_OS_img-kern_loader.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_loader.d
+
+grub_RISC_OS_img-kern_rescue.o: kern/rescue.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_rescue.d: kern/rescue.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,rescue\.o[ :]*,grub_RISC_OS_img-kern_rescue.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_rescue.d
+
+grub_RISC_OS_img-kern_term.o: kern/term.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_term.d: kern/term.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,term\.o[ :]*,grub_RISC_OS_img-kern_term.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_term.d
+
+grub_RISC_OS_img-kern_i386_dl.o: kern/i386/dl.c
+ $(CC) -Ikern/i386 -I$(srcdir)/kern/i386 $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_i386_dl.d: kern/i386/dl.c
+ set -e; $(CC) -Ikern/i386 -I$(srcdir)/kern/i386 $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,dl\.o[ :]*,grub_RISC_OS_img-kern_i386_dl.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_i386_dl.d
+
+grub_RISC_OS_img-kern_arm_RISC_OS_startup.o: kern/arm/RISC_OS/startup.S
+ $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_RISC_OS_startup.d: kern/arm/RISC_OS/startup.S
+ set -e; $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,startup\.o[ :]*,grub_RISC_OS_img-kern_arm_RISC_OS_startup.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_RISC_OS_startup.d
+
+grub_RISC_OS_img-kern_arm_setjmp.o: kern/arm/setjmp.S
+ $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_setjmp.d: kern/arm/setjmp.S
+ set -e; $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,setjmp\.o[ :]*,grub_RISC_OS_img-kern_arm_setjmp.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_setjmp.d
+
+grub_RISC_OS_img-kern_env.o: kern/env.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_env.d: kern/env.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,env\.o[ :]*,grub_RISC_OS_img-kern_env.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_env.d
+
+grub_RISC_OS_img-kern_arm_RISC_OS_init.o: kern/arm/RISC_OS/init.c
+ $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_RISC_OS_init.d: kern/arm/RISC_OS/init.c
+ set -e; $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,init\.o[ :]*,grub_RISC_OS_img-kern_arm_RISC_OS_init.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_RISC_OS_init.d
+
+grub_RISC_OS_img-disk_i386_pc_partition.o: disk/i386/pc/partition.c
+ $(CC) -Idisk/i386/pc -I$(srcdir)/disk/i386/pc $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-disk_i386_pc_partition.d: disk/i386/pc/partition.c
+ set -e; $(CC) -Idisk/i386/pc -I$(srcdir)/disk/i386/pc $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,partition\.o[ :]*,grub_RISC_OS_img-disk_i386_pc_partition.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-disk_i386_pc_partition.d
+
+grub_RISC_OS_img-term_arm_RISC_OS_console.o: term/arm/RISC_OS/console.c
+ $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-term_arm_RISC_OS_console.d: term/arm/RISC_OS/console.c
+ set -e; $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,console\.o[ :]*,grub_RISC_OS_img-term_arm_RISC_OS_console.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-term_arm_RISC_OS_console.d
+
+grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o: term/arm/RISC_OS/console-asm.S
+ $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d: term/arm/RISC_OS/console-asm.S
+ set -e; $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,console\-asm\.o[ :]*,grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d
+
+grub_RISC_OS_img-symlist.o: symlist.c
+ $(CC) -I. -I$(srcdir)/. $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-symlist.d: symlist.c
+ set -e; $(CC) -I. -I$(srcdir)/. $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,symlist\.o[ :]*,grub_RISC_OS_img-symlist.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-symlist.d
+
+grub_RISC_OS_img_HEADERS = boot.h device.h disk.h dl.h elf.h err.h \
+ file.h fs.h kernel.h loader.h misc.h mm.h net.h rescue.h symbol.h \
+ term.h types.h arg.h env.h
+grub_RISC_OS_img_CFLAGS = $(COMMON_CFLAGS)
+grub_RISC_OS_img_ASFLAGS = $(COMMON_ASFLAGS)
+grub_RISC_OS_img_LDFLAGS = `$(CC) -print-libgcc-file-name` $(srcdir)/kern/arm/aif_header.lds -nostdlib -Wl,-N,-Ttext,8000
+
+MOSTLYCLEANFILES += symlist.c grub_RISC_OS_syms.lst
+DEFSYMFILES += grub_RISC_OS_syms.lst
+
+symlist.c: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) gensymlist.sh
+ sh $(srcdir)/gensymlist.sh $(filter %.h,$^) > $@
+
+grub_RISC_OS_syms.lst: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) genkernsyms.sh
+ sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@
+
+# Utilities.
+#bin_UTILITIES = grub-mkimage
+#sbin_UTILITIES = grub-setup grub-emu
+noinst_UTILITIES = genmoddep
+
+# For grub-mkimage.
+grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
+ util/resolve.c
+grub_mkimage_LDFLAGS = -llzo
+
+# For grub-setup.
+grub_setup_SOURCES = util/i386/pc/grub-setup.c util/i386/pc/biosdisk.c \
+ util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
+ kern/err.c kern/misc.c disk/i386/pc/partition.c fs/fat.c fs/ext2.c \
+ kern/file.c kern/fs.c kern/env.c
+
+# For grub
+grub_emu_SOURCES = kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/loader.c kern/rescue.c kern/term.c \
+ disk/i386/pc/partition.c kern/env.c commands/ls.c \
+ commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \
+ util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c \
+ normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \
+ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c
+grub_emu_LDFLAGS = -lncurses
+
+# For genmoddep.
+genmoddep_SOURCES = util/genmoddep.c
+CLEANFILES += genmoddep genmoddep-util_genmoddep.o
+MOSTLYCLEANFILES += genmoddep-util_genmoddep.d
+
+genmoddep: genmoddep-util_genmoddep.o
+ $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(genmoddep_LDFLAGS)
+
+genmoddep-util_genmoddep.o: util/genmoddep.c
+ $(BUILD_CC) -Iutil -I$(srcdir)/util $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(genmoddep_CFLAGS) -c -o $@ $<
+
+genmoddep-util_genmoddep.d: util/genmoddep.c
+ set -e; $(BUILD_CC) -Iutil -I$(srcdir)/util $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(genmoddep_CFLAGS) -M $< | sed 's,genmoddep\.o[ :]*,genmoddep-util_genmoddep.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include genmoddep-util_genmoddep.d
+
+
+# Modules.
+pkgdata_MODULES = fat.mod ext2.mod normal.mod hello.mod \
+ font.mod ls.mod boot.mod cmp.mod cat.mod terminal.mod
+
+# For fat.mod.
+fat_mod_SOURCES = fs/fat.c
+CLEANFILES += fat.mod mod-fat.o mod-fat.c pre-fat.o fat_mod-fs_fat.o def-fat.lst und-fat.lst
+MOSTLYCLEANFILES += fat_mod-fs_fat.d
+DEFSYMFILES += def-fat.lst
+UNDSYMFILES += und-fat.lst
+
+fat.mod: pre-fat.o mod-fat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-fat.o: fat_mod-fs_fat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-fat.o: mod-fat.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -c -o $@ $<
+
+mod-fat.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'fat' $< > $@ || (rm -f $@; exit 1)
+
+def-fat.lst: pre-fat.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 fat/' > $@
+
+und-fat.lst: pre-fat.o
+ echo 'fat' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+fat_mod-fs_fat.o: fs/fat.c
+ $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -c -o $@ $<
+
+fat_mod-fs_fat.d: fs/fat.c
+ set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -M $< | sed 's,fat\.o[ :]*,fat_mod-fs_fat.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include fat_mod-fs_fat.d
+
+fat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ext2.mod.
+ext2_mod_SOURCES = fs/ext2.c
+CLEANFILES += ext2.mod mod-ext2.o mod-ext2.c pre-ext2.o ext2_mod-fs_ext2.o def-ext2.lst und-ext2.lst
+MOSTLYCLEANFILES += ext2_mod-fs_ext2.d
+DEFSYMFILES += def-ext2.lst
+UNDSYMFILES += und-ext2.lst
+
+ext2.mod: pre-ext2.o mod-ext2.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-ext2.o: ext2_mod-fs_ext2.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-ext2.o: mod-ext2.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -c -o $@ $<
+
+mod-ext2.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'ext2' $< > $@ || (rm -f $@; exit 1)
+
+def-ext2.lst: pre-ext2.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ext2/' > $@
+
+und-ext2.lst: pre-ext2.o
+ echo 'ext2' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ext2_mod-fs_ext2.o: fs/ext2.c
+ $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -c -o $@ $<
+
+ext2_mod-fs_ext2.d: fs/ext2.c
+ set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -M $< | sed 's,ext2\.o[ :]*,ext2_mod-fs_ext2.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include ext2_mod-fs_ext2.d
+
+ext2_mod_CFLAGS = $(COMMON_CFLAGS)
+
+
+# For normal.mod.
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/main.c \
+ normal/menu.c normal/arg.c
+CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o def-normal.lst und-normal.lst
+MOSTLYCLEANFILES += normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_arg.d
+DEFSYMFILES += def-normal.lst
+UNDSYMFILES += und-normal.lst
+
+normal.mod: pre-normal.o mod-normal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-normal.o: normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-normal.o: mod-normal.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+mod-normal.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'normal' $< > $@ || (rm -f $@; exit 1)
+
+def-normal.lst: pre-normal.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 normal/' > $@
+
+und-normal.lst: pre-normal.o
+ echo 'normal' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+normal_mod-normal_cmdline.o: normal/cmdline.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_cmdline.d: normal/cmdline.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,cmdline\.o[ :]*,normal_mod-normal_cmdline.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_cmdline.d
+
+normal_mod-normal_command.o: normal/command.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_command.d: normal/command.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,command\.o[ :]*,normal_mod-normal_command.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_command.d
+
+normal_mod-normal_main.o: normal/main.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_main.d: normal/main.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,main\.o[ :]*,normal_mod-normal_main.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_main.d
+
+normal_mod-normal_menu.o: normal/menu.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_menu.d: normal/menu.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,menu\.o[ :]*,normal_mod-normal_menu.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_menu.d
+
+normal_mod-normal_arg.o: normal/arg.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_arg.d: normal/arg.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,arg\.o[ :]*,normal_mod-normal_arg.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_arg.d
+
+normal_mod_CFLAGS = $(COMMON_CFLAGS)
+normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
+
+# For hello.mod.
+hello_mod_SOURCES = hello/hello.c
+CLEANFILES += hello.mod mod-hello.o mod-hello.c pre-hello.o hello_mod-hello_hello.o def-hello.lst und-hello.lst
+MOSTLYCLEANFILES += hello_mod-hello_hello.d
+DEFSYMFILES += def-hello.lst
+UNDSYMFILES += und-hello.lst
+
+hello.mod: pre-hello.o mod-hello.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-hello.o: hello_mod-hello_hello.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-hello.o: mod-hello.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -c -o $@ $<
+
+mod-hello.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'hello' $< > $@ || (rm -f $@; exit 1)
+
+def-hello.lst: pre-hello.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 hello/' > $@
+
+und-hello.lst: pre-hello.o
+ echo 'hello' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+hello_mod-hello_hello.o: hello/hello.c
+ $(CC) -Ihello -I$(srcdir)/hello $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -c -o $@ $<
+
+hello_mod-hello_hello.d: hello/hello.c
+ set -e; $(CC) -Ihello -I$(srcdir)/hello $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -M $< | sed 's,hello\.o[ :]*,hello_mod-hello_hello.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include hello_mod-hello_hello.d
+
+hello_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For boot.mod.
+boot_mod_SOURCES = commands/boot.c
+CLEANFILES += boot.mod mod-boot.o mod-boot.c pre-boot.o boot_mod-commands_boot.o def-boot.lst und-boot.lst
+MOSTLYCLEANFILES += boot_mod-commands_boot.d
+DEFSYMFILES += def-boot.lst
+UNDSYMFILES += und-boot.lst
+
+boot.mod: pre-boot.o mod-boot.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-boot.o: boot_mod-commands_boot.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-boot.o: mod-boot.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -c -o $@ $<
+
+mod-boot.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'boot' $< > $@ || (rm -f $@; exit 1)
+
+def-boot.lst: pre-boot.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 boot/' > $@
+
+und-boot.lst: pre-boot.o
+ echo 'boot' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+boot_mod-commands_boot.o: commands/boot.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -c -o $@ $<
+
+boot_mod-commands_boot.d: commands/boot.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -M $< | sed 's,boot\.o[ :]*,boot_mod-commands_boot.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include boot_mod-commands_boot.d
+
+boot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For terminal.mod.
+terminal_mod_SOURCES = commands/terminal.c
+CLEANFILES += terminal.mod mod-terminal.o mod-terminal.c pre-terminal.o terminal_mod-commands_terminal.o def-terminal.lst und-terminal.lst
+MOSTLYCLEANFILES += terminal_mod-commands_terminal.d
+DEFSYMFILES += def-terminal.lst
+UNDSYMFILES += und-terminal.lst
+
+terminal.mod: pre-terminal.o mod-terminal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-terminal.o: terminal_mod-commands_terminal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-terminal.o: mod-terminal.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -c -o $@ $<
+
+mod-terminal.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'terminal' $< > $@ || (rm -f $@; exit 1)
+
+def-terminal.lst: pre-terminal.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 terminal/' > $@
+
+und-terminal.lst: pre-terminal.o
+ echo 'terminal' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+terminal_mod-commands_terminal.o: commands/terminal.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -c -o $@ $<
+
+terminal_mod-commands_terminal.d: commands/terminal.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -M $< | sed 's,terminal\.o[ :]*,terminal_mod-commands_terminal.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include terminal_mod-commands_terminal.d
+
+terminal_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ls.mod.
+ls_mod_SOURCES = commands/ls.c
+CLEANFILES += ls.mod mod-ls.o mod-ls.c pre-ls.o ls_mod-commands_ls.o def-ls.lst und-ls.lst
+MOSTLYCLEANFILES += ls_mod-commands_ls.d
+DEFSYMFILES += def-ls.lst
+UNDSYMFILES += und-ls.lst
+
+ls.mod: pre-ls.o mod-ls.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-ls.o: ls_mod-commands_ls.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-ls.o: mod-ls.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -c -o $@ $<
+
+mod-ls.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'ls' $< > $@ || (rm -f $@; exit 1)
+
+def-ls.lst: pre-ls.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ls/' > $@
+
+und-ls.lst: pre-ls.o
+ echo 'ls' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ls_mod-commands_ls.o: commands/ls.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -c -o $@ $<
+
+ls_mod-commands_ls.d: commands/ls.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -M $< | sed 's,ls\.o[ :]*,ls_mod-commands_ls.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include ls_mod-commands_ls.d
+
+ls_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cmp.mod.
+cmp_mod_SOURCES = commands/cmp.c
+CLEANFILES += cmp.mod mod-cmp.o mod-cmp.c pre-cmp.o cmp_mod-commands_cmp.o def-cmp.lst und-cmp.lst
+MOSTLYCLEANFILES += cmp_mod-commands_cmp.d
+DEFSYMFILES += def-cmp.lst
+UNDSYMFILES += und-cmp.lst
+
+cmp.mod: pre-cmp.o mod-cmp.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-cmp.o: cmp_mod-commands_cmp.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-cmp.o: mod-cmp.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -c -o $@ $<
+
+mod-cmp.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'cmp' $< > $@ || (rm -f $@; exit 1)
+
+def-cmp.lst: pre-cmp.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 cmp/' > $@
+
+und-cmp.lst: pre-cmp.o
+ echo 'cmp' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+cmp_mod-commands_cmp.o: commands/cmp.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -c -o $@ $<
+
+cmp_mod-commands_cmp.d: commands/cmp.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -M $< | sed 's,cmp\.o[ :]*,cmp_mod-commands_cmp.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include cmp_mod-commands_cmp.d
+
+cmp_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cat.mod.
+cat_mod_SOURCES = commands/cat.c
+CLEANFILES += cat.mod mod-cat.o mod-cat.c pre-cat.o cat_mod-commands_cat.o def-cat.lst und-cat.lst
+MOSTLYCLEANFILES += cat_mod-commands_cat.d
+DEFSYMFILES += def-cat.lst
+UNDSYMFILES += und-cat.lst
+
+cat.mod: pre-cat.o mod-cat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-cat.o: cat_mod-commands_cat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-cat.o: mod-cat.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -c -o $@ $<
+
+mod-cat.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'cat' $< > $@ || (rm -f $@; exit 1)
+
+def-cat.lst: pre-cat.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 cat/' > $@
+
+und-cat.lst: pre-cat.o
+ echo 'cat' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+cat_mod-commands_cat.o: commands/cat.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -c -o $@ $<
+
+cat_mod-commands_cat.d: commands/cat.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -M $< | sed 's,cat\.o[ :]*,cat_mod-commands_cat.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include cat_mod-commands_cat.d
+
+cat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For font.mod.
+font_mod_SOURCES = font/manager.c
+CLEANFILES += font.mod mod-font.o mod-font.c pre-font.o font_mod-font_manager.o def-font.lst und-font.lst
+MOSTLYCLEANFILES += font_mod-font_manager.d
+DEFSYMFILES += def-font.lst
+UNDSYMFILES += und-font.lst
+
+font.mod: pre-font.o mod-font.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-font.o: font_mod-font_manager.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-font.o: mod-font.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -c -o $@ $<
+
+mod-font.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'font' $< > $@ || (rm -f $@; exit 1)
+
+def-font.lst: pre-font.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 font/' > $@
+
+und-font.lst: pre-font.o
+ echo 'font' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+font_mod-font_manager.o: font/manager.c
+ $(CC) -Ifont -I$(srcdir)/font $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -c -o $@ $<
+
+font_mod-font_manager.d: font/manager.c
+ set -e; $(CC) -Ifont -I$(srcdir)/font $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -M $< | sed 's,manager\.o[ :]*,font_mod-font_manager.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include font_mod-font_manager.d
+
+font_mod_CFLAGS = $(COMMON_CFLAGS)
+
+CLEANFILES += moddep.lst
+pkgdata_DATA += moddep.lst
+moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep
+ cat $(DEFSYMFILES) /dev/null | ./genmoddep $(UNDSYMFILES) > $@ \
+ || (rm -f $@; exit 1)
diff -urN grub2.orig/conf/arm-RISC_OS.rmk grub2.patch1/conf/arm-RISC_OS.rmk
--- grub2.orig/conf/arm-RISC_OS.rmk 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/conf/arm-RISC_OS.rmk 2004-05-21 11:59:58.000000000 +0100
@@ -0,0 +1,110 @@
+# -*- makefile -*-
+
+COMMON_ASFLAGS = -nostdinc -fno-builtin
+COMMON_CFLAGS = -fno-builtin
+
+# Images.
+pkgdata_IMAGES = grub_RISC_OS.img
+
+
+# For grub_RISC_OS.img.
+grub_RISC_OS_img_SOURCES = kern/arm/aif_header.S kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/i386/dl.c kern/arm/RISC_OS/startup.S kern/arm/setjmp.S\
+ kern/env.c kern/arm/RISC_OS/init.c disk/i386/pc/partition.c\
+ term/arm/RISC_OS/console.c term/arm/RISC_OS/console-asm.S\
+ symlist.c
+grub_RISC_OS_img_HEADERS = boot.h device.h disk.h dl.h elf.h err.h \
+ file.h fs.h kernel.h loader.h misc.h mm.h net.h rescue.h symbol.h \
+ term.h types.h arg.h env.h
+grub_RISC_OS_img_CFLAGS = $(COMMON_CFLAGS)
+grub_RISC_OS_img_ASFLAGS = $(COMMON_ASFLAGS)
+grub_RISC_OS_img_LDFLAGS = `$(CC) -print-libgcc-file-name` $(srcdir)/kern/arm/aif_header.lds -nostdlib -Wl,-N,-Ttext,8000
+
+MOSTLYCLEANFILES += symlist.c grub_RISC_OS_syms.lst
+DEFSYMFILES += grub_RISC_OS_syms.lst
+
+symlist.c: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) gensymlist.sh
+ sh $(srcdir)/gensymlist.sh $(filter %.h,$^) > $@
+
+grub_RISC_OS_syms.lst: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) genkernsyms.sh
+ sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@
+
+# Utilities.
+#bin_UTILITIES = grub-mkimage
+#sbin_UTILITIES = grub-setup grub-emu
+noinst_UTILITIES = genmoddep
+
+# For grub-mkimage.
+grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
+ util/resolve.c
+grub_mkimage_LDFLAGS = -llzo
+
+# For grub-setup.
+grub_setup_SOURCES = util/i386/pc/grub-setup.c util/i386/pc/biosdisk.c \
+ util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
+ kern/err.c kern/misc.c disk/i386/pc/partition.c fs/fat.c fs/ext2.c \
+ kern/file.c kern/fs.c kern/env.c
+
+# For grub
+grub_emu_SOURCES = kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/loader.c kern/rescue.c kern/term.c \
+ disk/i386/pc/partition.c kern/env.c commands/ls.c \
+ commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \
+ util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c \
+ normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \
+ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c
+grub_emu_LDFLAGS = -lncurses
+
+# For genmoddep.
+genmoddep_SOURCES = util/genmoddep.c
+
+# Modules.
+pkgdata_MODULES = fat.mod ext2.mod normal.mod hello.mod \
+ font.mod ls.mod boot.mod cmp.mod cat.mod terminal.mod
+
+# For fat.mod.
+fat_mod_SOURCES = fs/fat.c
+fat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ext2.mod.
+ext2_mod_SOURCES = fs/ext2.c
+ext2_mod_CFLAGS = $(COMMON_CFLAGS)
+
+
+# For normal.mod.
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/main.c \
+ normal/menu.c normal/arg.c
+normal_mod_CFLAGS = $(COMMON_CFLAGS)
+normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
+
+# For hello.mod.
+hello_mod_SOURCES = hello/hello.c
+hello_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For boot.mod.
+boot_mod_SOURCES = commands/boot.c
+boot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For terminal.mod.
+terminal_mod_SOURCES = commands/terminal.c
+terminal_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ls.mod.
+ls_mod_SOURCES = commands/ls.c
+ls_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cmp.mod.
+cmp_mod_SOURCES = commands/cmp.c
+cmp_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cat.mod.
+cat_mod_SOURCES = commands/cat.c
+cat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For font.mod.
+font_mod_SOURCES = font/manager.c
+font_mod_CFLAGS = $(COMMON_CFLAGS)
+
diff -urN grub2.orig/include/grub/arm/RISC_OS/console.h grub2.patch1/include/grub/arm/RISC_OS/console.h
--- grub2.orig/include/grub/arm/RISC_OS/console.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/console.h 2004-05-20 19:56:35.000000000 +0100
@@ -0,0 +1,57 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_CONSOLE_MACHINE_HEADER
+#define GRUB_CONSOLE_MACHINE_HEADER 1
+
+/* Define scan codes. */
+#define GRUB_CONSOLE_KEY_LEFT 0x4B00
+#define GRUB_CONSOLE_KEY_RIGHT 0x4D00
+#define GRUB_CONSOLE_KEY_UP 0x4800
+#define GRUB_CONSOLE_KEY_DOWN 0x5000
+#define GRUB_CONSOLE_KEY_IC 0x5200
+#define GRUB_CONSOLE_KEY_DC 0x5300
+#define GRUB_CONSOLE_KEY_BACKSPACE 0x0008
+#define GRUB_CONSOLE_KEY_HOME 0x4700
+#define GRUB_CONSOLE_KEY_END 0x4F00
+#define GRUB_CONSOLE_KEY_NPAGE 0x4900
+#define GRUB_CONSOLE_KEY_PPAGE 0x5100
+
+#ifndef ASM_FILE
+
+#include <grub/types.h>
+#include <grub/symbol.h>
+#include <grub/term.h>
+
+/* These are global to share code between C and asm. */
+void grub_console_real_putchar (int c);
+int EXPORT_FUNC(grub_console_checkkey) (void);
+int EXPORT_FUNC(grub_console_getkey) (void);
+grub_uint16_t grub_console_getxy (void);
+void grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y);
+void grub_console_cls (void);
+void grub_console_setcursor (int on);
+void grub_console_setcolourstate (grub_term_color_state state);
+
+/* Initialize the console system. */
+void grub_console_init (void);
+
+#endif
+
+#endif /* ! GRUB_CONSOLE_MACHINE_HEADER */
diff -urN grub2.orig/include/grub/arm/RISC_OS/partition.h grub2.patch1/include/grub/arm/RISC_OS/partition.h
--- grub2.orig/include/grub/arm/RISC_OS/partition.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/partition.h 2004-04-04 14:46:01.000000000 +0100
@@ -0,0 +1,242 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_PARTITION_HEADER
+#define GRUB_PARTITION_HEADER 1
+
+#include <grub/symbol.h>
+#include <grub/types.h>
+#include <grub/err.h>
+
+/* The signature. */
+#define GRUB_PARTITION_SIGNATURE 0xaa55
+
+/* This is not a flag actually, but used as if it were a flag. */
+#define GRUB_PARTITION_TYPE_HIDDEN_FLAG 0x10
+
+/* DOS partition types. */
+#define GRUB_PARTITION_TYPE_NONE 0
+#define GRUB_PARTITION_TYPE_FAT12 1
+#define GRUB_PARTITION_TYPE_FAT16_LT32M 4
+#define GRUB_PARTITION_TYPE_EXTENDED 5
+#define GRUB_PARTITION_TYPE_FAT16_GT32M 6
+#define GRUB_PARTITION_TYPE_FAT32 0xb
+#define GRUB_PARTITION_TYPE_FAT32_LBA 0xc
+#define GRUB_PARTITION_TYPE_FAT16_LBA 0xe
+#define GRUB_PARTITION_TYPE_WIN95_EXTENDED 0xf
+#define GRUB_PARTITION_TYPE_EZD 0x55
+#define GRUB_PARTITION_TYPE_MINIX 0x80
+#define GRUB_PARTITION_TYPE_LINUX_MINIX 0x81
+#define GRUB_PARTITION_TYPE_EXT2FS 0x83
+#define GRUB_PARTITION_TYPE_LINUX_EXTENDED 0x85
+#define GRUB_PARTITION_TYPE_VSTAFS 0x9e
+#define GRUB_PARTITION_TYPE_FREEBSD 0xa5
+#define GRUB_PARTITION_TYPE_OPENBSD 0xa6
+#define GRUB_PARTITION_TYPE_NETBSD 0xa9
+#define GRUB_PARTITION_TYPE_LINUX_RAID 0xfd
+
+/* Constants for BSD disk label. */
+#define GRUB_PARTITION_BSD_LABEL_SECTOR 1
+#define GRUB_PARTITION_BSD_LABEL_MAGIC 0x82564557
+#define GRUB_PARTITION_BSD_MAX_ENTRIES 8
+
+/* BSD partition types. */
+#define GRUB_PARTITION_BSD_TYPE_UNUSED 0
+#define GRUB_PARTITION_BSD_TYPE_SWAP 1
+#define GRUB_PARTITION_BSD_TYPE_V6 2
+#define GRUB_PARTITION_BSD_TYPE_V7 3
+#define GRUB_PARTITION_BSD_TYPE_SYSV 4
+#define GRUB_PARTITION_BSD_TYPE_V71K 5
+#define GRUB_PARTITION_BSD_TYPE_V8 6
+#define GRUB_PARTITION_BSD_TYPE_BSDFFS 7
+#define GRUB_PARTITION_BSD_TYPE_MSDOS 8
+#define GRUB_PARTITION_BSD_TYPE_BSDLFS 9
+#define GRUB_PARTITION_BSD_TYPE_OTHER 10
+#define GRUB_PARTITION_BSD_TYPE_HPFS 11
+#define GRUB_PARTITION_BSD_TYPE_ISO9660 12
+#define GRUB_PARTITION_BSD_TYPE_BOOT 13
+
+/* FreeBSD-specific types. */
+#define GRUB_PARTITION_FREEBSD_TYPE_VINUM 14
+#define GRUB_PARTITION_FREEBSD_TYPE_RAID 15
+#define GRUB_PARTITION_FREEBSD_TYPE_JFS2 21
+
+/* NetBSD-specific types. */
+#define GRUB_PARTITION_NETBSD_TYPE_ADOS 14
+#define GRUB_PARTITION_NETBSD_TYPE_HFS 15
+#define GRUB_PARTITION_NETBSD_TYPE_FILECORE 16
+#define GRUB_PARTITION_NETBSD_TYPE_EXT2FS 17
+#define GRUB_PARTITION_NETBSD_TYPE_NTFS 18
+#define GRUB_PARTITION_NETBSD_TYPE_RAID 19
+#define GRUB_PARTITION_NETBSD_TYPE_CCD 20
+#define GRUB_PARTITION_NETBSD_TYPE_JFS2 21
+#define GRUB_PARTITION_NETBSD_TYPE_APPLEUFS 22
+
+/* OpenBSD-specific types. */
+#define GRUB_PARTITION_OPENBSD_TYPE_ADOS 14
+#define GRUB_PARTITION_OPENBSD_TYPE_HFS 15
+#define GRUB_PARTITION_OPENBSD_TYPE_FILECORE 16
+#define GRUB_PARTITION_OPENBSD_TYPE_EXT2FS 17
+#define GRUB_PARTITION_OPENBSD_TYPE_NTFS 18
+#define GRUB_PARTITION_OPENBSD_TYPE_RAID 19
+
+/* The BSD partition entry. */
+struct grub_partition_bsd_entry
+{
+ grub_uint32_t size;
+ grub_uint32_t offset;
+ grub_uint32_t fragment_size;
+ grub_uint8_t fs_type;
+ grub_uint8_t fs_fragments;
+ grub_uint16_t fs_cylinders;
+} __attribute__ ((packed));
+
+/* The BSD disk label. Only define members useful for GRUB. */
+struct grub_partition_disk_label
+{
+ grub_uint32_t magic;
+ grub_uint8_t padding[128];
+ grub_uint32_t magic2;
+ grub_uint16_t checksum;
+ grub_uint16_t num_partitions;
+ grub_uint32_t boot_size;
+ grub_uint32_t superblock_size;
+ struct grub_partition_bsd_entry entries[GRUB_PARTITION_BSD_MAX_ENTRIES];
+} __attribute__ ((packed));
+
+/* The partition entry. */
+struct grub_partition_entry
+{
+ /* If active, 0x80, otherwise, 0x00. */
+ grub_uint8_t flag;
+
+ /* The head of the start. */
+ grub_uint8_t start_head;
+
+ /* (S | ((C >> 2) & 0xC0)) where S is the sector of the start and C
+ is the cylinder of the start. Note that S is counted from one. */
+ grub_uint8_t start_sector;
+
+ /* (C & 0xFF) where C is the cylinder of the start. */
+ grub_uint8_t start_cylinder;
+
+ /* The partition type. */
+ grub_uint8_t type;
+
+ /* The end versions of start_head, start_sector and start_cylinder,
+ respectively. */
+ grub_uint8_t end_head;
+ grub_uint8_t end_sector;
+ grub_uint8_t end_cylinder;
+
+ /* The start sector. Note that this is counted from zero. */
+ grub_uint32_t start;
+
+ /* The length in sector units. */
+ grub_uint32_t length;
+} __attribute__ ((packed));
+
+/* The structure of MBR. */
+struct grub_partition_mbr
+{
+ /* The code area (actually, including BPB). */
+ grub_uint8_t code[446];
+
+ /* Four partition entries. */
+ struct grub_partition_entry entries[4];
+
+ /* The signature 0xaa55. */
+ grub_uint16_t signature;
+} __attribute__ ((packed));
+
+/* Partition description. */
+struct grub_partition
+{
+ /* The start sector. */
+ unsigned long start;
+
+ /* The length in sector units. */
+ unsigned long len;
+
+ /* The offset of the partition table. */
+ unsigned long offset;
+
+ /* The offset of the extended partition. */
+ unsigned long ext_offset;
+
+ /* The index of this partition in the partition table. */
+ int index;
+
+ /* The DOS partition number. */
+ int dos_part;
+
+ /* The BSD partition number (a == 0). */
+ int bsd_part;
+
+ /* The DOS partition type. */
+ int dos_type;
+
+ /* The BSD partition type. */
+ int bsd_type;
+};
+typedef struct grub_partition *grub_partition_t;
+
+struct grub_disk;
+
+grub_partition_t EXPORT_FUNC(grub_partition_probe) (struct grub_disk *disk,
+ const char *str);
+grub_err_t EXPORT_FUNC(grub_partition_iterate) (struct grub_disk *disk,
+ int (*hook) (const grub_partition_t partition));
+char *EXPORT_FUNC(grub_partition_get_name) (const grub_partition_t partition);
+
+static inline unsigned long
+grub_partition_get_start (const grub_partition_t p)
+{
+ return p->start;
+}
+
+static inline unsigned long
+grub_partition_get_len (const grub_partition_t p)
+{
+ return p->len;
+}
+
+static inline int
+grub_partition_is_empty (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_NONE);
+}
+
+static inline int
+grub_partition_is_extended (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_EXTENDED
+ || type == GRUB_PARTITION_TYPE_WIN95_EXTENDED
+ || type == GRUB_PARTITION_TYPE_LINUX_EXTENDED);
+}
+
+static inline int
+grub_partition_is_bsd (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_FREEBSD
+ || type == GRUB_PARTITION_TYPE_OPENBSD
+ || type == GRUB_PARTITION_TYPE_NETBSD);
+}
+
+#endif /* ! GRUB_PARTITION_HEADER */
diff -urN grub2.orig/include/grub/arm/RISC_OS/time.h grub2.patch1/include/grub/arm/RISC_OS/time.h
--- grub2.orig/include/grub/arm/RISC_OS/time.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/time.h 2004-05-19 10:55:26.000000000 +0100
@@ -0,0 +1,33 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef KERNEL_TIME_HEADER
+#define KERNEL_TIME_HEADER 1
+
+#ifdef GRUB_UTIL
+# include <time.h>
+# define GRUB_TICKS_PER_SECOND CLOCKS_PER_SEC
+#else
+# define GRUB_TICKS_PER_SECOND 100
+#endif
+
+/* Return the real time in ticks. */
+grub_uint32_t grub_get_rtc (void);
+
+#endif /* ! KERNEL_TIME_HEADER */
diff -urN grub2.orig/include/grub/arm/setjmp.h grub2.patch1/include/grub/arm/setjmp.h
--- grub2.orig/include/grub/arm/setjmp.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/setjmp.h 2004-05-19 00:39:16.000000000 +0100
@@ -0,0 +1,25 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_SETJMP_CPU_HEADER
+#define GRUB_SETJMP_CPU_HEADER 1
+
+typedef unsigned long grub_jmp_buf[11];
+
+#endif /* ! GRUB_SETJMP_CPU_HEADER */
diff -urN grub2.orig/include/grub/arm/types.h grub2.patch1/include/grub/arm/types.h
--- grub2.orig/include/grub/arm/types.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/types.h 2004-05-19 00:41:04.000000000 +0100
@@ -0,0 +1,32 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_TYPES_CPU_HEADER
+#define GRUB_TYPES_CPU_HEADER 1
+
+/* The size of void *. */
+#define GRUB_HOST_SIZEOF_VOID_P 4
+
+/* The size of long. */
+#define GRUB_HOST_SIZEOF_LONG 4
+
+/* ARM is little-endian. (Or big-endian!! - but we don't support that yet) */
+#undef GRUB_HOST_WORDS_BIGENDIAN
+
+#endif /* ! GRUB_TYPES_CPU_HEADER */
diff -urN grub2.orig/include/grub/symbol.h grub2.patch1/include/grub/symbol.h
--- grub2.orig/include/grub/symbol.h 2004-05-21 12:14:37.000000000 +0100
+++ grub2.patch1/include/grub/symbol.h 2004-05-18 22:48:26.000000000 +0100
@@ -29,8 +29,8 @@
# define EXT_C(sym) sym
#endif
-#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), @function ; EXT_C(x):
-#define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), @object ; EXT_C(x):
+#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x):
+#define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), "object" ; EXT_C(x):
/* Mark an exported symbol. */
#define EXPORT_FUNC(x) x
diff -urN grub2.orig/kern/arm/aif_header.lds grub2.patch1/kern/arm/aif_header.lds
--- grub2.orig/kern/arm/aif_header.lds 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/aif_header.lds 2004-05-21 11:55:49.000000000 +0100
@@ -0,0 +1,23 @@
+/* aif_header.lds - Calculate values for AIF header */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+grub_aif_text_size = __data_start - 0x8000;
+grub_aif_data_size = _edata - __data_start;
+grub_aif_bss_size = _end - _edata;
diff -urN grub2.orig/kern/arm/aif_header.S grub2.patch1/kern/arm/aif_header.S
--- grub2.orig/kern/arm/aif_header.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/aif_header.S 2004-05-21 11:55:54.000000000 +0100
@@ -0,0 +1,68 @@
+/* aif_header.S - AIF header */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * aword with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+ .global _start
+_start: nop
+ nop
+ bl zeroinit
+ bl grub_arm_startup
+lock: b lock @ "Program exit instruction" (never reached)
+ .word grub_aif_text_size
+ .word grub_aif_data_size
+ .word 0 @ Debug data size
+zisize: .word grub_aif_bss_size
+ .word 0 @ No Debug data
+ .word _start
+ .word 0 @ Workspace for self-moving image (not used)
+ .word 32 @ Yes, we work in 32bit PC modes.
+ .word __data_start
+ .word 0, 0 @ Unused
+ nop @ Initialise debugger (NOT!!)
+
+zeroinit:
+ ldr r0, =__bss_start
+ ldr r4, zisize
+
+ @ Move appended modules out of the way
+ add r1, r0, r4
+ ldr r2, EXT_C(grub_total_module_size)
+1: ldr r3, [r0, r2]
+ str r3, [r1, r2]
+ subs r2, r2, #4
+ bcs 1b
+
+ @ Zero BSS area
+ mov r1, #0
+1: str r1, [r0], #4
+ subs r4, r4, #4
+ bcs 1b
+ mov pc, lr
+
+ .ltorg
+ .org _start + 128
+
+ @ Size of appended modules
+VARIABLE(grub_total_module_size)
+ .word 0
+VARIABLE(grub_end_addr)
+ .word _end
diff -urN grub2.orig/kern/arm/RISC_OS/init.c grub2.patch1/kern/arm/RISC_OS/init.c
--- grub2.orig/kern/arm/RISC_OS/init.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/RISC_OS/init.c 2004-05-21 11:38:09.000000000 +0100
@@ -0,0 +1,40 @@
+/* init.c - RISC OS Initialisation */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/kernel.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/machine/console.h>
+#include <grub/env.h>
+
+extern grub_addr_t grub_RISC_OS_memory_limit;
+
+void
+grub_machine_init ()
+{
+ //grub_RISC_OS_message("Hello World!\n\r");
+ grub_console_init ();
+ grub_mm_init_region ((void *) grub_end_addr + grub_total_module_size,
+ grub_RISC_OS_memory_limit - (grub_end_addr +
+ grub_total_module_size));
+ grub_env_set ("prefix", "(native)ADFS::0/$");
+ grub_printf ("Hello World!\n");
+ //grub_stop();
+}
diff -urN grub2.orig/kern/arm/RISC_OS/startup.S grub2.patch1/kern/arm/RISC_OS/startup.S
--- grub2.orig/kern/arm/RISC_OS/startup.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/RISC_OS/startup.S 2004-05-21 11:59:14.000000000 +0100
@@ -0,0 +1,119 @@
+/* startup.S - RISC OS Initialisation*/
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+#define OS_ChangeEnvironment 0x40
+#define OS_GenerateError 0x2B
+#define OS_Exit 0x11
+#define OS_CLI 0x05
+#define OS_ReadMonotonicTime 0x42
+
+
+ .data
+handlers:
+ .word 0
+VARIABLE(grub_RISC_OS_memory_limit)
+ .word 0, 0, 0
+ .word 6, error_handler, 0, error_buffer
+ .word 11, grub_stop, 0, 0
+ .word 13, exception_registers, 0, 0
+ .word 14
+VARIABLE(grub_RISC_OS_application_space)
+ .word 0, 0, 0
+ .word 16, upcall_handler, 0, 0
+
+ .text
+swap_handlers:
+ mov r5, lr
+ ldr r4, =handlers
+1: ldmia r4, {r0-r3}
+ swi OS_ChangeEnvironment
+ stmia r4!, {r0-r3}
+ teq r0, #16
+ bne 1b
+ mov pc, r5
+
+error_handler:
+ @ TODO: do longjmp
+ mov r6, r0
+ bl swap_handlers
+ add r0, r6, #4
+ swi OS_GenerateError
+
+upcall_handler:
+ subs r0, r0, #256
+ moveq pc, lr
+ @beq upcall_newapp
+ teq r0, #1
+ add r0, r0, #256
+ @beq upcall_movemem
+ movne pc, lr
+upcall_movemem:
+ movs r1, r1
+ movpl r0, #0
+ mov pc, lr
+
+upcall_newapp:
+ @stmfd sp!, {r0-r5, lr}
+ @bl swap_handlers
+ @ldmfd sp!, {r0-r5, pc}
+
+ .globl grub_arm_startup
+grub_arm_startup:
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov fp, #0
+ bl grub_main
+FUNCTION(grub_stop)
+ @ TODO: at_exit
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov r0, #0
+ swi OS_Exit
+
+FUNCTION(grub_RISC_OS_chain)
+ mov r6, r0
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov r0, r5
+ mov r1, #0
+ swi OS_CLI
+ swi OS_Exit
+
+FUNCTION(grub_get_rtc)
+ swi OS_ReadMonotonicTime
+ mov pc, lr
+
+
+ .bss
+stack_limit:
+ .space 0x4000
+stack_end:
+exception_registers:
+ .space 17 * 4
+error_buffer:
+ .space 260
+
+VARIABLE(grub_os_area_addr)
+VARIABLE(grub_os_area_size)
+colourstate:
+ .space 4
diff -urN grub2.orig/kern/arm/setjmp.S grub2.patch1/kern/arm/setjmp.S
--- grub2.orig/kern/arm/setjmp.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/setjmp.S 2004-05-21 11:55:46.000000000 +0100
@@ -0,0 +1,31 @@
+/* aif_header.S - setjmp and longjmp */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * aword with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+FUNCTION(grub_setjmp)
+ stmia r0, {r4-r14}
+ mov pc, lr
+
+FUNCTION(grub_longjmp)
+ ldmia r0, {r4-r14}
+ mov r0, r1
+ mov pc, lr
diff -urN grub2.orig/term/arm/RISC_OS/console-asm.S grub2.patch1/term/arm/RISC_OS/console-asm.S
--- grub2.orig/term/arm/RISC_OS/console-asm.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/term/arm/RISC_OS/console-asm.S 2004-05-21 11:59:12.000000000 +0100
@@ -0,0 +1,92 @@
+/* startup.S - RISC OS Console*/
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+#define OS_Write0 0x02
+#define OS_WriteC 0x00
+#define OS_WriteI 0x100
+#define OS_WriteN 0x46
+#define OS_Byte 0x06
+#define OS_ReadC 0x04
+
+FUNCTION(grub_RISC_OS_message)
+ swi OS_Write0
+ mov pc, lr
+
+FUNCTION(grub_console_gotoxy)
+ swi OS_WriteI + 31
+ swi OS_WriteC
+ mov r0, r1
+FUNCTION(grub_console_real_putchar)
+ swi OS_WriteC
+ mov pc, lr
+
+FUNCTION(grub_console_getxy)
+ mov r0, #165
+ swi OS_Byte
+ orr r0, r2, r1, lsl #8
+ mov pc, lr
+
+FUNCTION(grub_console_setcursor)
+ swi OS_WriteI + 23
+ swi OS_WriteI + 1
+ swi OS_WriteC
+pnulls: adr r0, nulls
+ mov r1, #8
+ swi OS_WriteN
+ mov pc, lr
+
+FUNCTION(grub_console_setcolourstate)
+ ldr r2, =colourstate
+ and r0, r0, #2
+ ldrb r1, [r2]
+ teq r0, r1
+ moveq pc, lr
+ strb r0, [r2]
+ swi OS_WriteI + 23 @ Swap text foreground/background colours
+ swi OS_WriteI + 17
+ swi OS_WriteI + 5
+ b pnulls
+
+
+FUNCTION(grub_console_cls)
+ swi OS_WriteI + 12
+ mov pc, lr
+
+FUNCTION(grub_console_getkey)
+ swi OS_ReadC
+ mov pc, lr
+
+FUNCTION(grub_console_checkkey)
+ mov r0, #129 @ Read key with time limit
+ mov r1, #0 @ Timeout low byte
+ mov r2, #0 @ Timeout high byte ( < 0x80 )
+ swi OS_Byte
+ movs r2, r2 @ r2 = 0 if key read
+ moveq r0, r1 @ r1 = key if read
+ mvnne r0, #0
+ mov pc, lr
+
+ .bss
+colourstate:
+ .space 4
+
\ No newline at end of file
diff -urN grub2.orig/term/arm/RISC_OS/console.c grub2.patch1/term/arm/RISC_OS/console.c
--- grub2.orig/term/arm/RISC_OS/console.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/term/arm/RISC_OS/console.c 2004-05-20 19:38:23.000000000 +0100
@@ -0,0 +1,97 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002,2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/machine/console.h>
+#include <grub/term.h>
+#include <grub/types.h>
+
+
+static void
+grub_console_putchar (grub_uint32_t c)
+{
+ if (c > 0x7f)
+ {
+ /* Map some unicode characters to the VGA font, if possible. */
+ switch (c)
+ {
+ case 0x2190: /* left arrow */
+ c = 0x1b;
+ break;
+ case 0x2191: /* up arrow */
+ c = 0x18;
+ break;
+ case 0x2192: /* right arrow */
+ c = 0x1a;
+ break;
+ case 0x2193: /* down arrow */
+ c = 0x19;
+ break;
+ case 0x2501: /* horizontal line */
+ c = 0xc4;
+ break;
+ case 0x2503: /* vertical line */
+ c = 0xb3;
+ break;
+ case 0x250F: /* upper-left corner */
+ c = 0xda;
+ break;
+ case 0x2513: /* upper-right corner */
+ c = 0xbf;
+ break;
+ case 0x2517: /* lower-left corner */
+ c = 0xc0;
+ break;
+ case 0x251B: /* lower-right corner */
+ c = 0xd9;
+ break;
+
+ default:
+ c = '?';
+ break;
+ }
+ }
+
+ grub_console_real_putchar (c);
+}
+
+
+static struct grub_term grub_console_term =
+ {
+ .name = "console",
+ .init = 0,
+ .fini = 0,
+ .putchar = grub_console_putchar,
+ .checkkey = grub_console_checkkey,
+ .getkey = grub_console_getkey,
+ .getxy = grub_console_getxy,
+ .gotoxy = grub_console_gotoxy,
+ .cls = grub_console_cls,
+ .setcolorstate = grub_console_setcolourstate,
+ .setcolor = 0,
+ .setcursor = grub_console_setcursor,
+ .flags = 0,
+ .next = 0
+ };
+
+void
+grub_console_init (void)
+{
+ grub_term_register (&grub_console_term);
+ grub_term_set_current (&grub_console_term);
+}
[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: RISC OS/ARM port
2004-05-22 15:21 RISC OS/ARM port Timothy Baldwin
@ 2004-05-23 17:03 ` Yoshinori K. Okuji
2004-05-23 17:24 ` Stefan Reinauer
2004-05-27 22:22 ` Timothy Baldwin
0 siblings, 2 replies; 9+ messages in thread
From: Yoshinori K. Okuji @ 2004-05-23 17:03 UTC (permalink / raw)
To: The development of GRUB 2
On Saturday 22 May 2004 17:21, Timothy Baldwin wrote:
> How should console errors be handled? Currently they are fatal, and
> won't happen unless the console is redirected (assuming USB drivers
> don't complain).
I don't know. Probably there is no other way than treating them as fatal
errors.
> Currently in the design of GRUB 2 there is an incorrect asumption
> that filing systems are either based on disks or networks. I propose
> to rectify this whilst keeping code size down by:
>
> Creating a struct grub_fs_device_driver, which contains a pointer to
> either struct grub_disk_dev or struct grub_net_dev, and maintain a
> single linked list of disk drivers, net drivers, and standalone
> filing systems.
>
> Convert struct grub_device from pointers to a unoin to simplify the
> code by removing memory allocations.
Could you elaborate on your idea more? What is "standalone filing
systems"? How do they work?
Thanks,
Okuji
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: RISC OS/ARM port
2004-05-23 17:03 ` Yoshinori K. Okuji
@ 2004-05-23 17:24 ` Stefan Reinauer
2004-05-27 22:22 ` Timothy Baldwin
1 sibling, 0 replies; 9+ messages in thread
From: Stefan Reinauer @ 2004-05-23 17:24 UTC (permalink / raw)
To: The development of GRUB 2
* Yoshinori K. Okuji <okuji@enbug.org> [040523 19:03]:
> On Saturday 22 May 2004 17:21, Timothy Baldwin wrote:
> > How should console errors be handled? Currently they are fatal, and
> > won't happen unless the console is redirected (assuming USB drivers
> > don't complain).
>
> I don't know. Probably there is no other way than treating them as fatal
> errors.
What exactly does this mean for booting? The most fatal thing for a
bootloader to be used by server machines are error messages like "no
keyboard found. press f1 to continue".
Basically, if no console is found by grub, it should continue to boot
the default operating system. Bailing out is definitely no option.
Stefan.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: RISC OS/ARM port
2004-05-23 17:03 ` Yoshinori K. Okuji
2004-05-23 17:24 ` Stefan Reinauer
@ 2004-05-27 22:22 ` Timothy Baldwin
2004-05-28 14:48 ` Marco Gerards
1 sibling, 1 reply; 9+ messages in thread
From: Timothy Baldwin @ 2004-05-27 22:22 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1.1: Type: text/plain, Size: 3689 bytes --]
On Sunday 23 May 2004 18:03, Yoshinori K. Okuji wrote:
> On Saturday 22 May 2004 17:21, Timothy Baldwin wrote:
> > Currently in the design of GRUB 2 there is an incorrect asumption
> > that filing systems are either based on disks or networks. I propose
> > to rectify this whilst keeping code size down by:
> >
> > Creating a struct grub_fs_device_driver, which contains a pointer to
> > either struct grub_disk_dev or struct grub_net_dev, and maintain a
> > single linked list of disk drivers, net drivers, and standalone
> > filing systems.
> >
> > Convert struct grub_device from pointers to a unoin to simplify the
> > code by removing memory allocations.
>
> Could you elaborate on your idea more? What is "standalone filing
> systems"? How do they work?
By "standalone filing systems" I was refering to filing systems which do not
use the Grub disk or network interfaces, the example which concerns me at
present is an interface to the filing system API of a (ROM-resident) host
operating system.
Currently Grub supports it own filing systems on disks supported by external
drivers, with paths such as:
(fd0)/boot/grub/normal.mod
(ADFS::0)/normal.mod
The structure is there to support network filing system, again with paths
identifying network devices, with filing systems determined by the network
device. It may make more sense to have the filing system in the path.
I intend to add to the RISC OS port I am working on support for the native
RISC OS filing system API, with paths such as:
(native)ADFS::0/$/boot/grub/normal.mod
(native_untranslated)ADFS::0.$.boot.grub.normal/mod
(native)<foobar$Dir>/boot/grub/normal.mod
(native_untranslated)<foobar$Dir>.boot.grub.normal/mod
I propose that instead of having seperate lists of network device drivers and
disk drivers, we would have a unified list.
The name and next members are removed from struct grub_disk_dev and struct
grub_net_dev. A linked list is keep of a new sructure:
struct grub_dev_driver
{
const char *name;
/* Open the device named NAME, and set up DEV. */
grub_err_t (*open) (const char *name, struct grub_dev *dev);
struct grub_dev_driver *next;
union
{
struct grub_disk_dev disk;
struct grub_net_dev net;
void *data;
};
};
Disk drivers would have a modified grub_disk_open as their open function. The
list list walking code in grub_disk_open would be moved to grub_device_open,
and the register/dergister functions moved from disk.c to device.c.
struct grub_device
{
/* The binding filesystem. */
struct grub_fs *fs;
struct grub_disk *disk;
struct grub_net *net;
};
The member "fs" is moved from "struct grub_net" to "struct grub_device", to
allow for filing systems which don't use grub's disk or network support.
My RISC OS port now has support for discs, modules and both rescue mode and
normal mode command prompts work, except some console problems.
To deal with variable console sizes I propose creating a new member in "struct
grub_term", and removing asumptions:
grub_uint16_t (*getsize) (void);
The width of the terminal croodinates should be increased as they are in
danger of overflowing, I suggest to 16 bits.
And finally a fix for a couple of (almost) null pointer derefrences, patch
attached.
* kern/dl.c (grub_dl_load_file): Check for null pointer returned
from grub_dl_load_core.
* genmk.rb (PModule): Allocate storage to common symbols
when linking modules.
--
Member AFFS, WYLUG, SWP (UK), ANL, RESPECT, Leeds SA, Leeds Anti-war coalition
No to software patents! No to DRM/EUCD - hands off our computers!
[-- Attachment #1.2: patch2.diff --]
[-- Type: text/x-diff, Size: 624 bytes --]
--- grub2.orig/kern/dl.c 2004-04-04 14:46:01.000000000 +0100
+++ grub2/kern/dl.c 2004-05-26 21:09:44.000000000 +0100
@@ -548,6 +548,8 @@
goto failed;
mod = grub_dl_load_core (core, size);
+ if (! mod) goto failed;
+
mod->ref_count = 0;
failed:
--- grub2.orig/genmk.rb 2004-04-04 14:45:59.000000000 +0100
+++ grub2/genmk.rb 2004-05-27 00:37:19.000000000 +0100
@@ -117,7 +117,7 @@
#{@name}: #{pre_obj} #{mod_obj}
-rm -f $@
- $(LD) -r -o $@ $^
+ $(LD) -r -d -o $@ $^
$(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
#{pre_obj}: #{objs_str}
[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: RISC OS/ARM port
2004-05-27 22:22 ` Timothy Baldwin
@ 2004-05-28 14:48 ` Marco Gerards
2004-05-31 11:09 ` Timothy Baldwin
0 siblings, 1 reply; 9+ messages in thread
From: Marco Gerards @ 2004-05-28 14:48 UTC (permalink / raw)
To: The development of GRUB 2
Timothy Baldwin <T.E.Baldwin99@members.leeds.ac.uk> writes:
> I intend to add to the RISC OS port I am working on support for the native
> RISC OS filing system API, with paths such as:
>
> (native)ADFS::0/$/boot/grub/normal.mod
> (native_untranslated)ADFS::0.$.boot.grub.normal/mod
> (native)<foobar$Dir>/boot/grub/normal.mod
> (native_untranslated)<foobar$Dir>.boot.grub.normal/mod
Personally I do not like this too much. That means GRUB works
different on every architecture. For the PPC port I worked hard on
keeping sane device name.
On the apple there are aliases that can be used to lookup the
open firmware device. Some of these aliases are: hd, cd, zip, ata0
(IIRC). I like that much more than the device paths for open firmware
that are used by yaboot:
/pci@80000000/mac-io@10/ata0@20000/disk@0,0
You can not expect a user to type that all the time, it sucks! :)
Of course it should be possible to use the full device path on the
PPC.
How about RISC OS? Can't you just do the same? Is it, for example,
possible to enumerate the devices? If it is not, can you please keep
the syntax like: ($DEVICE)/$PATH?
I assume that ADFS is the filesystem of RISC OS. Can't you access the
raw disk and write a filesystem for GRUB to access the filesystem? I
like that better because BIOSes are often limited or buggy and it
becomes easier to use older BIOSes without this fancy support, etc.
Perhaps I am just misunderstanding the issue, I have never used RISC
OS, I don't even know what it is. But what I want to say is that we
should keep things consistent.
> The member "fs" is moved from "struct grub_net" to "struct grub_device", to
> allow for filing systems which don't use grub's disk or network support.
Why is this required? Normally you can just write a filesystem to
access the disk. But this is just what I said above.
> My RISC OS port now has support for discs, modules and both rescue mode and
> normal mode command prompts work, except some console problems.
This is really nice!
What are the console problems? Doesn't the console support something
similar like ANSI or VT100 or such?
> To deal with variable console sizes I propose creating a new member in "struct
> grub_term", and removing asumptions:
Absolutely, that assumption should be changed. And it should be
possible to resize the terminal.
> grub_uint16_t (*getsize) (void);
Shouldn't that be:
void (*getxy) (grub_uint16_t *width, grub_uint16_t *height);
> The width of the terminal croodinates should be increased as they are in
> danger of overflowing, I suggest to 16 bits.
I agree. The same is true for `getxy', I think this interface would
be better:
void (*getxy) (grub_uint16_t *x, grub_uint16_t *y);
> And finally a fix for a couple of (almost) null pointer derefrences, patch
> attached.
That's great. Unfortunately I don't have much time next weeks to do
everything I planned to do. After that I can work almost full time on
Free Software projects during my summer vacation.
Hopefully someone else can have a look at your patch and check it in
if it is correct, it doesn't seem to be much work.
Thanks,
Marco
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: RISC OS/ARM port
2004-05-28 14:48 ` Marco Gerards
@ 2004-05-31 11:09 ` Timothy Baldwin
2004-06-01 17:30 ` Yoshinori K. Okuji
0 siblings, 1 reply; 9+ messages in thread
From: Timothy Baldwin @ 2004-05-31 11:09 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1: Type: text/plain, Size: 6181 bytes --]
On Friday 28 May 2004 15:48, Marco Gerards wrote:
> Timothy Baldwin <T.E.Baldwin99@members.leeds.ac.uk> writes:
> > I intend to add to the RISC OS port I am working on support for the
> > native RISC OS filing system API, with paths such as:
> >
> > (native)ADFS::0/$/boot/grub/normal.mod
> > (native_untranslated)ADFS::0.$.boot.grub.normal/mod
> > (native)<foobar$Dir>/boot/grub/normal.mod
> > (native_untranslated)<foobar$Dir>.boot.grub.normal/mod
>
> Personally I do not like this too much. That means GRUB works
> different on every architecture.
(native_untranslated) is scrapped.
(native) will pass the path to the RISC OS API after applying the usual UNIX
to RISC OS path conversion. Other ports to operating systems (eg, old MacOS,
Windows CE, EPOC32) could use the same syntax.
> For the PPC port I worked hard on
> keeping sane device name.
>
> On the apple there are aliases that can be used to lookup the
> open firmware device. Some of these aliases are: hd, cd, zip, ata0
> (IIRC). I like that much more than the device paths for open firmware
> that are used by yaboot:
> /pci@80000000/mac-io@10/ata0@20000/disk@0,0
>
> You can not expect a user to type that all the time, it sucks! :)
>
> Of course it should be possible to use the full device path on the
> PPC.
>
> How about RISC OS? Can't you just do the same? Is it, for example,
> possible to enumerate the devices?
It is possible to enumerate the devices, but not in a reliably stable fashion,
further the devices can be any of discs, partitions, files, and the ram disc.
I can and will create aliases (fd0) to (fd3) for floppy drives.
> If it is not, can you please keep
> the syntax like: ($DEVICE)/$PATH?
Already does for grub filing systems on disks, will add support for native
filing systems on disks using this syntax.
>
> I assume that ADFS is the filesystem of RISC OS.
It is the main disc-based filing system, and is alternativley called Filecore,
but in the context I used it is the name of a device driver. The RISC OS
documentation and community call block device drivers "filing systems".
> Can't you access the raw disk
I can and do access the raw disk for other filing systems.
> and write a filesystem for GRUB to access the filesystem?
I can't, because:
1. It is poorly documented, and new versions are often under NDA.
2. The filing system will be mounted read/write, and therefore may be
automatically defragmented.
3. Grub needs to write to it to install a later version of itself.
4. Write support has not been successfully reimplemented, and it was about a
decade before native write support was stable with the (tiny) disc cache
enabled.
5. There are many more filing systems that may be encountered under RISC OS.
> I like that better because BIOSes are often limited or buggy and it
> becomes easier to use older BIOSes without this fancy support, etc.
The filing system API is older (before 1982), and well documented, and has
been used by 1000's or more released programs, the newer (1st version of RISC
OS at about 1987, with later revsions) block device API has been used by
about 10 released programs. Any comparisons with PC BIOSes are irrelevant.
> Perhaps I am just misunderstanding the issue, I have never used RISC
> OS, I don't even know what it is.
It it a ROM-based operating system, with co-operative multitasking and a GUI.
It runs on ARM processors, and is used on some desktop computers. It used to
popular in UK schools and homes. It is a extended re-write of operating
system of the BBC Microcomputer.
> But what I want to say is that we
> should keep things consistent.
My proposed "(native)" syntax is needed to support paths specified by RISC OS
system (environment) variables, which is needed when the complete path is not
known in advance. This would be the case if we put Grub, config file, kernel
and initrd in a directory and treat it like most RISC OS programs.
It is impossible to map all RISC OS paths to ($DEVICE)/$PATH, because we don't
know part of the path refers to the device, and we would lose any filing
system specified.
And finally "(fd0)/foo/bar" would be a confusing path to a file on an NFS
server, whilst "(native)/ADFS::0/$/foo/bar" would suggest some RISC OS
behaviour was being used.
[snip]
> > My RISC OS port now has support for discs, modules and both rescue mode
> > and normal mode command prompts work, except some console problems.
>
> This is really nice!
>
> What are the console problems? Doesn't the console support something
> similar like ANSI or VT100 or such?
No, it's a superset of that used by the (8-bit) BBC Micro. I have not
implemented support for the arrow keys, the Escape key (which renders the
console useless unless disabled or acknowledged), or box drawing characters
(which means re-defining some characters). Also size assumptions as below.
I assume it's the size assumptions stopping the pager from working.
>
> > To deal with variable console sizes I propose creating a new member in
> > "struct grub_term", and removing asumptions:
>
> Absolutely, that assumption should be changed. And it should be
> possible to resize the terminal.
>
> > grub_uint16_t (*getsize) (void);
>
> Shouldn't that be:
> void (*getxy) (grub_uint16_t *width, grub_uint16_t *height);
That was my original idea.
> > The width of the terminal croodinates should be increased as they are in
> > danger of overflowing, I suggest to 16 bits.
>
> I agree. The same is true for `getxy', I think this interface would
> be better:
>
> void (*getxy) (grub_uint16_t *x, grub_uint16_t *y);
With that interface, unsigned int would be probably smaller, faster, and
easier to implement.
Currently libgcc is linked to the kernel, and the routines exported, at the
moment libgcc is used for 32-bit division and 64-bit shifts. Is that a
sensible approach?
--
Member AFFS, WYLUG, SWP (UK), ANL, RESPECT, Leeds SA, Leeds Anti-war coalition
No to software patents! No to DRM/EUCD - hands off our computers!
[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: RISC OS/ARM port
2004-05-31 11:09 ` Timothy Baldwin
@ 2004-06-01 17:30 ` Yoshinori K. Okuji
2004-06-08 15:21 ` Timothy Baldwin
0 siblings, 1 reply; 9+ messages in thread
From: Yoshinori K. Okuji @ 2004-06-01 17:30 UTC (permalink / raw)
To: The development of GRUB 2
On Monday 31 May 2004 13:09, Timothy Baldwin wrote:
> The filing system API is older (before 1982), and well documented,
> and has been used by 1000's or more released programs, the newer (1st
> version of RISC OS at about 1987, with later revsions) block device
> API has been used by about 10 released programs. Any comparisons with
> PC BIOSes are irrelevant.
Where is the documentation on the API? Is it possible to get it online?
I'd like to look at it.
Okuji
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: RISC OS/ARM port
2004-06-01 17:30 ` Yoshinori K. Okuji
@ 2004-06-08 15:21 ` Timothy Baldwin
0 siblings, 0 replies; 9+ messages in thread
From: Timothy Baldwin @ 2004-06-08 15:21 UTC (permalink / raw)
To: The development of GRUB 2
[-- Attachment #1: Type: text/plain, Size: 1606 bytes --]
On Tuesday 01 June 2004 18:30, Yoshinori K. Okuji wrote:
> On Monday 31 May 2004 13:09, Timothy Baldwin wrote:
> > The filing system API is older (before 1982), and well documented,
> > and has been used by 1000's or more released programs, the newer (1st
> > version of RISC OS at about 1987, with later revsions) block device
> > API has been used by about 10 released programs. Any comparisons with
> > PC BIOSes are irrelevant.
>
> Where is the documentation on the API? Is it possible to get it online?
Sorry for the slow replay.
Official documention exists as PDFs on CD-ROM and out of print, slightly out
of date books as the RISC OS Programmer's Reference Manual. (PRM)
Third party documention covering most system calls (SWIs), but no overview, is
available online at:
> I'd like to look at it.
Unfortunately it is in non-standard format and the programs to convert to HTML
seem broken. However it a text based markup language in a continuous
allocation filesystem, so a text file viewer/editor which copes with illegal
characters should suffice.
For the block device (except CDs) interface lookup FileCore, for the FS
interface lookup FileSwitch, OS_File, OS_Find, OS_BPut, OS_BGet, OS_Args,
OS_GBPB and OS_FSControl.
I point out that R0 to R15 are CPU registers, and "pointer to FileCore
instance private word" should be "contents of word pointed to by FileCore
instance private word".
--
Member AFFS, WYLUG, SWP (UK), ANL, RESPECT, Leeds SA, Leeds Anti-war coalition
No to software patents! No to DRM/EUCD - hands off our computers!
[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* RISC OS/ARM port
@ 2004-05-22 12:46 Timothy Baldwin
0 siblings, 0 replies; 9+ messages in thread
From: Timothy Baldwin @ 2004-05-22 12:46 UTC (permalink / raw)
To: grub-devel
[-- Attachment #1.1: Type: text/plain, Size: 1603 bytes --]
I am working on a port to (ex-Acorn) RISC OS, which currently gets as far as
rescue mode.
RISC OS is supplied in ROM or flash with many systems, including desktop
systems made by Acorn and it's sucessors, various set-top boxes, and the Bush
Internet TV. I have used upper case thoughout for RISC OS as riscos is a
different operating system.
Things to do:
Discs and partitions.
RISC OS native filesystem access.
Network support (using BSD sockets).
Colour and graphic console support.
An interface for writing to files.
A file copy command, to use when upgrading grub.
Serial port support.
Security (disabling keyboard drivers during boot)
Access to RISC OS commands.
A memory defragmenter.
And some OS loaders of course.
How should console errors be handled? Currently they are fatal, and won't
happen unless the console is redirected (assuming USB drivers don't
complain).
Currently in the design of GRUB 2 there is an incorrect asumption that filing
systems are either based on disks or networks. I propose to rectify this
whilst keeping code size down by:
Creating a struct grub_fs_device_driver, which contains a pointer to either
struct grub_disk_dev or struct grub_net_dev, and maintain a single linked
list of disk drivers, net drivers, and standalone filing systems.
Convert struct grub_device from pointers to a unoin to simplify the code by
removing memory allocations.
--
Member AFFS, WYLUG, SWP (UK), ANL, RESPECT, Leeds SA, Leeds Anti-war coalition
No to software patents! No to DRM/EUCD - hands off our computers!
[-- Attachment #1.2: patch1.diff --]
[-- Type: text/x-diff, Size: 66327 bytes --]
--- grub2.orig/configure.ac 2004-05-21 12:14:37.000000000 +0100
+++ grub2.patch1/configure.ac 2004-05-19 00:26:16.000000000 +0100
@@ -23,12 +23,14 @@
case "$host_cpu" in
i[[3456]]86) host_cpu=i386 ;;
powerpc) ;;
+ arm) ;;
*) AC_MSG_ERROR([unsupported CPU type]) ;;
esac
case "$host_cpu"-"$host_vendor" in
i386-*) host_vendor=pc ;;
powerpc-*) host_vendor=ieee1275 ;;
+ arm-*) host_vendor=RISC_OS ;;
*) AC_MSG_ERROR([unsupported machine type]) ;;
esac
diff -urN grub2.orig/conf/arm-RISC_OS.mk grub2.patch1/conf/arm-RISC_OS.mk
--- grub2.orig/conf/arm-RISC_OS.mk 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/conf/arm-RISC_OS.mk 2004-05-21 12:00:01.000000000 +0100
@@ -0,0 +1,696 @@
+# -*- makefile -*-
+
+COMMON_ASFLAGS = -nostdinc -fno-builtin
+COMMON_CFLAGS = -fno-builtin
+
+# Images.
+pkgdata_IMAGES = grub_RISC_OS.img
+
+
+# For grub_RISC_OS.img.
+grub_RISC_OS_img_SOURCES = kern/arm/aif_header.S kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/i386/dl.c kern/arm/RISC_OS/startup.S kern/arm/setjmp.S\
+ kern/env.c kern/arm/RISC_OS/init.c disk/i386/pc/partition.c\
+ term/arm/RISC_OS/console.c term/arm/RISC_OS/console-asm.S\
+ symlist.c
+CLEANFILES += grub_RISC_OS.img grub_RISC_OS.exec grub_RISC_OS_img-kern_arm_aif_header.o grub_RISC_OS_img-kern_main.o grub_RISC_OS_img-kern_device.o grub_RISC_OS_img-kern_disk.o grub_RISC_OS_img-kern_dl.o grub_RISC_OS_img-kern_file.o grub_RISC_OS_img-kern_fs.o grub_RISC_OS_img-kern_err.o grub_RISC_OS_img-kern_misc.o grub_RISC_OS_img-kern_mm.o grub_RISC_OS_img-kern_loader.o grub_RISC_OS_img-kern_rescue.o grub_RISC_OS_img-kern_term.o grub_RISC_OS_img-kern_i386_dl.o grub_RISC_OS_img-kern_arm_RISC_OS_startup.o grub_RISC_OS_img-kern_arm_setjmp.o grub_RISC_OS_img-kern_env.o grub_RISC_OS_img-kern_arm_RISC_OS_init.o grub_RISC_OS_img-disk_i386_pc_partition.o grub_RISC_OS_img-term_arm_RISC_OS_console.o grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o grub_RISC_OS_img-symlist.o
+MOSTLYCLEANFILES += grub_RISC_OS_img-kern_arm_aif_header.d grub_RISC_OS_img-kern_main.d grub_RISC_OS_img-kern_device.d grub_RISC_OS_img-kern_disk.d grub_RISC_OS_img-kern_dl.d grub_RISC_OS_img-kern_file.d grub_RISC_OS_img-kern_fs.d grub_RISC_OS_img-kern_err.d grub_RISC_OS_img-kern_misc.d grub_RISC_OS_img-kern_mm.d grub_RISC_OS_img-kern_loader.d grub_RISC_OS_img-kern_rescue.d grub_RISC_OS_img-kern_term.d grub_RISC_OS_img-kern_i386_dl.d grub_RISC_OS_img-kern_arm_RISC_OS_startup.d grub_RISC_OS_img-kern_arm_setjmp.d grub_RISC_OS_img-kern_env.d grub_RISC_OS_img-kern_arm_RISC_OS_init.d grub_RISC_OS_img-disk_i386_pc_partition.d grub_RISC_OS_img-term_arm_RISC_OS_console.d grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d grub_RISC_OS_img-symlist.d
+
+grub_RISC_OS.img: grub_RISC_OS.exec
+ $(OBJCOPY) -O binary -R .note -R .comment $< $@
+
+grub_RISC_OS.exec: grub_RISC_OS_img-kern_arm_aif_header.o grub_RISC_OS_img-kern_main.o grub_RISC_OS_img-kern_device.o grub_RISC_OS_img-kern_disk.o grub_RISC_OS_img-kern_dl.o grub_RISC_OS_img-kern_file.o grub_RISC_OS_img-kern_fs.o grub_RISC_OS_img-kern_err.o grub_RISC_OS_img-kern_misc.o grub_RISC_OS_img-kern_mm.o grub_RISC_OS_img-kern_loader.o grub_RISC_OS_img-kern_rescue.o grub_RISC_OS_img-kern_term.o grub_RISC_OS_img-kern_i386_dl.o grub_RISC_OS_img-kern_arm_RISC_OS_startup.o grub_RISC_OS_img-kern_arm_setjmp.o grub_RISC_OS_img-kern_env.o grub_RISC_OS_img-kern_arm_RISC_OS_init.o grub_RISC_OS_img-disk_i386_pc_partition.o grub_RISC_OS_img-term_arm_RISC_OS_console.o grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o grub_RISC_OS_img-symlist.o
+ $(CC) -o $@ $^ $(LDFLAGS) $(grub_RISC_OS_img_LDFLAGS)
+
+grub_RISC_OS_img-kern_arm_aif_header.o: kern/arm/aif_header.S
+ $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_aif_header.d: kern/arm/aif_header.S
+ set -e; $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,aif_header\.o[ :]*,grub_RISC_OS_img-kern_arm_aif_header.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_aif_header.d
+
+grub_RISC_OS_img-kern_main.o: kern/main.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_main.d: kern/main.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,main\.o[ :]*,grub_RISC_OS_img-kern_main.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_main.d
+
+grub_RISC_OS_img-kern_device.o: kern/device.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_device.d: kern/device.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,device\.o[ :]*,grub_RISC_OS_img-kern_device.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_device.d
+
+grub_RISC_OS_img-kern_disk.o: kern/disk.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_disk.d: kern/disk.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,disk\.o[ :]*,grub_RISC_OS_img-kern_disk.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_disk.d
+
+grub_RISC_OS_img-kern_dl.o: kern/dl.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_dl.d: kern/dl.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,dl\.o[ :]*,grub_RISC_OS_img-kern_dl.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_dl.d
+
+grub_RISC_OS_img-kern_file.o: kern/file.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_file.d: kern/file.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,file\.o[ :]*,grub_RISC_OS_img-kern_file.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_file.d
+
+grub_RISC_OS_img-kern_fs.o: kern/fs.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_fs.d: kern/fs.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,fs\.o[ :]*,grub_RISC_OS_img-kern_fs.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_fs.d
+
+grub_RISC_OS_img-kern_err.o: kern/err.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_err.d: kern/err.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,err\.o[ :]*,grub_RISC_OS_img-kern_err.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_err.d
+
+grub_RISC_OS_img-kern_misc.o: kern/misc.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_misc.d: kern/misc.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,misc\.o[ :]*,grub_RISC_OS_img-kern_misc.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_misc.d
+
+grub_RISC_OS_img-kern_mm.o: kern/mm.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_mm.d: kern/mm.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,mm\.o[ :]*,grub_RISC_OS_img-kern_mm.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_mm.d
+
+grub_RISC_OS_img-kern_loader.o: kern/loader.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_loader.d: kern/loader.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,loader\.o[ :]*,grub_RISC_OS_img-kern_loader.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_loader.d
+
+grub_RISC_OS_img-kern_rescue.o: kern/rescue.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_rescue.d: kern/rescue.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,rescue\.o[ :]*,grub_RISC_OS_img-kern_rescue.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_rescue.d
+
+grub_RISC_OS_img-kern_term.o: kern/term.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_term.d: kern/term.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,term\.o[ :]*,grub_RISC_OS_img-kern_term.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_term.d
+
+grub_RISC_OS_img-kern_i386_dl.o: kern/i386/dl.c
+ $(CC) -Ikern/i386 -I$(srcdir)/kern/i386 $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_i386_dl.d: kern/i386/dl.c
+ set -e; $(CC) -Ikern/i386 -I$(srcdir)/kern/i386 $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,dl\.o[ :]*,grub_RISC_OS_img-kern_i386_dl.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_i386_dl.d
+
+grub_RISC_OS_img-kern_arm_RISC_OS_startup.o: kern/arm/RISC_OS/startup.S
+ $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_RISC_OS_startup.d: kern/arm/RISC_OS/startup.S
+ set -e; $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,startup\.o[ :]*,grub_RISC_OS_img-kern_arm_RISC_OS_startup.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_RISC_OS_startup.d
+
+grub_RISC_OS_img-kern_arm_setjmp.o: kern/arm/setjmp.S
+ $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_setjmp.d: kern/arm/setjmp.S
+ set -e; $(CC) -Ikern/arm -I$(srcdir)/kern/arm $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,setjmp\.o[ :]*,grub_RISC_OS_img-kern_arm_setjmp.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_setjmp.d
+
+grub_RISC_OS_img-kern_env.o: kern/env.c
+ $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_env.d: kern/env.c
+ set -e; $(CC) -Ikern -I$(srcdir)/kern $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,env\.o[ :]*,grub_RISC_OS_img-kern_env.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_env.d
+
+grub_RISC_OS_img-kern_arm_RISC_OS_init.o: kern/arm/RISC_OS/init.c
+ $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-kern_arm_RISC_OS_init.d: kern/arm/RISC_OS/init.c
+ set -e; $(CC) -Ikern/arm/RISC_OS -I$(srcdir)/kern/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,init\.o[ :]*,grub_RISC_OS_img-kern_arm_RISC_OS_init.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-kern_arm_RISC_OS_init.d
+
+grub_RISC_OS_img-disk_i386_pc_partition.o: disk/i386/pc/partition.c
+ $(CC) -Idisk/i386/pc -I$(srcdir)/disk/i386/pc $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-disk_i386_pc_partition.d: disk/i386/pc/partition.c
+ set -e; $(CC) -Idisk/i386/pc -I$(srcdir)/disk/i386/pc $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,partition\.o[ :]*,grub_RISC_OS_img-disk_i386_pc_partition.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-disk_i386_pc_partition.d
+
+grub_RISC_OS_img-term_arm_RISC_OS_console.o: term/arm/RISC_OS/console.c
+ $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-term_arm_RISC_OS_console.d: term/arm/RISC_OS/console.c
+ set -e; $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,console\.o[ :]*,grub_RISC_OS_img-term_arm_RISC_OS_console.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-term_arm_RISC_OS_console.d
+
+grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o: term/arm/RISC_OS/console-asm.S
+ $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d: term/arm/RISC_OS/console-asm.S
+ set -e; $(CC) -Iterm/arm/RISC_OS -I$(srcdir)/term/arm/RISC_OS $(CPPFLAGS) -DASM_FILE=1 $(ASFLAGS) $(grub_RISC_OS_img_ASFLAGS) -M $< | sed 's,console\-asm\.o[ :]*,grub_RISC_OS_img-term_arm_RISC_OS_console_asm.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-term_arm_RISC_OS_console_asm.d
+
+grub_RISC_OS_img-symlist.o: symlist.c
+ $(CC) -I. -I$(srcdir)/. $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -c -o $@ $<
+
+grub_RISC_OS_img-symlist.d: symlist.c
+ set -e; $(CC) -I. -I$(srcdir)/. $(CPPFLAGS) $(CFLAGS) $(grub_RISC_OS_img_CFLAGS) -M $< | sed 's,symlist\.o[ :]*,grub_RISC_OS_img-symlist.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include grub_RISC_OS_img-symlist.d
+
+grub_RISC_OS_img_HEADERS = boot.h device.h disk.h dl.h elf.h err.h \
+ file.h fs.h kernel.h loader.h misc.h mm.h net.h rescue.h symbol.h \
+ term.h types.h arg.h env.h
+grub_RISC_OS_img_CFLAGS = $(COMMON_CFLAGS)
+grub_RISC_OS_img_ASFLAGS = $(COMMON_ASFLAGS)
+grub_RISC_OS_img_LDFLAGS = `$(CC) -print-libgcc-file-name` $(srcdir)/kern/arm/aif_header.lds -nostdlib -Wl,-N,-Ttext,8000
+
+MOSTLYCLEANFILES += symlist.c grub_RISC_OS_syms.lst
+DEFSYMFILES += grub_RISC_OS_syms.lst
+
+symlist.c: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) gensymlist.sh
+ sh $(srcdir)/gensymlist.sh $(filter %.h,$^) > $@
+
+grub_RISC_OS_syms.lst: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) genkernsyms.sh
+ sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@
+
+# Utilities.
+#bin_UTILITIES = grub-mkimage
+#sbin_UTILITIES = grub-setup grub-emu
+noinst_UTILITIES = genmoddep
+
+# For grub-mkimage.
+grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
+ util/resolve.c
+grub_mkimage_LDFLAGS = -llzo
+
+# For grub-setup.
+grub_setup_SOURCES = util/i386/pc/grub-setup.c util/i386/pc/biosdisk.c \
+ util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
+ kern/err.c kern/misc.c disk/i386/pc/partition.c fs/fat.c fs/ext2.c \
+ kern/file.c kern/fs.c kern/env.c
+
+# For grub
+grub_emu_SOURCES = kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/loader.c kern/rescue.c kern/term.c \
+ disk/i386/pc/partition.c kern/env.c commands/ls.c \
+ commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \
+ util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c \
+ normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \
+ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c
+grub_emu_LDFLAGS = -lncurses
+
+# For genmoddep.
+genmoddep_SOURCES = util/genmoddep.c
+CLEANFILES += genmoddep genmoddep-util_genmoddep.o
+MOSTLYCLEANFILES += genmoddep-util_genmoddep.d
+
+genmoddep: genmoddep-util_genmoddep.o
+ $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(genmoddep_LDFLAGS)
+
+genmoddep-util_genmoddep.o: util/genmoddep.c
+ $(BUILD_CC) -Iutil -I$(srcdir)/util $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(genmoddep_CFLAGS) -c -o $@ $<
+
+genmoddep-util_genmoddep.d: util/genmoddep.c
+ set -e; $(BUILD_CC) -Iutil -I$(srcdir)/util $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UTIL=1 $(genmoddep_CFLAGS) -M $< | sed 's,genmoddep\.o[ :]*,genmoddep-util_genmoddep.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include genmoddep-util_genmoddep.d
+
+
+# Modules.
+pkgdata_MODULES = fat.mod ext2.mod normal.mod hello.mod \
+ font.mod ls.mod boot.mod cmp.mod cat.mod terminal.mod
+
+# For fat.mod.
+fat_mod_SOURCES = fs/fat.c
+CLEANFILES += fat.mod mod-fat.o mod-fat.c pre-fat.o fat_mod-fs_fat.o def-fat.lst und-fat.lst
+MOSTLYCLEANFILES += fat_mod-fs_fat.d
+DEFSYMFILES += def-fat.lst
+UNDSYMFILES += und-fat.lst
+
+fat.mod: pre-fat.o mod-fat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-fat.o: fat_mod-fs_fat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-fat.o: mod-fat.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -c -o $@ $<
+
+mod-fat.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'fat' $< > $@ || (rm -f $@; exit 1)
+
+def-fat.lst: pre-fat.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 fat/' > $@
+
+und-fat.lst: pre-fat.o
+ echo 'fat' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+fat_mod-fs_fat.o: fs/fat.c
+ $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -c -o $@ $<
+
+fat_mod-fs_fat.d: fs/fat.c
+ set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(fat_mod_CFLAGS) -M $< | sed 's,fat\.o[ :]*,fat_mod-fs_fat.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include fat_mod-fs_fat.d
+
+fat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ext2.mod.
+ext2_mod_SOURCES = fs/ext2.c
+CLEANFILES += ext2.mod mod-ext2.o mod-ext2.c pre-ext2.o ext2_mod-fs_ext2.o def-ext2.lst und-ext2.lst
+MOSTLYCLEANFILES += ext2_mod-fs_ext2.d
+DEFSYMFILES += def-ext2.lst
+UNDSYMFILES += und-ext2.lst
+
+ext2.mod: pre-ext2.o mod-ext2.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-ext2.o: ext2_mod-fs_ext2.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-ext2.o: mod-ext2.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -c -o $@ $<
+
+mod-ext2.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'ext2' $< > $@ || (rm -f $@; exit 1)
+
+def-ext2.lst: pre-ext2.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ext2/' > $@
+
+und-ext2.lst: pre-ext2.o
+ echo 'ext2' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ext2_mod-fs_ext2.o: fs/ext2.c
+ $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -c -o $@ $<
+
+ext2_mod-fs_ext2.d: fs/ext2.c
+ set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ext2_mod_CFLAGS) -M $< | sed 's,ext2\.o[ :]*,ext2_mod-fs_ext2.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include ext2_mod-fs_ext2.d
+
+ext2_mod_CFLAGS = $(COMMON_CFLAGS)
+
+
+# For normal.mod.
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/main.c \
+ normal/menu.c normal/arg.c
+CLEANFILES += normal.mod mod-normal.o mod-normal.c pre-normal.o normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o def-normal.lst und-normal.lst
+MOSTLYCLEANFILES += normal_mod-normal_cmdline.d normal_mod-normal_command.d normal_mod-normal_main.d normal_mod-normal_menu.d normal_mod-normal_arg.d
+DEFSYMFILES += def-normal.lst
+UNDSYMFILES += und-normal.lst
+
+normal.mod: pre-normal.o mod-normal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-normal.o: normal_mod-normal_cmdline.o normal_mod-normal_command.o normal_mod-normal_main.o normal_mod-normal_menu.o normal_mod-normal_arg.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-normal.o: mod-normal.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+mod-normal.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'normal' $< > $@ || (rm -f $@; exit 1)
+
+def-normal.lst: pre-normal.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 normal/' > $@
+
+und-normal.lst: pre-normal.o
+ echo 'normal' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+normal_mod-normal_cmdline.o: normal/cmdline.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_cmdline.d: normal/cmdline.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,cmdline\.o[ :]*,normal_mod-normal_cmdline.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_cmdline.d
+
+normal_mod-normal_command.o: normal/command.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_command.d: normal/command.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,command\.o[ :]*,normal_mod-normal_command.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_command.d
+
+normal_mod-normal_main.o: normal/main.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_main.d: normal/main.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,main\.o[ :]*,normal_mod-normal_main.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_main.d
+
+normal_mod-normal_menu.o: normal/menu.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_menu.d: normal/menu.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,menu\.o[ :]*,normal_mod-normal_menu.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_menu.d
+
+normal_mod-normal_arg.o: normal/arg.c
+ $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -c -o $@ $<
+
+normal_mod-normal_arg.d: normal/arg.c
+ set -e; $(CC) -Inormal -I$(srcdir)/normal $(CPPFLAGS) $(CFLAGS) $(normal_mod_CFLAGS) -M $< | sed 's,arg\.o[ :]*,normal_mod-normal_arg.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include normal_mod-normal_arg.d
+
+normal_mod_CFLAGS = $(COMMON_CFLAGS)
+normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
+
+# For hello.mod.
+hello_mod_SOURCES = hello/hello.c
+CLEANFILES += hello.mod mod-hello.o mod-hello.c pre-hello.o hello_mod-hello_hello.o def-hello.lst und-hello.lst
+MOSTLYCLEANFILES += hello_mod-hello_hello.d
+DEFSYMFILES += def-hello.lst
+UNDSYMFILES += und-hello.lst
+
+hello.mod: pre-hello.o mod-hello.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-hello.o: hello_mod-hello_hello.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-hello.o: mod-hello.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -c -o $@ $<
+
+mod-hello.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'hello' $< > $@ || (rm -f $@; exit 1)
+
+def-hello.lst: pre-hello.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 hello/' > $@
+
+und-hello.lst: pre-hello.o
+ echo 'hello' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+hello_mod-hello_hello.o: hello/hello.c
+ $(CC) -Ihello -I$(srcdir)/hello $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -c -o $@ $<
+
+hello_mod-hello_hello.d: hello/hello.c
+ set -e; $(CC) -Ihello -I$(srcdir)/hello $(CPPFLAGS) $(CFLAGS) $(hello_mod_CFLAGS) -M $< | sed 's,hello\.o[ :]*,hello_mod-hello_hello.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include hello_mod-hello_hello.d
+
+hello_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For boot.mod.
+boot_mod_SOURCES = commands/boot.c
+CLEANFILES += boot.mod mod-boot.o mod-boot.c pre-boot.o boot_mod-commands_boot.o def-boot.lst und-boot.lst
+MOSTLYCLEANFILES += boot_mod-commands_boot.d
+DEFSYMFILES += def-boot.lst
+UNDSYMFILES += und-boot.lst
+
+boot.mod: pre-boot.o mod-boot.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-boot.o: boot_mod-commands_boot.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-boot.o: mod-boot.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -c -o $@ $<
+
+mod-boot.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'boot' $< > $@ || (rm -f $@; exit 1)
+
+def-boot.lst: pre-boot.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 boot/' > $@
+
+und-boot.lst: pre-boot.o
+ echo 'boot' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+boot_mod-commands_boot.o: commands/boot.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -c -o $@ $<
+
+boot_mod-commands_boot.d: commands/boot.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(boot_mod_CFLAGS) -M $< | sed 's,boot\.o[ :]*,boot_mod-commands_boot.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include boot_mod-commands_boot.d
+
+boot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For terminal.mod.
+terminal_mod_SOURCES = commands/terminal.c
+CLEANFILES += terminal.mod mod-terminal.o mod-terminal.c pre-terminal.o terminal_mod-commands_terminal.o def-terminal.lst und-terminal.lst
+MOSTLYCLEANFILES += terminal_mod-commands_terminal.d
+DEFSYMFILES += def-terminal.lst
+UNDSYMFILES += und-terminal.lst
+
+terminal.mod: pre-terminal.o mod-terminal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-terminal.o: terminal_mod-commands_terminal.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-terminal.o: mod-terminal.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -c -o $@ $<
+
+mod-terminal.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'terminal' $< > $@ || (rm -f $@; exit 1)
+
+def-terminal.lst: pre-terminal.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 terminal/' > $@
+
+und-terminal.lst: pre-terminal.o
+ echo 'terminal' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+terminal_mod-commands_terminal.o: commands/terminal.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -c -o $@ $<
+
+terminal_mod-commands_terminal.d: commands/terminal.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(terminal_mod_CFLAGS) -M $< | sed 's,terminal\.o[ :]*,terminal_mod-commands_terminal.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include terminal_mod-commands_terminal.d
+
+terminal_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ls.mod.
+ls_mod_SOURCES = commands/ls.c
+CLEANFILES += ls.mod mod-ls.o mod-ls.c pre-ls.o ls_mod-commands_ls.o def-ls.lst und-ls.lst
+MOSTLYCLEANFILES += ls_mod-commands_ls.d
+DEFSYMFILES += def-ls.lst
+UNDSYMFILES += und-ls.lst
+
+ls.mod: pre-ls.o mod-ls.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-ls.o: ls_mod-commands_ls.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-ls.o: mod-ls.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -c -o $@ $<
+
+mod-ls.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'ls' $< > $@ || (rm -f $@; exit 1)
+
+def-ls.lst: pre-ls.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ls/' > $@
+
+und-ls.lst: pre-ls.o
+ echo 'ls' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ls_mod-commands_ls.o: commands/ls.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -c -o $@ $<
+
+ls_mod-commands_ls.d: commands/ls.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(ls_mod_CFLAGS) -M $< | sed 's,ls\.o[ :]*,ls_mod-commands_ls.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include ls_mod-commands_ls.d
+
+ls_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cmp.mod.
+cmp_mod_SOURCES = commands/cmp.c
+CLEANFILES += cmp.mod mod-cmp.o mod-cmp.c pre-cmp.o cmp_mod-commands_cmp.o def-cmp.lst und-cmp.lst
+MOSTLYCLEANFILES += cmp_mod-commands_cmp.d
+DEFSYMFILES += def-cmp.lst
+UNDSYMFILES += und-cmp.lst
+
+cmp.mod: pre-cmp.o mod-cmp.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-cmp.o: cmp_mod-commands_cmp.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-cmp.o: mod-cmp.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -c -o $@ $<
+
+mod-cmp.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'cmp' $< > $@ || (rm -f $@; exit 1)
+
+def-cmp.lst: pre-cmp.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 cmp/' > $@
+
+und-cmp.lst: pre-cmp.o
+ echo 'cmp' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+cmp_mod-commands_cmp.o: commands/cmp.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -c -o $@ $<
+
+cmp_mod-commands_cmp.d: commands/cmp.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cmp_mod_CFLAGS) -M $< | sed 's,cmp\.o[ :]*,cmp_mod-commands_cmp.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include cmp_mod-commands_cmp.d
+
+cmp_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cat.mod.
+cat_mod_SOURCES = commands/cat.c
+CLEANFILES += cat.mod mod-cat.o mod-cat.c pre-cat.o cat_mod-commands_cat.o def-cat.lst und-cat.lst
+MOSTLYCLEANFILES += cat_mod-commands_cat.d
+DEFSYMFILES += def-cat.lst
+UNDSYMFILES += und-cat.lst
+
+cat.mod: pre-cat.o mod-cat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-cat.o: cat_mod-commands_cat.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-cat.o: mod-cat.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -c -o $@ $<
+
+mod-cat.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'cat' $< > $@ || (rm -f $@; exit 1)
+
+def-cat.lst: pre-cat.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 cat/' > $@
+
+und-cat.lst: pre-cat.o
+ echo 'cat' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+cat_mod-commands_cat.o: commands/cat.c
+ $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -c -o $@ $<
+
+cat_mod-commands_cat.d: commands/cat.c
+ set -e; $(CC) -Icommands -I$(srcdir)/commands $(CPPFLAGS) $(CFLAGS) $(cat_mod_CFLAGS) -M $< | sed 's,cat\.o[ :]*,cat_mod-commands_cat.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include cat_mod-commands_cat.d
+
+cat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For font.mod.
+font_mod_SOURCES = font/manager.c
+CLEANFILES += font.mod mod-font.o mod-font.c pre-font.o font_mod-font_manager.o def-font.lst und-font.lst
+MOSTLYCLEANFILES += font_mod-font_manager.d
+DEFSYMFILES += def-font.lst
+UNDSYMFILES += und-font.lst
+
+font.mod: pre-font.o mod-font.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R .comment $@
+
+pre-font.o: font_mod-font_manager.o
+ -rm -f $@
+ $(LD) -r -o $@ $^
+
+mod-font.o: mod-font.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -c -o $@ $<
+
+mod-font.c: moddep.lst genmodsrc.sh
+ sh $(srcdir)/genmodsrc.sh 'font' $< > $@ || (rm -f $@; exit 1)
+
+def-font.lst: pre-font.o
+ $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 font/' > $@
+
+und-font.lst: pre-font.o
+ echo 'font' > $@
+ $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+font_mod-font_manager.o: font/manager.c
+ $(CC) -Ifont -I$(srcdir)/font $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -c -o $@ $<
+
+font_mod-font_manager.d: font/manager.c
+ set -e; $(CC) -Ifont -I$(srcdir)/font $(CPPFLAGS) $(CFLAGS) $(font_mod_CFLAGS) -M $< | sed 's,manager\.o[ :]*,font_mod-font_manager.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@
+
+-include font_mod-font_manager.d
+
+font_mod_CFLAGS = $(COMMON_CFLAGS)
+
+CLEANFILES += moddep.lst
+pkgdata_DATA += moddep.lst
+moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep
+ cat $(DEFSYMFILES) /dev/null | ./genmoddep $(UNDSYMFILES) > $@ \
+ || (rm -f $@; exit 1)
diff -urN grub2.orig/conf/arm-RISC_OS.rmk grub2.patch1/conf/arm-RISC_OS.rmk
--- grub2.orig/conf/arm-RISC_OS.rmk 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/conf/arm-RISC_OS.rmk 2004-05-21 11:59:58.000000000 +0100
@@ -0,0 +1,110 @@
+# -*- makefile -*-
+
+COMMON_ASFLAGS = -nostdinc -fno-builtin
+COMMON_CFLAGS = -fno-builtin
+
+# Images.
+pkgdata_IMAGES = grub_RISC_OS.img
+
+
+# For grub_RISC_OS.img.
+grub_RISC_OS_img_SOURCES = kern/arm/aif_header.S kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/mm.c kern/loader.c kern/rescue.c kern/term.c \
+ kern/i386/dl.c kern/arm/RISC_OS/startup.S kern/arm/setjmp.S\
+ kern/env.c kern/arm/RISC_OS/init.c disk/i386/pc/partition.c\
+ term/arm/RISC_OS/console.c term/arm/RISC_OS/console-asm.S\
+ symlist.c
+grub_RISC_OS_img_HEADERS = boot.h device.h disk.h dl.h elf.h err.h \
+ file.h fs.h kernel.h loader.h misc.h mm.h net.h rescue.h symbol.h \
+ term.h types.h arg.h env.h
+grub_RISC_OS_img_CFLAGS = $(COMMON_CFLAGS)
+grub_RISC_OS_img_ASFLAGS = $(COMMON_ASFLAGS)
+grub_RISC_OS_img_LDFLAGS = `$(CC) -print-libgcc-file-name` $(srcdir)/kern/arm/aif_header.lds -nostdlib -Wl,-N,-Ttext,8000
+
+MOSTLYCLEANFILES += symlist.c grub_RISC_OS_syms.lst
+DEFSYMFILES += grub_RISC_OS_syms.lst
+
+symlist.c: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) gensymlist.sh
+ sh $(srcdir)/gensymlist.sh $(filter %.h,$^) > $@
+
+grub_RISC_OS_syms.lst: $(addprefix include/grub/,$(grub_RISC_OS_img_HEADERS)) genkernsyms.sh
+ sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@
+
+# Utilities.
+#bin_UTILITIES = grub-mkimage
+#sbin_UTILITIES = grub-setup grub-emu
+noinst_UTILITIES = genmoddep
+
+# For grub-mkimage.
+grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
+ util/resolve.c
+grub_mkimage_LDFLAGS = -llzo
+
+# For grub-setup.
+grub_setup_SOURCES = util/i386/pc/grub-setup.c util/i386/pc/biosdisk.c \
+ util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
+ kern/err.c kern/misc.c disk/i386/pc/partition.c fs/fat.c fs/ext2.c \
+ kern/file.c kern/fs.c kern/env.c
+
+# For grub
+grub_emu_SOURCES = kern/main.c kern/device.c \
+ kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
+ kern/misc.c kern/loader.c kern/rescue.c kern/term.c \
+ disk/i386/pc/partition.c kern/env.c commands/ls.c \
+ commands/terminal.c commands/boot.c commands/cmp.c commands/cat.c \
+ util/i386/pc/biosdisk.c fs/fat.c fs/ext2.c \
+ normal/cmdline.c normal/command.c normal/main.c normal/menu.c normal/arg.c \
+ util/console.c util/grub-emu.c util/misc.c util/i386/pc/getroot.c
+grub_emu_LDFLAGS = -lncurses
+
+# For genmoddep.
+genmoddep_SOURCES = util/genmoddep.c
+
+# Modules.
+pkgdata_MODULES = fat.mod ext2.mod normal.mod hello.mod \
+ font.mod ls.mod boot.mod cmp.mod cat.mod terminal.mod
+
+# For fat.mod.
+fat_mod_SOURCES = fs/fat.c
+fat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ext2.mod.
+ext2_mod_SOURCES = fs/ext2.c
+ext2_mod_CFLAGS = $(COMMON_CFLAGS)
+
+
+# For normal.mod.
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/main.c \
+ normal/menu.c normal/arg.c
+normal_mod_CFLAGS = $(COMMON_CFLAGS)
+normal_mod_ASFLAGS = $(COMMON_ASFLAGS)
+
+# For hello.mod.
+hello_mod_SOURCES = hello/hello.c
+hello_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For boot.mod.
+boot_mod_SOURCES = commands/boot.c
+boot_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For terminal.mod.
+terminal_mod_SOURCES = commands/terminal.c
+terminal_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For ls.mod.
+ls_mod_SOURCES = commands/ls.c
+ls_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cmp.mod.
+cmp_mod_SOURCES = commands/cmp.c
+cmp_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For cat.mod.
+cat_mod_SOURCES = commands/cat.c
+cat_mod_CFLAGS = $(COMMON_CFLAGS)
+
+# For font.mod.
+font_mod_SOURCES = font/manager.c
+font_mod_CFLAGS = $(COMMON_CFLAGS)
+
diff -urN grub2.orig/include/grub/arm/RISC_OS/console.h grub2.patch1/include/grub/arm/RISC_OS/console.h
--- grub2.orig/include/grub/arm/RISC_OS/console.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/console.h 2004-05-20 19:56:35.000000000 +0100
@@ -0,0 +1,57 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_CONSOLE_MACHINE_HEADER
+#define GRUB_CONSOLE_MACHINE_HEADER 1
+
+/* Define scan codes. */
+#define GRUB_CONSOLE_KEY_LEFT 0x4B00
+#define GRUB_CONSOLE_KEY_RIGHT 0x4D00
+#define GRUB_CONSOLE_KEY_UP 0x4800
+#define GRUB_CONSOLE_KEY_DOWN 0x5000
+#define GRUB_CONSOLE_KEY_IC 0x5200
+#define GRUB_CONSOLE_KEY_DC 0x5300
+#define GRUB_CONSOLE_KEY_BACKSPACE 0x0008
+#define GRUB_CONSOLE_KEY_HOME 0x4700
+#define GRUB_CONSOLE_KEY_END 0x4F00
+#define GRUB_CONSOLE_KEY_NPAGE 0x4900
+#define GRUB_CONSOLE_KEY_PPAGE 0x5100
+
+#ifndef ASM_FILE
+
+#include <grub/types.h>
+#include <grub/symbol.h>
+#include <grub/term.h>
+
+/* These are global to share code between C and asm. */
+void grub_console_real_putchar (int c);
+int EXPORT_FUNC(grub_console_checkkey) (void);
+int EXPORT_FUNC(grub_console_getkey) (void);
+grub_uint16_t grub_console_getxy (void);
+void grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y);
+void grub_console_cls (void);
+void grub_console_setcursor (int on);
+void grub_console_setcolourstate (grub_term_color_state state);
+
+/* Initialize the console system. */
+void grub_console_init (void);
+
+#endif
+
+#endif /* ! GRUB_CONSOLE_MACHINE_HEADER */
diff -urN grub2.orig/include/grub/arm/RISC_OS/partition.h grub2.patch1/include/grub/arm/RISC_OS/partition.h
--- grub2.orig/include/grub/arm/RISC_OS/partition.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/partition.h 2004-04-04 14:46:01.000000000 +0100
@@ -0,0 +1,242 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_PARTITION_HEADER
+#define GRUB_PARTITION_HEADER 1
+
+#include <grub/symbol.h>
+#include <grub/types.h>
+#include <grub/err.h>
+
+/* The signature. */
+#define GRUB_PARTITION_SIGNATURE 0xaa55
+
+/* This is not a flag actually, but used as if it were a flag. */
+#define GRUB_PARTITION_TYPE_HIDDEN_FLAG 0x10
+
+/* DOS partition types. */
+#define GRUB_PARTITION_TYPE_NONE 0
+#define GRUB_PARTITION_TYPE_FAT12 1
+#define GRUB_PARTITION_TYPE_FAT16_LT32M 4
+#define GRUB_PARTITION_TYPE_EXTENDED 5
+#define GRUB_PARTITION_TYPE_FAT16_GT32M 6
+#define GRUB_PARTITION_TYPE_FAT32 0xb
+#define GRUB_PARTITION_TYPE_FAT32_LBA 0xc
+#define GRUB_PARTITION_TYPE_FAT16_LBA 0xe
+#define GRUB_PARTITION_TYPE_WIN95_EXTENDED 0xf
+#define GRUB_PARTITION_TYPE_EZD 0x55
+#define GRUB_PARTITION_TYPE_MINIX 0x80
+#define GRUB_PARTITION_TYPE_LINUX_MINIX 0x81
+#define GRUB_PARTITION_TYPE_EXT2FS 0x83
+#define GRUB_PARTITION_TYPE_LINUX_EXTENDED 0x85
+#define GRUB_PARTITION_TYPE_VSTAFS 0x9e
+#define GRUB_PARTITION_TYPE_FREEBSD 0xa5
+#define GRUB_PARTITION_TYPE_OPENBSD 0xa6
+#define GRUB_PARTITION_TYPE_NETBSD 0xa9
+#define GRUB_PARTITION_TYPE_LINUX_RAID 0xfd
+
+/* Constants for BSD disk label. */
+#define GRUB_PARTITION_BSD_LABEL_SECTOR 1
+#define GRUB_PARTITION_BSD_LABEL_MAGIC 0x82564557
+#define GRUB_PARTITION_BSD_MAX_ENTRIES 8
+
+/* BSD partition types. */
+#define GRUB_PARTITION_BSD_TYPE_UNUSED 0
+#define GRUB_PARTITION_BSD_TYPE_SWAP 1
+#define GRUB_PARTITION_BSD_TYPE_V6 2
+#define GRUB_PARTITION_BSD_TYPE_V7 3
+#define GRUB_PARTITION_BSD_TYPE_SYSV 4
+#define GRUB_PARTITION_BSD_TYPE_V71K 5
+#define GRUB_PARTITION_BSD_TYPE_V8 6
+#define GRUB_PARTITION_BSD_TYPE_BSDFFS 7
+#define GRUB_PARTITION_BSD_TYPE_MSDOS 8
+#define GRUB_PARTITION_BSD_TYPE_BSDLFS 9
+#define GRUB_PARTITION_BSD_TYPE_OTHER 10
+#define GRUB_PARTITION_BSD_TYPE_HPFS 11
+#define GRUB_PARTITION_BSD_TYPE_ISO9660 12
+#define GRUB_PARTITION_BSD_TYPE_BOOT 13
+
+/* FreeBSD-specific types. */
+#define GRUB_PARTITION_FREEBSD_TYPE_VINUM 14
+#define GRUB_PARTITION_FREEBSD_TYPE_RAID 15
+#define GRUB_PARTITION_FREEBSD_TYPE_JFS2 21
+
+/* NetBSD-specific types. */
+#define GRUB_PARTITION_NETBSD_TYPE_ADOS 14
+#define GRUB_PARTITION_NETBSD_TYPE_HFS 15
+#define GRUB_PARTITION_NETBSD_TYPE_FILECORE 16
+#define GRUB_PARTITION_NETBSD_TYPE_EXT2FS 17
+#define GRUB_PARTITION_NETBSD_TYPE_NTFS 18
+#define GRUB_PARTITION_NETBSD_TYPE_RAID 19
+#define GRUB_PARTITION_NETBSD_TYPE_CCD 20
+#define GRUB_PARTITION_NETBSD_TYPE_JFS2 21
+#define GRUB_PARTITION_NETBSD_TYPE_APPLEUFS 22
+
+/* OpenBSD-specific types. */
+#define GRUB_PARTITION_OPENBSD_TYPE_ADOS 14
+#define GRUB_PARTITION_OPENBSD_TYPE_HFS 15
+#define GRUB_PARTITION_OPENBSD_TYPE_FILECORE 16
+#define GRUB_PARTITION_OPENBSD_TYPE_EXT2FS 17
+#define GRUB_PARTITION_OPENBSD_TYPE_NTFS 18
+#define GRUB_PARTITION_OPENBSD_TYPE_RAID 19
+
+/* The BSD partition entry. */
+struct grub_partition_bsd_entry
+{
+ grub_uint32_t size;
+ grub_uint32_t offset;
+ grub_uint32_t fragment_size;
+ grub_uint8_t fs_type;
+ grub_uint8_t fs_fragments;
+ grub_uint16_t fs_cylinders;
+} __attribute__ ((packed));
+
+/* The BSD disk label. Only define members useful for GRUB. */
+struct grub_partition_disk_label
+{
+ grub_uint32_t magic;
+ grub_uint8_t padding[128];
+ grub_uint32_t magic2;
+ grub_uint16_t checksum;
+ grub_uint16_t num_partitions;
+ grub_uint32_t boot_size;
+ grub_uint32_t superblock_size;
+ struct grub_partition_bsd_entry entries[GRUB_PARTITION_BSD_MAX_ENTRIES];
+} __attribute__ ((packed));
+
+/* The partition entry. */
+struct grub_partition_entry
+{
+ /* If active, 0x80, otherwise, 0x00. */
+ grub_uint8_t flag;
+
+ /* The head of the start. */
+ grub_uint8_t start_head;
+
+ /* (S | ((C >> 2) & 0xC0)) where S is the sector of the start and C
+ is the cylinder of the start. Note that S is counted from one. */
+ grub_uint8_t start_sector;
+
+ /* (C & 0xFF) where C is the cylinder of the start. */
+ grub_uint8_t start_cylinder;
+
+ /* The partition type. */
+ grub_uint8_t type;
+
+ /* The end versions of start_head, start_sector and start_cylinder,
+ respectively. */
+ grub_uint8_t end_head;
+ grub_uint8_t end_sector;
+ grub_uint8_t end_cylinder;
+
+ /* The start sector. Note that this is counted from zero. */
+ grub_uint32_t start;
+
+ /* The length in sector units. */
+ grub_uint32_t length;
+} __attribute__ ((packed));
+
+/* The structure of MBR. */
+struct grub_partition_mbr
+{
+ /* The code area (actually, including BPB). */
+ grub_uint8_t code[446];
+
+ /* Four partition entries. */
+ struct grub_partition_entry entries[4];
+
+ /* The signature 0xaa55. */
+ grub_uint16_t signature;
+} __attribute__ ((packed));
+
+/* Partition description. */
+struct grub_partition
+{
+ /* The start sector. */
+ unsigned long start;
+
+ /* The length in sector units. */
+ unsigned long len;
+
+ /* The offset of the partition table. */
+ unsigned long offset;
+
+ /* The offset of the extended partition. */
+ unsigned long ext_offset;
+
+ /* The index of this partition in the partition table. */
+ int index;
+
+ /* The DOS partition number. */
+ int dos_part;
+
+ /* The BSD partition number (a == 0). */
+ int bsd_part;
+
+ /* The DOS partition type. */
+ int dos_type;
+
+ /* The BSD partition type. */
+ int bsd_type;
+};
+typedef struct grub_partition *grub_partition_t;
+
+struct grub_disk;
+
+grub_partition_t EXPORT_FUNC(grub_partition_probe) (struct grub_disk *disk,
+ const char *str);
+grub_err_t EXPORT_FUNC(grub_partition_iterate) (struct grub_disk *disk,
+ int (*hook) (const grub_partition_t partition));
+char *EXPORT_FUNC(grub_partition_get_name) (const grub_partition_t partition);
+
+static inline unsigned long
+grub_partition_get_start (const grub_partition_t p)
+{
+ return p->start;
+}
+
+static inline unsigned long
+grub_partition_get_len (const grub_partition_t p)
+{
+ return p->len;
+}
+
+static inline int
+grub_partition_is_empty (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_NONE);
+}
+
+static inline int
+grub_partition_is_extended (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_EXTENDED
+ || type == GRUB_PARTITION_TYPE_WIN95_EXTENDED
+ || type == GRUB_PARTITION_TYPE_LINUX_EXTENDED);
+}
+
+static inline int
+grub_partition_is_bsd (int type)
+{
+ return (type == GRUB_PARTITION_TYPE_FREEBSD
+ || type == GRUB_PARTITION_TYPE_OPENBSD
+ || type == GRUB_PARTITION_TYPE_NETBSD);
+}
+
+#endif /* ! GRUB_PARTITION_HEADER */
diff -urN grub2.orig/include/grub/arm/RISC_OS/time.h grub2.patch1/include/grub/arm/RISC_OS/time.h
--- grub2.orig/include/grub/arm/RISC_OS/time.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/RISC_OS/time.h 2004-05-19 10:55:26.000000000 +0100
@@ -0,0 +1,33 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef KERNEL_TIME_HEADER
+#define KERNEL_TIME_HEADER 1
+
+#ifdef GRUB_UTIL
+# include <time.h>
+# define GRUB_TICKS_PER_SECOND CLOCKS_PER_SEC
+#else
+# define GRUB_TICKS_PER_SECOND 100
+#endif
+
+/* Return the real time in ticks. */
+grub_uint32_t grub_get_rtc (void);
+
+#endif /* ! KERNEL_TIME_HEADER */
diff -urN grub2.orig/include/grub/arm/setjmp.h grub2.patch1/include/grub/arm/setjmp.h
--- grub2.orig/include/grub/arm/setjmp.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/setjmp.h 2004-05-19 00:39:16.000000000 +0100
@@ -0,0 +1,25 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_SETJMP_CPU_HEADER
+#define GRUB_SETJMP_CPU_HEADER 1
+
+typedef unsigned long grub_jmp_buf[11];
+
+#endif /* ! GRUB_SETJMP_CPU_HEADER */
diff -urN grub2.orig/include/grub/arm/types.h grub2.patch1/include/grub/arm/types.h
--- grub2.orig/include/grub/arm/types.h 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/include/grub/arm/types.h 2004-05-19 00:41:04.000000000 +0100
@@ -0,0 +1,32 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * GRUB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef GRUB_TYPES_CPU_HEADER
+#define GRUB_TYPES_CPU_HEADER 1
+
+/* The size of void *. */
+#define GRUB_HOST_SIZEOF_VOID_P 4
+
+/* The size of long. */
+#define GRUB_HOST_SIZEOF_LONG 4
+
+/* ARM is little-endian. (Or big-endian!! - but we don't support that yet) */
+#undef GRUB_HOST_WORDS_BIGENDIAN
+
+#endif /* ! GRUB_TYPES_CPU_HEADER */
diff -urN grub2.orig/include/grub/symbol.h grub2.patch1/include/grub/symbol.h
--- grub2.orig/include/grub/symbol.h 2004-05-21 12:14:37.000000000 +0100
+++ grub2.patch1/include/grub/symbol.h 2004-05-18 22:48:26.000000000 +0100
@@ -29,8 +29,8 @@
# define EXT_C(sym) sym
#endif
-#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), @function ; EXT_C(x):
-#define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), @object ; EXT_C(x):
+#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x):
+#define VARIABLE(x) .globl EXT_C(x) ; .type EXT_C(x), "object" ; EXT_C(x):
/* Mark an exported symbol. */
#define EXPORT_FUNC(x) x
diff -urN grub2.orig/kern/arm/aif_header.lds grub2.patch1/kern/arm/aif_header.lds
--- grub2.orig/kern/arm/aif_header.lds 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/aif_header.lds 2004-05-21 11:55:49.000000000 +0100
@@ -0,0 +1,23 @@
+/* aif_header.lds - Calculate values for AIF header */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+grub_aif_text_size = __data_start - 0x8000;
+grub_aif_data_size = _edata - __data_start;
+grub_aif_bss_size = _end - _edata;
diff -urN grub2.orig/kern/arm/aif_header.S grub2.patch1/kern/arm/aif_header.S
--- grub2.orig/kern/arm/aif_header.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/aif_header.S 2004-05-21 11:55:54.000000000 +0100
@@ -0,0 +1,68 @@
+/* aif_header.S - AIF header */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * aword with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+ .global _start
+_start: nop
+ nop
+ bl zeroinit
+ bl grub_arm_startup
+lock: b lock @ "Program exit instruction" (never reached)
+ .word grub_aif_text_size
+ .word grub_aif_data_size
+ .word 0 @ Debug data size
+zisize: .word grub_aif_bss_size
+ .word 0 @ No Debug data
+ .word _start
+ .word 0 @ Workspace for self-moving image (not used)
+ .word 32 @ Yes, we work in 32bit PC modes.
+ .word __data_start
+ .word 0, 0 @ Unused
+ nop @ Initialise debugger (NOT!!)
+
+zeroinit:
+ ldr r0, =__bss_start
+ ldr r4, zisize
+
+ @ Move appended modules out of the way
+ add r1, r0, r4
+ ldr r2, EXT_C(grub_total_module_size)
+1: ldr r3, [r0, r2]
+ str r3, [r1, r2]
+ subs r2, r2, #4
+ bcs 1b
+
+ @ Zero BSS area
+ mov r1, #0
+1: str r1, [r0], #4
+ subs r4, r4, #4
+ bcs 1b
+ mov pc, lr
+
+ .ltorg
+ .org _start + 128
+
+ @ Size of appended modules
+VARIABLE(grub_total_module_size)
+ .word 0
+VARIABLE(grub_end_addr)
+ .word _end
diff -urN grub2.orig/kern/arm/RISC_OS/init.c grub2.patch1/kern/arm/RISC_OS/init.c
--- grub2.orig/kern/arm/RISC_OS/init.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/RISC_OS/init.c 2004-05-21 11:38:09.000000000 +0100
@@ -0,0 +1,40 @@
+/* init.c - RISC OS Initialisation */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/kernel.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/machine/console.h>
+#include <grub/env.h>
+
+extern grub_addr_t grub_RISC_OS_memory_limit;
+
+void
+grub_machine_init ()
+{
+ //grub_RISC_OS_message("Hello World!\n\r");
+ grub_console_init ();
+ grub_mm_init_region ((void *) grub_end_addr + grub_total_module_size,
+ grub_RISC_OS_memory_limit - (grub_end_addr +
+ grub_total_module_size));
+ grub_env_set ("prefix", "(native)ADFS::0/$");
+ grub_printf ("Hello World!\n");
+ //grub_stop();
+}
diff -urN grub2.orig/kern/arm/RISC_OS/startup.S grub2.patch1/kern/arm/RISC_OS/startup.S
--- grub2.orig/kern/arm/RISC_OS/startup.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/RISC_OS/startup.S 2004-05-21 11:59:14.000000000 +0100
@@ -0,0 +1,119 @@
+/* startup.S - RISC OS Initialisation*/
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+#define OS_ChangeEnvironment 0x40
+#define OS_GenerateError 0x2B
+#define OS_Exit 0x11
+#define OS_CLI 0x05
+#define OS_ReadMonotonicTime 0x42
+
+
+ .data
+handlers:
+ .word 0
+VARIABLE(grub_RISC_OS_memory_limit)
+ .word 0, 0, 0
+ .word 6, error_handler, 0, error_buffer
+ .word 11, grub_stop, 0, 0
+ .word 13, exception_registers, 0, 0
+ .word 14
+VARIABLE(grub_RISC_OS_application_space)
+ .word 0, 0, 0
+ .word 16, upcall_handler, 0, 0
+
+ .text
+swap_handlers:
+ mov r5, lr
+ ldr r4, =handlers
+1: ldmia r4, {r0-r3}
+ swi OS_ChangeEnvironment
+ stmia r4!, {r0-r3}
+ teq r0, #16
+ bne 1b
+ mov pc, r5
+
+error_handler:
+ @ TODO: do longjmp
+ mov r6, r0
+ bl swap_handlers
+ add r0, r6, #4
+ swi OS_GenerateError
+
+upcall_handler:
+ subs r0, r0, #256
+ moveq pc, lr
+ @beq upcall_newapp
+ teq r0, #1
+ add r0, r0, #256
+ @beq upcall_movemem
+ movne pc, lr
+upcall_movemem:
+ movs r1, r1
+ movpl r0, #0
+ mov pc, lr
+
+upcall_newapp:
+ @stmfd sp!, {r0-r5, lr}
+ @bl swap_handlers
+ @ldmfd sp!, {r0-r5, pc}
+
+ .globl grub_arm_startup
+grub_arm_startup:
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov fp, #0
+ bl grub_main
+FUNCTION(grub_stop)
+ @ TODO: at_exit
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov r0, #0
+ swi OS_Exit
+
+FUNCTION(grub_RISC_OS_chain)
+ mov r6, r0
+ ldr sp, =stack_end
+ bl swap_handlers
+ mov r0, r5
+ mov r1, #0
+ swi OS_CLI
+ swi OS_Exit
+
+FUNCTION(grub_get_rtc)
+ swi OS_ReadMonotonicTime
+ mov pc, lr
+
+
+ .bss
+stack_limit:
+ .space 0x4000
+stack_end:
+exception_registers:
+ .space 17 * 4
+error_buffer:
+ .space 260
+
+VARIABLE(grub_os_area_addr)
+VARIABLE(grub_os_area_size)
+colourstate:
+ .space 4
diff -urN grub2.orig/kern/arm/setjmp.S grub2.patch1/kern/arm/setjmp.S
--- grub2.orig/kern/arm/setjmp.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/kern/arm/setjmp.S 2004-05-21 11:55:46.000000000 +0100
@@ -0,0 +1,31 @@
+/* aif_header.S - setjmp and longjmp */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * aword with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+FUNCTION(grub_setjmp)
+ stmia r0, {r4-r14}
+ mov pc, lr
+
+FUNCTION(grub_longjmp)
+ ldmia r0, {r4-r14}
+ mov r0, r1
+ mov pc, lr
diff -urN grub2.orig/term/arm/RISC_OS/console-asm.S grub2.patch1/term/arm/RISC_OS/console-asm.S
--- grub2.orig/term/arm/RISC_OS/console-asm.S 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/term/arm/RISC_OS/console-asm.S 2004-05-21 11:59:12.000000000 +0100
@@ -0,0 +1,92 @@
+/* startup.S - RISC OS Console*/
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2004 Timothy Baldwin.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <config.h>
+#include <grub/symbol.h>
+
+#define OS_Write0 0x02
+#define OS_WriteC 0x00
+#define OS_WriteI 0x100
+#define OS_WriteN 0x46
+#define OS_Byte 0x06
+#define OS_ReadC 0x04
+
+FUNCTION(grub_RISC_OS_message)
+ swi OS_Write0
+ mov pc, lr
+
+FUNCTION(grub_console_gotoxy)
+ swi OS_WriteI + 31
+ swi OS_WriteC
+ mov r0, r1
+FUNCTION(grub_console_real_putchar)
+ swi OS_WriteC
+ mov pc, lr
+
+FUNCTION(grub_console_getxy)
+ mov r0, #165
+ swi OS_Byte
+ orr r0, r2, r1, lsl #8
+ mov pc, lr
+
+FUNCTION(grub_console_setcursor)
+ swi OS_WriteI + 23
+ swi OS_WriteI + 1
+ swi OS_WriteC
+pnulls: adr r0, nulls
+ mov r1, #8
+ swi OS_WriteN
+ mov pc, lr
+
+FUNCTION(grub_console_setcolourstate)
+ ldr r2, =colourstate
+ and r0, r0, #2
+ ldrb r1, [r2]
+ teq r0, r1
+ moveq pc, lr
+ strb r0, [r2]
+ swi OS_WriteI + 23 @ Swap text foreground/background colours
+ swi OS_WriteI + 17
+ swi OS_WriteI + 5
+ b pnulls
+
+
+FUNCTION(grub_console_cls)
+ swi OS_WriteI + 12
+ mov pc, lr
+
+FUNCTION(grub_console_getkey)
+ swi OS_ReadC
+ mov pc, lr
+
+FUNCTION(grub_console_checkkey)
+ mov r0, #129 @ Read key with time limit
+ mov r1, #0 @ Timeout low byte
+ mov r2, #0 @ Timeout high byte ( < 0x80 )
+ swi OS_Byte
+ movs r2, r2 @ r2 = 0 if key read
+ moveq r0, r1 @ r1 = key if read
+ mvnne r0, #0
+ mov pc, lr
+
+ .bss
+colourstate:
+ .space 4
+
\ No newline at end of file
diff -urN grub2.orig/term/arm/RISC_OS/console.c grub2.patch1/term/arm/RISC_OS/console.c
--- grub2.orig/term/arm/RISC_OS/console.c 1970-01-01 01:00:00.000000000 +0100
+++ grub2.patch1/term/arm/RISC_OS/console.c 2004-05-20 19:38:23.000000000 +0100
@@ -0,0 +1,97 @@
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2002,2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/machine/console.h>
+#include <grub/term.h>
+#include <grub/types.h>
+
+
+static void
+grub_console_putchar (grub_uint32_t c)
+{
+ if (c > 0x7f)
+ {
+ /* Map some unicode characters to the VGA font, if possible. */
+ switch (c)
+ {
+ case 0x2190: /* left arrow */
+ c = 0x1b;
+ break;
+ case 0x2191: /* up arrow */
+ c = 0x18;
+ break;
+ case 0x2192: /* right arrow */
+ c = 0x1a;
+ break;
+ case 0x2193: /* down arrow */
+ c = 0x19;
+ break;
+ case 0x2501: /* horizontal line */
+ c = 0xc4;
+ break;
+ case 0x2503: /* vertical line */
+ c = 0xb3;
+ break;
+ case 0x250F: /* upper-left corner */
+ c = 0xda;
+ break;
+ case 0x2513: /* upper-right corner */
+ c = 0xbf;
+ break;
+ case 0x2517: /* lower-left corner */
+ c = 0xc0;
+ break;
+ case 0x251B: /* lower-right corner */
+ c = 0xd9;
+ break;
+
+ default:
+ c = '?';
+ break;
+ }
+ }
+
+ grub_console_real_putchar (c);
+}
+
+
+static struct grub_term grub_console_term =
+ {
+ .name = "console",
+ .init = 0,
+ .fini = 0,
+ .putchar = grub_console_putchar,
+ .checkkey = grub_console_checkkey,
+ .getkey = grub_console_getkey,
+ .getxy = grub_console_getxy,
+ .gotoxy = grub_console_gotoxy,
+ .cls = grub_console_cls,
+ .setcolorstate = grub_console_setcolourstate,
+ .setcolor = 0,
+ .setcursor = grub_console_setcursor,
+ .flags = 0,
+ .next = 0
+ };
+
+void
+grub_console_init (void)
+{
+ grub_term_register (&grub_console_term);
+ grub_term_set_current (&grub_console_term);
+}
[-- Attachment #2: signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2004-06-09 8:11 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-22 15:21 RISC OS/ARM port Timothy Baldwin
2004-05-23 17:03 ` Yoshinori K. Okuji
2004-05-23 17:24 ` Stefan Reinauer
2004-05-27 22:22 ` Timothy Baldwin
2004-05-28 14:48 ` Marco Gerards
2004-05-31 11:09 ` Timothy Baldwin
2004-06-01 17:30 ` Yoshinori K. Okuji
2004-06-08 15:21 ` Timothy Baldwin
-- strict thread matches above, loose matches on Subject: below --
2004-05-22 12:46 Timothy Baldwin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.