[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RISC OS/ARM port
From: |
Timothy Baldwin |
Subject: |
RISC OS/ARM port |
Date: |
Sat, 22 May 2004 16:21:51 +0100 |
User-agent: |
KMail/1.6.2 |
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!
--- 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);
+}
pgp0rhnt5bn8O.pgp
Description: signature
- RISC OS/ARM port, Timothy Baldwin, 2004/05/23
- RISC OS/ARM port,
Timothy Baldwin <=